Files
ewsdr/PlatformUtils.pas
T
2026-05-28 15:59:49 +03:00

81 lines
1.8 KiB
ObjectPascal

unit PlatformUtils;
{
PlatformUtils.pas - small helpers for desktop/runtime platform checks.
}
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
interface
function QtPlatformAllowsOpenGLControls: Boolean;
function HasOpenGLSpectrumSwitch: Boolean;
function CurrentScreenDPI: Integer;
// Возвращает каталог для хранения конфигурации (с завершающим разделителем).
// macOS: ~/Library/Application Support/ewsdr/
// Linux: ~/.config/ewsdr/
// Windows: каталог исполняемого файла
function GetAppCfgDir: string;
implementation
uses
SysUtils, Forms;
function QtPlatformAllowsOpenGLControls: Boolean;
var
Qpa, FirstQpa, SessionType: string;
Sep: Integer;
begin
Result := True;
Qpa := LowerCase(Trim(GetEnvironmentVariable('QT_QPA_PLATFORM')));
SessionType := LowerCase(Trim(GetEnvironmentVariable('XDG_SESSION_TYPE')));
if Qpa <> '' then
begin
FirstQpa := Qpa;
Sep := Pos(';', FirstQpa);
if Sep > 0 then
FirstQpa := Copy(FirstQpa, 1, Sep - 1);
Result := FirstQpa <> 'wayland';
Exit;
end;
Result := SessionType <> 'wayland';
end;
function HasOpenGLSpectrumSwitch: Boolean;
var
I: Integer;
S: string;
begin
Result := False;
for I := 1 to ParamCount do
begin
S := LowerCase(ParamStr(I));
if (S = '--opengl') or (S = '-opengl') or (S = '/opengl') then
Exit(True);
end;
end;
function CurrentScreenDPI: Integer;
begin
Result := Screen.PixelsPerInch;
if Result <= 0 then Result := 96;
end;
function GetAppCfgDir: string;
begin
{$IFDEF WINDOWS}
Result := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)));
{$ELSE}
Result := IncludeTrailingPathDelimiter(GetAppConfigDir(False));
if not DirectoryExists(Result) then
ForceDirectories(Result);
{$ENDIF}
end;
end.