Ignore:
Timestamp:
Mar 18, 2022, 1:37:03 PM (3 years ago)
Author:
chronos
Message:
  • Modified: Update Common package.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Packages/Common/UScaleDPI.pas

    r122 r131  
    88
    99uses
    10   Classes, Forms, Graphics, Controls, ComCtrls, LCLType, SysUtils, StdCtrls,
    11   Contnrs;
     10  Classes, Forms, Graphics, Controls, ComCtrls, LCLType, SysUtils, fgl;
    1211
    1312type
     13  TControlDimensions = class;
    1414
    1515  { TControlDimension }
     
    1818    BoundsRect: TRect;
    1919    FontHeight: Integer;
    20     Controls: TObjectList; // TList<TControlDimension>
     20    Controls: TControlDimensions;
    2121    // Class specifics
    2222    ButtonSize: TPoint; // TToolBar
     
    2626    constructor Create;
    2727    destructor Destroy; override;
     28  end;
     29
     30  TControlDimensions = class(TFPGObjectList<TControlDimension>)
    2831  end;
    2932
     
    7376constructor TControlDimension.Create;
    7477begin
    75   Controls := TObjectList.Create;
     78  Controls := TControlDimensions.Create;
    7679end;
    7780
     
    7982begin
    8083  FreeAndNil(Controls);
    81   inherited Destroy;
     84  inherited;
    8285end;
    8386
     
    212215  TempBmp: TBitmap;
    213216  Temp: array of TBitmap;
    214   NewWidth, NewHeight: integer;
     217  NewWidth: Integer;
     218  NewHeight: Integer;
    215219  I: Integer;
    216220begin
    217221  ImgList.BeginUpdate;
    218   NewWidth := ScaleX(ImgList.Width, FromDPI.X);
    219   NewHeight := ScaleY(ImgList.Height, FromDPI.Y);
    220 
    221   SetLength(Temp, ImgList.Count);
    222   for I := 0 to ImgList.Count - 1 do
    223   begin
    224     TempBmp := TBitmap.Create;
    225     TempBmp.PixelFormat := pf32bit;
    226     ImgList.GetBitmap(I, TempBmp);
    227     Temp[I] := TBitmap.Create;
    228     Temp[I].SetSize(NewWidth, NewHeight);
    229     Temp[I].PixelFormat := pf32bit;
    230     Temp[I].TransparentColor := TempBmp.TransparentColor;
    231     //Temp[I].TransparentMode := TempBmp.TransparentMode;
    232     Temp[I].Transparent := True;
    233     Temp[I].Canvas.Brush.Style := bsSolid;
    234     Temp[I].Canvas.Brush.Color := Temp[I].TransparentColor;
    235     Temp[I].Canvas.FillRect(0, 0, Temp[I].Width, Temp[I].Height);
    236 
    237     if (Temp[I].Width = 0) or (Temp[I].Height = 0) then Continue;
    238     Temp[I].Canvas.StretchDraw(Rect(0, 0, Temp[I].Width, Temp[I].Height), TempBmp);
    239     TempBmp.Free;
    240   end;
    241 
    242   ImgList.Clear;
    243   ImgList.Width := NewWidth;
    244   ImgList.Height := NewHeight;
    245 
    246   for I := 0 to High(Temp) do
    247   begin
    248     ImgList.Add(Temp[I], nil);
    249     Temp[i].Free;
    250   end;
    251   ImgList.EndUpdate;
     222  try
     223    NewWidth := ScaleX(ImgList.Width, FromDPI.X);
     224    NewHeight := ScaleY(ImgList.Height, FromDPI.Y);
     225
     226    Temp := nil;
     227    SetLength(Temp, ImgList.Count);
     228    for I := 0 to ImgList.Count - 1 do
     229    begin
     230      TempBmp := TBitmap.Create;
     231      try
     232        TempBmp.PixelFormat := pf32bit;
     233        ImgList.GetBitmap(I, TempBmp);
     234        Temp[I] := TBitmap.Create;
     235        Temp[I].SetSize(NewWidth, NewHeight);
     236        {$IFDEF UNIX}
     237        Temp[I].PixelFormat := pf24bit;
     238        {$ELSE}
     239        Temp[I].PixelFormat := pf32bit;
     240        {$ENDIF}
     241        Temp[I].TransparentColor := TempBmp.TransparentColor;
     242        //Temp[I].TransparentMode := TempBmp.TransparentMode;
     243        Temp[I].Transparent := True;
     244        Temp[I].Canvas.Brush.Style := bsSolid;
     245        Temp[I].Canvas.Brush.Color := Temp[I].TransparentColor;
     246        Temp[I].Canvas.FillRect(0, 0, Temp[I].Width, Temp[I].Height);
     247
     248        if (Temp[I].Width = 0) or (Temp[I].Height = 0) then Continue;
     249        Temp[I].Canvas.StretchDraw(Rect(0, 0, Temp[I].Width, Temp[I].Height), TempBmp);
     250      finally
     251        TempBmp.Free;
     252      end;
     253    end;
     254
     255    ImgList.Clear;
     256    ImgList.Width := NewWidth;
     257    ImgList.Height := NewHeight;
     258
     259    for I := 0 to High(Temp) do
     260    begin
     261      ImgList.Add(Temp[I], nil);
     262      Temp[i].Free;
     263    end;
     264  finally
     265    ImgList.EndUpdate;
     266  end;
    252267end;
    253268
     
    289304  //OldAutoSize: Boolean;
    290305begin
     306  //if not (Control is TCustomPage) then
     307  // Resize childs first
     308  if Control is TWinControl then begin
     309    WinControl := TWinControl(Control);
     310    if WinControl.ControlCount > 0 then begin
     311      for I := 0 to WinControl.ControlCount - 1 do begin
     312        if WinControl.Controls[I] is TControl then begin
     313          ScaleControl(WinControl.Controls[I], FromDPI);
     314        end;
     315      end;
     316    end;
     317  end;
     318
    291319  //if Control is TMemo then Exit;
    292320  //if Control is TForm then
     
    314342  with TCoolBar(Control) do begin
    315343    BeginUpdate;
    316     for I := 0 to Bands.Count - 1 do
    317       with Bands[I] do begin
    318         MinWidth := ScaleX(MinWidth, FromDPI.X);
    319         MinHeight := ScaleY(MinHeight, FromDPI.Y);
    320         // Workaround to bad band width auto sizing
    321         //Width := ScaleX(Width, FromDPI.X);
    322         Width := ScaleX(Control.Width + 28, FromDPI.X);
    323         //Control.Invalidate;
     344    try
     345      for I := 0 to Bands.Count - 1 do
     346        with Bands[I] do begin
     347          MinWidth := ScaleX(MinWidth, FromDPI.X);
     348          MinHeight := ScaleY(MinHeight, FromDPI.Y);
     349          // Workaround to bad band width auto sizing
     350          //Width := ScaleX(Width, FromDPI.X);
     351          Width := ScaleX(Control.Width + 28, FromDPI.X);
     352          //Control.Invalidate;
     353        end;
     354      // Workaround for bad autosizing of coolbar
     355      if AutoSize then begin
     356        AutoSize := False;
     357        Height := ScaleY(Height, FromDPI.Y);
     358        AutoSize := True;
    324359      end;
    325     // Workaround for bad autosizing of coolbar
    326     if AutoSize then begin
    327       AutoSize := False;
    328       Height := ScaleY(Height, FromDPI.Y);
    329       AutoSize := True;
    330     end;
    331     EndUpdate;
     360    finally
     361      EndUpdate;
     362    end;
    332363  end;
    333364
     
    340371  end;
    341372
    342   //if not (Control is TCustomPage) then
    343   if Control is TWinControl then begin
    344     WinControl := TWinControl(Control);
    345     if WinControl.ControlCount > 0 then begin
    346       for I := 0 to WinControl.ControlCount - 1 do begin
    347         if WinControl.Controls[I] is TControl then begin
    348           ScaleControl(WinControl.Controls[I], FromDPI);
    349         end;
    350       end;
    351     end;
    352   end;
    353373  //if Control is TForm then
    354374  //  Control.EnableAutoSizing;
Note: See TracChangeset for help on using the changeset viewer.