[mutter/gbsneto/content: 6/11] shaped-texture: Draw pipeline relative to alloc
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gbsneto/content: 6/11] shaped-texture: Draw pipeline relative to alloc
- Date: Fri, 23 Aug 2019 13:23:47 +0000 (UTC)
commit 425e65049b398a85c5579d8b421d4fdbf0778984
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Thu Dec 27 14:16:50 2018 -0200
shaped-texture: Draw pipeline relative to alloc
By implementing ClutterContent, it is expected that
MetaShapedTexture can draw on any actor. However,
right now this is not possible, since it assumes
that the drawing coordinates and sizes of the actor
are synchronized with its own reported width and
height.
It mistakenly draws, for example, when setting an
actor's content to it. There is no way to trigger
this wrong behavior right now, but it will become
a problem in the future where we can collect the
paint nodes of MetaShapedTexture as part of other
ClutterContent implementations.
Use the allocation box passed by the actor to draw
the pipelines of MetaShapedTexture.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/409
src/compositor/meta-shaped-texture.c | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
---
diff --git a/src/compositor/meta-shaped-texture.c b/src/compositor/meta-shaped-texture.c
index 667d43d56..308d9361a 100644
--- a/src/compositor/meta-shaped-texture.c
+++ b/src/compositor/meta-shaped-texture.c
@@ -447,17 +447,27 @@ paint_clipped_rectangle_node (MetaShapedTexture *stex,
ClutterActorBox *alloc)
{
g_autoptr (ClutterPaintNode) node = NULL;
+ float ratio_h, ratio_v;
+ float x1, y1, x2, y2;
float coords[8];
float alloc_width;
float alloc_height;
+ ratio_h = clutter_actor_box_get_width (alloc) / (float) stex->dst_width;
+ ratio_v = clutter_actor_box_get_height (alloc) / (float) stex->dst_height;
+
+ x1 = alloc->x1 + rect->x * ratio_h;
+ y1 = alloc->y1 + rect->y * ratio_v;
+ x2 = alloc->x1 + (rect->x + rect->width) * ratio_h;
+ y2 = alloc->y1 + (rect->y + rect->height) * ratio_v;
+
alloc_width = alloc->x2 - alloc->x1;
alloc_height = alloc->y2 - alloc->y1;
- coords[0] = rect->x / alloc_width;
- coords[1] = rect->y / alloc_height;
- coords[2] = (rect->x + rect->width) / alloc_width;
- coords[3] = (rect->y + rect->height) / alloc_height;
+ coords[0] = rect->x / alloc_width * ratio_h;
+ coords[1] = rect->y / alloc_height * ratio_v;
+ coords[2] = (rect->x + rect->width) / alloc_width * ratio_h;
+ coords[3] = (rect->y + rect->height) / alloc_height * ratio_v;
coords[4] = coords[0];
coords[5] = coords[1];
@@ -470,10 +480,10 @@ paint_clipped_rectangle_node (MetaShapedTexture *stex,
clutter_paint_node_add_multitexture_rectangle (node,
&(ClutterActorBox) {
- .x1 = rect->x,
- .x2 = rect->x + rect->width,
- .y1 = rect->y,
- .y2 = rect->y + rect->height,
+ .x1 = x1,
+ .y1 = y1,
+ .x2 = x2,
+ .y2 = y2,
},
coords, 8);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]