[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