浏览代码

scale nice point

Juliette ELSASS 1 年之前
父节点
当前提交
4791a4c6ca
共有 1 个文件被更改,包括 17 次插入6 次删除
  1. 17 6
      lazpaint/ugraph.pas

+ 17 - 6
lazpaint/ugraph.pas

@@ -1190,25 +1190,36 @@ begin
 end;
 
 function NicePointBounds(x,y: single): TRect;
+var
+  penWidth, penWidthStroke: Single;
 begin
-  result := rect(floor(x)-NicePointMaxRadius*CanvasScale-1,floor(y)-NicePointMaxRadius*CanvasScale-1,
-  ceil(x)+NicePointMaxRadius*CanvasScale+2,ceil(y)+NicePointMaxRadius*CanvasScale+2);
+  penWidth := NicePointMaxRadius*CanvasScale / 6;
+  if penWidth < 1 then penWidth := 1;
+  penWidthStroke := penWidth * 3.5;
+  result := rect(floor(x-NicePointMaxRadius*CanvasScale-penWidthStroke/2)-1,
+    floor(y-NicePointMaxRadius*CanvasScale-penWidthStroke/2)-1,
+    ceil(x+NicePointMaxRadius*CanvasScale+penWidthStroke/2)+2,
+    ceil(y+NicePointMaxRadius*CanvasScale+penWidthStroke/2)+2);
 end;
 
 function NicePoint(bmp: TBGRABitmap; x, y: single; alpha: byte = 192): TRect;
 var
   multi: TBGRAMultishapeFiller;
   oldClip: TRect;
+  penWidth, penWidthStroke: Single;
 begin
   result := NicePointBounds(x,y);
   if not Assigned(bmp) then exit;
   oldClip := bmp.ClipRect;
   bmp.IntersectClip(result);
+  penWidth := NicePointMaxRadius*CanvasScale / 6;
+  if penWidth < 1 then penWidth := 1;
+  penWidthStroke := penWidth * 3.5;
   multi := TBGRAMultishapeFiller.Create;
-  multi.AddEllipseBorder(x,y,NicePointMaxRadius*CanvasScale-1*CanvasScale,
-    NicePointMaxRadius*CanvasScale-1*CanvasScale, CanvasScale*3, BGRA(0,0,0,alpha));
-  multi.AddEllipseBorder(x,y,NicePointMaxRadius*CanvasScale-1*CanvasScale,
-    NicePointMaxRadius*CanvasScale-1*CanvasScale, CanvasScale*1, BGRA(255,255,255,alpha));
+  multi.AddEllipseBorder(x,y,NicePointMaxRadius*CanvasScale-2,
+    NicePointMaxRadius*CanvasScale-2, penWidthStroke, BGRA(0,0,0,alpha));
+  multi.AddEllipseBorder(x,y,NicePointMaxRadius*CanvasScale-2,
+    NicePointMaxRadius*CanvasScale-2, penWidth, BGRA(255,255,255,alpha));
   multi.PolygonOrder:= poLastOnTop;
   multi.Draw(bmp);
   multi.Free;