SDL2 przełączania monitorów w HighDPI tryb OS-X

głosy
0

Dużo programistów napotkali problemy podczas okna SDL2 są przeciągane między monitorami, z których niektóre są w trybie wysokiej DPI. Używam SDL2-2.0.5, a efekt pojawia się podczas przeciągania ze zwykłego monitora na wysokim ekranie DPI, rysunek jest w wysokiej rozdzielczości, ale rozmiar i myszy okno współrzędne są w niskiej rozdzielczości. Próbowałem każdy hak imprez i metryczny mogę myśleć, w tym te z poprzednich postów, ale nie mogę bezpośrednio wykryć, że ta sytuacja się nie dzieje.

Do aplikacji, rozmiar okna jest tak jak powinno być, rozmiary ekranu są jak powinny być - ale efekt końcowy jest wejście low res i wyciągnąć okno skurczony do lewego górnego kwartale prawdziwym oknem. Należy pamiętać, że jest to oczekiwany wynik trybu highDPI - problemem jest to, trzeba traktować okno różnie, gdyż porusza się pomiędzy trybami.

Jeśli istnieje jakiś sposób, aby powiedzieć, że właśnie zmienił między wysokim DPI i regularne dpi, wtedy mogę zrekompensować poprzez podwojenie współrzędne myszy i wymiarów okien, odkąd potwierdzone mogę zwrócić się do całego widzialnego okna.

I stało się na OS-X, ale naprawdę chcę uniknąć OS konkretnych połączeń, chyba że nie ma alternatywy.

Najlepszą pracę wokół znalazłem (za każdy patrzy na to) jest wywołanie SDL_GetRendererOutputSize () przy użyciu mechanizmu renderującego utworzony z okna - jeśli jego rozmiar nie pasuje do rozmiaru okna, to mogę wywnioskować, że jestem w wysokim DPI tryb i adaptacji, niezależnie od wielkości przebieralni okna. Gdy włącza się okno monitorów, robi się to SDL_WINDOWEVENT_SIZE_CHANGED, gdzie mogę zrobić test na zmianę.

Ale tu jest haczyk - to wydaje się kludgy pracy wokół, a nie bezpieczne i elegancki sposób, aby przetestować zmiany trybu DPI oficjalnie. Czy ktoś zna sposób formalny w SDL2 do określenia zmian w trybie HighDPI? Jak zdarzenia? Lub nawet po prostu sposobem na kwerendy trybu DPI okna?

Dzięki za wszelkie pomysły. - Jeff

Szybka zmiana - Grałem z trick powyżej, a nawet jeśli to zrobię to dostosowanie do każdego odebranego zdarzenia, nadal istnieją nieprzyjemne artefakty, w którym skuteczny lokalizacja mysz wychodzi z synchronizacji, dopóki użytkownik nie zakończy nie tylko jego, ale opór Dodatkowo przesuwa myszy. Źródłem tego problemu jest to, że gdy użytkownik jest przeciągnięcie okna, wskaźnik myszy znajduje się poza obszarem roboczym okna, a więc okno nie odbiera żadnych wydarzeń. Tak więc, podczas gdy podejście RendererOutputSize technicznie działa, to nie jest bardzo ładna, a zdarzenie, aby wykryć zmianę dpi będzie znacznie korzystny.

Utwórz 26/09/2017 o 20:57
użytkownik
W innych językach...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more