From 00452e47fa022314b4c21af2d4e5b63a53f89b8f Mon Sep 17 00:00:00 2001
From: Noel Berry <[EMAIL REDACTED]>
Date: Wed, 24 Aug 2022 11:25:13 -0700
Subject: [PATCH] Adding SDL_GetWindowSizeInPixels for window size in pixels
(#6112)
---
include/SDL_video.h | 21 +++++++++++
src/dynapi/SDL2.exports | 1 +
src/dynapi/SDL_dynapi_overrides.h | 1 +
src/dynapi/SDL_dynapi_procs.h | 1 +
src/render/direct3d/SDL_render_d3d.c | 6 ++--
src/render/direct3d11/SDL_render_d3d11.c | 4 +--
src/render/direct3d12/SDL_render_d3d12.c | 4 +--
src/video/SDL_sysvideo.h | 1 +
src/video/SDL_video.c | 28 +++++++++++++--
src/video/cocoa/SDL_cocoametalview.m | 12 +------
src/video/cocoa/SDL_cocoaopengl.h | 2 --
src/video/cocoa/SDL_cocoaopengl.m | 22 ------------
src/video/cocoa/SDL_cocoavideo.m | 2 +-
src/video/cocoa/SDL_cocoawindow.h | 1 +
src/video/cocoa/SDL_cocoawindow.m | 18 ++++++++++
src/video/emscripten/SDL_emscriptenopengles.c | 17 ---------
src/video/emscripten/SDL_emscriptenopengles.h | 1 -
src/video/emscripten/SDL_emscriptenvideo.c | 15 +++++++-
src/video/wayland/SDL_waylandopengles.c | 17 ---------
src/video/wayland/SDL_waylandopengles.h | 1 -
src/video/wayland/SDL_waylandvideo.c | 3 +-
src/video/wayland/SDL_waylandvulkan.c | 16 ---------
src/video/wayland/SDL_waylandvulkan.h | 1 -
src/video/wayland/SDL_waylandwindow.c | 10 ++++++
src/video/wayland/SDL_waylandwindow.h | 1 +
src/video/windows/SDL_windowsopengl.c | 7 ----
src/video/windows/SDL_windowsopengl.h | 1 -
src/video/windows/SDL_windowsopengles.c | 8 -----
src/video/windows/SDL_windowsopengles.h | 1 -
src/video/windows/SDL_windowsvideo.c | 4 +--
src/video/windows/SDL_windowswindow.c | 35 +++++++++----------
src/video/windows/SDL_windowswindow.h | 2 +-
32 files changed, 122 insertions(+), 142 deletions(-)
diff --git a/include/SDL_video.h b/include/SDL_video.h
index 0b1065dbb30..c2f3e2f300c 100644
--- a/include/SDL_video.h
+++ b/include/SDL_video.h
@@ -1046,6 +1046,27 @@ extern DECLSPEC int SDLCALL SDL_GetWindowBordersSize(SDL_Window * window,
int *top, int *left,
int *bottom, int *right);
+/**
+ * Get the size of a window in pixels.
+ *
+ * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI
+ * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a
+ * platform with high-DPI support (Apple calls this "Retina"), and not
+ * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint.
+ *
+ * \param window the window from which the drawable size should be queried
+ * \param w a pointer to variable for storing the width in pixels, may be NULL
+ * \param h a pointer to variable for storing the height in pixels, may be
+ * NULL
+ *
+ * \since This function is available since SDL 2.26.0.
+ *
+ * \sa SDL_CreateWindow
+ * \sa SDL_GetWindowSize
+ */
+extern DECLSPEC void SDLCALL SDL_GetWindowSizeInPixels(SDL_Window * window,
+ int *w, int *h);
+
/**
* Set the minimum size of a window's client area.
*
diff --git a/src/dynapi/SDL2.exports b/src/dynapi/SDL2.exports
index cb05dcb45ae..1faa894dc45 100644
--- a/src/dynapi/SDL2.exports
+++ b/src/dynapi/SDL2.exports
@@ -858,3 +858,4 @@
++'_SDL_GetRectDisplayIndex'.'SDL2.dll'.'SDL_GetRectDisplayIndex'
++'_SDL_ResetHint'.'SDL2.dll'.'SDL_ResetHint'
++'_SDL_crc16'.'SDL2.dll'.'SDL_crc16'
+++'_SDL_GetWindowSizeInPixels'.'SDL2.dll'.'SDL_GetWindowSizeInPixels'
diff --git a/src/dynapi/SDL_dynapi_overrides.h b/src/dynapi/SDL_dynapi_overrides.h
index 97daae25d56..cabb7cd8445 100644
--- a/src/dynapi/SDL_dynapi_overrides.h
+++ b/src/dynapi/SDL_dynapi_overrides.h
@@ -884,3 +884,4 @@
#define SDL_GetRectDisplayIndex SDL_GetRectDisplayIndex_REAL
#define SDL_ResetHint SDL_ResetHint_REAL
#define SDL_crc16 SDL_crc16_REAL
+#define SDL_GetWindowSizeInPixels SDL_GetWindowSizeInPixels_REAL
diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h
index 5883ade1628..9b6919ce579 100644
--- a/src/dynapi/SDL_dynapi_procs.h
+++ b/src/dynapi/SDL_dynapi_procs.h
@@ -967,3 +967,4 @@ SDL_DYNAPI_PROC(int,SDL_GetPointDisplayIndex,(const SDL_Point *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_GetRectDisplayIndex,(const SDL_Rect *a),(a),return)
SDL_DYNAPI_PROC(SDL_bool,SDL_ResetHint,(const char *a),(a),return)
SDL_DYNAPI_PROC(Uint16,SDL_crc16,(Uint16 a, const void *b, size_t c),(a,b,c),return)
+SDL_DYNAPI_PROC(void,SDL_GetWindowSizeInPixels,(SDL_Window *a, int *b, int *c),(a,b,c),)
diff --git a/src/render/direct3d/SDL_render_d3d.c b/src/render/direct3d/SDL_render_d3d.c
index 5344d0a555a..ae83009a519 100644
--- a/src/render/direct3d/SDL_render_d3d.c
+++ b/src/render/direct3d/SDL_render_d3d.c
@@ -308,7 +308,7 @@ D3D_ActivateRenderer(SDL_Renderer * renderer)
int w, h;
Uint32 window_flags = SDL_GetWindowFlags(window);
- WIN_GetDrawableSize(window, &w, &h);
+ SDL_GetWindowSizeInPixels(window, &w, &h);
data->pparams.BackBufferWidth = w;
data->pparams.BackBufferHeight = h;
if (window_flags & SDL_WINDOW_FULLSCREEN && (window_flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) {
@@ -357,7 +357,7 @@ D3D_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event)
static int
D3D_GetOutputSize(SDL_Renderer * renderer, int *w, int *h)
{
- WIN_GetDrawableSize(renderer->window, w, h);
+ SDL_GetWindowSizeInPixels(renderer->window, w, h);
return 0;
}
@@ -1653,7 +1653,7 @@ D3D_CreateRenderer(SDL_Window * window, Uint32 flags)
SDL_GetWindowWMInfo(window, &windowinfo);
window_flags = SDL_GetWindowFlags(window);
- WIN_GetDrawableSize(window, &w, &h);
+ SDL_GetWindowSizeInPixels(window, &w, &h);
SDL_GetWindowDisplayMode(window, &fullscreen_mode);
SDL_zero(pparams);
diff --git a/src/render/direct3d11/SDL_render_d3d11.c b/src/render/direct3d11/SDL_render_d3d11.c
index cd3dab4a2a0..f7dfefee615 100644
--- a/src/render/direct3d11/SDL_render_d3d11.c
+++ b/src/render/direct3d11/SDL_render_d3d11.c
@@ -916,7 +916,7 @@ D3D11_CreateWindowSizeDependentResources(SDL_Renderer * renderer)
#if defined(__WINRT__)
SDL_GetWindowSize(renderer->window, &w, &h);
#else
- WIN_GetDrawableSize(renderer->window, &w, &h);
+ SDL_GetWindowSizeInPixels(renderer->window, &w, &h);
#endif
data->rotation = D3D11_GetCurrentRotation();
/* SDL_Log("%s: windowSize={%d,%d}, orientation=%d\n", __FUNCTION__, w, h, (int)data->rotation); */
@@ -1062,7 +1062,7 @@ D3D11_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event)
static int
D3D11_GetOutputSize(SDL_Renderer * renderer, int *w, int *h)
{
- WIN_GetDrawableSize(renderer->window, w, h);
+ SDL_GetWindowSizeInPixels(renderer->window, w, h);
return 0;
}
#endif
diff --git a/src/render/direct3d12/SDL_render_d3d12.c b/src/render/direct3d12/SDL_render_d3d12.c
index 397101974eb..5a7842aa0d8 100644
--- a/src/render/direct3d12/SDL_render_d3d12.c
+++ b/src/render/direct3d12/SDL_render_d3d12.c
@@ -513,7 +513,7 @@ D3D12_DestroyRenderer(SDL_Renderer * renderer)
static int
D3D12_GetOutputSize(SDL_Renderer *renderer, int *w, int *h)
{
- WIN_GetDrawableSize(renderer->window, w, h);
+ SDL_GetWindowSizeInPixels(renderer->window, w, h);
return 0;
}
@@ -1267,7 +1267,7 @@ D3D12_CreateWindowSizeDependentResources(SDL_Renderer * renderer)
/* The width and height of the swap chain must be based on the display's
* non-rotated size.
*/
- WIN_GetDrawableSize(renderer->window, &w, &h);
+ SDL_GetWindowSizeInPixels(renderer->window, &w, &h);
data->rotation = D3D12_GetCurrentRotation();
if (D3D12_IsDisplayRotated90Degrees(data->rotation)) {
int tmp = w;
diff --git a/src/video/SDL_sysvideo.h b/src/video/SDL_sysvideo.h
index 4ea7705e959..d3f0d83e2a2 100644
--- a/src/video/SDL_sysvideo.h
+++ b/src/video/SDL_sysvideo.h
@@ -227,6 +227,7 @@ struct SDL_VideoDevice
void (*SetWindowMinimumSize) (_THIS, SDL_Window * window);
void (*SetWindowMaximumSize) (_THIS, SDL_Window * window);
int (*GetWindowBordersSize) (_THIS, SDL_Window * window, int *top, int *left, int *bottom, int *right);
+ void (*GetWindowSizeInPixels)(_THIS, SDL_Window *window, int *w, int *h);
int (*SetWindowOpacity) (_THIS, SDL_Window * window, float opacity);
int (*SetWindowModalFor) (_THIS, SDL_Window * modal_window, SDL_Window * parent_window);
int (*SetWindowInputFocus) (_THIS, SDL_Window * window);
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
index 21c516265f7..881b06b9f9c 100644
--- a/src/video/SDL_video.c
+++ b/src/video/SDL_video.c
@@ -2366,6 +2366,28 @@ SDL_GetWindowBordersSize(SDL_Window * window, int *top, int *left, int *bottom,
return _this->GetWindowBordersSize(_this, window, top, left, bottom, right);
}
+void
+SDL_GetWindowSizeInPixels(SDL_Window *window, int *w, int *h)
+{
+ int filter;
+
+ CHECK_WINDOW_MAGIC(window,);
+
+ if (w == NULL) {
+ w = &filter;
+ }
+
+ if (h == NULL) {
+ h = &filter;
+ }
+
+ if (_this->GetWindowSizeInPixels) {
+ _this->GetWindowSizeInPixels(_this, window, w, h);
+ } else {
+ SDL_GetWindowSize(window, w, h);
+ }
+}
+
void
SDL_SetWindowMinimumSize(SDL_Window * window, int min_w, int min_h)
{
@@ -4096,7 +4118,7 @@ void SDL_GL_GetDrawableSize(SDL_Window * window, int *w, int *h)
if (_this->GL_GetDrawableSize) {
_this->GL_GetDrawableSize(_this, window, w, h);
} else {
- SDL_GetWindowSize(window, w, h);
+ SDL_GetWindowSizeInPixels(window, w, h);
}
}
@@ -4791,7 +4813,7 @@ void SDL_Vulkan_GetDrawableSize(SDL_Window * window, int *w, int *h)
if (_this->Vulkan_GetDrawableSize) {
_this->Vulkan_GetDrawableSize(_this, window, w, h);
} else {
- SDL_GetWindowSize(window, w, h);
+ SDL_GetWindowSizeInPixels(window, w, h);
}
}
@@ -4844,7 +4866,7 @@ void SDL_Metal_GetDrawableSize(SDL_Window * window, int *w, int *h)
if (_this->Metal_GetDrawableSize) {
_this->Metal_GetDrawableSize(_this, window, w, h);
} else {
- SDL_GetWindowSize(window, w, h);
+ SDL_GetWindowSizeInPixels(window, w, h);
}
}
diff --git a/src/video/cocoa/SDL_cocoametalview.m b/src/video/cocoa/SDL_cocoametalview.m
index ebdc921a19f..c3f45279d2b 100644
--- a/src/video/cocoa/SDL_cocoametalview.m
+++ b/src/video/cocoa/SDL_cocoametalview.m
@@ -185,17 +185,7 @@ - (NSView *)hitTest:(NSPoint)point {
}
} else {
/* Fall back to the viewport size. */
- NSRect viewport = [contentView bounds];
- if (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) {
- /* This gives us the correct viewport for a Retina-enabled view. */
- viewport = [contentView convertRectToBacking:viewport];
- }
- if (w) {
- *w = viewport.size.width;
- }
- if (h) {
- *h = viewport.size.height;
- }
+ SDL_GetWindowSizeInPixels(window, w, h);
}
}}
diff --git a/src/video/cocoa/SDL_cocoaopengl.h b/src/video/cocoa/SDL_cocoaopengl.h
index 9ac44ab5f9b..0f9b1c7f0a9 100644
--- a/src/video/cocoa/SDL_cocoaopengl.h
+++ b/src/video/cocoa/SDL_cocoaopengl.h
@@ -61,8 +61,6 @@ extern void Cocoa_GL_UnloadLibrary(_THIS);
extern SDL_GLContext Cocoa_GL_CreateContext(_THIS, SDL_Window * window);
extern int Cocoa_GL_MakeCurrent(_THIS, SDL_Window * window,
SDL_GLContext context);
-extern void Cocoa_GL_GetDrawableSize(_THIS, SDL_Window * window,
- int * w, int * h);
extern int Cocoa_GL_SetSwapInterval(_THIS, int interval);
extern int Cocoa_GL_GetSwapInterval(_THIS);
extern int Cocoa_GL_SwapWindow(_THIS, SDL_Window * window);
diff --git a/src/video/cocoa/SDL_cocoaopengl.m b/src/video/cocoa/SDL_cocoaopengl.m
index 91319d5a7bd..8aab0c4cb64 100644
--- a/src/video/cocoa/SDL_cocoaopengl.m
+++ b/src/video/cocoa/SDL_cocoaopengl.m
@@ -385,28 +385,6 @@ - (void)dealloc
return 0;
}}
-void
-Cocoa_GL_GetDrawableSize(_THIS, SDL_Window * window, int * w, int * h)
-{ @autoreleasepool
-{
- SDL_WindowData *windata = (__bridge SDL_WindowData *) window->driverdata;
- NSView *contentView = windata.sdlContentView;
- NSRect viewport = [contentView bounds];
-
- if (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) {
- /* This gives us the correct viewport for a Retina-enabled view. */
- viewport = [contentView convertRectToBacking:viewport];
- }
-
- if (w) {
- *w = viewport.size.width;
- }
-
- if (h) {
- *h = viewport.size.height;
- }
-}}
-
int
Cocoa_GL_SetSwapInterval(_THIS, int interval)
{ @autoreleasepool
diff --git a/src/video/cocoa/SDL_cocoavideo.m b/src/video/cocoa/SDL_cocoavideo.m
index 11a581b3c89..b093e2efc01 100644
--- a/src/video/cocoa/SDL_cocoavideo.m
+++ b/src/video/cocoa/SDL_cocoavideo.m
@@ -100,6 +100,7 @@ @implementation SDL_VideoData
device->SetWindowMinimumSize = Cocoa_SetWindowMinimumSize;
device->SetWindowMaximumSize = Cocoa_SetWindowMaximumSize;
device->SetWindowOpacity = Cocoa_SetWindowOpacity;
+ device->GetWindowSizeInPixels = Cocoa_GetWindowSizeInPixels;
device->ShowWindow = Cocoa_ShowWindow;
device->HideWindow = Cocoa_HideWindow;
device->RaiseWindow = Cocoa_RaiseWindow;
@@ -133,7 +134,6 @@ @implementation SDL_VideoData
device->GL_UnloadLibrary = Cocoa_GL_UnloadLibrary;
device->GL_CreateContext = Cocoa_GL_CreateContext;
device->GL_MakeCurrent = Cocoa_GL_MakeCurrent;
- device->GL_GetDrawableSize = Cocoa_GL_GetDrawableSize;
device->GL_SetSwapInterval = Cocoa_GL_SetSwapInterval;
device->GL_GetSwapInterval = Cocoa_GL_GetSwapInterval;
device->GL_SwapWindow = Cocoa_GL_SwapWindow;
diff --git a/src/video/cocoa/SDL_cocoawindow.h b/src/video/cocoa/SDL_cocoawindow.h
index ec25e1f5795..cd76b0cd9de 100644
--- a/src/video/cocoa/SDL_cocoawindow.h
+++ b/src/video/cocoa/SDL_cocoawindow.h
@@ -145,6 +145,7 @@ extern void Cocoa_SetWindowPosition(_THIS, SDL_Window * window);
extern void Cocoa_SetWindowSize(_THIS, SDL_Window * window);
extern void Cocoa_SetWindowMinimumSize(_THIS, SDL_Window * window);
extern void Cocoa_SetWindowMaximumSize(_THIS, SDL_Window * window);
+extern void Cocoa_GetWindowSizeInPixels(_THIS, SDL_Window * window, int *w, int *h);
extern int Cocoa_SetWindowOpacity(_THIS, SDL_Window * window, float opacity);
extern void Cocoa_ShowWindow(_THIS, SDL_Window * window);
extern void Cocoa_HideWindow(_THIS, SDL_Window * window);
diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m
index ad7d9e2af0d..bc7afce4582 100644
--- a/src/video/cocoa/SDL_cocoawindow.m
+++ b/src/video/cocoa/SDL_cocoawindow.m
@@ -1941,6 +1941,24 @@ - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent
[windata.nswindow setContentMaxSize:maxSize];
}}
+void
+Cocoa_GetWindowSizeInPixels(_THIS, SDL_Window * window, int *w, int *h)
+{ @autoreleasepool
+{
+ SDL_WindowData *windata = (__bridge SDL_WindowData *) window->driverdata;
+ NSView *contentView = windata.sdlContentView;
+ NSRect viewport = [contentView bounds];
+
+ if (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) {
+ /* This gives us the correct viewport for a Retina-enabled view. */
+ viewport = [contentView convertRectToBacking:viewport];
+ }
+
+ *w = viewport.size.width;
+ *h = viewport.size.height;
+}}
+
+
void
Cocoa_ShowWindow(_THIS, SDL_Window * window)
{ @autoreleasepool
diff --git a/src/video/emscripten/SDL_emscriptenopengles.c b/src/video/emscripten/SDL_emscriptenopengles.c
index a450c8c89af..10c6285cf32 100644
--- a/src/video/emscripten/SDL_emscriptenopengles.c
+++ b/src/video/emscripten/SDL_emscriptenopengles.c
@@ -96,23 +96,6 @@ Emscripten_GLES_SwapWindow(_THIS, SDL_Window * window)
return ret;
}
-void
-Emscripten_GLES_GetDrawableSize(_THIS, SDL_Window * window, int * w, int * h)
-{
- SDL_WindowData *data;
- if (window->driverdata) {
- data = (SDL_WindowData *) window->driverdata;
-
- if (w) {
- *w = window->w * data->pixel_ratio;
- }
-
- if (h) {
- *h = window->h * data->pixel_ratio;
- }
- }
-}
-
#endif /* SDL_VIDEO_DRIVER_EMSCRIPTEN && SDL_VIDEO_OPENGL_EGL */
/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/video/emscripten/SDL_emscriptenopengles.h b/src/video/emscripten/SDL_emscriptenopengles.h
index 081b02fef4a..9d178f6902d 100644
--- a/src/video/emscripten/SDL_emscriptenopengles.h
+++ b/src/video/emscripten/SDL_emscriptenopengles.h
@@ -40,7 +40,6 @@ extern int Emscripten_GLES_LoadLibrary(_THIS, const char *path);
extern SDL_GLContext Emscripten_GLES_CreateContext(_THIS, SDL_Window * window);
extern int Emscripten_GLES_SwapWindow(_THIS, SDL_Window * window);
extern int Emscripten_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context);
-extern void Emscripten_GLES_GetDrawableSize(_THIS, SDL_Window * window, int * w, int * h);
#endif /* SDL_VIDEO_DRIVER_EMSCRIPTEN && SDL_VIDEO_OPENGL_EGL */
diff --git a/src/video/emscripten/SDL_emscriptenvideo.c b/src/video/emscripten/SDL_emscriptenvideo.c
index 831af8e21ef..550031d3fbe 100644
--- a/src/video/emscripten/SDL_emscriptenvideo.c
+++ b/src/video/emscripten/SDL_emscriptenvideo.c
@@ -47,6 +47,7 @@ static int Emscripten_GetDisplayDPI(_THIS, SDL_VideoDisplay * display, float * d
static int Emscripten_CreateWindow(_THIS, SDL_Window * window);
static void Emscripten_SetWindowSize(_THIS, SDL_Window * window);
+static void Emscripten_GetWindowSizeInPixels(_THIS, SDL_Window * window, int *w, int *h);
static void Emscripten_DestroyWindow(_THIS, SDL_Window * window);
static void Emscripten_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen);
static void Emscripten_PumpEvents(_THIS);
@@ -101,6 +102,7 @@ Emscripten_CreateDevice(void)
device->MinimizeWindow = Emscripten_MinimizeWindow;
device->RestoreWindow = Emscripten_RestoreWindow;
device->SetWindowMouseGrab = Emscripten_SetWindowMouseGrab;*/
+ device->GetWindowSizeInPixels = Emscripten_GetWindowSizeInPixels;
device->DestroyWindow = Emscripten_DestroyWindow;
device->SetWindowFullscreen = Emscripten_SetWindowFullscreen;
@@ -118,7 +120,6 @@ Emscripten_CreateDevice(void)
device->GL_GetSwapInterval = Emscripten_GLES_GetSwapInterval;
device->GL_SwapWindow = Emscripten_GLES_SwapWindow;
device->GL_DeleteContext = Emscripten_GLES_DeleteContext;
- device->GL_GetDrawableSize = Emscripten_GLES_GetDrawableSize;
#endif
device->free = Emscripten_DeleteDevice;
@@ -307,6 +308,18 @@ static void Emscripten_SetWindowSize(_THIS, SDL_Window * window)
}
}
+
+static void
+Emscripten_GetWindowSizeInPixels(_THIS, SDL_Window * window, int *w, int *h)
+{
+ SDL_WindowData *data;
+ if (window->driverdata) {
+ data = (SDL_WindowData *) window->driverdata;
+ *w = window->w * data->pixel_ratio;
+ *h = window->h * data->pixel_ratio;
+ }
+}
+
static void
Emscripten_DestroyWindow(_THIS, SDL_Window * window)
{
diff --git a/src/video/wayland/SDL_waylandopengles.c b/src/video/wayland/SDL_waylandopengles.c
index 26626ee5189..a0af3f5a4b8 100644
--- a/src/video/wayland/SDL_waylandopengles.c
+++ b/src/video/wayland/SDL_waylandopengles.c
@@ -197,23 +197,6 @@ Wayland_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context)
return ret;
}
-void
-Wayland_GLES_GetDrawableSize(_THIS, SDL_Window * window, int * w, int * h)
-{
- SDL_WindowData *data;
- if (window->driverdata) {
- data = (SDL_WindowData *) window->driverdata;
-
- if (w) {
- *w = data->drawable_width;
- }
-
- if (h) {
- *h = data->drawable_height;
- }
- }
-}
-
void
Wayland_GLES_DeleteContext(_THIS, SDL_GLContext context)
{
diff --git a/src/video/wayland/SDL_waylandopengles.h b/src/video/wayland/SDL_waylandopengles.h
index 1abd813df3d..b9500b9f1aa 100644
--- a/src/video/wayland/SDL_waylandopengles.h
+++ b/src/video/wayland/SDL_waylandopengles.h
@@ -42,7 +42,6 @@ extern int Wayland_GLES_SetSwapInterval(_THIS, int interval);
extern int Wayland_GLES_GetSwapInterval(_THIS);
extern int Wayland_GLES_SwapWindow(_THIS, SDL_Window * window);
extern int Wayland_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context);
-extern void Wayland_GLES_GetDrawableSize(_THIS, SDL_Window * window, int * w, int * h);
extern void Wayland_GLES_DeleteContext(_THIS, SDL_GLContext context);
#endif /* SDL_waylandopengles_h_ */
diff --git a/src/video/wayland/SDL_waylandvideo.c b/src/video/wayland/SDL_waylandvideo.c
index 4642c0d8bf9..113ae6f6c53 100644
--- a/src/video/wayland/SDL_waylandvideo.c
+++ b/src/video/wayland/SDL_waylandvideo.c
@@ -230,7 +230,6 @@ Wayland_CreateDevice(void)
device->GL_SwapWindow = Wayland_GLES_SwapWindow;
device->GL_GetSwapInterval = Wayland_GLES_GetSwapInterval;
device->GL_SetSwapInterval = Wayland_GLES_SetSwapInterval;
- device->GL_GetDrawableSize = Wayland_GLES_GetDrawableSize;
device->GL_MakeCurrent = Wayland_GLES_MakeCurrent;
device->GL_CreateContext = Wayland_GLES_CreateContext;
device->GL_LoadLibrary = Wayland_GLES_LoadLibrary;
@@ -257,6 +256,7 @@ Wayland_CreateDevice(void)
device->SetWindowMaximumSize = Wayland_SetWindowMaximumSize;
device->SetWindowModalFor = Wayland_SetWindowModalFor;
device->SetWindowTitle = Wayland_SetWindowTitle;
+ device->GetWindowSizeInPixels = Wayland_GetWindowSizeInPixels;
device->DestroyWindow = Wayland_DestroyWindow;
device->SetWindowHitTest = Wayland_SetWindowHitTest;
device->FlashWindow = Wayland_FlashWindow;
@@ -274,7 +274,6 @@ Wayland_CreateDevice(void)
device->Vulkan_UnloadLibrary = Wayland_Vulkan_UnloadLibrary;
device->Vulkan_GetInstanceExtensions = Wayland_Vulkan_GetInstanceExtensions;
device->Vulkan_CreateSurface = Wayland_Vulkan_CreateSurface;
- device->Vulkan_GetDrawableSize = Wayland_Vulkan_GetDrawableSize;
#endif
device->free = Wayland_DeleteDevice;
diff --git a/src/video/wayland/SDL_waylandvulkan.c b/src/video/wayland/SDL_waylandvulkan.c
index 90b318fc87f..f76efd09467 100644
--- a/src/video/wayland/SDL_waylandvulkan.c
+++ b/src/video/wayland/SDL_waylandvulkan.c
@@ -132,22 +132,6 @@ SDL_bool Wayland_Vulkan_GetInstanceExtensions(_THIS,
extensionsForWayland);
}
-void Wayland_Vulkan_GetDrawableSize(_THIS, SDL_Window *window, int *w, int *h)
-{
- SDL_WindowData *data;
- if (window->driverdata) {
- data = (SDL_WindowData *) window->driverdata;
-
- if (w) {
- *w = data->drawable_width;
- }
-
- if (h) {
- *h = data->drawable_height;
- }
- }
-}
-
SDL_bool Wayland_Vulkan_CreateSurface(_THIS,
SDL_Window *window,
VkInstance instance,
diff --git a/src/video/wayland/SDL_waylandvulkan.h b/src/video/wayland/SDL_waylandvulkan.h
index c2b4c4f0150..7ef4658bf38 100644
--- a/src/video/wayland/SDL_waylandvulkan.h
+++ b/src/video/wayland/SDL_waylandvulkan.h
@@ -40,7 +40,6 @@ SDL_bool Wayland_Vulkan_GetInstanceExtensions(_THIS,
SDL_Window *window,
unsigned *count,
const char **names);
-void Wayland_Vulkan_GetDrawableSize(_THIS, SDL_Window *window, int *w, int *h);
SDL_bool Wayland_Vulkan_CreateSurface(_THIS,
SDL_Window *window,
VkInstance instance,
diff --git a/src/video/wayland/SDL_waylandwindow.c b/src/video/wayland/SDL_waylandwindow.c
index 8d5c7023456..e203da8d3d8 100644
--- a/src/video/wayland/SDL_waylandwindow.c
+++ b/src/video/wayland/SDL_waylandwindow.c
@@ -2067,6 +2067,16 @@ void Wayland_SetWindowSize(_THIS, SDL_Window * window)
}
}
+void Wayland_GetWindowSizeInPixels(_THIS, SDL_Window * window, int *w, int *h)
+{
+ SDL_WindowData *data;
+ if (window->driverdata) {
+ data = (SDL_WindowData *) window->driverdata;
+ *w = data->drawable_width;
+ *h = data->drawable_height;
+ }
+}
+
void Wayland_SetWindowTitle(_THIS, SDL_Window * window)
{
SDL_WindowData *wind = window->driverdata;
diff --git a/src/video/wayland/SDL_waylandwindow.h b/src/video/wayland/SDL_waylandwindow.h
index 703ec53da45..5413c95bd8c 100644
--- a/src/video/wayland/SDL_waylandwindow.h
+++ b/src/video/wayland/SDL_waylandwindow.h
@@ -127,6 +127,7 @@ extern int Wayland_CreateWindow(_THIS, SDL_Window *window);
extern void Wayland_SetWindowSize(_THIS, SDL_Window * window);
extern void Wayland_SetWindowMinimumSize(_THIS, SDL_Window * window);
extern void Wayland_SetWindowMaximumSize(_THIS, SDL_Window * window);
+extern void Wayland_GetWindowSizeInPixels(_THIS, SDL_Window * window, int *w, int *h);
extern int Wayland_SetWindowModalFor(_THIS, SDL_Window * modal_window, SDL_Window * parent_window);
extern void Wayland_SetWindowTitle(_THIS, SDL_Window * window);
extern void Wayland_DestroyWindow(_THIS, SDL_Window *window);
diff --git a/src/video/windows/SDL_windowsopengl.c b/src/video/windows/SDL_windowsopengl.c
index 1f81917f359..c1df7f6b981 100644
--- a/src/video/windows/SDL_windowsopengl.c
+++ b/src/video/windows/SDL_windowsopengl.c
@@ -685,7 +685,6 @@ WIN_GL_CreateContext(_THIS, SDL_Window * window)
_this->GL_UnloadLibrary = WIN_GLES_UnloadLibrary;
_this->GL_CreateContext = WIN_GLES_CreateContext;
_this->GL_MakeCurrent = WIN_GLES_MakeCurrent;
- _this->GL_GetDrawableSize = WIN_GLES_GetDrawableSize;
_this->GL_SetSwapInterval = WIN_GLES_SetSwapInterval;
_this->GL_GetSwapInterval = WIN_GLES_GetSwapInterval;
_this->GL_SwapWindow = WIN_GLES_SwapWindow;
@@ -832,12 +831,6 @@ WIN_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context)
return 0;
}
-void
-WIN_GL_GetDrawableSize(_THIS, SDL_Window *window, int *w, int *h)
-{
- WIN_GetDrawableSize(window, w, h);
-}
-
int
WIN_GL_SetSwapInterval(_THIS, int interval)
{
diff --git a/src/video/windows/SDL_windowsopengl.h b/src/video/windows/SDL_windowsopengl.h
index 36779aa4a3a..2dec0023a42 100644
--- a/src/video/windows/SDL_windowsopengl.h
+++ b/src/video/windows/SDL_windowsopengl.h
@@ -71,7 +71,6 @@ extern int WIN_GL_SetupWindow(_THIS, SDL_Window * window);
extern SDL_GLContext WIN_GL_CreateContext(_THIS, SDL_Window * window);
extern int WIN_GL_MakeCurrent(_THIS, SDL_Window * window,
SDL_GLContext context);
-extern void WIN_GL_GetDrawableSize(_THIS, SDL_Window *window, int *w, int *h);
extern int WIN_GL_SetSwapInterval(_THIS, int interval);
extern int WIN_GL_GetSwapInterval(_THIS);
extern int WIN_GL_SwapWindow(_THIS, SDL_Window * window);
diff --git a/src/video/windows/SDL_windowsopengles.c b/src/video/windows/SDL_windowsopengles.c
index ff4c5941825..1e2a4f62079 100644
--- a/src/video/windows/SDL_windowsopengles.c
+++ b/src/video/windows/SDL_windowsopengles.c
@@ -41,7 +41,6 @@ WIN_GLES_LoadLibrary(_THIS, const char *path) {
_this->GL_UnloadLibrary = WIN_GL_UnloadLibrary;
_this->GL_CreateContext = WIN_GL_CreateContext;
_this->GL_MakeCurrent = WIN_GL_MakeCurrent;
- _this->GL_GetDrawableSize = WIN_GL_GetDrawableSize;
_this->GL_SetSwapInterval = WIN_GL_SetSwapInterval;
_this->GL_GetSwapInterval = WIN_GL_GetSwapInterval;
_this->GL_SwapWindow = WIN_GL_SwapWindow;
@@ -74,7 +73,6 @@ WIN_GLES_CreateContext(_THIS, SDL_Window * window)
_this->GL_UnloadLibrary = WIN_GL_UnloadLibrary;
_this->GL_CreateContext = WIN_GL_CreateContext;
_this->GL_MakeCurrent = WIN_GL_MakeCurrent;
- _this->GL_GetDrawableSize = WIN_GL_GetDrawableSize;
_this->GL_SetSwapInterval = WIN_GL_SetSwapInterval;
_this->GL_GetSwapInterval = WIN_GL_GetSwapInterval;
_this->GL_SwapWindow = WIN_GL_SwapWindow;
@@ -102,12 +100,6 @@ WIN_GLES_DeleteContext(_THIS, SDL_GLContext context)
SDL_EGL_SwapWindow_impl(WIN)
SDL_EGL_MakeCurrent_impl(WIN)
-void
-WIN_GLES_GetDrawableSize(_THIS, SDL_Window* window, int* w, int* h)
-{
- WIN_GetDrawableSize(window, w, h);
-}
-
int
WIN_GLES_SetupWindow(_THIS, SDL_Window * window)
{
diff --git a/src/video/windows/SDL_windowsopengles.h b/src/video/windows/SDL_windowsopengles.h
index e59c02ebd18..b21c56f4fed 100644
--- a/src/video/windows/SDL_windowsopengles.h
+++ b/src/video/windows/SDL_windowsopengles.h
@@ -39,7 +39,6 @@ extern int WIN_GLES_LoadLibrary(_THIS, const char *path);
extern SDL_GLContext WIN_GLES_CreateContext(_THIS, SDL_Window * window);
extern int WIN_GLES_SwapWindow(_THIS, SDL_Window * window);
extern int WIN_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context);
-extern void WIN_GLES_GetDrawableSize(_THIS, SDL_Window* window, int* w, int* h);
extern void WIN_GLES_DeleteContext(_THIS, SDL_GLContext context);
extern int WIN_GLES_SetupWindow(_THIS, SDL_Window * window);
diff --git a/src/video/windows/SDL_windowsvideo.c b/src/video/windows/SDL_windowsvideo.c
index 2b3f0a49e36..0dc107bdf24 100644
--- a/src/video/windows/SDL_windowsvideo.c
+++ b/src/video/windows/SDL_windowsvideo.c
@@ -180,6 +180,7 @@ WIN_CreateDevice(void)
device->SetWindowPosition = WIN_SetWindowPosition;
device->SetWindowSize = WIN_SetWindowSize;
device->GetWindowBordersSize = WIN_GetWindowBordersSize;
+ device->GetWindowSizeInPixels = WIN_GetWindowSizeInPixels;
device->SetWindowOpacity = WIN_SetWindowOpacity;
device->ShowWindow = WIN_ShowWindow;
device->HideWindow = WIN_HideWindow;
@@ -221,7 +222,6 @@ WIN_CreateDevice(void)
device->GL_UnloadLibrary = WIN_GL_UnloadLibrary;
device->GL_CreateContext = WIN_GL_CreateContext;
device->GL_MakeCurrent = WIN_GL_MakeCurrent;
- device->GL_GetDrawableSize = WIN_GL_GetDrawableSize;
device->GL_SetSwapInterval = WIN_GL_SetSwapInterval;
device->GL_GetSwapInterval = WIN_GL_GetSwapInterval;
device->GL_SwapWindow = WIN_GL_SwapWindow;
@@ -233,7 +233,6 @@ WIN_CreateDevice(void)
device->GL_UnloadLibrary = WIN_GLES_UnloadLibrary;
device->GL_CreateContext = WIN_GLES_CreateContext;
device->GL_MakeCurrent = WIN_GLES_MakeCurrent;
- device->GL_GetDrawableSize = WIN_GLES_GetDrawableSize;
device->GL_SetSwapInterval = WIN_GLES_SetSwapInterval;
device->GL_GetSwapInterval = WIN_GLES_GetSwapInterval;
device->GL_SwapWindow = WIN_GLES_SwapWindow;
@@ -244,7 +243,6 @@ WIN_CreateDevice(void)
device->Vulkan_UnloadLibrary = WIN_Vulkan_UnloadLibrary;
device->Vulkan_GetInstanceExtensions = WIN_Vulkan_GetInstanceExtensions;
device->Vulkan_CreateSurface = WIN_Vulkan_CreateSurface;
- device->Vulkan_GetDrawableSize = WIN_GL_GetDrawableSize;
#endif
#if !defined(__XBOXONE__) && !defined(__XBOXSERIES__)
diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c
index eb536bbe469..991ef0ebe3b 100644
--- a/src/video/windows/SDL_windowswindow.c
+++ b/src/video/windows/SDL_windowswindow.c
@@ -773,6 +773,22 @@ WIN_GetWindowBordersSize(_THIS, SDL_Window * window, int *top, int *left, int *b
#endif /*!defined(__XBOXONE__) && !defined(__XBOXSERIES__)*/
}
(Patch may be truncated, please check the link at the top of this post.)