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)
{
*target = (source[3] << 24) |
(source[0] << 16) |
(source[1] << 8) |
source[2];
unsigned char alpha = source[3];
*target = (alpha << 24) |
(_glfwMultiplyAlpha(alpha, source[0]) << 16) |
(_glfwMultiplyAlpha(alpha, source[1]) << 8) |
_glfwMultiplyAlpha(alpha, source[2]);
}
cursor = XcursorImageLoadCursor(_glfw.x11.display, native);