[mutter] wayland/dnd-surface: Scale DnD-surface-actor content if necessary
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] wayland/dnd-surface: Scale DnD-surface-actor content if necessary
- Date: Fri, 27 Sep 2019 16:06:12 +0000 (UTC)
commit 25c1a85384980a494c90c8eea53d8cacbfcdd3d3
Author: Robert Mader <robert mader posteo de>
Date: Fri Sep 6 16:11:03 2019 +0200
wayland/dnd-surface: Scale DnD-surface-actor content if necessary
Since the recent clutter-content work, legacy scaling (in contrast
to the new stage-view-scaling) only applies to surfaces that belong
to a window. This broke scaling of DnD surfaces.
As a workaround, apply the same scaling on DnD-surface-actors until
we use stage-view-scaling by default and can remove this again.
Also: small corrections of geometry calculation
https://gitlab.gnome.org/GNOME/mutter/merge_requests/780
src/wayland/meta-wayland-dnd-surface.c | 26 ++++++++++++++------------
1 file changed, 14 insertions(+), 12 deletions(-)
---
diff --git a/src/wayland/meta-wayland-dnd-surface.c b/src/wayland/meta-wayland-dnd-surface.c
index 31bd68fd5..2020309a8 100644
--- a/src/wayland/meta-wayland-dnd-surface.c
+++ b/src/wayland/meta-wayland-dnd-surface.c
@@ -29,6 +29,7 @@ struct _MetaWaylandSurfaceRoleDND
MetaWaylandActorSurface parent;
int32_t pending_offset_x;
int32_t pending_offset_y;
+ int geometry_scale;
};
G_DEFINE_TYPE (MetaWaylandSurfaceRoleDND,
@@ -106,29 +107,29 @@ dnd_subsurface_sync_actor_state (MetaWaylandActorSurface *actor_surface)
META_WAYLAND_SURFACE_ROLE (actor_surface);
MetaWaylandSurfaceRoleDND *surface_role_dnd =
META_WAYLAND_SURFACE_ROLE_DND (surface_role);
- MetaWaylandSurface *surface =
- meta_wayland_surface_role_get_surface (surface_role);
MetaWaylandActorSurfaceClass *actor_surface_class =
META_WAYLAND_ACTOR_SURFACE_CLASS (meta_wayland_surface_role_dnd_parent_class);
- float geometry_scale;
- float actor_scale;
+ int geometry_scale;
float anchor_x;
float anchor_y;
- float new_anchor_x;
- float new_anchor_y;
g_return_if_fail (META_IS_FEEDBACK_ACTOR (feedback_actor));
geometry_scale =
meta_wayland_actor_surface_get_geometry_scale (actor_surface);
- actor_scale = geometry_scale / surface->scale;
meta_feedback_actor_get_anchor (feedback_actor, &anchor_x, &anchor_y);
- new_anchor_x = anchor_x - surface_role_dnd->pending_offset_x / actor_scale;
- new_anchor_y = anchor_y - surface_role_dnd->pending_offset_y / actor_scale;
- meta_feedback_actor_set_anchor (feedback_actor,
- new_anchor_x,
- new_anchor_y);
+ anchor_x -= surface_role_dnd->pending_offset_x * geometry_scale;
+ anchor_y -= surface_role_dnd->pending_offset_y * geometry_scale;
+ meta_feedback_actor_set_anchor (feedback_actor, anchor_x, anchor_y);
+
+ if (surface_role_dnd->geometry_scale != geometry_scale)
+ {
+ surface_role_dnd->geometry_scale = geometry_scale;
+ clutter_actor_set_scale (CLUTTER_ACTOR (surface_actor),
+ geometry_scale,
+ geometry_scale);
+ }
actor_surface_class->sync_actor_state (actor_surface);
}
@@ -136,6 +137,7 @@ dnd_subsurface_sync_actor_state (MetaWaylandActorSurface *actor_surface)
static void
meta_wayland_surface_role_dnd_init (MetaWaylandSurfaceRoleDND *role)
{
+ role->geometry_scale = 1;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]