Implement setOpacity on X11

This commit is contained in:
WebFreak001 2018-03-06 19:37:09 +01:00
parent 3c7ad66389
commit a08a809158
1 changed files with 11 additions and 1 deletions

View File

@ -1562,13 +1562,15 @@ class SimpleWindow : CapableOfHandlingNativeEvent, CapableOfBeingDrawnUpon {
} else static assert(0);
}
/// Sets the window opacity. On X11 (currently not implemented) this will require a compositor to be running. On windows the WindowFlags.extraComposite must be set at window creation.
/// Sets the window opacity. On X11 this requires a compositor to be running. On windows the WindowFlags.extraComposite must be set at window creation.
void opacity(double opacity) @property
in {
assert(opacity >= 0 && opacity <= 1);
} body {
version (Windows) {
impl.setOpacity(cast(ubyte)(255 * opacity));
} else version (X11) {
impl.setOpacity(cast(uint)(uint.max * opacity));
} else throw new NotYetImplementedException();
}
@ -8895,6 +8897,14 @@ version(X11) {
flushGui();
}
void setOpacity (uint opacity) {
if (opacity == uint.max)
XDeleteProperty(display, window, XInternAtom(display, "_NET_WM_WINDOW_OPACITY".ptr, false));
else
XChangeProperty(display, window, XInternAtom(display, "_NET_WM_WINDOW_OPACITY".ptr, false),
XA_CARDINAL, 32, PropModeReplace, &opacity, 1);
}
void createWindow(int width, int height, string title, in OpenGlOptions opengl, SimpleWindow parent) {
display = XDisplayConnection.get();
auto screen = DefaultScreen(display);