You've already forked CEF4Delphi
mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2025-11-23 21:34:53 +02:00
Improved functions to get the screen scale and DPI values in all platforms
This commit is contained in:
@@ -37,15 +37,18 @@
|
||||
|
||||
unit uCEFMiscFunctions;
|
||||
|
||||
{$I cef.inc}
|
||||
|
||||
{$IFDEF FPC}
|
||||
{$MODE OBJFPC}{$H+}
|
||||
{$IFDEF MACOSX}
|
||||
{$ModeSwitch objectivec1}
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFNDEF CPUX64}{$ALIGN ON}{$ENDIF}
|
||||
{$MINENUMSIZE 4}
|
||||
|
||||
{$I cef.inc}
|
||||
|
||||
{$IFNDEF FPC}{$IFNDEF DELPHI12_UP}
|
||||
// Workaround for "Internal error" in old Delphi versions caused by uint64 handling
|
||||
{$R-}
|
||||
@@ -58,10 +61,10 @@ uses
|
||||
{$IFDEF MSWINDOWS}
|
||||
WinApi.Windows, WinApi.ActiveX,
|
||||
{$ELSE}
|
||||
{$IFDEF MACOSX}Macapi.Foundation, FMX.Helpers.Mac,{$ENDIF}
|
||||
{$IFDEF MACOSX}Macapi.Foundation, FMX.Helpers.Mac, Macapi.AppKit,{$ENDIF}
|
||||
{$ENDIF}
|
||||
{$IFDEF FMX}FMX.Types,{$ENDIF} System.Types, System.IOUtils, System.Classes,
|
||||
System.SysUtils, System.UITypes, System.Math,
|
||||
{$IFDEF FMX}FMX.Types, FMX.Platform,{$ENDIF} System.Types, System.IOUtils,
|
||||
System.Classes, System.SysUtils, System.UITypes, System.Math,
|
||||
{$ELSE}
|
||||
{$IFDEF MSWINDOWS}Windows, ActiveX,{$ENDIF}
|
||||
{$IFDEF DELPHI14_UP}Types, IOUtils,{$ENDIF} Classes, SysUtils, Math,
|
||||
@@ -293,7 +296,7 @@ function GetCommandLineSwitchValue(const aKey : string; var aValue : ustring) :
|
||||
implementation
|
||||
|
||||
uses
|
||||
{$IFDEF LINUX}{$IFDEF FMX}Posix.Unistd, Posix.Stdio,{$ENDIF}{$ENDIF}
|
||||
{$IFDEF LINUX}{$IFDEF FMX}uCEFLinuxFunctions, Posix.Unistd, Posix.Stdio,{$ENDIF}{$ENDIF}
|
||||
{$IFDEF MACOS}Posix.Unistd, Posix.Stdio,{$ENDIF}
|
||||
uCEFApplicationCore, uCEFSchemeHandlerFactory, uCEFValue,
|
||||
uCEFBinaryValue, uCEFStringList;
|
||||
@@ -2218,6 +2221,11 @@ function GetScreenDPI : integer;
|
||||
{$IFDEF MSWINDOWS}
|
||||
var
|
||||
TempDC : HDC;
|
||||
{$ELSE}
|
||||
{$IFDEF FMX}
|
||||
var
|
||||
TempService: IFMXScreenService;
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
begin
|
||||
{$IFDEF MSWINDOWS}
|
||||
@@ -2243,26 +2251,44 @@ begin
|
||||
else
|
||||
Result := USER_DEFAULT_SCREEN_DPI;
|
||||
{$ELSE}
|
||||
// TODO: Find a way to get the screen scale in Delphi FMX for Linux
|
||||
Result := USER_DEFAULT_SCREEN_DPI;
|
||||
if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, TempService) then
|
||||
Result := round(TempService.GetScreenScale * USER_DEFAULT_SCREEN_DPI)
|
||||
else
|
||||
begin
|
||||
Result := round(gdk_screen_get_resolution(gdk_screen_get_default));
|
||||
if (Result < 0) then
|
||||
Result := round(gdk_screen_width / (gdk_screen_width_mm / 25.4));
|
||||
end;
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF MACOSX}
|
||||
{$IFDEF FPC}
|
||||
// TODO: Find a way to get the screen scale in Lazarus/FPC for MacOS
|
||||
Result := USER_DEFAULT_SCREEN_DPI;
|
||||
Result := round(NSScreen.mainScreen.backingScaleFactor * USER_DEFAULT_SCREEN_DPI);
|
||||
{$ELSE}
|
||||
// TODO: Find a way to get the screen scale in Delphi FMX for MacOS
|
||||
Result := USER_DEFAULT_SCREEN_DPI;
|
||||
if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, TempService) then
|
||||
Result := round(TempService.GetScreenScale * USER_DEFAULT_SCREEN_DPI)
|
||||
else
|
||||
Result := round(TNSScreen.Wrap(TNSScreen.OCClass.mainScreen).backingScaleFactor * USER_DEFAULT_SCREEN_DPI);
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
function GetDeviceScaleFactor : single;
|
||||
{$IFDEF MACOSX}{$IFDEF FMX}
|
||||
var
|
||||
TempService: IFMXScreenService;
|
||||
{$ENDIF}{$ENDIF}
|
||||
begin
|
||||
{$IFDEF MACOS}
|
||||
Result := MainScreen.backingScaleFactor;
|
||||
{$IFDEF MACOSX}
|
||||
{$IFDEF FPC}
|
||||
Result := NSScreen.mainScreen.backingScaleFactor;
|
||||
{$ELSE}
|
||||
if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, TempService) then
|
||||
Result := TempService.GetScreenScale
|
||||
else
|
||||
Result := TNSScreen.Wrap(TNSScreen.OCClass.mainScreen).backingScaleFactor;
|
||||
{$ENDIF}
|
||||
{$ELSE}
|
||||
Result := GetScreenDPI / USER_DEFAULT_SCREEN_DPI;
|
||||
{$ENDIF}
|
||||
|
||||
Reference in New Issue
Block a user