diff --git a/app/widgets/gimpviewrenderer.c b/app/widgets/gimpviewrenderer.c index f989bc4146..92a2dda137 100644 --- a/app/widgets/gimpviewrenderer.c +++ b/app/widgets/gimpviewrenderer.c @@ -76,6 +76,8 @@ static cairo_pattern_t * static void gimp_view_render_temp_buf_to_surface (GimpViewRenderer *renderer, GimpTempBuf *temp_buf, + gint temp_buf_x, + gint temp_buf_y, gint channel, GimpViewBG inside_bg, GimpViewBG outside_bg, @@ -794,16 +796,21 @@ void gimp_view_renderer_render_temp_buf_simple (GimpViewRenderer *renderer, GimpTempBuf *temp_buf) { + gint temp_buf_x = 0; + gint temp_buf_y = 0; + g_return_if_fail (GIMP_IS_VIEW_RENDERER (renderer)); g_return_if_fail (temp_buf != NULL); if (temp_buf->width < renderer->width) - temp_buf->x = (renderer->width - temp_buf->width) / 2; + temp_buf_x = (renderer->width - temp_buf->width) / 2; if (temp_buf->height < renderer->height) - temp_buf->y = (renderer->height - temp_buf->height) / 2; + temp_buf_y = (renderer->height - temp_buf->height) / 2; - gimp_view_renderer_render_temp_buf (renderer, temp_buf, -1, + gimp_view_renderer_render_temp_buf (renderer, temp_buf, + temp_buf_x, temp_buf_y, + -1, GIMP_VIEW_BG_CHECKS, GIMP_VIEW_BG_WHITE); } @@ -811,6 +818,8 @@ gimp_view_renderer_render_temp_buf_simple (GimpViewRenderer *renderer, void gimp_view_renderer_render_temp_buf (GimpViewRenderer *renderer, GimpTempBuf *temp_buf, + gint temp_buf_x, + gint temp_buf_y, gint channel, GimpViewBG inside_bg, GimpViewBG outside_bg) @@ -828,6 +837,8 @@ gimp_view_renderer_render_temp_buf (GimpViewRenderer *renderer, gimp_view_render_temp_buf_to_surface (renderer, temp_buf, + temp_buf_x, + temp_buf_y, channel, inside_bg, outside_bg, @@ -921,6 +932,8 @@ gimp_view_renderer_render_stock (GimpViewRenderer *renderer, static void gimp_view_render_temp_buf_to_surface (GimpViewRenderer *renderer, GimpTempBuf *temp_buf, + gint temp_buf_x, + gint temp_buf_y, gint channel, GimpViewBG inside_bg, GimpViewBG outside_bg, @@ -974,7 +987,7 @@ gimp_view_render_temp_buf_to_surface (GimpViewRenderer *renderer, if (! gimp_rectangle_intersect (0, 0, surface_width, surface_height, - temp_buf->x, temp_buf->y, + temp_buf_x, temp_buf_y, temp_buf->width, temp_buf->height, &x, &y, &width, &height)) @@ -1015,8 +1028,8 @@ gimp_view_render_temp_buf_to_surface (GimpViewRenderer *renderer, dest_buffer = gimp_cairo_image_surface_create_buffer (alpha_surface); gegl_buffer_copy (src_buffer, - GEGL_RECTANGLE (x - temp_buf->x, - y - temp_buf->y, + GEGL_RECTANGLE (x - temp_buf_x, + y - temp_buf_y, width, height), dest_buffer, GEGL_RECTANGLE (0, 0, 0, 0)); @@ -1044,8 +1057,8 @@ gimp_view_render_temp_buf_to_surface (GimpViewRenderer *renderer, dest_buffer = gimp_cairo_image_surface_create_buffer (surface); gegl_buffer_copy (src_buffer, - GEGL_RECTANGLE (x - temp_buf->x, - y - temp_buf->y, + GEGL_RECTANGLE (x - temp_buf_x, + y - temp_buf_y, width, height), dest_buffer, GEGL_RECTANGLE (x, y, 0, 0)); @@ -1070,8 +1083,8 @@ gimp_view_render_temp_buf_to_surface (GimpViewRenderer *renderer, bytes = babl_format_get_bytes_per_pixel (temp_buf->format); rowstride = temp_buf->width * bytes; - src = gimp_temp_buf_get_data (temp_buf) + ((y - temp_buf->y) * rowstride + - (x - temp_buf->x) * bytes); + src = gimp_temp_buf_get_data (temp_buf) + ((y - temp_buf_y) * rowstride + + (x - temp_buf_x) * bytes); dest = cairo_image_surface_get_data (surface); dest_stride = cairo_image_surface_get_stride (surface); diff --git a/app/widgets/gimpviewrenderer.h b/app/widgets/gimpviewrenderer.h index 1a52edc3ab..711739ff2b 100644 --- a/app/widgets/gimpviewrenderer.h +++ b/app/widgets/gimpviewrenderer.h @@ -144,6 +144,8 @@ void gimp_view_renderer_render_temp_buf_simple (GimpViewRenderer *renderer, GimpTempBuf *temp_buf); void gimp_view_renderer_render_temp_buf (GimpViewRenderer *renderer, GimpTempBuf *temp_buf, + gint temp_buf_x, + gint temp_buf_y, gint channel, GimpViewBG inside_bg, GimpViewBG outside_bg); diff --git a/app/widgets/gimpviewrendererbrush.c b/app/widgets/gimpviewrendererbrush.c index 9f4e956772..36f8046584 100644 --- a/app/widgets/gimpviewrendererbrush.c +++ b/app/widgets/gimpviewrendererbrush.c @@ -89,6 +89,8 @@ gimp_view_renderer_brush_render (GimpViewRenderer *renderer, { GimpViewRendererBrush *renderbrush = GIMP_VIEW_RENDERER_BRUSH (renderer); GimpTempBuf *temp_buf; + gint temp_buf_x = 0; + gint temp_buf_y = 0; if (renderbrush->pipe_timeout_id) { @@ -102,14 +104,16 @@ gimp_view_renderer_brush_render (GimpViewRenderer *renderer, renderer->height); if (temp_buf->width < renderer->width) - temp_buf->x = (renderer->width - temp_buf->width) / 2; + temp_buf_x = (renderer->width - temp_buf->width) / 2; if (temp_buf->height < renderer->height) - temp_buf->y = (renderer->height - temp_buf->height) / 2; + temp_buf_y = (renderer->height - temp_buf->height) / 2; if (renderer->is_popup) { - gimp_view_renderer_render_temp_buf (renderer, temp_buf, -1, + gimp_view_renderer_render_temp_buf (renderer, temp_buf, + temp_buf_x, temp_buf_y, + -1, GIMP_VIEW_BG_WHITE, GIMP_VIEW_BG_WHITE); @@ -126,7 +130,9 @@ gimp_view_renderer_brush_render (GimpViewRenderer *renderer, return; } - gimp_view_renderer_render_temp_buf (renderer, temp_buf, -1, + gimp_view_renderer_render_temp_buf (renderer, temp_buf, + temp_buf_x, temp_buf_y, + -1, GIMP_VIEW_BG_WHITE, GIMP_VIEW_BG_WHITE); @@ -141,6 +147,8 @@ gimp_view_renderer_brush_render_timeout (gpointer data) GimpBrushPipe *brush_pipe; GimpBrush *brush; GimpTempBuf *temp_buf; + gint temp_buf_x = 0; + gint temp_buf_y = 0; if (! renderer->viewable) { @@ -166,12 +174,14 @@ gimp_view_renderer_brush_render_timeout (gpointer data) renderer->height); if (temp_buf->width < renderer->width) - temp_buf->x = (renderer->width - temp_buf->width) / 2; + temp_buf_x = (renderer->width - temp_buf->width) / 2; if (temp_buf->height < renderer->height) - temp_buf->y = (renderer->height - temp_buf->height) / 2; + temp_buf_y = (renderer->height - temp_buf->height) / 2; - gimp_view_renderer_render_temp_buf (renderer, temp_buf, -1, + gimp_view_renderer_render_temp_buf (renderer, temp_buf, + temp_buf_x, temp_buf_y, + -1, GIMP_VIEW_BG_WHITE, GIMP_VIEW_BG_WHITE); diff --git a/app/widgets/gimpviewrendererdrawable.c b/app/widgets/gimpviewrendererdrawable.c index f3e67b9eff..7ffd8142d6 100644 --- a/app/widgets/gimpviewrendererdrawable.c +++ b/app/widgets/gimpviewrendererdrawable.c @@ -199,36 +199,41 @@ gimp_view_renderer_drawable_render (GimpViewRenderer *renderer, if (render_buf) { + gint render_buf_x = 0; + gint render_buf_y = 0; + if (image && ! renderer->is_popup) { if (offset_x != 0) - render_buf->x = + render_buf_x = ROUND ((((gdouble) renderer->width / (gdouble) gimp_image_get_width (image)) * (gdouble) offset_x)); if (offset_y != 0) - render_buf->y = + render_buf_y = ROUND ((((gdouble) renderer->height / (gdouble) gimp_image_get_height (image)) * (gdouble) offset_y)); if (scaling_up) { - if (render_buf->x < 0) render_buf->x = 0; - if (render_buf->y < 0) render_buf->y = 0; + if (render_buf_x < 0) render_buf_x = 0; + if (render_buf_y < 0) render_buf_y = 0; } } else { if (view_width < width) - render_buf->x = (width - view_width) / 2; + render_buf_x = (width - view_width) / 2; if (view_height < height) - render_buf->y = (height - view_height) / 2; + render_buf_y = (height - view_height) / 2; } - gimp_view_renderer_render_temp_buf (renderer, render_buf, -1, + gimp_view_renderer_render_temp_buf (renderer, render_buf, + render_buf_x, render_buf_y, + -1, GIMP_VIEW_BG_CHECKS, GIMP_VIEW_BG_CHECKS); gimp_temp_buf_unref (render_buf); diff --git a/app/widgets/gimpviewrendererimage.c b/app/widgets/gimpviewrendererimage.c index 3b59b35605..e5e289d30e 100644 --- a/app/widgets/gimpviewrendererimage.c +++ b/app/widgets/gimpviewrendererimage.c @@ -120,6 +120,8 @@ gimp_view_renderer_image_render (GimpViewRenderer *renderer, if (render_buf) { + gint render_buf_x = 0; + gint render_buf_y = 0; gint component_index = -1; /* xresolution != yresolution */ @@ -134,16 +136,17 @@ gimp_view_renderer_image_render (GimpViewRenderer *renderer, } if (view_width < renderer->width) - render_buf->x = (renderer->width - view_width) / 2; + render_buf_x = (renderer->width - view_width) / 2; if (view_height < renderer->height) - render_buf->y = (renderer->height - view_height) / 2; + render_buf_y = (renderer->height - view_height) / 2; if (rendererimage->channel != -1) component_index = gimp_image_get_component_index (image, rendererimage->channel); gimp_view_renderer_render_temp_buf (renderer, render_buf, + render_buf_x, render_buf_y, component_index, GIMP_VIEW_BG_CHECKS, GIMP_VIEW_BG_WHITE);