Wayland: Use HiDPI cursors on decorations

master
Emmanuel Gil Peyrot ago%!(EXTRA string=7 years) committed by linkmauve
parent 321062833a
commit e0b83bbe8d
  1. 22
      src/wl_init.c
  2. 1
      src/wl_window.c

@ -122,15 +122,24 @@ static void pointerHandleLeave(void* data,
_glfwInputCursorEnter(window, GLFW_FALSE);
}
static void setCursor(const char* name)
static void setCursor(_GLFWwindow* window, const char* name)
{
struct wl_buffer* buffer;
struct wl_cursor* cursor;
struct wl_cursor_image* image;
struct wl_surface* surface = _glfw.wl.cursorSurface;
struct wl_cursor_theme* theme = _glfw.wl.cursorTheme;
int scale = 1;
cursor = wl_cursor_theme_get_cursor(_glfw.wl.cursorTheme,
name);
if (window->wl.scale > 1 && _glfw.wl.cursorThemeHiDPI)
{
// We only support up to scale=2 for now, since libwayland-cursor
// requires us to load a different theme for each size.
scale = 2;
theme = _glfw.wl.cursorThemeHiDPI;
}
cursor = wl_cursor_theme_get_cursor(theme, name);
if (!cursor)
{
_glfwInputError(GLFW_PLATFORM_ERROR,
@ -148,8 +157,9 @@ static void setCursor(const char* name)
return;
wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.pointerSerial,
surface,
image->hotspot_x,
image->hotspot_y);
image->hotspot_x / scale,
image->hotspot_y / scale);
wl_surface_set_buffer_scale(surface, scale);
wl_surface_attach(surface, buffer, 0, 0);
wl_surface_damage(surface, 0, 0,
image->width, image->height);
@ -212,7 +222,7 @@ static void pointerHandleMotion(void* data,
default:
assert(0);
}
setCursor(cursorName);
setCursor(window, cursorName);
}
static void pointerHandleButton(void* data,

@ -721,6 +721,7 @@ setCursorImage(_GLFWcursorWayland* cursorWayland)
surface,
cursorWayland->xhot,
cursorWayland->yhot);
wl_surface_set_buffer_scale(surface, 1);
wl_surface_attach(surface, buffer, 0, 0);
wl_surface_damage(surface, 0, 0,
cursorWayland->width, cursorWayland->height);

Loading…
Cancel
Save