浏览代码

#305 prevent alt key from opening menu, handle alt wheel only if pen

circular17 3 年之前
父节点
当前提交
859b8739b9
共有 2 个文件被更改,包括 11 次插入3 次删除
  1. 4 1
      lazpaint/tools/utool.pas
  2. 7 2
      lazpaint/uimageview.pas

+ 4 - 1
lazpaint/tools/utool.pas

@@ -458,6 +458,7 @@ type
     PerspectiveControls,FillControls,OutlineFillControls,
     BrushControls, RatioControls, DonateControls: TList;
     CanvasScale: integer;
+    PenWidthVisible: boolean;
 
     constructor Create(AImage: TLazPaintImage; AConfigProvider: IConfigProvider;
       ABitmapToVirtualScreen: TBitmapToVirtualScreenFunction = nil;
@@ -2899,6 +2900,7 @@ constructor TToolManager.Create(AImage: TLazPaintImage; AConfigProvider: IConfig
 begin
   FImage:= AImage;
   CanvasScale := 1;
+  PenWidthVisible := false;
   BitmapToVirtualScreen := ABitmapToVirtualScreen;
   FShouldExitTool:= false;
   FConfigProvider := AConfigProvider;
@@ -3269,7 +3271,8 @@ begin
 
   OrResult(SetControlsVisible(BrushControls, ctBrush in contextualToolbars));
   OrResult(SetControlsVisible(ShapeControls, ctShape in contextualToolbars));
-  OrResult(SetControlsVisible(PenWidthControls, (ctPenWidth in contextualToolbars) and hasPen));
+  PenWidthVisible := (ctPenWidth in contextualToolbars) and hasPen;
+  OrResult(SetControlsVisible(PenWidthControls, PenWidthVisible));
   OrResult(SetControlsVisible(JoinStyleControls, (ctJoinStyle in contextualToolbars) and hasPen));
   OrResult(SetControlsVisible(PenStyleControls, (ctPenStyle in contextualToolbars) and hasPen));
   OrResult(SetControlsVisible(CloseShapeControls, ctCloseShape in contextualToolbars));

+ 7 - 2
lazpaint/uimageview.pas

@@ -73,6 +73,7 @@ type
     FTablet: TLazTablet;
     FImagePos: TPointF;
     FCanvasScale: integer;
+    FAltKeyUsedForPenSize: boolean;
     function GetImage: TLazPaintImage;
     function GetPictureCanvas: TCanvas;
     function GetWorkArea: TRect;
@@ -293,10 +294,11 @@ procedure TImageView.PaintBoxMouseWheel(Sender: TObject; Shift: TShiftState;
   WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
 begin
   if not PictureCoordsDefined then exit;
-  if ssAlt in Shift then
+  if LazPaintInstance.ToolManager.PenWidthVisible and (ssAlt in Shift) then
   begin
     if WheelDelta > 0 then LazPaintInstance.ToolManager.StepPenSize(false)
     else if WheelDelta < 0 then LazPaintInstance.ToolManager.StepPenSize(true);
+    FAltKeyUsedForPenSize := true;
   end else
   begin
     Zoom.SetPosition(FormToBitmap(MousePos.X,MousePos.Y), MousePos);
@@ -610,6 +612,7 @@ begin
   FInstance := AInstance;
   FZoom := AZoom;
   FCanvasScale:= round(APaintBox.GetCanvasScaleFactor);
+  FAltKeyUsedForPenSize:= false;
   AInstance.ToolManager.CanvasScale := FCanvasScale;
   ugraph.CanvasScale:= FCanvasScale;
 
@@ -677,6 +680,7 @@ function TImageView.CatchToolKeyDown(var AKey: Word): boolean;
 begin
   FCatchPaintPicture:= true;
   FPaintPictureCatched := false;
+  if AKey = VK_MENU then FAltKeyUsedForPenSize := false;
   try
     result := LazPaintInstance.ToolManager.ToolKeyDown(AKey) or FPaintPictureCatched;
   finally
@@ -689,7 +693,8 @@ begin
   FCatchPaintPicture:= true;
   FPaintPictureCatched := false;
   try
-     result := LazPaintInstance.ToolManager.ToolKeyUp(AKey) or FPaintPictureCatched;
+    result := LazPaintInstance.ToolManager.ToolKeyUp(AKey) or FPaintPictureCatched;
+    if (AKey = VK_MENU) and FAltKeyUsedForPenSize then AKey := 0;
   finally
     FCatchPaintPicture:= false;
   end;