x11: Premultiply custom cursor image alpha

As with Wayland, X11 expects cursor pixels to have the alpha
premultiplied, so lets convert the non-premultiplied pixels to
premultiplied pixels.

Fixes #353.
Closes #707.
This commit is contained in:
Jonas Ådahl 2016-02-17 13:53:57 +08:00 committed by Camilla Berglund
parent 71c72db1e3
commit 9160a7ceb3

View File

@ -690,10 +690,12 @@ Cursor _glfwCreateCursorX11(const GLFWimage* image, int xhot, int yhot)
for (i = 0; i < image->width * image->height; i++, target++, source += 4) for (i = 0; i < image->width * image->height; i++, target++, source += 4)
{ {
*target = (source[3] << 24) | unsigned char alpha = source[3];
(source[0] << 16) |
(source[1] << 8) | *target = (alpha << 24) |
source[2]; (_glfwMultiplyAlpha(alpha, source[0]) << 16) |
(_glfwMultiplyAlpha(alpha, source[1]) << 8) |
_glfwMultiplyAlpha(alpha, source[2]);
} }
cursor = XcursorImageLoadCursor(_glfw.x11.display, native); cursor = XcursorImageLoadCursor(_glfw.x11.display, native);