app: explicitly pass around the offsets of the view renderer's temp_bufs

and don't use temp_buf->x and ->y.
This commit is contained in:
Michael Natterer
2012-04-10 15:50:36 +02:00
parent b78d6c1d5d
commit 1bcab234ab
5 changed files with 59 additions and 26 deletions

View File

@ -76,6 +76,8 @@ static cairo_pattern_t *
static void gimp_view_render_temp_buf_to_surface (GimpViewRenderer *renderer, static void gimp_view_render_temp_buf_to_surface (GimpViewRenderer *renderer,
GimpTempBuf *temp_buf, GimpTempBuf *temp_buf,
gint temp_buf_x,
gint temp_buf_y,
gint channel, gint channel,
GimpViewBG inside_bg, GimpViewBG inside_bg,
GimpViewBG outside_bg, GimpViewBG outside_bg,
@ -794,16 +796,21 @@ void
gimp_view_renderer_render_temp_buf_simple (GimpViewRenderer *renderer, gimp_view_renderer_render_temp_buf_simple (GimpViewRenderer *renderer,
GimpTempBuf *temp_buf) 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 (GIMP_IS_VIEW_RENDERER (renderer));
g_return_if_fail (temp_buf != NULL); g_return_if_fail (temp_buf != NULL);
if (temp_buf->width < renderer->width) 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) 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_CHECKS,
GIMP_VIEW_BG_WHITE); GIMP_VIEW_BG_WHITE);
} }
@ -811,6 +818,8 @@ gimp_view_renderer_render_temp_buf_simple (GimpViewRenderer *renderer,
void void
gimp_view_renderer_render_temp_buf (GimpViewRenderer *renderer, gimp_view_renderer_render_temp_buf (GimpViewRenderer *renderer,
GimpTempBuf *temp_buf, GimpTempBuf *temp_buf,
gint temp_buf_x,
gint temp_buf_y,
gint channel, gint channel,
GimpViewBG inside_bg, GimpViewBG inside_bg,
GimpViewBG outside_bg) GimpViewBG outside_bg)
@ -828,6 +837,8 @@ gimp_view_renderer_render_temp_buf (GimpViewRenderer *renderer,
gimp_view_render_temp_buf_to_surface (renderer, gimp_view_render_temp_buf_to_surface (renderer,
temp_buf, temp_buf,
temp_buf_x,
temp_buf_y,
channel, channel,
inside_bg, inside_bg,
outside_bg, outside_bg,
@ -921,6 +932,8 @@ gimp_view_renderer_render_stock (GimpViewRenderer *renderer,
static void static void
gimp_view_render_temp_buf_to_surface (GimpViewRenderer *renderer, gimp_view_render_temp_buf_to_surface (GimpViewRenderer *renderer,
GimpTempBuf *temp_buf, GimpTempBuf *temp_buf,
gint temp_buf_x,
gint temp_buf_y,
gint channel, gint channel,
GimpViewBG inside_bg, GimpViewBG inside_bg,
GimpViewBG outside_bg, GimpViewBG outside_bg,
@ -974,7 +987,7 @@ gimp_view_render_temp_buf_to_surface (GimpViewRenderer *renderer,
if (! gimp_rectangle_intersect (0, 0, if (! gimp_rectangle_intersect (0, 0,
surface_width, surface_height, surface_width, surface_height,
temp_buf->x, temp_buf->y, temp_buf_x, temp_buf_y,
temp_buf->width, temp_buf->height, temp_buf->width, temp_buf->height,
&x, &y, &x, &y,
&width, &height)) &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); dest_buffer = gimp_cairo_image_surface_create_buffer (alpha_surface);
gegl_buffer_copy (src_buffer, gegl_buffer_copy (src_buffer,
GEGL_RECTANGLE (x - temp_buf->x, GEGL_RECTANGLE (x - temp_buf_x,
y - temp_buf->y, y - temp_buf_y,
width, height), width, height),
dest_buffer, dest_buffer,
GEGL_RECTANGLE (0, 0, 0, 0)); 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); dest_buffer = gimp_cairo_image_surface_create_buffer (surface);
gegl_buffer_copy (src_buffer, gegl_buffer_copy (src_buffer,
GEGL_RECTANGLE (x - temp_buf->x, GEGL_RECTANGLE (x - temp_buf_x,
y - temp_buf->y, y - temp_buf_y,
width, height), width, height),
dest_buffer, dest_buffer,
GEGL_RECTANGLE (x, y, 0, 0)); 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); bytes = babl_format_get_bytes_per_pixel (temp_buf->format);
rowstride = temp_buf->width * bytes; rowstride = temp_buf->width * bytes;
src = gimp_temp_buf_get_data (temp_buf) + ((y - temp_buf->y) * rowstride + src = gimp_temp_buf_get_data (temp_buf) + ((y - temp_buf_y) * rowstride +
(x - temp_buf->x) * bytes); (x - temp_buf_x) * bytes);
dest = cairo_image_surface_get_data (surface); dest = cairo_image_surface_get_data (surface);
dest_stride = cairo_image_surface_get_stride (surface); dest_stride = cairo_image_surface_get_stride (surface);

View File

@ -144,6 +144,8 @@ void gimp_view_renderer_render_temp_buf_simple (GimpViewRenderer *renderer,
GimpTempBuf *temp_buf); GimpTempBuf *temp_buf);
void gimp_view_renderer_render_temp_buf (GimpViewRenderer *renderer, void gimp_view_renderer_render_temp_buf (GimpViewRenderer *renderer,
GimpTempBuf *temp_buf, GimpTempBuf *temp_buf,
gint temp_buf_x,
gint temp_buf_y,
gint channel, gint channel,
GimpViewBG inside_bg, GimpViewBG inside_bg,
GimpViewBG outside_bg); GimpViewBG outside_bg);

View File

@ -89,6 +89,8 @@ gimp_view_renderer_brush_render (GimpViewRenderer *renderer,
{ {
GimpViewRendererBrush *renderbrush = GIMP_VIEW_RENDERER_BRUSH (renderer); GimpViewRendererBrush *renderbrush = GIMP_VIEW_RENDERER_BRUSH (renderer);
GimpTempBuf *temp_buf; GimpTempBuf *temp_buf;
gint temp_buf_x = 0;
gint temp_buf_y = 0;
if (renderbrush->pipe_timeout_id) if (renderbrush->pipe_timeout_id)
{ {
@ -102,14 +104,16 @@ gimp_view_renderer_brush_render (GimpViewRenderer *renderer,
renderer->height); renderer->height);
if (temp_buf->width < renderer->width) 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) 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) 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,
GIMP_VIEW_BG_WHITE); GIMP_VIEW_BG_WHITE);
@ -126,7 +130,9 @@ gimp_view_renderer_brush_render (GimpViewRenderer *renderer,
return; 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,
GIMP_VIEW_BG_WHITE); GIMP_VIEW_BG_WHITE);
@ -141,6 +147,8 @@ gimp_view_renderer_brush_render_timeout (gpointer data)
GimpBrushPipe *brush_pipe; GimpBrushPipe *brush_pipe;
GimpBrush *brush; GimpBrush *brush;
GimpTempBuf *temp_buf; GimpTempBuf *temp_buf;
gint temp_buf_x = 0;
gint temp_buf_y = 0;
if (! renderer->viewable) if (! renderer->viewable)
{ {
@ -166,12 +174,14 @@ gimp_view_renderer_brush_render_timeout (gpointer data)
renderer->height); renderer->height);
if (temp_buf->width < renderer->width) 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) 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,
GIMP_VIEW_BG_WHITE); GIMP_VIEW_BG_WHITE);

View File

@ -199,36 +199,41 @@ gimp_view_renderer_drawable_render (GimpViewRenderer *renderer,
if (render_buf) if (render_buf)
{ {
gint render_buf_x = 0;
gint render_buf_y = 0;
if (image && ! renderer->is_popup) if (image && ! renderer->is_popup)
{ {
if (offset_x != 0) if (offset_x != 0)
render_buf->x = render_buf_x =
ROUND ((((gdouble) renderer->width / ROUND ((((gdouble) renderer->width /
(gdouble) gimp_image_get_width (image)) * (gdouble) gimp_image_get_width (image)) *
(gdouble) offset_x)); (gdouble) offset_x));
if (offset_y != 0) if (offset_y != 0)
render_buf->y = render_buf_y =
ROUND ((((gdouble) renderer->height / ROUND ((((gdouble) renderer->height /
(gdouble) gimp_image_get_height (image)) * (gdouble) gimp_image_get_height (image)) *
(gdouble) offset_y)); (gdouble) offset_y));
if (scaling_up) if (scaling_up)
{ {
if (render_buf->x < 0) render_buf->x = 0; if (render_buf_x < 0) render_buf_x = 0;
if (render_buf->y < 0) render_buf->y = 0; if (render_buf_y < 0) render_buf_y = 0;
} }
} }
else else
{ {
if (view_width < width) if (view_width < width)
render_buf->x = (width - view_width) / 2; render_buf_x = (width - view_width) / 2;
if (view_height < height) 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_VIEW_BG_CHECKS); GIMP_VIEW_BG_CHECKS);
gimp_temp_buf_unref (render_buf); gimp_temp_buf_unref (render_buf);

View File

@ -120,6 +120,8 @@ gimp_view_renderer_image_render (GimpViewRenderer *renderer,
if (render_buf) if (render_buf)
{ {
gint render_buf_x = 0;
gint render_buf_y = 0;
gint component_index = -1; gint component_index = -1;
/* xresolution != yresolution */ /* xresolution != yresolution */
@ -134,16 +136,17 @@ gimp_view_renderer_image_render (GimpViewRenderer *renderer,
} }
if (view_width < renderer->width) 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) 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) if (rendererimage->channel != -1)
component_index = component_index =
gimp_image_get_component_index (image, rendererimage->channel); gimp_image_get_component_index (image, rendererimage->channel);
gimp_view_renderer_render_temp_buf (renderer, render_buf, gimp_view_renderer_render_temp_buf (renderer, render_buf,
render_buf_x, render_buf_y,
component_index, component_index,
GIMP_VIEW_BG_CHECKS, GIMP_VIEW_BG_CHECKS,
GIMP_VIEW_BG_WHITE); GIMP_VIEW_BG_WHITE);