diff --git a/lcl/include/customsplitter.inc b/lcl/include/customsplitter.inc index 430381dc17..882fdc640e 100644 --- a/lcl/include/customsplitter.inc +++ b/lcl/include/customsplitter.inc @@ -715,7 +715,7 @@ begin begin if (GripperRect.Bottom - GripperRect.Top) > GripperSize then begin - GripperRect.Top := (GripperRect.Top + GripperRect.Bottom - GripperSize) shr 1; + GripperRect.Top := (GripperRect.Top + GripperRect.Bottom - GripperSize) div 2; GripperRect.Bottom := GripperRect.Top + GripperSize; end; end @@ -723,12 +723,12 @@ begin begin if (GripperRect.Right - GripperRect.Left) > GripperSize then begin - GripperRect.Left := (GripperRect.Left + GripperRect.Right - GripperSize) shr 1; + GripperRect.Left := (GripperRect.Left + GripperRect.Right - GripperSize) div 2; GripperRect.Right := GripperRect.Left + GripperSize; end; end; - ThemeServices.DrawElement(Canvas.Handle, GripperDetails, GripperRect, nil); + ThemeServices.DrawElement(Canvas.Handle, GripperDetails, GripperRect, @GripperRect); end; procedure TCustomSplitter.MouseEnter; diff --git a/lcl/interfaces/gtk/gtkthemes.pas b/lcl/interfaces/gtk/gtkthemes.pas index 0578cd2378..e74abbbf7b 100644 --- a/lcl/interfaces/gtk/gtkthemes.pas +++ b/lcl/interfaces/gtk/gtkthemes.pas @@ -188,7 +188,7 @@ begin Result.IsHot:= Result.State = GTK_STATE_PRELIGHT; - Result.Detail := 'treeview'; + Result.Detail := 'button'; Result.Painter := gptBox; end; teToolBar: @@ -264,7 +264,9 @@ begin Result := BoundingRect; StyleParams := GetGtkStyleParams(DC, Details); if StyleParams.Style <> nil then - InflateRect(Result, -1, -1); + InflateRect(Result, + -StyleParams.Style^.{$ifndef gtk2}klass^.{$endif}xthickness, + -StyleParams.Style^.{$ifndef gtk2}klass^.{$endif}ythickness); end; procedure TGtkThemeServices.DrawElement(DC: HDC; diff --git a/lcl/interfaces/gtk2/gtk2themes.pas b/lcl/interfaces/gtk2/gtk2themes.pas index 4350b76088..1577faef45 100644 --- a/lcl/interfaces/gtk2/gtk2themes.pas +++ b/lcl/interfaces/gtk2/gtk2themes.pas @@ -21,7 +21,6 @@ type protected function GetGtkStyleParams(DC: HDC; Details: TThemedElementDetails): TGtkStyleParams; override; public - function ContentRect(DC: HDC; Details: TThemedElementDetails; BoundingRect: TRect): TRect; override; end; implementation @@ -33,142 +32,49 @@ function TGtk2ThemeServices.GetGtkStyleParams(DC: HDC; var ClientWidget: PGtkWidget; begin - Result.Style := nil; + Result := inherited GetGtkStyleParams(DC, Details); - if GTK2WidgetSet.IsValidDC(DC) then - with TDeviceContext(DC) do - begin - Result.Widget := DCWidget; - ClientWidget := GetFixedWidget(Result.Widget); - if ClientWidget <> nil then - Result.Widget := ClientWidget; - Result.Window := Drawable; - Result.Origin := GetDCOffset(TDeviceContext(DC)); - Result.Style := gtk_widget_get_style(Result.Widget); - if Result.Style = nil then - Result.Style := gtk_widget_get_default_style(); + // override some styles + if Result.Style <> nil then + case Details.Element of + teHeader: + begin + Result.State := GtkButtonMap[Details.State]; + if Details.State = PBS_PRESSED then + Result.Shadow := GTK_SHADOW_IN + else + Result.Shadow := GTK_SHADOW_OUT; - Result.Painter := gptDefault; - Result.State := GTK_STATE_NORMAL; - Result.Detail := ''; - Result.Shadow := GTK_SHADOW_NONE; - Result.IsHot := False; + Result.IsHot:= Result.State = GTK_STATE_PRELIGHT; - case Details.Element of - teButton: - begin - case Details.Part of - BP_PUSHBUTTON: - begin - Result.State := GtkButtonMap[Details.State]; - if Details.State = PBS_PRESSED then - Result.Shadow := GTK_SHADOW_IN - else - Result.Shadow := GTK_SHADOW_OUT; - - Result.IsHot:= Result.State = GTK_STATE_PRELIGHT; - - Result.Detail := 'button'; - Result.Painter := gptBox; - end; - BP_RADIOBUTTON: - begin - Result.State := GtkRadioMap[Details.State]; - if Details.State >= RBS_CHECKEDNORMAL then - Result.Shadow := GTK_SHADOW_IN - else - Result.Shadow := GTK_SHADOW_OUT; - Result.Detail := 'radiobutton'; - Result.Painter := gptOption; - end; - BP_CHECKBOX: - begin - Result.State := GtkRadioMap[Details.State]; - Result.Detail := 'checkbutton'; - if Details.State >= CBS_CHECKEDNORMAL then - Result.Shadow := GTK_SHADOW_IN - else - Result.Shadow := GTK_SHADOW_OUT; - Result.Painter := gptCheck; - end; - end; + Result.Detail := 'treeview'; + Result.Painter := gptBox; + end; + teRebar: + begin + case Details.Part of + RP_GRIPPER, RP_GRIPPERVERT: + begin + Result.State := GTK_STATE_NORMAL; + Result.Shadow := GTK_SHADOW_NONE; + Result.Detail := 'paned'; + Result.Painter := gptHandle; + if Details.Part = RP_GRIPPER then + Result.Orientation := GTK_ORIENTATION_VERTICAL + else + Result.Orientation := GTK_ORIENTATION_HORIZONTAL; + end; + RP_BAND: + begin + Result.State := GtkButtonMap[Details.State]; + Result.Shadow := GTK_SHADOW_NONE; + Result.Detail := 'paned'; + Result.Painter := gptFlatBox; + end; end; - teHeader: - begin - Result.State := GtkButtonMap[Details.State]; - if Details.State = PBS_PRESSED then - Result.Shadow := GTK_SHADOW_IN - else - Result.Shadow := GTK_SHADOW_OUT; - - Result.IsHot:= Result.State = GTK_STATE_PRELIGHT; - - Result.Detail := 'treeview'; - Result.Painter := gptBox; - end; - teToolBar: - begin - case Details.Part of - TP_BUTTON: - begin - Result.State := GtkButtonMap[Details.State]; - if Details.State in [TS_PRESSED, TS_CHECKED, TS_HOTCHECKED] then - Result.Shadow := GTK_SHADOW_IN - else - if Details.State in [TS_HOT] then - Result.Shadow := GTK_SHADOW_ETCHED_IN - else - Result.Shadow := GTK_SHADOW_NONE; - - Result.IsHot := Details.State in [TS_HOT, TS_HOTCHECKED]; - - Result.Detail := 'togglebutton'; - if Result.Shadow = GTK_SHADOW_NONE then - Result.Painter := gptNone - else - Result.Painter := gptBox; - end; - end; - end; - teRebar: - begin - case Details.Part of - RP_GRIPPER, RP_GRIPPERVERT: - begin - Result.State := GTK_STATE_NORMAL; - Result.Shadow := GTK_SHADOW_NONE; - Result.Detail := 'paned'; - Result.Painter := gptHandle; - if Details.Part = RP_GRIPPER then - Result.Orientation := GTK_ORIENTATION_VERTICAL - else - Result.Orientation := GTK_ORIENTATION_HORIZONTAL; - end; - RP_BAND: - begin - Result.State := GtkButtonMap[Details.State]; - Result.Shadow := GTK_SHADOW_NONE; - Result.Detail := 'paned'; - Result.Painter := gptFlatBox; - end; - end; - end; - end; + end; end; end; -function TGtk2ThemeServices.ContentRect(DC: HDC; - Details: TThemedElementDetails; BoundingRect: TRect): TRect; -var - StyleParams: TGtkStyleParams; -begin - Result := BoundingRect; - StyleParams := GetGtkStyleParams(DC, Details); - if StyleParams.Style <> nil then - InflateRect(Result, - -StyleParams.Style^.xthickness, - -StyleParams.Style^.ythickness); -end; - end. diff --git a/lcl/themes.pas b/lcl/themes.pas index 559a4aaf3d..ef3d96b1c8 100644 --- a/lcl/themes.pas +++ b/lcl/themes.pas @@ -1744,7 +1744,10 @@ end; function TThemeServices.ContentRect(DC: HDC; Details: TThemedElementDetails; BoundingRect: TRect): TRect; begin Result := BoundingRect; - InflateRect(Result, -1, -1); + if Details.Element in [teHeader, teButton] then + InflateRect(Result, -2, -2) + else + InflateRect(Result, -1, -1); end; //----------------------------------------------------------------------------------------------------------------------