2
0
Эх сурвалжийг харах

retina scaling of toolbar dropdown

Johann ELSASS 4 жил өмнө
parent
commit
9e176f13f5

+ 1 - 1
lazpaint/lazpaintmainform.pas

@@ -862,7 +862,7 @@ uses LCLIntf, BGRAUTF8, ugraph, math, umac, uclipboard, ucursors,
    ufilters, ULoadImage, ULoading, UFileExtensions, UBrushType,
    ugeometricbrush, UPreviewDialog, UQuestion, BGRALayerOriginal,
    BGRATransform, LCVectorPolyShapes, URaw, UFileSystem,
-   UTranslation, UPython;
+   UTranslation, UPython, BCTypes;
 
 const PenWidthFactor = 10;
 

+ 4 - 0
lazpaint/maintoolbar.inc

@@ -65,15 +65,18 @@ begin
   ComboBox_ArrowStart.OnChange := @ComboBox_ArrowStartChange;
   ComboBox_ArrowStart.OnDrawItem := @ComboBox_ArrowStartDrawItem;
   ComboBox_ArrowStart.OnDrawSelectedItem := @ComboBox_ArrowStartDrawSelectedItem;
+  ComboBox_ArrowStart.CanvasScaleMode:= csmFullResolution;
   ComboBox_ArrowEnd.OnChange := @ComboBox_ArrowEndChange;
   ComboBox_ArrowEnd.OnDrawItem := @ComboBox_ArrowEndDrawItem;
   ComboBox_ArrowEnd.OnDrawSelectedItem := @ComboBox_ArrowEndDrawSelectedItem;
+  ComboBox_ArrowEnd.CanvasScaleMode:= csmFullResolution;
   Tool_JoinBevel.OnClick := @Tool_JoinBevelClick;
   Tool_JoinRound.OnClick := @Tool_JoinRoundClick;
   Tool_JoinMiter.OnClick := @Tool_JoinMiterClick;
   ComboBox_PenStyle.OnChange:=@ComboBox_PenStyleChange;
   ComboBox_PenStyle.OnDrawItem:=@ComboBox_PenStyleDrawItem;
   ComboBox_PenStyle.OnDrawSelectedItem:=@ComboBox_PenStyleDrawSelectedItem;
+  ComboBox_PenStyle.CanvasScaleMode:= csmFullResolution;
   for ps := psSolid to psDashDotDot do ComboBox_PenStyle.Items.Add(inttostr(ord(ps)));
   Tool_GridMoveWithoutDeformation.OnClick := @Tool_GridMoveWithoutDeformationClick;
   Combo_SplineStyle.Items.Add('Inside');
@@ -115,6 +118,7 @@ begin
   ComboBox_BrushSelect.OnChange := @ComboBox_BrushSelectChange;
   ComboBox_BrushSelect.OnDrawItem := @ComboBox_BrushSelectDrawItem;
   ComboBox_BrushSelect.OnDrawSelectedItem:= @ComboBox_BrushSelectDrawSelectedItem;
+  ComboBox_BrushSelect.CanvasScaleMode:= csmFullResolution;
   Combo_Ratio.OnChange := @Combo_RatioChange;
 
   Panel_LineCap_FullSize := Panel_LineCap.Width;

+ 9 - 5
lazpaint/ugraph.pas

@@ -792,6 +792,7 @@ procedure DrawPenStyle(AComboBox: TBCComboBox; ARect: TRect;
   APenStyle: TPenStyle; State: TOwnerDrawState);
 var bmp : TBGRABitmap;
   c,c2: TBGRAPixel;
+  scale: Double;
 begin
   if odSelected in State then
   begin
@@ -803,9 +804,10 @@ begin
     c := ColorToBGRA(AComboBox.DropDownFontColor);
     c2 := ColorToBGRA(AComboBox.DropDownColor);
   end;
-  with Size(ARect) do bmp := TBGRABitmap.Create(cx,cy,c2);
-  DrawPenStyle(bmp, rect(0,0,ARect.Width,ARect.Height),APenStyle, c);
-  bmp.Draw(ACombobox.Canvas,ARect.Left,ARect.Top,true);
+  scale := AComboBox.GetCanvasScaleFactor;
+  with Size(ARect) do bmp := TBGRABitmap.Create(round(cx*scale),round(cy*scale),c2);
+  DrawPenStyle(bmp, bmp.ClipRect,APenStyle, c);
+  bmp.Draw(ACombobox.Canvas,ARect,true);
   bmp.Free;
 end;
 
@@ -821,6 +823,7 @@ end;
 procedure DrawArrow(AComboBox: TBCComboBox; ARect: TRect; AStart: boolean; AKindStr: string; ALineCap: TPenEndCap; State: TOwnerDrawState);
 var mask, bmp : TBGRABitmap;
   c,c2: TBGRAPixel;
+  scale: Double;
 begin
   if odSelected in State then
   begin
@@ -831,11 +834,12 @@ begin
     c2 := ColorToBGRA(AComboBox.DropDownColor);
     c := ColorToBGRA(AComboBox.DropDownFontColor);
   end;
-  with Size(ARect) do mask:= TBGRABitmap.Create(cx,cy,BGRABlack);
+  scale := AComboBox.GetCanvasScaleFactor;
+  with Size(ARect) do mask:= TBGRABitmap.Create(round(cx*scale),round(cy*scale),BGRABlack);
   DrawArrowMask(mask, AStart, AKindStr, ALineCap);
   bmp := TBGRABitmap.Create(mask.Width,mask.Height,c2);
   bmp.FillMask(0,0,mask,c,dmDrawWithTransparency);
-  bmp.Draw(ACombobox.Canvas,ARect.Left,ARect.Top,true);
+  bmp.Draw(ACombobox.Canvas,ARect,true);
   bmp.Free;
   mask.Free;
 end;