[mutter/gbsneto/content: 6/11] shaped-texture: Draw pipeline relative to alloc
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gbsneto/content: 6/11] shaped-texture: Draw pipeline relative to alloc
- Date: Fri, 12 Jul 2019 17:36:48 +0000 (UTC)
commit 915d4ed6b4480d42cbf9df36ef2d26c8bac9cb9e
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 feb85aa2e..107713842 100644
--- a/src/compositor/meta-shaped-texture.c
+++ b/src/compositor/meta-shaped-texture.c
@@ -445,17 +445,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];
@@ -468,10 +478,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]