cursor-renderer/native: Deduplicate scale and transform code

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4093>
This commit is contained in:
Robert Mader 2024-06-30 23:40:47 +02:00
parent e32a788179
commit 129a71d0ca

View File

@ -840,17 +840,36 @@ load_scaled_and_transformed_cursor_sprite (MetaCursorRendererNative *native,
MetaCrtcKms *crtc_kms, MetaCrtcKms *crtc_kms,
ClutterColorState *target_color_state, ClutterColorState *target_color_state,
MetaCursorSprite *cursor_sprite, MetaCursorSprite *cursor_sprite,
float relative_scale,
MtkMonitorTransform relative_transform,
uint8_t *data, uint8_t *data,
int width, int width,
int height, int height,
int rowstride, int rowstride,
uint32_t gbm_format) uint32_t gbm_format)
{ {
MetaCursorRendererNativePrivate *priv =
meta_cursor_renderer_native_get_instance_private (native);
MetaCrtc *crtc = META_CRTC (crtc_kms);
MetaLogicalMonitor *logical_monitor;
MetaMonitor *monitor;
MtkMonitorTransform logical_transform;
float relative_scale;
MtkMonitorTransform relative_transform;
ClutterColorState *cursor_color_state; ClutterColorState *cursor_color_state;
gboolean retval = FALSE; gboolean retval = FALSE;
monitor = meta_output_get_monitor (meta_crtc_get_outputs (crtc)->data);
logical_monitor = meta_monitor_get_logical_monitor (monitor);
relative_scale = calculate_cursor_crtc_sprite_scale (priv->backend,
cursor_sprite,
logical_monitor);
logical_transform = meta_logical_monitor_get_transform (logical_monitor);
relative_transform = mtk_monitor_transform_transform (
mtk_monitor_transform_invert (
meta_cursor_sprite_get_texture_transform (cursor_sprite)),
meta_monitor_logical_to_crtc_transform (monitor, logical_transform));
cursor_color_state = meta_cursor_sprite_get_color_state (cursor_sprite); cursor_color_state = meta_cursor_sprite_get_color_state (cursor_sprite);
if (!G_APPROX_VALUE (relative_scale, 1.f, FLT_EPSILON) || if (!G_APPROX_VALUE (relative_scale, 1.f, FLT_EPSILON) ||
@ -965,29 +984,9 @@ realize_cursor_sprite_from_wl_buffer_for_crtc (MetaCursorRenderer *renderer
{ {
int rowstride = wl_shm_buffer_get_stride (shm_buffer); int rowstride = wl_shm_buffer_get_stride (shm_buffer);
uint8_t *buffer_data; uint8_t *buffer_data;
float relative_scale;
MtkMonitorTransform relative_transform;
uint32_t gbm_format; uint32_t gbm_format;
MetaCrtc *crtc = META_CRTC (crtc_kms);
MetaLogicalMonitor *logical_monitor;
MetaMonitor *monitor;
MtkMonitorTransform logical_transform;
gboolean retval; gboolean retval;
monitor = meta_output_get_monitor (meta_crtc_get_outputs (crtc)->data);
logical_monitor = meta_monitor_get_logical_monitor (monitor);
relative_scale = calculate_cursor_crtc_sprite_scale (priv->backend,
cursor_sprite,
logical_monitor);
logical_transform = meta_logical_monitor_get_transform (logical_monitor);
relative_transform = mtk_monitor_transform_transform (
mtk_monitor_transform_invert (
meta_cursor_sprite_get_texture_transform (cursor_sprite)),
meta_monitor_logical_to_crtc_transform (monitor, logical_transform));
wl_shm_buffer_begin_access (shm_buffer); wl_shm_buffer_begin_access (shm_buffer);
buffer_data = wl_shm_buffer_get_data (shm_buffer); buffer_data = wl_shm_buffer_get_data (shm_buffer);
@ -1011,8 +1010,6 @@ realize_cursor_sprite_from_wl_buffer_for_crtc (MetaCursorRenderer *renderer
crtc_kms, crtc_kms,
target_color_state, target_color_state,
cursor_sprite, cursor_sprite,
relative_scale,
relative_transform,
buffer_data, buffer_data,
width, width,
height, height,
@ -1112,29 +1109,8 @@ realize_cursor_sprite_from_xcursor_for_crtc (MetaCursorRenderer *renderer,
MetaCursorSpriteXcursor *sprite_xcursor) MetaCursorSpriteXcursor *sprite_xcursor)
{ {
MetaCursorRendererNative *native = META_CURSOR_RENDERER_NATIVE (renderer); MetaCursorRendererNative *native = META_CURSOR_RENDERER_NATIVE (renderer);
MetaCursorRendererNativePrivate *priv =
meta_cursor_renderer_native_get_instance_private (native);
MetaCursorSprite *cursor_sprite = META_CURSOR_SPRITE (sprite_xcursor); MetaCursorSprite *cursor_sprite = META_CURSOR_SPRITE (sprite_xcursor);
MetaCrtc *crtc = META_CRTC (crtc_kms);
MetaLogicalMonitor *logical_monitor;
MetaMonitor *monitor;
MtkMonitorTransform logical_transform;
XcursorImage *xc_image; XcursorImage *xc_image;
float relative_scale;
MtkMonitorTransform relative_transform;
monitor = meta_output_get_monitor (meta_crtc_get_outputs (crtc)->data);
logical_monitor = meta_monitor_get_logical_monitor (monitor);
relative_scale = calculate_cursor_crtc_sprite_scale (priv->backend,
cursor_sprite,
logical_monitor);
logical_transform = meta_logical_monitor_get_transform (logical_monitor);
relative_transform = mtk_monitor_transform_transform (
mtk_monitor_transform_invert (
meta_cursor_sprite_get_texture_transform (cursor_sprite)),
meta_monitor_logical_to_crtc_transform (monitor, logical_transform));
xc_image = meta_cursor_sprite_xcursor_get_current_image (sprite_xcursor); xc_image = meta_cursor_sprite_xcursor_get_current_image (sprite_xcursor);
@ -1142,8 +1118,6 @@ realize_cursor_sprite_from_xcursor_for_crtc (MetaCursorRenderer *renderer,
crtc_kms, crtc_kms,
target_color_state, target_color_state,
cursor_sprite, cursor_sprite,
relative_scale,
relative_transform,
(uint8_t *) xc_image->pixels, (uint8_t *) xc_image->pixels,
xc_image->width, xc_image->width,
xc_image->height, xc_image->height,