LCL-GTK2: Allow changing BorderStyle of TPanel at runtime. Issue #36634, patch from CudaText man.

git-svn-id: trunk@62595 -
This commit is contained in:
juha 2020-01-29 22:40:40 +00:00
parent 187d646104
commit d7f23ad916
2 changed files with 19 additions and 9 deletions

View File

@ -163,6 +163,7 @@ const
{ bsSingle } GTK_SHADOW_ETCHED_IN
);
BorderShadowWidth: array[TBorderStyle] of gint = (0, 1);
// signals ------------------------------------------------------------------
type

View File

@ -145,6 +145,7 @@ type
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
class function GetDefaultColor(const {%H-}AControl: TControl; const ADefaultColorType: TDefaultColorType): TColor; override;
class procedure SetColor(const AWinControl: TWinControl); override;
class procedure SetBorderStyle(const AWinControl: TWinControl; const ABorderStyle: TBorderStyle); override;
end;
{ TGtk2WSPanel }
@ -187,7 +188,6 @@ var
Frame, WidgetClient: PGtkWidget;
WidgetInfo: PWidgetInfo;
Allocation: TGTKAllocation;
bwidth: gint;
Style: PGtkRCStyle;
BorderStyle: TBorderStyle;
begin
@ -195,15 +195,9 @@ begin
BorderStyle:=TCustomControl(AWinControl).BorderStyle;
gtk_frame_set_shadow_type(PGtkFrame(Frame),BorderStyleShadowMap[BorderStyle]);
case BorderStyle of
bsSingle:
bwidth:=1;
else
bwidth:=0
end;
Style := gtk_widget_get_modifier_style(Frame);
Style^.xthickness := bwidth;
Style^.ythickness := bwidth;
Style^.xthickness := BorderShadowWidth[BorderStyle];
Style^.ythickness := BorderShadowWidth[BorderStyle];
gtk_widget_modify_style(Frame, Style);
{$IFDEF DebugLCLComponents}
@ -273,6 +267,21 @@ begin
UpdateWidgetStyleOfControl(AWinControl);
end;
class procedure TGtk2WSCustomPanel.SetBorderStyle(
const AWinControl: TWinControl; const ABorderStyle: TBorderStyle);
var
Frame: PGtkWidget;
Style: PGtkRCStyle;
begin
Frame := PGtkWidget(AWinControl.Handle);
gtk_frame_set_shadow_type(PGtkFrame(Frame), BorderStyleShadowMap[ABorderStyle]);
Style := gtk_widget_get_modifier_style(Frame);
Style^.xthickness := BorderShadowWidth[ABorderStyle];
Style^.ythickness := BorderShadowWidth[ABorderStyle];
gtk_widget_modify_style(Frame, Style);
end;
{$include gtk2trayicon.inc}