[gthumb: 14/129] added CAIRO_SET_RGB[A] public macros
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb: 14/129] added CAIRO_SET_RGB[A] public macros
- Date: Wed, 27 Apr 2011 20:51:33 +0000 (UTC)
commit 6638643f70011fea952dcf03346f30fd663ef99b
Author: Paolo Bacchilega <paobac src gnome org>
Date: Fri Apr 15 12:08:28 2011 +0200
added CAIRO_SET_RGB[A] public macros
gthumb/cairo-utils.c | 27 +++------------------------
gthumb/cairo-utils.h | 36 ++++++++++++++++++++++++++++++++++++
gthumb/pixbuf-utils.c | 36 ++++++------------------------------
3 files changed, 45 insertions(+), 54 deletions(-)
---
diff --git a/gthumb/cairo-utils.c b/gthumb/cairo-utils.c
index e48a76c..21410e2 100644
--- a/gthumb/cairo-utils.c
+++ b/gthumb/cairo-utils.c
@@ -46,27 +46,6 @@ _gdk_color_to_cairo_color_255 (GdkColor *g_color,
}
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN /* BGRA */
-#define SET_PIXEL(red, green, blue, alpha) \
- s_iter[0] = blue; \
- s_iter[1] = green; \
- s_iter[2] = red; \
- s_iter[3] = alpha;
-#elif G_BYTE_ORDER == G_BIG_ENDIAN /* ARGB */
-#define SET_PIXEL(red, green, blue, alpha) \
- s_iter[0] = alpha; \
- s_iter[1] = red; \
- s_iter[2] = green; \
- s_iter[3] = blue;
-#else /* PDP endianness: RABG */
-#define SET_PIXEL(red, green, blue, alpha) \
- s_iter[0] = red; \
- s_iter[1] = alpha; \
- s_iter[2] = blue; \
- s_iter[3] = green;
-#endif
-
-
void
_cairo_paint_full_gradient (cairo_surface_t *surface,
GdkColor *h_color1,
@@ -116,7 +95,7 @@ _cairo_paint_full_gradient (cairo_surface_t *surface,
green = hcolor1.g * x_y + hcolor2.g * x_1_y + vcolor1.g * y_1_x + vcolor2.g * _1_x_1_y;
blue = hcolor1.b * x_y + hcolor2.b * x_1_y + vcolor1.b * y_1_x + vcolor2.b * _1_x_1_y;
- SET_PIXEL (red, green, blue, 0xff);
+ CAIRO_SET_RGBA (s_iter, red, green, blue, 0xff);
s_iter += 4;
}
@@ -178,7 +157,7 @@ _cairo_image_surface_create_from_pixbuf (GdkPixbuf *pixbuf)
green = (guchar) (alpha_factor * p_iter[1]);
blue = (guchar) (alpha_factor * p_iter[2]);
- SET_PIXEL (red, green, blue, alpha);
+ CAIRO_SET_RGBA (s_iter, red, green, blue, alpha);
s_iter += 4;
p_iter += p_n_channels;
@@ -197,7 +176,7 @@ _cairo_image_surface_create_from_pixbuf (GdkPixbuf *pixbuf)
p_iter = p_pixels;
for (w = 0; w < width; w++) {
- SET_PIXEL (p_iter[0], p_iter[1], p_iter[2], 0xff);
+ CAIRO_SET_RGBA (s_iter, p_iter[0], p_iter[1], p_iter[2], 0xff);
s_iter += 4;
p_iter += p_n_channels;
}
diff --git a/gthumb/cairo-utils.h b/gthumb/cairo-utils.h
index 4496832..6decc5c 100644
--- a/gthumb/cairo-utils.h
+++ b/gthumb/cairo-utils.h
@@ -27,6 +27,42 @@
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <cairo.h>
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN /* BGRA */
+
+#define CAIRO_RED 2
+#define CAIRO_GREEN 1
+#define CAIRO_BLUE 0
+#define CAIRO_ALPHA 3
+
+#elif G_BYTE_ORDER == G_BIG_ENDIAN /* ARGB */
+
+#define CAIRO_RED 1
+#define CAIRO_GREEN 2
+#define CAIRO_BLUE 3
+#define CAIRO_ALPHA 0
+
+#else /* PDP endianness: RABG */
+
+#define CAIRO_RED 0
+#define CAIRO_GREEN 3
+#define CAIRO_BLUE 2
+#define CAIRO_ALPHA 1
+
+#endif
+
+#define CAIRO_SET_RGB(s_iter, red, green, blue) \
+ s_iter[CAIRO_RED] = (red); \
+ s_iter[CAIRO_GREEN] = (green); \
+ s_iter[CAIRO_BLUE] = (blue);
+
+#define CAIRO_SET_RGBA(s_iter, red, green, blue, alpha) \
+ s_iter[CAIRO_RED] = (red); \
+ s_iter[CAIRO_GREEN] = (green); \
+ s_iter[CAIRO_BLUE] = (blue); \
+ s_iter[CAIRO_ALPHA] = (alpha);
+
+
typedef struct {
double r;
double g;
diff --git a/gthumb/pixbuf-utils.c b/gthumb/pixbuf-utils.c
index 6310a6c..1382f55 100644
--- a/gthumb/pixbuf-utils.c
+++ b/gthumb/pixbuf-utils.c
@@ -98,37 +98,13 @@ _gdk_pixbuf_new_from_cairo_surface (cairo_surface_t *surface)
int i;
for (i = 0; i < width; i++) {
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
- /* Pixbuf: RGB(A)
- * Surface: BGRA */
- gdouble alpha_factor = (gdouble)0xff / s_iter[3];
-
- p_iter[0] = (guchar) (s_iter[2] * alpha_factor + .5);
- p_iter[1] = (guchar) (s_iter[1] * alpha_factor + .5);
- p_iter[2] = (guchar) (s_iter[0] * alpha_factor + .5);
- if (p_n_channels == 4)
- p_iter[3] = s_iter[3];
-#elif G_BYTE_ORDER == G_BIG_ENDIAN
- /* Pixbuf: RGB(A)
- * Surface: ARGB */
- gdouble alpha_factor = (gdouble)0xff / s_iter[0];
-
- p_iter[0] = (guchar) (s_iter[1] * alpha_factor + .5);
- p_iter[1] = (guchar) (s_iter[2] * alpha_factor + .5);
- p_iter[2] = (guchar) (s_iter[3] * alpha_factor + .5);
- if (p_n_channels == 4)
- p_iter[3] = s_iter[0];
-#else /* PDP endianness */
- /* Pixbuf: RGB(A)
- * Surface: RABG */
- gdouble alpha_factor = (gdouble)0xff / s_iter[1];
-
- p_iter[0] = (guchar) (s_iter[0] * alpha_factor + .5);
- p_iter[1] = (guchar) (s_iter[3] * alpha_factor + .5);
- p_iter[2] = (guchar) (s_iter[2] * alpha_factor + .5);
+ gdouble alpha_factor = (gdouble) 0xff / s_iter[CAIRO_ALPHA];
+
+ p_iter[0] = (guchar) (s_iter[CAIRO_RED] * alpha_factor + .5);
+ p_iter[1] = (guchar) (s_iter[CAIRO_GREEN] * alpha_factor + .5);
+ p_iter[2] = (guchar) (s_iter[CAIRO_BLUE] * alpha_factor + .5);
if (p_n_channels == 4)
- p_iter[3] = s_iter[1];
-#endif
+ p_iter[3] = s_iter[CAIRO_ALPHA];
s_iter += 4;
p_iter += p_n_channels;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]