From 0f67cd0cd04e8149ad4a22412eaa848d69144fcf Mon Sep 17 00:00:00 2001 From: Bradford Hovinen Date: Fri, 22 Dec 2000 16:09:04 +0000 Subject: [PATCH] Prescale the pixbuf before a tiled composite 2000-12-22 Bradford Hovinen * capplets/new-background-properties/applier.c (renderer_render_wallpaper): Prescale the pixbuf before a tiled composite --- ChangeLog | 6 +++++ capplets/background/applier.c | 50 ++++++++++++++++++++++++++++++----- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 75fd631c5..a940239da 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2000-12-22 Bradford Hovinen + + * capplets/new-background-properties/applier.c + (renderer_render_wallpaper): Prescale the pixbuf before a tiled + composite + 2000-12-21 Bradford Hovinen * capplets/new-background-properties/applier.c (set_root_pixmap): diff --git a/capplets/background/applier.c b/capplets/background/applier.c index 46ebce8ba..f57ee93fa 100644 --- a/capplets/background/applier.c +++ b/capplets/background/applier.c @@ -95,6 +95,7 @@ struct _Renderer guchar *gradient_data; GdkPixbuf *wallpaper_pixbuf; /* Alias only */ + GdkPixbuf *prescaled_pixbuf; /* For tiled on preview */ GdkPixbuf *pixbuf; Pixmap pixmap; }; @@ -731,6 +732,18 @@ renderer_render_wallpaper (Renderer *renderer) &renderer->wwidth, &renderer->wheight, &renderer->srcx, &renderer->srcy); + if (renderer->prefs->wallpaper_type == WPTYPE_TILED && + renderer->wwidth != renderer->pwidth && + renderer->wheight != renderer->pheight) + renderer->prescaled_pixbuf = + gdk_pixbuf_scale_simple + (renderer->wallpaper_pixbuf, + renderer->wwidth, + renderer->wheight, + GDK_INTERP_BILINEAR); + else + renderer->prescaled_pixbuf = NULL; + if (renderer->prefs->adjust_opacity) { guint alpha_value; guint32 colorv; @@ -757,6 +770,20 @@ renderer_render_wallpaper (Renderer *renderer) scalex, scaley, GDK_INTERP_BILINEAR, alpha_value); + else if (renderer->wwidth != + renderer->pwidth && + renderer->wheight != + renderer->pheight) + tile_composite + (renderer->prescaled_pixbuf, + renderer->pixbuf, + renderer->wx, renderer->wy, + renderer->wwidth, + renderer->wheight, + renderer->width, + renderer->height, + 1.0, 1.0, + alpha_value); else tile_composite (renderer->wallpaper_pixbuf, @@ -810,12 +837,20 @@ renderer_render_wallpaper (Renderer *renderer) if (renderer->pixbuf != NULL) gdk_pixbuf_unref (renderer->pixbuf); - renderer->pixbuf = - gdk_pixbuf_scale_simple - (renderer->wallpaper_pixbuf, - renderer->wwidth, - renderer->wheight, - GDK_INTERP_BILINEAR); + if (renderer->prescaled_pixbuf != + renderer->wallpaper_pixbuf) + { + renderer->pixbuf = + gdk_pixbuf_scale_simple + (renderer->wallpaper_pixbuf, + renderer->wwidth, + renderer->wheight, + GDK_INTERP_BILINEAR); + } else { + renderer->pixbuf = + renderer->prescaled_pixbuf; + gdk_pixbuf_ref (renderer->pixbuf); + } } } else { if (render_gradient_p (renderer, renderer->prefs)) { @@ -834,6 +869,9 @@ renderer_render_wallpaper (Renderer *renderer) gdk_pixbuf_ref (renderer->pixbuf); } } + + if (renderer->prescaled_pixbuf != NULL) + gdk_pixbuf_unref (renderer->prescaled_pixbuf); } }