#include "art_rgba_svp.h"
#include "unused.h"
-static void art_rgba_fill_run (art_u8 * linebuf, art_u8 r, art_u8 g, art_u8 b, int n);
-static void art_rgba_run_alpha (art_u8 * linebuf, art_u8 r, art_u8 g, art_u8 b, int alpha, int n);
+static void art_rgba_fill_run(
+ art_u8 * linebuf,
+ art_u8 r,
+ art_u8 g,
+ art_u8 b,
+ int n);
+static void art_rgba_run_alpha(
+ art_u8 * linebuf,
+ art_u8 r,
+ art_u8 g,
+ art_u8 b,
+ int alpha,
+ int n);
typedef struct _ArtRgbaSVPAlphaData ArtRgbaSVPAlphaData;
struct _ArtRgbaSVPAlphaData {
- int alphatab[256];
- art_u8 r, g, b, alpha;
- art_u8 *buf;
- int rowstride;
- int libart_x0, libart_x1;
+ int alphatab[256];
+ art_u8 r, g, b, alpha;
+ art_u8 *buf;
+ int rowstride;
+ int libart_x0, libart_x1;
};
-static void
-art_rgba_svp_alpha_callback (void *callback_data, int UNUSED(y),
- int start, ArtSVPRenderAAStep *steps, int n_steps)
+static void art_rgba_svp_alpha_callback(
+ void *callback_data,
+ int UNUSED(y),
+ int start,
+ ArtSVPRenderAAStep * steps,
+ int n_steps)
{
- ArtRgbaSVPAlphaData *data = callback_data;
- art_u8 *linebuf;
- int run_x0, run_x1;
- art_u32 running_sum = start;
- int libart_x0, libart_x1;
- int k;
- art_u8 r, g, b;
- int *alphatab;
- int alpha;
-
- linebuf = data->buf;
- libart_x0 = data->libart_x0;
- libart_x1 = data->libart_x1;
-
- r = data->r;
- g = data->g;
- b = data->b;
- alphatab = data->alphatab;
-
- if (n_steps > 0)
- {
- run_x1 = steps[0].x;
- if (run_x1 > libart_x0)
- {
- alpha = (running_sum >> 16) & 0xff;
- if (alpha)
- art_rgba_run_alpha (linebuf,
- r, g, b, alphatab[alpha],
- run_x1 - libart_x0);
- }
-
- /* render the steps into tmpbuf */
- for (k = 0; k < n_steps - 1; k++)
- {
- running_sum += steps[k].delta;
- run_x0 = run_x1;
- run_x1 = steps[k + 1].x;
- if (run_x1 > run_x0)
- {
- alpha = (running_sum >> 16) & 0xff;
- if (alpha)
- art_rgba_run_alpha (linebuf + (run_x0 - libart_x0) * 4,
- r, g, b, alphatab[alpha],
- run_x1 - run_x0);
- }
- }
- running_sum += steps[k].delta;
- if (libart_x1 > run_x1)
- {
- alpha = (running_sum >> 16) & 0xff;
- if (alpha)
- art_rgba_run_alpha (linebuf + (run_x1 - libart_x0) * 4,
- r, g, b, alphatab[alpha],
- libart_x1 - run_x1);
- }
- }
- else
- {
- alpha = (running_sum >> 16) & 0xff;
- if (alpha)
- art_rgba_run_alpha (linebuf,
- r, g, b, alphatab[alpha],
- libart_x1 - libart_x0);
+ ArtRgbaSVPAlphaData *data = callback_data;
+ art_u8 *linebuf;
+ int run_x0, run_x1;
+ art_u32 running_sum = start;
+ int libart_x0, libart_x1;
+ int k;
+ art_u8 r, g, b;
+ int *alphatab;
+ int alpha;
+
+ linebuf = data->buf;
+ libart_x0 = data->libart_x0;
+ libart_x1 = data->libart_x1;
+
+ r = data->r;
+ g = data->g;
+ b = data->b;
+ alphatab = data->alphatab;
+
+ if (n_steps > 0) {
+ run_x1 = steps[0].x;
+ if (run_x1 > libart_x0) {
+ alpha = (running_sum >> 16) & 0xff;
+ if (alpha)
+ art_rgba_run_alpha(linebuf,
+ r, g, b, alphatab[alpha],
+ run_x1 - libart_x0);
+ }
+
+ /* render the steps into tmpbuf */
+ for (k = 0; k < n_steps - 1; k++) {
+ running_sum += steps[k].delta;
+ run_x0 = run_x1;
+ run_x1 = steps[k + 1].x;
+ if (run_x1 > run_x0) {
+ alpha = (running_sum >> 16) & 0xff;
+ if (alpha)
+ art_rgba_run_alpha(linebuf + (run_x0 - libart_x0) * 4,
+ r, g, b, alphatab[alpha],
+ run_x1 - run_x0);
+ }
+ }
+ running_sum += steps[k].delta;
+ if (libart_x1 > run_x1) {
+ alpha = (running_sum >> 16) & 0xff;
+ if (alpha)
+ art_rgba_run_alpha(linebuf + (run_x1 - libart_x0) * 4,
+ r, g, b, alphatab[alpha],
+ libart_x1 - run_x1);
+ }
+ } else {
+ alpha = (running_sum >> 16) & 0xff;
+ if (alpha)
+ art_rgba_run_alpha(linebuf,
+ r, g, b, alphatab[alpha],
+ libart_x1 - libart_x0);
}
- data->buf += data->rowstride;
+ data->buf += data->rowstride;
}
-static void
-art_rgba_svp_alpha_opaque_callback (void *callback_data, int UNUSED(y),
- int start,
- ArtSVPRenderAAStep *steps, int n_steps)
+static void art_rgba_svp_alpha_opaque_callback(
+ void *callback_data,
+ int UNUSED(y),
+ int start,
+ ArtSVPRenderAAStep * steps,
+ int n_steps)
{
- ArtRgbaSVPAlphaData *data = callback_data;
- art_u8 *linebuf;
- int run_x0, run_x1;
- art_u32 running_sum = start;
- int libart_x0, libart_x1;
- int k;
- art_u8 r, g, b;
- int *alphatab;
- int alpha;
-
- linebuf = data->buf;
- libart_x0 = data->libart_x0;
- libart_x1 = data->libart_x1;
-
- r = data->r;
- g = data->g;
- b = data->b;
- alphatab = data->alphatab;
-
- if (n_steps > 0)
- {
- run_x1 = steps[0].x;
- if (run_x1 > libart_x0)
- {
- alpha = running_sum >> 16;
- if (alpha)
- {
- if (alpha >= 255)
- art_rgba_fill_run (linebuf,
- r, g, b,
- run_x1 - libart_x0);
- else
- art_rgba_run_alpha (linebuf,
- r, g, b, alphatab[alpha],
- run_x1 - libart_x0);
- }
- }
-
- /* render the steps into tmpbuf */
- for (k = 0; k < n_steps - 1; k++)
- {
- running_sum += steps[k].delta;
- run_x0 = run_x1;
- run_x1 = steps[k + 1].x;
- if (run_x1 > run_x0)
- {
- alpha = running_sum >> 16;
- if (alpha)
- {
- if (alpha >= 255)
- art_rgba_fill_run (linebuf + (run_x0 - libart_x0) * 4,
- r, g, b,
- run_x1 - run_x0);
- else
- art_rgba_run_alpha (linebuf + (run_x0 - libart_x0) * 4,
- r, g, b, alphatab[alpha],
- run_x1 - run_x0);
- }
- }
- }
- running_sum += steps[k].delta;
- if (libart_x1 > run_x1)
- {
- alpha = running_sum >> 16;
- if (alpha)
- {
- if (alpha >= 255)
- art_rgba_fill_run (linebuf + (run_x1 - libart_x0) * 4,
- r, g, b,
- libart_x1 - run_x1);
- else
- art_rgba_run_alpha (linebuf + (run_x1 - libart_x0) * 4,
- r, g, b, alphatab[alpha],
- libart_x1 - run_x1);
- }
- }
- }
- else
- {
- alpha = running_sum >> 16;
- if (alpha)
- {
- if (alpha >= 255)
- art_rgba_fill_run (linebuf,
- r, g, b,
- libart_x1 - libart_x0);
- else
- art_rgba_run_alpha (linebuf,
- r, g, b, alphatab[alpha],
- libart_x1 - libart_x0);
- }
+ ArtRgbaSVPAlphaData *data = callback_data;
+ art_u8 *linebuf;
+ int run_x0, run_x1;
+ art_u32 running_sum = start;
+ int libart_x0, libart_x1;
+ int k;
+ art_u8 r, g, b;
+ int *alphatab;
+ int alpha;
+
+ linebuf = data->buf;
+ libart_x0 = data->libart_x0;
+ libart_x1 = data->libart_x1;
+
+ r = data->r;
+ g = data->g;
+ b = data->b;
+ alphatab = data->alphatab;
+
+ if (n_steps > 0) {
+ run_x1 = steps[0].x;
+ if (run_x1 > libart_x0) {
+ alpha = running_sum >> 16;
+ if (alpha) {
+ if (alpha >= 255)
+ art_rgba_fill_run(linebuf, r, g, b, run_x1 - libart_x0);
+ else
+ art_rgba_run_alpha(linebuf,
+ r, g, b, alphatab[alpha],
+ run_x1 - libart_x0);
+ }
+ }
+
+ /* render the steps into tmpbuf */
+ for (k = 0; k < n_steps - 1; k++) {
+ running_sum += steps[k].delta;
+ run_x0 = run_x1;
+ run_x1 = steps[k + 1].x;
+ if (run_x1 > run_x0) {
+ alpha = running_sum >> 16;
+ if (alpha) {
+ if (alpha >= 255)
+ art_rgba_fill_run(linebuf + (run_x0 - libart_x0) * 4,
+ r, g, b, run_x1 - run_x0);
+ else
+ art_rgba_run_alpha(linebuf + (run_x0 - libart_x0) * 4,
+ r, g, b, alphatab[alpha],
+ run_x1 - run_x0);
+ }
+ }
+ }
+ running_sum += steps[k].delta;
+ if (libart_x1 > run_x1) {
+ alpha = running_sum >> 16;
+ if (alpha) {
+ if (alpha >= 255)
+ art_rgba_fill_run(linebuf + (run_x1 - libart_x0) * 4,
+ r, g, b, libart_x1 - run_x1);
+ else
+ art_rgba_run_alpha(linebuf + (run_x1 - libart_x0) * 4,
+ r, g, b, alphatab[alpha],
+ libart_x1 - run_x1);
+ }
+ }
+ } else {
+ alpha = running_sum >> 16;
+ if (alpha) {
+ if (alpha >= 255)
+ art_rgba_fill_run(linebuf, r, g, b, libart_x1 - libart_x0);
+ else
+ art_rgba_run_alpha(linebuf,
+ r, g, b, alphatab[alpha],
+ libart_x1 - libart_x0);
+ }
}
- data->buf += data->rowstride;
+ data->buf += data->rowstride;
}
/**
* according to the rule in @alphagamma, or default to linear if
* @alphagamma is NULL.
**/
-void
-gnome_print_art_rgba_svp_alpha (const ArtSVP *svp,
- int libart_x0, int libart_y0, int libart_x1, int libart_y1,
- art_u32 rgba,
- art_u8 *buf, int rowstride,
- ArtAlphaGamma UNUSED(*alphagamma))
+void gnome_print_art_rgba_svp_alpha(
+ const ArtSVP * svp,
+ int libart_x0,
+ int libart_y0,
+ int libart_x1,
+ int libart_y1,
+ art_u32 rgba,
+ art_u8 * buf,
+ int rowstride,
+ ArtAlphaGamma UNUSED(*alphagamma))
{
- ArtRgbaSVPAlphaData data;
- int r, g, b, alpha;
- int i;
- int a, da;
-
- r = rgba >> 24;
- g = (rgba >> 16) & 0xff;
- b = (rgba >> 8) & 0xff;
- alpha = rgba & 0xff;
-
- data.r = r;
- data.g = g;
- data.b = b;
- data.alpha = alpha;
-
- a = 0x8000;
- da = (alpha * 66051 + 0x80) >> 8; /* 66051 equals 2 ^ 32 / (255 * 255) */
-
- for (i = 0; i < 256; i++)
- {
- data.alphatab[i] = a >> 16;
- a += da;
+ ArtRgbaSVPAlphaData data;
+ int r, g, b, alpha;
+ int i;
+ int a, da;
+
+ r = rgba >> 24;
+ g = (rgba >> 16) & 0xff;
+ b = (rgba >> 8) & 0xff;
+ alpha = rgba & 0xff;
+
+ data.r = r;
+ data.g = g;
+ data.b = b;
+ data.alpha = alpha;
+
+ a = 0x8000;
+ da = (alpha * 66051 + 0x80) >> 8; /* 66051 equals 2 ^ 32 / (255 * 255) */
+
+ for (i = 0; i < 256; i++) {
+ data.alphatab[i] = a >> 16;
+ a += da;
}
- data.buf = buf;
- data.rowstride = rowstride;
- data.libart_x0 = libart_x0;
- data.libart_x1 = libart_x1;
- if (alpha == 255)
- art_svp_render_aa (svp, libart_x0, libart_y0, libart_x1, libart_y1, art_rgba_svp_alpha_opaque_callback,
- &data);
- else
- art_svp_render_aa (svp, libart_x0, libart_y0, libart_x1, libart_y1, art_rgba_svp_alpha_callback, &data);
+ data.buf = buf;
+ data.rowstride = rowstride;
+ data.libart_x0 = libart_x0;
+ data.libart_x1 = libart_x1;
+ if (alpha == 255)
+ art_svp_render_aa(svp, libart_x0, libart_y0, libart_x1, libart_y1,
+ art_rgba_svp_alpha_opaque_callback, &data);
+ else
+ art_svp_render_aa(svp, libart_x0, libart_y0, libart_x1, libart_y1,
+ art_rgba_svp_alpha_callback, &data);
}
-static void
-art_rgba_fill_run (art_u8 * buf, art_u8 r, art_u8 g, art_u8 b, int n)
+static void art_rgba_fill_run(
+ art_u8 * buf,
+ art_u8 r,
+ art_u8 g,
+ art_u8 b,
+ int n)
{
- int i;
-
- for (i = 0; i < n; i++) {
- * buf++ = r;
- * buf++ = g;
- * buf++ = b;
- * buf++ = 255;
- }
+ int i;
+
+ for (i = 0; i < n; i++) {
+ *buf++ = r;
+ *buf++ = g;
+ *buf++ = b;
+ *buf++ = 255;
+ }
}
/* fixme: this */
-static void
-art_rgba_run_alpha (art_u8 * buf, art_u8 r, art_u8 g, art_u8 b, int alpha, int n)
+static void art_rgba_run_alpha(
+ art_u8 * buf,
+ art_u8 r,
+ art_u8 g,
+ art_u8 b,
+ int alpha,
+ int n)
{
- int i;
- int br, bg, bb, ba;
- int cr, cg, cb;
-
- for (i = 0; i < n; i++) {
- br = * (buf + 0);
- bg = * (buf + 1);
- bb = * (buf + 2);
- ba = * (buf + 3);
-
- cr = (br * ba + 0x80) >> 8;
- cg = (bg * ba + 0x80) >> 8;
- cb = (bb * ba + 0x80) >> 8;
-
- * buf++ = cr + (((r - cr) * alpha + 0x80) >> 8);
- * buf++ = cg + (((g - cg) * alpha + 0x80) >> 8);
- * buf++ = cb + (((b - cb) * alpha + 0x80) >> 8);
- * buf++ = ba + (((255 - ba) * alpha + 0x80) >> 8);
- }
+ int i;
+ int br, bg, bb, ba;
+ int cr, cg, cb;
+
+ for (i = 0; i < n; i++) {
+ br = *(buf + 0);
+ bg = *(buf + 1);
+ bb = *(buf + 2);
+ ba = *(buf + 3);
+
+ cr = (br * ba + 0x80) >> 8;
+ cg = (bg * ba + 0x80) >> 8;
+ cb = (bb * ba + 0x80) >> 8;
+
+ *buf++ = cr + (((r - cr) * alpha + 0x80) >> 8);
+ *buf++ = cg + (((g - cg) * alpha + 0x80) >> 8);
+ *buf++ = cb + (((b - cb) * alpha + 0x80) >> 8);
+ *buf++ = ba + (((255 - ba) * alpha + 0x80) >> 8);
+ }
}
-
-