18 #ifdef JEVOIS_HOST_PRO
36 #include <X11/Xatom.h>
37 #include <X11/Xutil.h>
38 #include <X11/extensions/dpms.h>
41 jevois::VideoDisplayBackendX11::VideoDisplayBackendX11() :
42 jevois::VideoDisplayBackend()
46 jevois::VideoDisplayBackendX11::~VideoDisplayBackendX11()
53 void jevois::VideoDisplayBackendX11::init(
unsigned short w,
unsigned short h,
bool fullscreen)
56 itsX11display = XOpenDisplay(NULL);
57 if (itsX11display ==
nullptr)
LFATAL(
"Cannot open X11 display");
60 Window win_root = DefaultRootWindow(itsX11display);
63 XSetWindowAttributes xattr { };
64 xattr.override_redirect =
false;
67 xattr.event_mask = ExposureMask | KeyPressMask;
70 xattr.background_pixel = XWhitePixel(itsX11display, XDefaultScreen(itsX11display));
73 itsWindow = XCreateWindow(itsX11display, win_root, 0, 0, w,
h, 0,
74 CopyFromParent, InputOutput, CopyFromParent,
75 CWOverrideRedirect | CWEventMask | CWBackPixel, &xattr);
78 XSetStandardProperties(itsX11display, itsWindow, itsName.c_str(), itsName.c_str(), None, NULL, 0, NULL);
81 DPMSDisable(itsX11display);
84 XClearWindow(itsX11display, itsWindow);
85 XMapRaised (itsX11display, itsWindow);
91 Atom wm_state = XInternAtom(itsX11display,
"_NET_WM_STATE",
false);
92 Atom fs = XInternAtom(itsX11display,
"_NET_WM_STATE_FULLSCREEN",
false);
95 fs_event.type = ClientMessage;
96 fs_event.xclient.window = itsWindow;
97 fs_event.xclient.message_type = wm_state;
98 fs_event.xclient.format = 32;
99 fs_event.xclient.data.l[0] = 1;
100 fs_event.xclient.data.l[1] = fs;
101 fs_event.xclient.data.l[2] = 0;
103 XSendEvent(itsX11display, win_root,
false, SubstructureRedirectMask | SubstructureNotifyMask, &fs_event);
111 void jevois::VideoDisplayBackendX11::uninit()
116 DPMSEnable(itsX11display);
119 if (itsWindow) { XDestroyWindow(itsX11display, itsWindow); itsWindow = 0; }
120 XCloseDisplay(itsX11display); itsX11display =
nullptr;
128 bool jevois::VideoDisplayBackendX11::pollEvents(
bool & shouldclose)
131 bool gotsome =
false;
134 while (XPending(itsX11display))
138 XNextEvent(itsX11display, &event);
148 char text[11]; KeySym key_press;
149 int keys = XLookupString(&event.xkey, text, 10, &key_press, 0);
150 if (keys == 1 && text[0] ==
'q') shouldclose =
true;
161 #endif // JEVOIS_HOST_PRO