ADD: actions to the HighLight Modern ToolBar Items in ViewerForm on macOS 11+

This commit is contained in:
rich2014 2026-05-08 21:11:16 +08:00
commit 2c401b9945
3 changed files with 102 additions and 7 deletions

View file

@ -543,6 +543,9 @@ type
procedure onGifStateChanged(
const viewer: TfrmViewer;
const states: TViewerGifStates ); virtual;
procedure onImageEditStateChanged(
const viewer: TfrmViewer;
const highlightButton: TToolButton ); virtual;
end;
procedure ShowViewer(const FilesToView: TStringList; WaitData: TWaitData = nil); overload;
@ -1109,6 +1112,8 @@ begin
end;
if actAutoReload.Checked then cm_AutoReload([]);
end;
viewerFormHandler.onImageEditStateChanged( self, btnHightlight );
end;
procedure TfrmViewer.FormResize(Sender: TObject);
@ -1927,7 +1932,7 @@ begin
Result:= DoZoom( 0.909, -1 );
end;
procedure TfrmViewer.RotateImage(ADegree: integer);
procedure TfrmViewer.RotateImage(ADegree: Integer);
// ADegree now supported only 90,180,270 values
var
Q: QWord;
@ -2302,6 +2307,8 @@ begin
begin
AdjustImageSize;
end;
viewerFormHandler.onImageEditStateChanged( self, btnHightlight );
end;
procedure TfrmViewer.StartCalcFolderSize;
@ -2608,6 +2615,8 @@ begin
btnPenColor.Enabled:= btnPaint.Down;
ImgEdit:= True;
CreateTmp;
viewerFormHandler.onImageEditStateChanged( self, btnHightlight );
end;
procedure TfrmViewer.btnPenModeClick(Sender: TObject);
@ -2984,6 +2993,7 @@ function TfrmViewer.LoadGraphics(const sFileName:String): Boolean;
else
gifStates:= [vgsIsGif];
viewerFormHandler.onGifStateChanged( self, gifStates );
viewerFormHandler.onImageEditStateChanged( self, btnHightlight );
end;
var
@ -3894,6 +3904,8 @@ begin
btnSlideShow.Visible:=miFullScreen.Checked;
AdjustImageSize;
ShowOnTop;
viewerFormHandler.onImageEditStateChanged( self, btnHightlight );
end;
procedure TfrmViewer.cm_Screenshot(const Params: array of string);
@ -4255,6 +4267,12 @@ procedure TViewerFormHandler.onGifStateChanged(
begin
end;
procedure TViewerFormHandler.onImageEditStateChanged(
const viewer: TfrmViewer;
const highlightButton: TToolButton );
begin
end;
initialization
viewerFormHandler:= TViewerFormHandler.Create;
TFormCommands.RegisterCommandsForm(TfrmViewer, HotkeysCategory, @rsHotkeyCategoryViewer);

View file

@ -7,7 +7,7 @@ interface
uses
Classes, SysUtils,
LCLType, Forms, Menus,
LCLType, Forms, Menus, ComCtrls,
fMain, fEditor, fDiffer, fViewer,
uHotkeyManager, uEarlyConfig, uGlobs, uLng, uDCUtils,
uFileView, uBriefFileView, uColumnsFileView, uThumbFileView,

View file

@ -39,7 +39,10 @@ type
const mode: TViewerShowMode ); override;
procedure onGifStateChanged(
const viewer: TfrmViewer;
const states: TViewerGifStates); override;
const states: TViewerGifStates ); override;
procedure onImageEditStateChanged(
const viewer: TfrmViewer;
const highlightButton: TToolButton ); override;
end;
function getCurrentViewerForm: TfrmViewer;
@ -221,6 +224,35 @@ begin
form.btnGifToBmpClick( nil );
end;
procedure viewerHighlightAction( const Sender: id );
var
form: TfrmViewer;
begin
form:= getCurrentViewerForm;
if Assigned(form) then begin
form.btnHightlight.Down:= NOT form.btnHightlight.Down;
form.btnPaintHightlight( form.btnHightlight );
end;
end;
procedure viewerCropAction( const Sender: id );
var
form: TfrmViewer;
begin
form:= getCurrentViewerForm;
if Assigned(form) then
form.btnCutTuImageClick( nil );
end;
procedure viewerRedEyesAction( const Sender: id );
var
form: TfrmViewer;
begin
form:= getCurrentViewerForm;
if Assigned(form) then
form.btnRedEyeClick( nil );
end;
procedure onViewerGetPenWidthMenu( const menu: TMenu );
var
i: Integer;
@ -408,33 +440,36 @@ const
identifier: 'ViewerForm.HighLight';
priority: NSToolbarItemVisibilityPriorityStandard;
navigational: False;
iconName: 'paintbrush.pointed.fill';
appValidates: True;
iconName: 'paintbrush.pointed';
title: 'Highlight';
tips: 'Highlight';
bordered: True;
onAction: nil;
onAction: @viewerHighlightAction;
);
viewerCropItemConfig: TCocoaConfigToolBarItem = (
identifier: 'ViewerForm.Crop';
priority: NSToolbarItemVisibilityPriorityStandard;
navigational: False;
appValidates: True;
iconName: 'crop';
title: 'Crop';
tips: 'Crop';
bordered: True;
onAction: nil;
onAction: @viewerCropAction;
);
viewerRedEyesItemConfig: TCocoaConfigToolBarItem = (
identifier: 'ViewerForm.RedEyes';
priority: NSToolbarItemVisibilityPriorityStandard;
navigational: False;
appValidates: True;
iconName: 'eye';
title: 'Red Eyes';
tips: 'Red Eyes';
bordered: True;
onAction: nil;
onAction: @viewerRedEyesAction;
);
viewerPaintItemConfig: TCocoaConfigToolBarItem = (
@ -707,3 +742,45 @@ begin
item.setEnabled( exportEnabled );
end;
procedure TCocoaViewerFormHandler.onImageEditStateChanged(
const viewer: TfrmViewer;
const highlightButton: TToolButton );
var
cropEnabled: Boolean;
redEyesEnabled: Boolean;
toolBar: NSToolBar;
item: NSToolBarItem;
highlightImageName: String;
highlightImage: NSImage;
begin
viewerAttachImageToolBar( viewer );
toolBar:= TCocoaToolBarUtils.getToolBar( viewer );
if toolBar = nil then
Exit;
if highlightButton.Down then begin
cropEnabled:= True;
redEyesEnabled:= True;
end else begin
cropEnabled:= False;
redEyesEnabled:= False;
end;
item:= TCocoaToolBarUtils.findItemByIdentifier( toolBar , 'ViewerForm.HighLight');
item.setEnabled( highlightButton.Enabled );
if highlightButton.Down then
highlightImageName:= 'paintbrush.pointed.fill'
else
highlightImageName:= 'paintbrush.pointed';
highlightImage:= NSImage.imageWithSystemSymbolName_accessibilityDescription(
StringToNSString(highlightImageName), nil );
item.setImage( highlightImage );
item:= TCocoaToolBarUtils.findItemByIdentifier( toolBar , 'ViewerForm.Crop');
item.setEnabled( cropEnabled );
item:= TCocoaToolBarUtils.findItemByIdentifier( toolBar , 'ViewerForm.RedEyes');
item.setEnabled( redEyesEnabled );
end;