diff --git a/components/spktoolbar/SpkPopupMenu/spkpopup.pas b/components/spktoolbar/SpkPopupMenu/spkpopup.pas index 854a01689..a0216b13f 100644 --- a/components/spktoolbar/SpkPopupMenu/spkpopup.pas +++ b/components/spktoolbar/SpkPopupMenu/spkpopup.pas @@ -1,3 +1,19 @@ +(******************************************************************************* +* * +* File: SpkPopup.pas * +* Description: Popup menu for Lazarus port of TSpkToolbar * +* Copyright: (c) 2023 by W. Pamler * +* License: Modified LGPL (with linking exception, like Lazarus LCL) * +' See "license.txt" in this installation * +* * +* Issues: * +* - The popup menu is not borderless - looks strange in Metro Dark * +* - Checkbox and radio button are drawn with theme services --> hardly * +* hardly visible in Metro Dark * +* - Submenu indicator triangle is black --> hardly visible in Metro Dark * +* * +*******************************************************************************) + unit SpkPopup; {$mode objfpc}{$H+} @@ -114,11 +130,11 @@ begin if not IsHot and (FAppearance.Popup.Style = psGutter) then begin + FrameColor := FAppearance.Popup.GutterLineColor; ColorFrom := FAppearance.Popup.GutterGradientFromColor; ColorTo := FAppearance.Popup.GutterGradientToColor; GradientType := FAppearance.Popup.GutterGradientType; TGUITools.DrawPopupItemRect(ACanvas, Rgutter, 0, ColorFrom, ColorTo, GradientType); - FrameColor := FAppearance.Popup.GutterLineColor; if FrameColor <> clNone then TGUITools.DrawVLine(ACanvas, Rgutter.Right+1, R.Top, R.Bottom, FrameColor); end; @@ -213,7 +229,9 @@ begin if FAppearance.Popup.Style <> psGutter then x := DropDownMenuMargin; y := (ARect.Top + ARect.Bottom) div 2; - TGUITools.DrawHLine(ACanvas, x, ARect.Right-DropdownMenuMargin, y, FAppearance.Popup.DividerLineColor); + FrameColor := FAppearance.Popup.GutterFrameColor; + if FrameColor <> clNone then + TGUITools.DrawHLine(ACanvas, x, ARect.Right-DropdownMenuMargin, y, FrameColor); end else begin y := (ARect.Top + ARect.Bottom - hText) div 2; diff --git a/components/spktoolbar/SpkToolbar/spkt_Appearance.pas b/components/spktoolbar/SpkToolbar/spkt_Appearance.pas index 00da27ed2..01f9fe354 100644 --- a/components/spktoolbar/SpkToolbar/spkt_Appearance.pas +++ b/components/spktoolbar/SpkToolbar/spkt_Appearance.pas @@ -347,7 +347,7 @@ type FCheckedGradientToColor: TColor; FCheckedGradientType: TBackgroundKind; FDisabledCaptionColor: TColor; - FDividerLineColor: TColor; + FGutterFrameColor: TColor; FGutterGradientFromColor: TColor; FGutterGradientToColor: TColor; FGutterGradientType: TBackgroundKind; @@ -368,7 +368,7 @@ type procedure SetCheckedGradientToColor(const Value: TColor); procedure SetCheckedGradientType(const Value: TBackgroundKind); procedure SetDisabledCaptionColor(const Value: TColor); - procedure SetDividerLineColor(const Value: TColor); + procedure SetGutterFrameColor(const Value: TColor); procedure SetGutterGradientFromColor(const Value: TColor); procedure SetGutterGradientToColor(const Value: TColor); procedure SetGutterGradientType(const Value: TBackgroundKind); @@ -400,7 +400,7 @@ type property CheckedGradientToColor: TColor read FCheckedGradientToColor write SetCheckedGradientToColor; property CheckedGradientType: TBackgroundKind read FCheckedGradientType write SetCheckedGradientType; property DisabledCaptionColor: TColor read FDisabledCaptionColor write SetDisabledCaptionColor; - property DividerLineColor: TColor read FDividerLineColor write SetDividerLineColor; + property GutterFrameColor: TColor read FGutterFrameColor write SetGutterFrameColor; property GutterGradientFromColor: TColor read FGutterGradientFromColor write SetGutterGradientFromColor; property GutterGradientToColor: TColor read FGutterGradientToColor write SetGutterGradientToColor; property GutterGradientType: TBackgroundKind read FGutterGradientType write SetGutterGradientType; @@ -1780,7 +1780,12 @@ begin FCheckedGradientType := SrcAppearance.CheckedGradientType; FDisabledCaptionColor := SrcAppearance.DisabledCaptionColor; - FDividerLineColor := SrcAppearance.DividerLineColor; + + FGutterFrameColor := SrcAppearance.GutterFrameColor; + FGutterGradientFromColor := SrcAppearance.GutterGradientFromColor; + FGutterGradientToColor := SrcAppearance.GutterGradientToColor; + FGutterGradientType := SrcAppearance.GutterGradientType; + { FIdleFrameColor := SrcAppearance.IdleFrameColor; } @@ -1801,13 +1806,6 @@ begin FHotTrackInnerLightColor := SrcAppearance.HotTrackInnerLightColor; FHotTrackInnerDarkColor := SrcAppearance.HotTrackInnerDarkColor; FHotTrackBrightnessChange := SrcAppearance.HotTrackBrightnessChange; - FActiveFrameColor := SrcAppearance.ActiveFrameColor; - FActiveGradientFromColor := SrcAppearance.ActiveGradientFromColor; - FActiveGradientToColor := SrcAppearance.ActiveGradientToColor; - FActiveGradientType := SrcAppearance.ActiveGradientType; - FActiveInnerLightColor := SrcAppearance.ActiveInnerLightColor; - FActiveInnerDarkColor := SrcAppearance.ActiveInnerDarkColor; - FActiveCaptionColor := SrcAppearance.ActiveCaptionColor; } FStyle := SrcAppearance.Style; if FDispatch <> nil then @@ -1855,11 +1853,6 @@ begin if Assigned(SubNode) then FDisabledCaptionColor := Subnode.TextAsColor; - // Divider line - Subnode := Node['DividerLineColor', false]; - if Assigned(Subnode) then - FDividerLineColor := Subnode.TextAsColor; - // Idle Subnode := Node['IdleCaptionColor', false]; if Assigned(Subnode) then @@ -1892,6 +1885,10 @@ begin } // Gutter + Subnode := Node['GutterFrameColor', false]; + if Assigned(Subnode) then + FGutterFrameColor := Subnode.TextAsColor; + Subnode := Node['GutterGradientFromColor', false]; if Assigned(Subnode) then FGutterGradientFromColor := Subnode.TextAsColor; @@ -1961,10 +1958,10 @@ begin FCheckedGradientFromColor := rgb(255, 227, 149); FCheckedGradientToColor := FCheckedGradientFromColor; FCheckedGradientType := bkSolid; - FDividerLineColor := rgb(141, 178, 227); { FIdleFrameColor := rgb(155, 183, 224); } + FGutterFrameColor := rgb(141, 178, 227); FGutterGradientFromColor := rgb(233, 238, 238); FGutterGradientToColor := rgb(233, 238, 238); FGutterGradientType := bkSolid; @@ -2007,12 +2004,12 @@ begin FCheckedGradientFromColor := rgb(255, 227, 149); end; FCheckedGradientToColor := FCheckedGradientFromColor; - FDividerLineColor := $00BEBEBE; FIdleCaptionColor := $0060655F; FIdleGradientFromColor := rgb(250, 250, 250); FIdleGradientToColor := rgb(250, 250, 250); FIdleGradientType := bkSolid; + FGutterFrameColor := $00BEBEBE; FGutterGradientFromColor := rgb(239, 239, 239); FGutterGradientToColor := rgb(239, 239, 239); FGutterGradientType := bkSolid; @@ -2052,9 +2049,8 @@ begin FCheckedGradientFromColor := $00F7EFE8; FCheckedGradientToColor := FCheckedGradientFromColor; FCheckedGradientType := bkSolid; - FDisabledCaptionColor := rgb(192, 192, 192); - FDividerLineColor := $00D2D0CF; + FGutterFrameColor := $00D2D0CF; FGutterGradientFromColor := rgb(239, 239, 239); FGutterGradientToColor := rgb(239, 239, 239); FGutterGradientType := bkSolid; @@ -2096,7 +2092,7 @@ begin FCheckedGradientToColor := FCheckedGradientFromColor; FCheckedGradientType := bkSolid; FDisabledCaptionColor := $787878; - FDividerLineColor := $000000; + FGutterFrameColor := $000000; FGutterGradientFromColor := clBlack; FGutterGradientToColor := clBlack; FGutterGradientType := bkSolid; @@ -2139,8 +2135,8 @@ begin Add(' CheckedGradientType := %s;', [GradientTypeName(FCheckedGradientType)]); Add(' DisabledCaptionColor := $%.8x;', [FDisabledCaptionColor]); - Add(' DividerLineColor := $%.8x;', [FDividerLineColor]); + Add(' GutterFrameColor := $%.8x;', [FGutterFrameColor]); Add(' GutterGradientFromColor := $%.8x;', [FGutterGradientFromColor]); Add(' GutterGradientToColor := $%.8x;', [FGutterGradientToColor]); Add(' GutterGradientType := %s;', [GradientTypeName(FGutterGradientType)]); @@ -2185,9 +2181,6 @@ begin Subnode := Node['DisabledCaptionColor', true]; Subnode.TextAsColor := FDisabledCaptionColor; - Subnode := Node['DividerLineColor', true]; - Subnode.TextAsColor := FDividerlineColor; - Subnode := Node['IdleGradientType', true]; Subnode.TextAsInteger := integer(FIdleGradientType); @@ -2195,9 +2188,6 @@ begin Subnode := Node['IdleCaptionColor', true]; Subnode.TextAsColor := FIdleCaptionColor; -// Subnode := Node['IdleFrameColor', true]; -// Subnode.TextAsColor := FIdleFrameColor; - Subnode := Node['IdleGradientFromColor', true]; Subnode.TextAsColor := FIdleGradientFromColor; @@ -2206,15 +2196,11 @@ begin Subnode := Node['IdleGradientType', true]; Subnode.TextAsInteger := integer(FIdleGradientType); -{ - Subnode := Node['IdleInnerLightColor', true]; - Subnode.TextAsColor := FIdleInnerLightColor; - - Subnode := Node['IdleInnerDarkColor', true]; - Subnode.TextAsColor := FIdleInnerDarkColor; -} // Gutter + Subnode := Node['GutterFrameColor', true]; + Subnode.TextAsColor := FGutterFrameColor; + Subnode := Node['GutterGradientFromColor', true]; Subnode.TextAsColor := FGutterGradientFromColor; @@ -2301,9 +2287,9 @@ begin FDispatch.NotifyAppearanceChanged; end; -procedure TSpkPopupMenuAppearance.SetDividerLineColor(const Value: TColor); +procedure TSpkPopupMenuAppearance.SetGutterFrameColor(const Value: TColor); begin - FDividerLineColor := Value; + FGutterFrameColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end;