unit DpiUtils;

{
  DpiUtils.pas — общий пересчёт «дизайн-пикселей» в реальные экранные.

  Вся UI-раскладка приложения (кастомные Flat*-контролы и окна, построенные
  кодом — SettingsForm, DeviceForm) написана литеральными пикселями под
  неявные 96 DPI. DpiScale переводит такое значение в пиксели текущего
  монитора: на 96 DPI (обычный десктоп, Windows 100%) возвращает V без
  изменений; на более высоком DPI (Windows 125/150/200%, HiDPI-десктопы)
  масштабирует пропорционально — тот же приём, что и для стандартных
  Windows-контролов (MulDiv), но управляемый вручную, т.к. вся раскладка
  строится кодом, а не читается из .lfm (там масштабирование сделал бы LCL
  сам через DesignTimePPI).
}

{$IFDEF FPC}
  {$MODE Delphi}
{$ENDIF}

interface

uses
  Forms, LCLType;

function DpiScale(V: Integer): Integer;

implementation

function DpiScale(V: Integer): Integer;
begin
  Result := MulDiv(V, Screen.PixelsPerInch, 96);
  if (V > 0) and (Result < 1) then
    Result := 1;
end;

end.
