diff --git a/src/platform/gui.h b/src/platform/gui.h index 8ee68710..4f3d1316 100644 --- a/src/platform/gui.h +++ b/src/platform/gui.h @@ -230,7 +230,7 @@ public: virtual double GetPixelDensity() = 0; // Returns raster graphics and coordinate scale (already applied on the platform side), // i.e. size of logical pixel in physical pixels, or device pixel ratio. - virtual int GetDevicePixelRatio() = 0; + virtual double GetDevicePixelRatio() = 0; // Returns (fractional) font scale, to be applied on top of (integral) device pixel ratio. virtual double GetDeviceFontScale() { return GetPixelDensity() / GetDevicePixelRatio() / 96.0; diff --git a/src/platform/guigtk.cpp b/src/platform/guigtk.cpp index 1a11582e..cd1e93fc 100644 --- a/src/platform/guigtk.cpp +++ b/src/platform/guigtk.cpp @@ -889,7 +889,7 @@ public: return gtkWindow.get_screen()->get_resolution(); } - int GetDevicePixelRatio() override { + double GetDevicePixelRatio() override { return gtkWindow.get_scale_factor(); } diff --git a/src/platform/guihtml.cpp b/src/platform/guihtml.cpp index f5e48e18..d80c4ff8 100644 --- a/src/platform/guihtml.cpp +++ b/src/platform/guihtml.cpp @@ -970,8 +970,8 @@ public: return 96.0 * emscripten_get_device_pixel_ratio(); } - int GetDevicePixelRatio() override { - return (int)emscripten_get_device_pixel_ratio(); + double GetDevicePixelRatio() override { + return emscripten_get_device_pixel_ratio(); } bool IsVisible() override { diff --git a/src/platform/guimac.mm b/src/platform/guimac.mm index 83c4bd8a..c560a5ac 100644 --- a/src/platform/guimac.mm +++ b/src/platform/guimac.mm @@ -987,10 +987,10 @@ public: return (displayPixelSize.width / displayPhysicalSize.width) * 25.4f; } - int GetDevicePixelRatio() override { + double GetDevicePixelRatio() override { NSSize unitSize = { 1.0f, 0.0f }; unitSize = [ssView convertSizeToBacking:unitSize]; - return (int)unitSize.width; + return unitSize.width; } bool IsVisible() override { diff --git a/src/platform/guiwin.cpp b/src/platform/guiwin.cpp index ba9e18cf..e8ab2c1b 100644 --- a/src/platform/guiwin.cpp +++ b/src/platform/guiwin.cpp @@ -793,7 +793,7 @@ public: break; case WM_SIZING: { - int pixelRatio = window->GetDevicePixelRatio(); + double pixelRatio = window->GetDevicePixelRatio(); RECT rcw, rcc; sscheck(GetWindowRect(window->hWindow, &rcw)); @@ -806,10 +806,10 @@ public: int adjHeight = rc->bottom - rc->top; adjWidth -= nonClientWidth; - adjWidth = max(window->minWidth * pixelRatio, adjWidth); - adjWidth += nonClientWidth; + adjWidth = max((int)(window->minWidth * pixelRatio), adjWidth); + adjWidth += nonClientWidth; adjHeight -= nonClientHeight; - adjHeight = max(window->minHeight * pixelRatio, adjHeight); + adjHeight = max((int)(window->minHeight * pixelRatio), adjHeight); adjHeight += nonClientHeight; switch(wParam) { case WMSZ_RIGHT: @@ -868,7 +868,7 @@ public: case WM_MOUSEMOVE: case WM_MOUSEWHEEL: case WM_MOUSELEAVE: { - int pixelRatio = window->GetDevicePixelRatio(); + double pixelRatio = window->GetDevicePixelRatio(); MouseEvent event = {}; event.x = GET_X_LPARAM(lParam) / pixelRatio; @@ -941,7 +941,7 @@ public: event.y = pt.y / pixelRatio; event.type = MouseEvent::Type::SCROLL_VERT; - event.scrollDelta = GET_WHEEL_DELTA_WPARAM(wParam) / WHEEL_DELTA; + event.scrollDelta = GET_WHEEL_DELTA_WPARAM(wParam) / (double)WHEEL_DELTA; break; case WM_MOUSELEAVE: @@ -1109,10 +1109,10 @@ public: return (double)dpi; } - int GetDevicePixelRatio() override { + double GetDevicePixelRatio() override { UINT dpi; sscheck(dpi = ssGetDpiForWindow(hWindow)); - return dpi / USER_DEFAULT_SCREEN_DPI; + return (double)dpi / USER_DEFAULT_SCREEN_DPI; } bool IsVisible() override { @@ -1177,27 +1177,27 @@ public: } void GetContentSize(double *width, double *height) override { - int pixelRatio = GetDevicePixelRatio(); + double pixelRatio = GetDevicePixelRatio(); RECT rc; sscheck(GetClientRect(hWindow, &rc)); - *width = (rc.right - rc.left) / pixelRatio; - *height = (rc.bottom - rc.top) / pixelRatio; + *width = (rc.right - rc.left) / pixelRatio; + *height = (rc.bottom - rc.top) / pixelRatio; } void SetMinContentSize(double width, double height) { minWidth = (int)width; minHeight = (int)height; - int pixelRatio = GetDevicePixelRatio(); + double pixelRatio = GetDevicePixelRatio(); RECT rc; sscheck(GetClientRect(hWindow, &rc)); if(rc.right - rc.left < minWidth * pixelRatio) { - rc.right = rc.left + minWidth * pixelRatio; + rc.right = rc.left + (LONG)(minWidth * pixelRatio); } if(rc.bottom - rc.top < minHeight * pixelRatio) { - rc.bottom = rc.top + minHeight * pixelRatio; + rc.bottom = rc.top + (LONG)(minHeight * pixelRatio); } } @@ -1270,7 +1270,7 @@ public: tooltipText = newText; if(!newText.empty()) { - int pixelRatio = GetDevicePixelRatio(); + double pixelRatio = GetDevicePixelRatio(); RECT toolRect; toolRect.left = (int)(x * pixelRatio); toolRect.top = (int)(y * pixelRatio); @@ -1301,9 +1301,9 @@ public: bool isMonospace, const std::string &text) override { if(IsEditorVisible()) return; - int pixelRatio = GetDevicePixelRatio(); + double pixelRatio = GetDevicePixelRatio(); - HFONT hFont = CreateFontW(-(LONG)fontHeight * GetDevicePixelRatio(), 0, 0, 0, + HFONT hFont = CreateFontW(-(int)(fontHeight * GetDevicePixelRatio()), 0, 0, 0, FW_REGULAR, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, isMonospace ? L"Lucida Console" : L"Arial"); if(hFont == NULL) { @@ -1324,12 +1324,12 @@ public: sscheck(ReleaseDC(hEditor, hDc)); RECT rc; - rc.left = (LONG)x * pixelRatio; - rc.top = (LONG)y * pixelRatio - tm.tmAscent; + rc.left = (LONG)(x * pixelRatio); + rc.top = (LONG)(y * pixelRatio) - tm.tmAscent; // Add one extra char width to avoid scrolling. - rc.right = (LONG)x * pixelRatio + - std::max((LONG)minWidth * pixelRatio, ts.cx + tm.tmAveCharWidth); - rc.bottom = (LONG)y * pixelRatio + tm.tmDescent; + rc.right = (LONG)(x * pixelRatio) + + std::max((LONG)(minWidth * pixelRatio), ts.cx + tm.tmAveCharWidth); + rc.bottom = (LONG)(y * pixelRatio) + tm.tmDescent; sscheck(ssAdjustWindowRectExForDpi(&rc, 0, /*bMenu=*/FALSE, WS_EX_CLIENTEDGE, ssGetDpiForWindow(hWindow))); @@ -1608,7 +1608,7 @@ public: void AddFilter(std::string name, std::vector extensions) override { std::string desc, patterns; - for(auto extension : extensions) { + for(auto &extension : extensions) { std::string pattern = "*." + extension; if(!desc.empty()) desc += ", "; desc += pattern;