Kéž tohle fungovalo i v Delphi... Protože pořád nevím, jak obsloužit situaci, kdy má uživatel víc monitorů, každý jiné dpi, část oken na jednom monitoru, část na druhém...
Kéž tohle fungovalo i v Delphi...
Protože pořád nevím, jak obsloužit situaci, kdy má uživatel víc monitorů, každý jiné dpi, část oken na jednom monitoru, část na druhém...
Poslední tři dny jsem pracoval na posledním dílu High-DPI skládačky - TImageListu.
+ Dmitry začal pracovat na Cocoa interface (Sphere 10 Software to podpřilo Bounty) - u nás to jede Jen škoda, že ta Lazarus foundation nějak nenaplnila očekávání...
Super. Osobne imagelist nepoužívam, ale pozriem sa na implementáciu (používam font awesome). Otázka je ako upraviť komponentu aby reagovala na zmenu DPI? Napr. mám potomka TSpeedButton so štandartným Glyph (ktorý sa vygeneruje z toho fontu awesome) vo veľkosti 16 a presuniem form na druhý monitor(ako ináč samozrejme ) a potrebujem zmeniť veľkoosť Glyph zo 16 na povedzme 20. WMSIZE sa vôbec nezavolá, ani AdjustSize.
Citace: Ondřej Pokorný 11-01-2018, 15:10:19+ Dmitry začal pracovat na Cocoa interface (Sphere 10 Software to podpřilo Bounty) - u nás to jede Jen škoda, že ta Lazarus foundation nějak nenaplnila očekávání... Videl som ,že robí Cocoa pekným tempom. Dúfam, že aj tieto ikony vyrieši, a asi spolu s nimi aj tento zásadný bug: https://bugs.freepascal.org/view.php?id=32816 , https://forum.lazarus.freepascal.org/index.php?topic=33215.0
Otázka je ako upraviť komponentu aby reagovala na zmenu DPI? Napr. mám potomka TSpeedButton so štandartným Glyph (ktorý sa vygeneruje z toho fontu awesome) vo veľkosti 16 a presuniem form na druhý monitor(ako ináč samozrejme ) a potrebujem zmeniť veľkoosť Glyph zo 16 na povedzme 20. WMSIZE sa vôbec nezavolá, ani AdjustSize.
Viz http://wiki.lazarus.freepascal.org/High_DPI, "High DPI in Lazarus 1.8 and above" -> zavolá se AutoAdjustLayout/DoAutoAdjustLayout.
Upřímně řečeno jsem ten bug report nepochopil. Vezmu bitmapu 32x32px a kreslím ji na rect 32x32px s retina faktorem 2.0 (t.j. ve výsledku 64x64px). Co jako očekáváte?
Citace: Ondřej Pokorný 15-01-2018, 01:49:19Upřímně řečeno jsem ten bug report nepochopil. Vezmu bitmapu 32x32px a kreslím ji na rect 32x32px s retina faktorem 2.0 (t.j. ve výsledku 64x64px). Co jako očekáváte?Aby sa to správalo rovnako ako na inej platforme (Win) teda 32x32 kreslilo na 32x32, alebo aby sa to scalovalo aj na Win (asi horšia varianta) a na správne kreslenie by sa použila iná funkcia.
Hmm tak to by takto šlo, teda keby ten stretchdraw fungoval.
Glyph používam len ako storage (TBitmap), kreslím to samostatne. Nemám teraz mac k dispozícii, keď budem mať vyskúšam. A ScaleDesignToForm(32) mi vráti 64 na Retine?
function UiIsRetina: Boolean;beginif CurrentOS = osMacOSX106 then Result := (BcNSScreen(NSScreen.mainScreen).userSpaceScaleFactor > 1.0)else Result := (BcNSScreen(NSScreen.mainScreen).backingScaleFactor > 1.0)end;function TBcCarbonForm.GetIsRetina: Boolean;var Window: BcNSWindow;beginWindow := BcNSWindow(GetWindowRefAsNSWindow);if CurrentOS = osMacOSX106 then Result := (Window.userSpaceScaleFactor > 1.0)else Result := (Window.backingScaleFactor > 1.0)end;
A cez Canvas.Line bude mať výšku povedzme 2 px namiesto 1px a nemám šancu inak ako cez bitmap nakresliť 1px čiaru? (Teda ak som to správne pochopil teraz).
Právě že ne. Retina má tu virtuální matici. Takže OSX vrací vždycky 96 DPI = 100%. Pro zjištění retina faktoru musíš použít:
Citace: Ondřej Pokorný 15-01-2018, 07:52:37Právě že ne. Retina má tu virtuální matici. Takže OSX vrací vždycky 96 DPI = 100%. Pro zjištění retina faktoru musíš použít:To by šlo, vyskúšam, samozrejme musím riešiť cez ten scaleFactor lebo tiež MacOS má rôzne stupne asi. Otázka je či by sa to nedalo nejak do LCL zapracovať aby sa nemuselo pri tvorbe komponentov priamo pristupovať k platforme (NS*).