X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=render%2Fimage.c;h=351a831d655643edff0aaeead2bba86b7206f824;hb=cd12a2eae5b5b72df08d588ac71d1f6cf6725dfb;hp=e0c5540fa0e29b279492c3a0bdfaf40d99fd8257;hpb=f26f23de50cb7941a7702198e3b4d1b2f9de062e;p=chaz%2Fopenbox diff --git a/render/image.c b/render/image.c index e0c5540f..351a831d 100644 --- a/render/image.c +++ b/render/image.c @@ -2,18 +2,12 @@ #include "../kernel/geom.h" #include "image.h" -void image_draw(pixel32 *target, TextureRGBA *rgba, Rect *position, - Rect *surarea) +void image_draw(pixel32 *target, TextureRGBA *rgba, Rect *area) { - gulong *draw = rgba->data; + pixel32 *draw = rgba->data; guint c, i, e, t, sfw, sfh; - sfw = position->width; - sfh = position->height; - - /* it would be nice if this worked, but this function is well broken in - these circumstances. */ - g_assert(position->width == surarea->width && - position->height == surarea->height); + sfw = area->width; + sfh = area->height; g_assert(rgba->data != NULL); @@ -28,7 +22,7 @@ void image_draw(pixel32 *target, TextureRGBA *rgba, Rect *position, /* scale it and cache it */ if (rgba->cache != NULL) g_free(rgba->cache); - rgba->cache = g_new(unsigned long, sfw * sfh); + rgba->cache = g_new(pixel32, sfw * sfh); rgba->cwidth = sfw; rgba->cheight = sfh; for (i = 0, c = 0, e = sfw*sfh; i < e; ++i) { @@ -47,30 +41,31 @@ void image_draw(pixel32 *target, TextureRGBA *rgba, Rect *position, draw = rgba->cache; /* apply the alpha channel */ - for (i = 0, c = 0, t = position->x, e = sfw*sfh; i < e; ++i, ++t) { + for (i = 0, c = 0, t = area->x, e = sfw*sfh; i < e; ++i, ++t) { guchar alpha, r, g, b, bgr, bgg, bgb; - alpha = draw[i] >> 24; - r = draw[i] >> 16; - g = draw[i] >> 8; - b = draw[i]; + alpha = draw[i] >> default_alpha_offset; + r = draw[i] >> default_red_offset; + g = draw[i] >> default_green_offset; + b = draw[i] >> default_blue_offset; if (c >= sfw) { c = 0; - t += surarea->width - sfw; + t += area->width - sfw; } /* background color */ - bgr = target[t] >> default_red_shift; - bgg = target[t] >> default_green_shift; - bgb = target[t] >> default_blue_shift; + bgr = target[t] >> default_red_offset; + bgg = target[t] >> default_green_offset; + bgb = target[t] >> default_blue_offset; r = bgr + (((r - bgr) * alpha) >> 8); g = bgg + (((g - bgg) * alpha) >> 8); b = bgb + (((b - bgb) * alpha) >> 8); - target[t] = (r << default_red_shift) | (g << default_green_shift) | - (b << default_blue_shift); + target[t] = (r << default_red_offset) + | (g << default_green_offset) + | (b << default_blue_offset); } } }