aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/duckstation/gl/x11_window.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/duckstation/gl/x11_window.h')
-rw-r--r--src/frontend/duckstation/gl/x11_window.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/frontend/duckstation/gl/x11_window.h b/src/frontend/duckstation/gl/x11_window.h
new file mode 100644
index 0000000..aff38b7
--- /dev/null
+++ b/src/frontend/duckstation/gl/x11_window.h
@@ -0,0 +1,48 @@
+#pragma once
+#include "../duckstation_compat.h"
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+namespace GL {
+class X11Window
+{
+public:
+ X11Window();
+ ~X11Window();
+
+ ALWAYS_INLINE Window GetWindow() const { return m_window; }
+ ALWAYS_INLINE u32 GetWidth() const { return m_width; }
+ ALWAYS_INLINE u32 GetHeight() const { return m_height; }
+
+ bool Create(Display* display, Window parent_window, const XVisualInfo* vi);
+ void Destroy();
+
+ // Setting a width/height of 0 will use parent dimensions.
+ void Resize(u32 width = 0, u32 height = 0);
+
+private:
+ Display* m_display = nullptr;
+ Window m_parent_window = {};
+ Window m_window = {};
+ Colormap m_colormap = {};
+ u32 m_width = 0;
+ u32 m_height = 0;
+};
+
+// Helper class for managing X errors
+class X11InhibitErrors
+{
+public:
+ X11InhibitErrors();
+ ~X11InhibitErrors();
+
+ ALWAYS_INLINE bool HadError() const { return m_had_error; }
+
+private:
+ static int ErrorHandler(Display* display, XErrorEvent* ee);
+
+ XErrorHandler m_old_handler = {};
+ bool m_had_error = false;
+};
+
+} // namespace GL