[Glamor] [PATCH] glamor: Fix coordinates handling for composite source/mask pictures
Alex Deucher
alexdeucher at gmail.com
Thu Jan 16 07:12:25 PST 2014
On Wed, Jan 15, 2014 at 4:17 PM, Anthony Waters <awaters1 at gmail.com> wrote:
> 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:
> https://bugs.freedesktop.org/show_bug.cgi?id=64738
>
> Signed-Off-by: Anthony Waters <awaters1 at gmail.com>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> src/glamor_render.c | 16 ++++++++--------
> 1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/src/glamor_render.c b/src/glamor_render.c
> index 76a571f..21b8085 100644
> --- a/src/glamor_render.c
> +++ b/src/glamor_render.c
> @@ -1590,16 +1590,16 @@ 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,
> + x_source,
> + y_source,
> width, height);
> if (!temp_src) {
> temp_src = source;
> goto out;
> }
> 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
> @@ -1614,16 +1614,16 @@ 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,
> + x_mask,
> + y_mask,
> width, height);
> if (!temp_mask) {
> temp_mask = mask;
> goto out;
> }
> 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.
> --
> 1.8.5.2
>
More information about the Glamor
mailing list