From 3febaff1e4f99e21bc4eebe57c800c6bb56524b6 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 12 Jun 2005 06:04:40 +0000 Subject: [PATCH] Try to handle the situation that the borders are larger than the area we 2005-06-12 Matthias Clasen * pixbuf-render.c (theme_pixbuf_render): Try to handle the situation that the borders are larger than the area we are rendering. (#169731, Benjamin Otte) --- modules/engines/pixbuf/ChangeLog | 7 +++++++ modules/engines/pixbuf/pixbuf-render.c | 18 ++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/modules/engines/pixbuf/ChangeLog b/modules/engines/pixbuf/ChangeLog index a84900da7b..011dd7b938 100644 --- a/modules/engines/pixbuf/ChangeLog +++ b/modules/engines/pixbuf/ChangeLog @@ -1,3 +1,10 @@ +2005-06-12 Matthias Clasen + + * pixbuf-render.c (theme_pixbuf_render): Try to + handle the situation that the borders are larger + than the area we are rendering. (#169731, + Benjamin Otte) + 2005-01-08 Matthias Clasen * === Released 2.6.1 === diff --git a/modules/engines/pixbuf/pixbuf-render.c b/modules/engines/pixbuf/pixbuf-render.c index 03ec060834..4d965a057c 100644 --- a/modules/engines/pixbuf/pixbuf-render.c +++ b/modules/engines/pixbuf/pixbuf-render.c @@ -696,6 +696,9 @@ theme_pixbuf_render (ThemePixbuf *theme_pb, if (theme_pb->stretch) { + if (component_mask & COMPONENT_ALL) + component_mask = (COMPONENT_ALL - 1) & ~component_mask; + src_x[0] = 0; src_x[1] = theme_pb->border_left; src_x[2] = pixbuf_width - theme_pb->border_right; @@ -711,13 +714,24 @@ theme_pixbuf_render (ThemePixbuf *theme_pb, dest_x[2] = x + width - theme_pb->border_right; dest_x[3] = x + width; + if (dest_x[1] > dest_x[2]) + { + component_mask &= ~(COMPONENT_NORTH | COMPONENT_SOUTH | COMPONENT_CENTER); + dest_x[1] = dest_x[2] = (dest_x[1] + dest_x[2]) / 2; + } + dest_y[0] = y; dest_y[1] = y + theme_pb->border_top; dest_y[2] = y + height - theme_pb->border_bottom; dest_y[3] = y + height; - if (component_mask & COMPONENT_ALL) - component_mask = (COMPONENT_ALL - 1) & ~component_mask; + if (dest_y[1] > dest_y[2]) + { + component_mask &= ~(COMPONENT_EAST | COMPONENT_WEST | COMPONENT_CENTER); + dest_y[1] = dest_y[2] = (dest_y[1] + dest_y[2]) / 2; + } + + #define RENDER_COMPONENT(X1,X2,Y1,Y2) \ pixbuf_render (pixbuf, theme_pb->hints[Y1][X1], window, mask, clip_rect, \