Commit 4e9aabb6 authored by Anthony Waters's avatar Anthony Waters Committed by Eric Anholt

glamor: Fix coordinates handling for composite source/mask pictures

There were actually two issues with the original code I believe, the
first is that the call to glamor_convert_gradient_picture wasn't
properly referencing the coordinates of the source/mask pictures.  The
second, was that the updated references (x_temp/y_temp) were also
improperly set, they should always be 0 because the temp pictures are
new ones that start at (0, 0).  The reason it worked in certain cases
and it didn't in others (notably the tray icons) was due to the
numbers working out based on the call to glamor_composite.  In the
cases that it did work extent->x1 would equal x_dest and extent->y1
would equal y_dest, making it so what was actually passed into
glamor_convert_gradient_picture and the settings for x_temp/y_temp
were correct.  However, for the case when extent->x1 wouldn't equal
x_dest and extent->y1 wouldn't equal y_dest (for example with the tray
icons) then the wrong parameters get passed into
glamor_convert_gradient_picture and x_temp/y_temp are set improperly.

Fixes issues with tray icons not appearing properly in certain cases.

Bug: default avatarAnthony Waters <>
Reviewed-by: default avatarAlex Deucher <>
Reviewed-by: default avatarZhigang Gong <>
Signed-off-by: Michel Dänzer's avatarMichel Dänzer <>
Signed-off-by: Eric Anholt's avatarEric Anholt <>
parent 5062b4fa
......@@ -1450,8 +1450,8 @@ glamor_composite_clipped_region(CARD8 op,
|| source_pixmap->drawable.height != height)))) {
temp_src =
glamor_convert_gradient_picture(screen, source,
extent->x1 + x_source - x_dest,
extent->y1 + y_source - y_dest,
width, height);
if (!temp_src) {
temp_src = source;
......@@ -1459,8 +1459,8 @@ glamor_composite_clipped_region(CARD8 op,
temp_src_priv =
glamor_get_pixmap_private((PixmapPtr) (temp_src->pDrawable));
x_temp_src = -extent->x1 + x_dest;
y_temp_src = -extent->y1 + y_dest;
x_temp_src = 0;
y_temp_src = 0;
if (mask
......@@ -1474,8 +1474,8 @@ glamor_composite_clipped_region(CARD8 op,
* to do reduce one convertion. */
temp_mask =
glamor_convert_gradient_picture(screen, mask,
extent->x1 + x_mask - x_dest,
extent->y1 + y_mask - y_dest,
width, height);
if (!temp_mask) {
temp_mask = mask;
......@@ -1483,8 +1483,8 @@ glamor_composite_clipped_region(CARD8 op,
temp_mask_priv =
glamor_get_pixmap_private((PixmapPtr) (temp_mask->pDrawable));
x_temp_mask = -extent->x1 + x_dest;
y_temp_mask = -extent->y1 + y_dest;
x_temp_mask = 0;
y_temp_mask = 0;
/* Do two-pass PictOpOver componentAlpha, until we enable
* dual source color blending.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment