소스 검색

allow to select outside color circle

circular17 5 년 전
부모
커밋
58ed6b0ae8
1개의 변경된 파일9개의 추가작업 그리고 1개의 파일을 삭제
  1. 9 1
      lazpaint/dialog/uchoosecolorinterface.pas

+ 9 - 1
lazpaint/dialog/uchoosecolorinterface.pas

@@ -503,6 +503,7 @@ end;
 procedure TChooseColorInterface.DoSelect(X, Y: integer);
 var pix, newColor: TBGRAPixel;
   newLight: Word;
+  dist: single;
 begin
   case FSelectZone of
   szAlphascale:
@@ -513,8 +514,15 @@ begin
       UpdateColorview(False, False, True);
     end;
   szColorCircle:
-    if PtInRect(point(x,y), FColorCircle.Bounds) and Assigned(FColorCircle.bmpMaxlight) then
+    if Assigned(FColorCircle.bmpMaxlight) then
     begin
+      dist := sqrt(sqr((x-FColorCircle.center.X)/FColorCircle.bounds.Width*2) +
+              sqr((y-FColorCircle.center.Y)/FColorCircle.bounds.Height*2));
+      if dist > 1 then
+      begin
+        x := round(FColorCircle.center.X + (x-FColorCircle.center.X)/dist);
+        y := round(FColorCircle.center.Y + (y-FColorCircle.center.Y)/dist);
+      end;
       pix := FColorCircle.bmpMaxlight.GetPixel(x-FColorCircle.Bounds.Left,y-FColorCircle.Bounds.top);
       if pix.alpha <> 0 then
       begin