mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-28 15:20:49 +02:00
lcl menus: fix regression and bugs from r51466 #62ef2702b3. remove OnDrawItem and keep OnAdvancedDrawItem only. Issue #26969
git-svn-id: trunk@51467 -
This commit is contained in:
parent
62ef2702b3
commit
bd20aff9d3
@ -842,12 +842,18 @@ var
|
|||||||
ParentMenu: TMenu;
|
ParentMenu: TMenu;
|
||||||
begin
|
begin
|
||||||
ParentMenu := AMenuItem.GetParentMenu;
|
ParentMenu := AMenuItem.GetParentMenu;
|
||||||
if (ParentMenu<>nil) and ParentMenu.OwnerDraw and Assigned(AMenuItem.OnMeasureItem) then
|
if (ParentMenu<>nil) and ParentMenu.OwnerDraw
|
||||||
|
and (Assigned(ParentMenu.OnMeasureItem) or Assigned(AMenuItem.OnMeasureItem)) then
|
||||||
begin
|
begin
|
||||||
CC := TControlCanvas.Create;
|
CC := TControlCanvas.Create;
|
||||||
try
|
try
|
||||||
CC.Handle := AHDC;
|
CC.Handle := AHDC;
|
||||||
AMenuItem.OnMeasureItem(AMenuItem, CC, Result.cx, Result.cy);
|
Result.cx := 0;
|
||||||
|
Result.cy := 0;
|
||||||
|
if Assigned(ParentMenu.OnMeasureItem) then
|
||||||
|
ParentMenu.OnMeasureItem(AMenuItem, CC, Result.cx, Result.cy);
|
||||||
|
if Assigned(AMenuItem.OnMeasureItem) then
|
||||||
|
AMenuItem.OnMeasureItem(AMenuItem, CC, Result.cx, Result.cy);
|
||||||
finally
|
finally
|
||||||
CC.Free;
|
CC.Free;
|
||||||
end;
|
end;
|
||||||
@ -861,7 +867,7 @@ begin
|
|||||||
Result := VistaPopupMenuItemSize(AMenuItem, AHDC);
|
Result := VistaPopupMenuItemSize(AMenuItem, AHDC);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
ClassicMenuItemSize(AMenuItem, AHDC);
|
Result := ClassicMenuItemSize(AMenuItem, AHDC);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function IsFlatMenus: Boolean; inline;
|
function IsFlatMenus: Boolean; inline;
|
||||||
@ -1210,6 +1216,7 @@ var
|
|||||||
B: Bool;
|
B: Bool;
|
||||||
ParentMenu: TMenu;
|
ParentMenu: TMenu;
|
||||||
CC: TControlCanvas;
|
CC: TControlCanvas;
|
||||||
|
ItemDrawState: LCLType.TOwnerDrawState;
|
||||||
begin
|
begin
|
||||||
ASelected := (ItemState and ODS_SELECTED) <> 0;
|
ASelected := (ItemState and ODS_SELECTED) <> 0;
|
||||||
ANoAccel := (ItemState and ODS_NOACCEL) <> 0;
|
ANoAccel := (ItemState and ODS_NOACCEL) <> 0;
|
||||||
@ -1222,15 +1229,16 @@ begin
|
|||||||
|
|
||||||
ParentMenu := AMenuItem.GetParentMenu;
|
ParentMenu := AMenuItem.GetParentMenu;
|
||||||
if (ParentMenu<>nil) and ParentMenu.OwnerDraw
|
if (ParentMenu<>nil) and ParentMenu.OwnerDraw
|
||||||
and (Assigned(AMenuItem.OnDrawItem) or Assigned(AMenuItem.OnAdvancedDrawItem)) then
|
and (Assigned(ParentMenu.OnAdvancedDrawItem) or Assigned(AMenuItem.OnAdvancedDrawItem)) then
|
||||||
begin
|
begin
|
||||||
CC := TControlCanvas.Create;
|
CC := TControlCanvas.Create;
|
||||||
try
|
try
|
||||||
CC.Handle := AHDC;
|
CC.Handle := AHDC;
|
||||||
if Assigned(AMenuItem.OnDrawItem) then
|
ItemDrawState := ItemStateToDrawState(ItemState);
|
||||||
AMenuItem.OnDrawItem(AMenuItem, CC, ARect, ASelected);
|
if Assigned(ParentMenu.OnAdvancedDrawItem) then
|
||||||
|
ParentMenu.OnAdvancedDrawItem(AMenuItem, CC, ARect, ItemDrawState);
|
||||||
if Assigned(AMenuItem.OnAdvancedDrawItem) then
|
if Assigned(AMenuItem.OnAdvancedDrawItem) then
|
||||||
AMenuItem.OnAdvancedDrawItem(AMenuItem, CC, ARect, ItemStateToDrawState(ItemState));
|
AMenuItem.OnAdvancedDrawItem(AMenuItem, CC, ARect, ItemDrawState);
|
||||||
finally
|
finally
|
||||||
CC.Free;
|
CC.Free;
|
||||||
end;
|
end;
|
||||||
|
@ -108,8 +108,6 @@ type
|
|||||||
mihtDestroy
|
mihtDestroy
|
||||||
);
|
);
|
||||||
|
|
||||||
TMenuDrawItemEvent = procedure(Sender: TObject; ACanvas: TCanvas;
|
|
||||||
ARect: TRect; ASelected: Boolean) of object;
|
|
||||||
TAdvancedMenuDrawItemEvent = procedure(Sender: TObject; ACanvas: TCanvas;
|
TAdvancedMenuDrawItemEvent = procedure(Sender: TObject; ACanvas: TCanvas;
|
||||||
ARect: TRect; AState: TOwnerDrawState) of object;
|
ARect: TRect; AState: TOwnerDrawState) of object;
|
||||||
TMenuMeasureItemEvent = procedure(Sender: TObject; ACanvas: TCanvas;
|
TMenuMeasureItemEvent = procedure(Sender: TObject; ACanvas: TCanvas;
|
||||||
@ -131,7 +129,6 @@ type
|
|||||||
FOnAdvancedDrawItem: TAdvancedMenuDrawItemEvent;
|
FOnAdvancedDrawItem: TAdvancedMenuDrawItemEvent;
|
||||||
FOnChange: TMenuChangeEvent;
|
FOnChange: TMenuChangeEvent;
|
||||||
FOnClick: TNotifyEvent;
|
FOnClick: TNotifyEvent;
|
||||||
FOnDrawItem: TMenuDrawItemEvent;
|
|
||||||
FOnMeasureItem: TMenuMeasureItemEvent;
|
FOnMeasureItem: TMenuMeasureItemEvent;
|
||||||
FParent: TMenuItem;
|
FParent: TMenuItem;
|
||||||
FMenuItemHandlers: array[TMenuItemHandlerType] of TMethodList;
|
FMenuItemHandlers: array[TMenuItemHandlerType] of TMethodList;
|
||||||
@ -293,7 +290,6 @@ type
|
|||||||
property Visible: Boolean read FVisible write SetVisible
|
property Visible: Boolean read FVisible write SetVisible
|
||||||
stored IsVisibleStored default True;
|
stored IsVisibleStored default True;
|
||||||
property OnClick: TNotifyEvent read FOnClick write FOnClick;
|
property OnClick: TNotifyEvent read FOnClick write FOnClick;
|
||||||
property OnDrawItem: TMenuDrawItemEvent read FOnDrawItem write FOnDrawItem;
|
|
||||||
property OnAdvancedDrawItem: TAdvancedMenuDrawItemEvent read FOnAdvancedDrawItem write FOnAdvancedDrawItem;
|
property OnAdvancedDrawItem: TAdvancedMenuDrawItemEvent read FOnAdvancedDrawItem write FOnAdvancedDrawItem;
|
||||||
property OnMeasureItem: TMenuMeasureItemEvent read FOnMeasureItem write FOnMeasureItem;
|
property OnMeasureItem: TMenuMeasureItemEvent read FOnMeasureItem write FOnMeasureItem;
|
||||||
end;
|
end;
|
||||||
@ -312,7 +308,6 @@ type
|
|||||||
FItems: TMenuItem;
|
FItems: TMenuItem;
|
||||||
FOnAdvancedDrawItem: TAdvancedMenuDrawItemEvent;
|
FOnAdvancedDrawItem: TAdvancedMenuDrawItemEvent;
|
||||||
FOnChange: TMenuChangeEvent;
|
FOnChange: TMenuChangeEvent;
|
||||||
FOnDrawItem: TMenuDrawItemEvent;
|
|
||||||
FOnMeasureItem: TMenuMeasureItemEvent;
|
FOnMeasureItem: TMenuMeasureItemEvent;
|
||||||
FOwnerDraw: Boolean;
|
FOwnerDraw: Boolean;
|
||||||
FParent: TComponent;
|
FParent: TComponent;
|
||||||
@ -368,6 +363,8 @@ type
|
|||||||
property Items: TMenuItem read FItems;
|
property Items: TMenuItem read FItems;
|
||||||
property Images: TCustomImageList read FImages write SetImages;
|
property Images: TCustomImageList read FImages write SetImages;
|
||||||
property OwnerDraw: Boolean read FOwnerDraw write FOwnerDraw;
|
property OwnerDraw: Boolean read FOwnerDraw write FOwnerDraw;
|
||||||
|
property OnAdvancedDrawItem: TAdvancedMenuDrawItemEvent read FOnAdvancedDrawItem write FOnAdvancedDrawItem;
|
||||||
|
property OnMeasureItem: TMenuMeasureItemEvent read FOnMeasureItem write FOnMeasureItem;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user