mirror of
https://github.com/Ryujinx/SDL.git
synced 2025-01-09 13:05:38 +00:00
Added SDL_GetWindowBordersSize().
This is currently only implemented for X11. This patch is based on work in Unreal Engine 4's fork of SDL, compliments of Epic Games.
This commit is contained in:
parent
f9af0c0376
commit
5696e88e6b
|
@ -611,6 +611,25 @@ extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w,
|
||||||
extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w,
|
extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w,
|
||||||
int *h);
|
int *h);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Get the size of a window's borders (decorations) around the client area.
|
||||||
|
*
|
||||||
|
* \param window The window to query.
|
||||||
|
* \param top Pointer to variable for storing the size of the top border. NULL is permitted.
|
||||||
|
* \param left Pointer to variable for storing the size of the left border. NULL is permitted.
|
||||||
|
* \param bottom Pointer to variable for storing the size of the bottom border. NULL is permitted.
|
||||||
|
* \param right Pointer to variable for storing the size of the right border. NULL is permitted.
|
||||||
|
*
|
||||||
|
* \return 0 on success, or -1 if getting this information is not supported.
|
||||||
|
*
|
||||||
|
* \note if this function fails (returns -1), the size values will be
|
||||||
|
* initialized to 0, 0, 0, 0 (if a non-NULL pointer is provided), as
|
||||||
|
* if the window in question was borderless.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_GetWindowBordersSize(SDL_Window * window,
|
||||||
|
int *top, int *left,
|
||||||
|
int *bottom, int *right);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Set the minimum size of a window's client area.
|
* \brief Set the minimum size of a window's client area.
|
||||||
*
|
*
|
||||||
|
|
|
@ -598,3 +598,4 @@
|
||||||
#define SDL_GameControllerFromInstanceID SDL_GameControllerFromInstanceID_REAL
|
#define SDL_GameControllerFromInstanceID SDL_GameControllerFromInstanceID_REAL
|
||||||
#define SDL_JoystickFromInstanceID SDL_JoystickFromInstanceID_REAL
|
#define SDL_JoystickFromInstanceID SDL_JoystickFromInstanceID_REAL
|
||||||
#define SDL_GetDisplayUsableBounds SDL_GetDisplayUsableBounds_REAL
|
#define SDL_GetDisplayUsableBounds SDL_GetDisplayUsableBounds_REAL
|
||||||
|
#define SDL_GetWindowBordersSize SDL_GetWindowBordersSize_REAL
|
||||||
|
|
|
@ -632,3 +632,4 @@ SDL_DYNAPI_PROC(SDL_JoystickPowerLevel,SDL_JoystickCurrentPowerLevel,(SDL_Joysti
|
||||||
SDL_DYNAPI_PROC(SDL_GameController*,SDL_GameControllerFromInstanceID,(SDL_JoystickID a),(a),return)
|
SDL_DYNAPI_PROC(SDL_GameController*,SDL_GameControllerFromInstanceID,(SDL_JoystickID a),(a),return)
|
||||||
SDL_DYNAPI_PROC(SDL_Joystick*,SDL_JoystickFromInstanceID,(SDL_JoystickID a),(a),return)
|
SDL_DYNAPI_PROC(SDL_Joystick*,SDL_JoystickFromInstanceID,(SDL_JoystickID a),(a),return)
|
||||||
SDL_DYNAPI_PROC(int,SDL_GetDisplayUsableBounds,(int a, SDL_Rect *b),(a,b),return)
|
SDL_DYNAPI_PROC(int,SDL_GetDisplayUsableBounds,(int a, SDL_Rect *b),(a,b),return)
|
||||||
|
SDL_DYNAPI_PROC(int,SDL_GetWindowBordersSize,(SDL_Window *a, int *b, int *c, int *d, int *e),(a,b,c,d,e),return)
|
||||||
|
|
|
@ -206,6 +206,7 @@ struct SDL_VideoDevice
|
||||||
void (*SetWindowSize) (_THIS, SDL_Window * window);
|
void (*SetWindowSize) (_THIS, SDL_Window * window);
|
||||||
void (*SetWindowMinimumSize) (_THIS, SDL_Window * window);
|
void (*SetWindowMinimumSize) (_THIS, SDL_Window * window);
|
||||||
void (*SetWindowMaximumSize) (_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 (*ShowWindow) (_THIS, SDL_Window * window);
|
void (*ShowWindow) (_THIS, SDL_Window * window);
|
||||||
void (*HideWindow) (_THIS, SDL_Window * window);
|
void (*HideWindow) (_THIS, SDL_Window * window);
|
||||||
void (*RaiseWindow) (_THIS, SDL_Window * window);
|
void (*RaiseWindow) (_THIS, SDL_Window * window);
|
||||||
|
|
|
@ -1907,6 +1907,28 @@ SDL_SetWindowMinimumSize(SDL_Window * window, int min_w, int min_h)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
SDL_GetWindowBordersSize(SDL_Window * window, int *top, int *left, int *bottom, int *right)
|
||||||
|
{
|
||||||
|
int dummy = 0;
|
||||||
|
|
||||||
|
if (!top) { top = &dummy; }
|
||||||
|
if (!left) { left = &dummy; }
|
||||||
|
if (!right) { right = &dummy; }
|
||||||
|
if (!bottom) { bottom = &dummy; }
|
||||||
|
|
||||||
|
/* Always initialize, so applications don't have to care */
|
||||||
|
*top = *left = *bottom = *right = 0;
|
||||||
|
|
||||||
|
CHECK_WINDOW_MAGIC(window, -1);
|
||||||
|
|
||||||
|
if (!_this->GetWindowBordersSize) {
|
||||||
|
return SDL_Unsupported();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _this->GetWindowBordersSize(_this, window, top, left, bottom, right);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SDL_GetWindowMinimumSize(SDL_Window * window, int *min_w, int *min_h)
|
SDL_GetWindowMinimumSize(SDL_Window * window, int *min_w, int *min_h)
|
||||||
{
|
{
|
||||||
|
|
|
@ -232,6 +232,7 @@ X11_CreateDevice(int devindex)
|
||||||
device->SetWindowSize = X11_SetWindowSize;
|
device->SetWindowSize = X11_SetWindowSize;
|
||||||
device->SetWindowMinimumSize = X11_SetWindowMinimumSize;
|
device->SetWindowMinimumSize = X11_SetWindowMinimumSize;
|
||||||
device->SetWindowMaximumSize = X11_SetWindowMaximumSize;
|
device->SetWindowMaximumSize = X11_SetWindowMaximumSize;
|
||||||
|
device->GetWindowBordersSize = X11_GetWindowBordersSize;
|
||||||
device->ShowWindow = X11_ShowWindow;
|
device->ShowWindow = X11_ShowWindow;
|
||||||
device->HideWindow = X11_HideWindow;
|
device->HideWindow = X11_HideWindow;
|
||||||
device->RaiseWindow = X11_RaiseWindow;
|
device->RaiseWindow = X11_RaiseWindow;
|
||||||
|
|
|
@ -895,6 +895,34 @@ X11_SetWindowSize(_THIS, SDL_Window * window)
|
||||||
X11_XFlush(display);
|
X11_XFlush(display);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
X11_GetWindowBordersSize(_THIS, SDL_Window * window, int *top, int *left, int *bottom, int *right)
|
||||||
|
{
|
||||||
|
SDL_WindowData *data = (SDL_WindowData *)window->driverdata;
|
||||||
|
Display *display = data->videodata->display;
|
||||||
|
Atom _NET_FRAME_EXTENTS = X11_XInternAtom(display, "_NET_FRAME_EXTENTS", 0);
|
||||||
|
Atom type;
|
||||||
|
int format;
|
||||||
|
unsigned long nitems, bytes_after;
|
||||||
|
unsigned char *property;
|
||||||
|
int result = -1;
|
||||||
|
|
||||||
|
if (X11_XGetWindowProperty(display, data->xwindow, _NET_FRAME_EXTENTS,
|
||||||
|
0, 16, 0, XA_CARDINAL, &type, &format,
|
||||||
|
&nitems, &bytes_after, &property) == Success) {
|
||||||
|
if (type != None && nitems == 4) {
|
||||||
|
*left = (int) (((long*)property)[0]);
|
||||||
|
*right = (int) (((long*)property)[1]);
|
||||||
|
*top = (int) (((long*)property)[2]);
|
||||||
|
*bottom = (int) (((long*)property)[3]);
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
X11_XFree(property);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
X11_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered)
|
X11_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered)
|
||||||
{
|
{
|
||||||
|
|
|
@ -79,6 +79,7 @@ extern void X11_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon);
|
||||||
extern void X11_SetWindowPosition(_THIS, SDL_Window * window);
|
extern void X11_SetWindowPosition(_THIS, SDL_Window * window);
|
||||||
extern void X11_SetWindowMinimumSize(_THIS, SDL_Window * window);
|
extern void X11_SetWindowMinimumSize(_THIS, SDL_Window * window);
|
||||||
extern void X11_SetWindowMaximumSize(_THIS, SDL_Window * window);
|
extern void X11_SetWindowMaximumSize(_THIS, SDL_Window * window);
|
||||||
|
extern int X11_GetWindowBordersSize(_THIS, SDL_Window * window, int *top, int *left, int *bottom, int *right);
|
||||||
extern void X11_SetWindowSize(_THIS, SDL_Window * window);
|
extern void X11_SetWindowSize(_THIS, SDL_Window * window);
|
||||||
extern void X11_ShowWindow(_THIS, SDL_Window * window);
|
extern void X11_ShowWindow(_THIS, SDL_Window * window);
|
||||||
extern void X11_HideWindow(_THIS, SDL_Window * window);
|
extern void X11_HideWindow(_THIS, SDL_Window * window);
|
||||||
|
|
Loading…
Reference in a new issue