aboutsummaryrefslogtreecommitdiff
path: root/sokol_app.h
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2019-03-04 14:02:39 +0100
committerGitHub <noreply@github.com>2019-03-04 14:02:39 +0100
commit6570419898b72337c619be1d0f3cd66350ddc7a5 (patch)
tree14bee4f9db77809b9f0d05eeffc3a903e0903c0f /sokol_app.h
parent439096b18864eecb2458ce1a73839f2a865d113e (diff)
parent52e4d18c695863a5a3f23e3c0d029a9e46b07b9b (diff)
Merge pull request #123 from fabiopolimeni/win-dpi-scale
Don't clamp the DPI scaling on Windows to integer.
Diffstat (limited to 'sokol_app.h')
-rw-r--r--sokol_app.h30
1 files changed, 18 insertions, 12 deletions
diff --git a/sokol_app.h b/sokol_app.h
index 7b714aad..4ee51f52 100644
--- a/sokol_app.h
+++ b/sokol_app.h
@@ -2579,8 +2579,8 @@ static HWND _sapp_win32_hwnd;
static HDC _sapp_win32_dc;
static bool _sapp_win32_in_create_window;
static bool _sapp_win32_dpi_aware;
-static int _sapp_win32_content_scale;
-static int _sapp_win32_window_scale;
+static float _sapp_win32_content_scale;
+static float _sapp_win32_window_scale;
static float _sapp_win32_mouse_scale;
static bool _sapp_win32_iconified;
typedef BOOL(WINAPI * SETPROCESSDPIAWARE_T)(void);
@@ -3725,13 +3725,18 @@ _SOKOL_PRIVATE void _sapp_win32_init_keytable(void) {
_SOKOL_PRIVATE bool _sapp_win32_update_dimensions(void) {
RECT rect;
if (GetClientRect(_sapp_win32_hwnd, &rect)) {
- const int cur_width = (rect.right - rect.left) / _sapp_win32_window_scale;
- const int cur_height = (rect.bottom - rect.top) / _sapp_win32_window_scale;
+ const int cur_width = (int)((float)(rect.right - rect.left) / _sapp_win32_window_scale);
+ const int cur_height = (int)((float)(rect.bottom - rect.top) / _sapp_win32_window_scale);
if ((cur_width != _sapp.window_width) || (cur_height != _sapp.window_height)) {
_sapp.window_width = cur_width;
_sapp.window_height = cur_height;
- _sapp.framebuffer_width = _sapp.window_width * _sapp_win32_content_scale;
- _sapp.framebuffer_height = _sapp.window_height * _sapp_win32_content_scale;
+ }
+
+ const int fb_width = (int)((float)_sapp.window_width * _sapp_win32_content_scale);
+ const int fb_height = (int)((float)_sapp.window_height * _sapp_win32_content_scale);
+ if ((fb_width != _sapp.framebuffer_width) || (fb_height != _sapp.framebuffer_height)) {
+ _sapp.framebuffer_width = (int)((float)_sapp.window_width * _sapp_win32_content_scale);
+ _sapp.framebuffer_height = (int)((float)_sapp.window_height * _sapp_win32_content_scale);
/* prevent a framebuffer size of 0 when window is minimized */
if (_sapp.framebuffer_width == 0) {
_sapp.framebuffer_width = 1;
@@ -3739,6 +3744,7 @@ _SOKOL_PRIVATE bool _sapp_win32_update_dimensions(void) {
if (_sapp.framebuffer_height == 0) {
_sapp.framebuffer_height = 1;
}
+
return true;
}
}
@@ -3945,8 +3951,8 @@ _SOKOL_PRIVATE void _sapp_win32_create_window(void) {
}
else {
win_style = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SIZEBOX;
- rect.right = (int) (_sapp.window_width * _sapp_win32_window_scale);
- rect.bottom = (int) (_sapp.window_height * _sapp_win32_window_scale);
+ rect.right = (int) ((float)_sapp.window_width * _sapp_win32_window_scale);
+ rect.bottom = (int) ((float)_sapp.window_height * _sapp_win32_window_scale);
}
AdjustWindowRectEx(&rect, win_style, FALSE, win_ex_style);
const int win_width = rect.right - rect.left;
@@ -4013,20 +4019,20 @@ _SOKOL_PRIVATE void _sapp_win32_init_dpi(void) {
_SOKOL_UNUSED(hr);
SOKOL_ASSERT(SUCCEEDED(hr));
/* clamp window scale to an integer factor */
- _sapp_win32_window_scale = (int)((float)dpix / 96.0f);
+ _sapp_win32_window_scale = (float)dpix / 96.0f;
}
else {
- _sapp_win32_window_scale = 1;
+ _sapp_win32_window_scale = 1.0f;
}
if (_sapp.desc.high_dpi) {
_sapp_win32_content_scale = _sapp_win32_window_scale;
_sapp_win32_mouse_scale = 1.0f;
}
else {
- _sapp_win32_content_scale = 1;
+ _sapp_win32_content_scale = 1.0f;
_sapp_win32_mouse_scale = 1.0f / _sapp_win32_window_scale;
}
- _sapp.dpi_scale = (float) _sapp_win32_content_scale;
+ _sapp.dpi_scale = _sapp_win32_content_scale;
if (user32) {
FreeLibrary(user32);
}