Fix scaling on mobile
All checks were successful
Build & deploy web version / Build WebAssembly & deploy (push) Successful in 1m0s
All checks were successful
Build & deploy web version / Build WebAssembly & deploy (push) Successful in 1m0s
This commit is contained in:
parent
c4f7565d18
commit
ba2d649de7
2 changed files with 55 additions and 5 deletions
|
|
@ -2,6 +2,7 @@
|
|||
#include "../camera.h"
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
#include <emscripten.h>
|
||||
#include <emscripten/html5.h>
|
||||
#else
|
||||
#include <unistd.h>
|
||||
|
|
@ -15,10 +16,28 @@ static SDL_Texture* frameTexture;
|
|||
static int textureWidth, textureHeight;
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
/** \brief Kicsi, elsősorban ujjal kezelt kijelzőn futunk-e?
|
||||
* Nem ugyanaz a kérdés, mint a touch.c-beli: ott bármilyen érintés elég, itt viszont az
|
||||
* kell, hogy a fő mutatóeszköz legyen az ujj. Egy érintőképernyős laptop egeret és ujjat
|
||||
* is ismer, a képernyője viszont akkora, hogy a duplázott felbontást nem bírná el.
|
||||
* Mindkettő a kijelző tulajdonsága, futás közben nem változik, elég egyszer megkérdezni.
|
||||
*/
|
||||
static bool isMobileScreen() {
|
||||
static int cached = -1;
|
||||
|
||||
if(cached < 0) cached = EM_ASM_INT({
|
||||
return matchMedia('(pointer: coarse)').matches &&
|
||||
Math.min(screen.width, screen.height) <= $0 ? 1 : 0;
|
||||
}, mobileScreenLimit);
|
||||
|
||||
return cached == 1;
|
||||
}
|
||||
|
||||
///A böngésző pixelarányát adja vissza, a szoftveres rajzolás miatt megszabott plafonig.
|
||||
static double drawingPixelRatio() {
|
||||
double ratio = emscripten_get_device_pixel_ratio();
|
||||
return ratio > maxDevicePixelRatio ? maxDevicePixelRatio : ratio;
|
||||
double maxRatio = isMobileScreen() ? maxMobileDevicePixelRatio : maxDevicePixelRatio;
|
||||
return ratio > maxRatio ? maxRatio : ratio;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,21 @@
|
|||
*/
|
||||
#define maxDevicePixelRatio 1.0
|
||||
|
||||
/** \brief Mobilon ennél is elmehetünk, mert ott a vászon css-ben is kicsi.
|
||||
* Egy telefon képernyője css-pixelben nagyjából ötöde egy asztali ablakénak, így a
|
||||
* kétszeres arány még mindig kevesebb rajzolandó pixelt jelent, mint amennyivel a
|
||||
* gépen számolunk. Cserébe a kicsi, sűrű kijelzőn ez látszik meg a legjobban.
|
||||
*/
|
||||
#define maxMobileDevicePixelRatio 2.0
|
||||
|
||||
/** \brief Eddig a css-pixelben mért rövidebb képernyőoldalig tekintünk egy eszközt mobilnak.
|
||||
* A mutatóeszköz mellé azért kell a méret is, mert egy nagy, ujjal kezelt panel (például
|
||||
* egy kihelyezett érintőképernyő) is az ujjat mondja fő mutatóeszköznek, a duplázás
|
||||
* viszont ott már ugyanolyan drága lenne, mint az asztali gépen. A határ a legnagyobb
|
||||
* kézbe fogható eszköz rövidebb oldala: efölött már nem telefonról vagy táblagépről van szó.
|
||||
*/
|
||||
#define mobileScreenLimit 1024
|
||||
|
||||
typedef struct mousePos {
|
||||
Uint16 x, y;
|
||||
} mousePos;
|
||||
|
|
|
|||
Loading…
Reference in a new issue