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.