diff --git a/lcl/interfaces/gtk3/gtk3wscontrols.pp b/lcl/interfaces/gtk3/gtk3wscontrols.pp index d535862287..2f7333ef93 100644 --- a/lcl/interfaces/gtk3/gtk3wscontrols.pp +++ b/lcl/interfaces/gtk3/gtk3wscontrols.pp @@ -77,7 +77,7 @@ type published class procedure AddControl(const AControl: TControl); override; class function CanFocus(const AWincontrol: TWinControl): Boolean; override; - + class function GetCanvasScaleFactor(const AControl: TControl): Double; override; class function GetClientBounds(const AWincontrol: TWinControl; var ARect: TRect): Boolean; override; class function GetClientRect(const AWincontrol: TWinControl; var ARect: TRect): Boolean; override; class procedure GetPreferredSize(const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); override; @@ -207,6 +207,20 @@ begin {$ENDIF} end; +class function TGtk3WSWinControl.GetCanvasScaleFactor(const AControl: TControl + ): Double; +var + W: TGtk3Widget; +begin + Result := 1; + if TWinControl(AControl).HandleAllocated then + begin + W := TGtk3Widget(TWinControl(AControl).Handle); + if Gtk3IsGdkWindow(W.GetWindow) then + Result := gdk_window_get_scale_factor(W.GetWindow); + end; +end; + class function TGtk3WSWinControl.GetClientBounds(const AWincontrol: TWinControl; var ARect: TRect): Boolean; begin // for now default to the WinAPI version