GLFW API to check if window is fullscreen

This commit is contained in:
Kovid Goyal 2021-11-11 12:33:12 +05:30
parent b3a9c1a100
commit d95a00df73
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
7 changed files with 29 additions and 2 deletions

View File

@ -2407,6 +2407,14 @@ void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor UNUSED)
updateCursorImage(window); updateCursorImage(window);
} }
bool _glfwPlatformIsFullscreen(_GLFWwindow* w, unsigned int flags) {
NSWindow *window = w->ns.object;
bool traditional = !(flags & 1);
if (traditional && @available(macOS 10.16, *)) return w->ns.in_traditional_fullscreen;
NSWindowStyleMask sm = [window styleMask];
return sm & NSWindowStyleMaskFullScreen;
}
bool _glfwPlatformToggleFullscreen(_GLFWwindow* w, unsigned int flags) { bool _glfwPlatformToggleFullscreen(_GLFWwindow* w, unsigned int flags) {
NSWindow *window = w->ns.object; NSWindow *window = w->ns.object;
bool made_fullscreen = true; bool made_fullscreen = true;

1
glfw/glfw3.h vendored
View File

@ -2752,6 +2752,7 @@ GLFWAPI void glfwWindowHintString(int hint, const char* value);
*/ */
GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share); GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share);
GLFWAPI bool glfwToggleFullscreen(GLFWwindow *window, unsigned int flags); GLFWAPI bool glfwToggleFullscreen(GLFWwindow *window, unsigned int flags);
GLFWAPI bool glfwIsFullscreen(GLFWwindow *window, unsigned int flags);
/*! @brief Destroys the specified window and its context. /*! @brief Destroys the specified window and its context.
* *

1
glfw/internal.h vendored
View File

@ -717,6 +717,7 @@ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, _GLFWmonitor* monitor,
int xpos, int ypos, int width, int height, int xpos, int ypos, int width, int height,
int refreshRate); int refreshRate);
bool _glfwPlatformToggleFullscreen(_GLFWwindow *w, unsigned int flags); bool _glfwPlatformToggleFullscreen(_GLFWwindow *w, unsigned int flags);
bool _glfwPlatformIsFullscreen(_GLFWwindow *w, unsigned int flags);
int _glfwPlatformWindowFocused(_GLFWwindow* window); int _glfwPlatformWindowFocused(_GLFWwindow* window);
int _glfwPlatformWindowOccluded(_GLFWwindow* window); int _glfwPlatformWindowOccluded(_GLFWwindow* window);
int _glfwPlatformWindowIconified(_GLFWwindow* window); int _glfwPlatformWindowIconified(_GLFWwindow* window);

4
glfw/window.c vendored
View File

@ -1058,6 +1058,10 @@ GLFWAPI bool glfwToggleFullscreen(GLFWwindow* wh, unsigned int flags) {
return false; return false;
} }
GLFWAPI bool glfwIsFullscreen(GLFWwindow* wh, unsigned int flags) {
return _glfwPlatformIsFullscreen((_GLFWwindow*)wh, flags);
}
GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* handle, void* pointer) GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* handle, void* pointer)
{ {
_GLFWwindow* window = (_GLFWwindow*) handle; _GLFWwindow* window = (_GLFWwindow*) handle;

8
glfw/wl_window.c vendored
View File

@ -413,9 +413,15 @@ static void setFullscreen(_GLFWwindow* window, _GLFWmonitor* monitor, bool on)
setIdleInhibitor(window, on); setIdleInhibitor(window, on);
} }
bool
_glfwPlatformIsFullscreen(_GLFWwindow *window, unsigned int flags UNUSED) {
return window->wl.toplevel_states & TOPLEVEL_STATE_FULLSCREEN;
}
bool bool
_glfwPlatformToggleFullscreen(_GLFWwindow *window, unsigned int flags UNUSED) { _glfwPlatformToggleFullscreen(_GLFWwindow *window, unsigned int flags UNUSED) {
bool already_fullscreen = window->wl.toplevel_states & TOPLEVEL_STATE_FULLSCREEN; bool already_fullscreen = _glfwPlatformIsFullscreen(window, flags);
setFullscreen(window, NULL, !already_fullscreen); setFullscreen(window, NULL, !already_fullscreen);
return !already_fullscreen; return !already_fullscreen;
} }

5
glfw/x11_window.c vendored
View File

@ -343,6 +343,11 @@ set_fullscreen(_GLFWwindow *window, bool on) {
} }
} }
bool
_glfwPlatformIsFullscreen(_GLFWwindow *window, unsigned int flags UNUSED) {
return is_window_fullscreen(window);
}
bool bool
_glfwPlatformToggleFullscreen(_GLFWwindow *window, unsigned int flags UNUSED) { _glfwPlatformToggleFullscreen(_GLFWwindow *window, unsigned int flags UNUSED) {
bool already_fullscreen = is_window_fullscreen(window); bool already_fullscreen = is_window_fullscreen(window);

View File

@ -592,7 +592,9 @@ static bool
toggle_fullscreen_for_os_window(OSWindow *w) { toggle_fullscreen_for_os_window(OSWindow *w) {
if (w && w->handle) { if (w && w->handle) {
#ifdef __APPLE__ #ifdef __APPLE__
if (!OPT(macos_traditional_fullscreen)) return glfwToggleFullscreen(w->handle, 1); if (!OPT(macos_traditional_fullscreen)) {
return glfwToggleFullscreen(w->handle, 1);
}
#endif #endif
return do_toggle_fullscreen(w); return do_toggle_fullscreen(w);
} }