Kaynağa Gözat

volatile scroll bar DPI fix

johann 5 yıl önce
ebeveyn
işleme
12d19a4600
2 değiştirilmiş dosya ile 17 ekleme ve 6 silme
  1. 3 1
      lazpaint/lazpaintinstance.pas
  2. 14 5
      lazpaint/uvolatilescrollbar.pas

+ 3 - 1
lazpaint/lazpaintinstance.pas

@@ -224,7 +224,7 @@ uses LCLType, Types, Forms, Dialogs, FileUtil, StdCtrls, LCLIntf, Math,
      UImageAction, USharpen, uposterize, UPhongFilter, UFilterFunction,
      uprint, USaveOption, UFormRain,
 
-     ugraph, LCScaleDPI, ucommandline, uabout, UPython;
+     ugraph, LCScaleDPI, ucommandline, uabout, UPython, UVolatileScrollBar;
 
 { TLazPaintInstance }
 
@@ -299,6 +299,8 @@ end;
 
 procedure TLazPaintInstance.Init(AEmbedded: boolean);
 begin
+  TVolatileScrollBar.InitDPI;
+
   Title := 'LazPaint ' + LazPaintCurrentVersion;
   FCustomImageList := TImageListList.Create;
   FTopMostInfo.choosecolorHidden := 0;

+ 14 - 5
lazpaint/uvolatilescrollbar.pas

@@ -8,7 +8,7 @@ uses
   Classes, SysUtils, Forms, BGRABitmap, BGRAGradients;
 
 var
-  VolatileScrollBarSize : integer = 16;
+  VolatileScrollBarSize : integer = 14;
   VolatileThumbSize : integer = 24;
   VolatileBorderSize : integer = 3;
 
@@ -20,6 +20,8 @@ type
   private
     function GetScrollThumbBounds: TRect;
     procedure SetScrollThumbBounds(AValue: TRect);
+  protected
+    class var FInitDPI: boolean;
   protected
     FBounds: TRect;
     FWidth,FHeight: integer;
@@ -33,6 +35,7 @@ type
   public
     constructor Create(X,Y,AWidth,AHeight: integer; ADirection: TScrollBarKind; APosition, AMinimum, AMaximum: integer);
     destructor Destroy; override;
+    class procedure InitDPI;
     function MouseDown(X,Y: integer): boolean;
     function MouseMove(X,Y: integer): boolean;
     function MouseUp({%H-}X,{%H-}Y: integer): boolean;
@@ -192,10 +195,16 @@ begin
   FPhong.DrawRectangle(ADest,lThumb,VolatileBorderSize,h,ColorToBGRA(ColorToRGB(clBtnFace)),true,[]);
 end;
 
-initialization
-
-  VolatileScrollBarSize := ScaleX(VolatileScrollBarSize, OriginalDPI);
-  VolatileThumbSize := ScaleX(VolatileThumbSize, OriginalDPI);
+class procedure TVolatileScrollBar.InitDPI;
+begin
+  if not FInitDPI then
+  begin
+    VolatileScrollBarSize := ScaleX(VolatileScrollBarSize, OriginalDPI);
+    VolatileThumbSize := ScaleX(VolatileThumbSize, OriginalDPI);
+    VolatileBorderSize := ScaleX(VolatileBorderSize, OriginalDPI);
+    FInitDPI := true;
+  end;
+end;
 
 end.