[gthumb: 14/129] added CAIRO_SET_RGB[A] public macros



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]