[gthumb: 18/129] reorganized some code



commit fb9969d2b52e5fc6bc9277e01e3be985c3903ca2
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Fri Apr 15 16:13:11 2011 +0200

    reorganized some code

 gthumb/cairo-utils.c   |   72 +-----------------------------
 gthumb/cairo-utils.h   |  115 +++++++++++++++++++++++++++---------------------
 gthumb/gth-histogram.c |    7 ++-
 gthumb/pixbuf-utils.c  |    6 +-
 4 files changed, 76 insertions(+), 124 deletions(-)
---
diff --git a/gthumb/cairo-utils.c b/gthumb/cairo-utils.c
index 2ff4f1f..79bd2fb 100644
--- a/gthumb/cairo-utils.c
+++ b/gthumb/cairo-utils.c
@@ -63,65 +63,6 @@ _gdk_color_to_cairo_color_255 (GdkColor          *g_color,
 
 
 void
-_cairo_paint_full_gradient (cairo_surface_t *surface,
-			    GdkColor        *h_color1,
-			    GdkColor        *h_color2,
-			    GdkColor        *v_color1,
-			    GdkColor        *v_color2)
-{
-	cairo_color_255_t  hcolor1;
-	cairo_color_255_t  hcolor2;
-	cairo_color_255_t  vcolor1;
-	cairo_color_255_t  vcolor2;
-	int                width;
-	int                height;
-	int                s_stride;
-	unsigned char     *s_pixels;
-	int                h, w;
-	double             x, y;
-	double             x_y, x_1_y, y_1_x, _1_x_1_y;
-	guchar             red, green, blue;
-
-	if (cairo_surface_status (surface) != CAIRO_STATUS_SUCCESS)
-		return;
-
-	_gdk_color_to_cairo_color_255 (h_color1, &hcolor1);
-	_gdk_color_to_cairo_color_255 (h_color2, &hcolor2);
-	_gdk_color_to_cairo_color_255 (v_color1, &vcolor1);
-	_gdk_color_to_cairo_color_255 (v_color2, &vcolor2);
-
-	width = cairo_image_surface_get_width (surface);
-	height = cairo_image_surface_get_height (surface);
-	s_stride = cairo_image_surface_get_stride (surface);
-	s_pixels = cairo_image_surface_get_data (surface);
-
-	for (h = 0; h < height; h++) {
-		guchar *s_iter = s_pixels;
-
-	        x = (double) (height - h) / height;
-
-	        for (w = 0; w < width; w++) {
-	        	y        = (double) (width - w) / width;
-			x_y      = x * y;
-			x_1_y    = x * (1.0 - y);
-			y_1_x    = y * (1.0 - x);
-			_1_x_1_y = (1.0 - x) * (1.0 - y);
-
-			red   = hcolor1.r * x_y + hcolor2.r * x_1_y + vcolor1.r * y_1_x + vcolor2.r * _1_x_1_y;
-			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;
-
-			CAIRO_SET_RGBA (s_iter, red, green, blue, 0xff);
-
-			s_iter += 4;
-		}
-
-		s_pixels += s_stride;
-	}
-}
-
-
-void
 _cairo_clear_surface (cairo_surface_t  **surface)
 {
 	cairo_surface_destroy (*surface);
@@ -180,21 +121,13 @@ _cairo_image_surface_create_from_pixbuf (GdkPixbuf *pixbuf)
 	if (p_n_channels == 4) {
 		guchar *s_iter;
 		guchar *p_iter;
-		double  alpha_factor;
-		guchar  red, green, blue, alpha;
 
 		for (h = 0; h < height; h++) {
 			s_iter = s_pixels;
 			p_iter = p_pixels;
 
 			for (w = 0; w < width; w++) {
-				alpha = p_iter[3];
-				alpha_factor = (double) alpha / 255.0;
-				red   = (guchar) (alpha_factor * p_iter[0]) ;
-				green = (guchar) (alpha_factor * p_iter[1]);
-				blue  = (guchar) (alpha_factor * p_iter[2]);
-
-				CAIRO_SET_RGBA (s_iter, red, green, blue, alpha);
+				CAIRO_SET_RGBA (s_iter, p_iter[0], p_iter[1], p_iter[2], p_iter[3]);
 
 				s_iter += 4;
 				p_iter += p_n_channels;
@@ -213,7 +146,8 @@ _cairo_image_surface_create_from_pixbuf (GdkPixbuf *pixbuf)
 			p_iter = p_pixels;
 
 			for (w = 0; w < width; w++) {
-				CAIRO_SET_RGBA (s_iter, p_iter[0], p_iter[1], p_iter[2], 0xff);
+				CAIRO_SET_RGB (s_iter, p_iter[0], p_iter[1], p_iter[2]);
+
 				s_iter += 4;
 				p_iter += p_n_channels;
 			}
diff --git a/gthumb/cairo-utils.h b/gthumb/cairo-utils.h
index 38b6bc4..8e8b551 100644
--- a/gthumb/cairo-utils.h
+++ b/gthumb/cairo-utils.h
@@ -53,24 +53,26 @@
 
 #define CAIRO_SET_RGB(pixel, red, green, blue)					\
 	do {									\
-		pixel[CAIRO_RED] = (red);					\
+		pixel[CAIRO_RED]   = (red);					\
 		pixel[CAIRO_GREEN] = (green);					\
-		pixel[CAIRO_BLUE] = (blue);					\
+		pixel[CAIRO_BLUE]  = (blue);					\
+		pixel[CAIRO_ALPHA] = 0xff;					\
 	} while (0)
 
 #define CAIRO_SET_RGBA(pixel, red, green, blue, alpha)				\
 	do {									\
-		pixel[CAIRO_RED] = (red);					\
-		pixel[CAIRO_GREEN] = (green);					\
-		pixel[CAIRO_BLUE] = (blue);					\
+		gdouble alpha_factor = (gdouble) alpha / 0xff;			\
+		pixel[CAIRO_RED]   = (guchar) (alpha_factor * (red) + .5);	\
+		pixel[CAIRO_GREEN] = (guchar) (alpha_factor * (green) + .5);	\
+		pixel[CAIRO_BLUE]  = (guchar) (alpha_factor * (blue) + .5);	\
 		pixel[CAIRO_ALPHA] = (alpha);					\
 	} while (0)
 
 #define CAIRO_GET_RGB(pixel, red, green, blue)					\
 	do {									\
-		red = pixel[CAIRO_RED];						\
+		red   = pixel[CAIRO_RED];					\
 		green = pixel[CAIRO_GREEN];					\
-		blue = pixel[CAIRO_BLUE];					\
+		blue   = pixel[CAIRO_BLUE];					\
 	} while (0)
 
 #define CAIRO_GET_RGBA(pixel, red, green, blue, alpha)				\
@@ -79,11 +81,13 @@
 										\
 		alpha = pixel[CAIRO_ALPHA];					\
 		alpha_factor = (gdouble) 0xff / alpha;		 		\
-		red = (guchar) (pixel[CAIRO_RED] * alpha_factor + .5);		\
+		red   = (guchar) (pixel[CAIRO_RED] * alpha_factor + .5);	\
 		green = (guchar) (pixel[CAIRO_GREEN] * alpha_factor + .5);	\
-		blue = (guchar) (pixel[CAIRO_BLUE] * alpha_factor + .5);	\
+		blue  = (guchar) (pixel[CAIRO_BLUE] * alpha_factor + .5);	\
 	} while (0)
 
+/* types */
+
 typedef struct {
 	double r;
 	double g;
@@ -98,46 +102,57 @@ typedef struct {
 	guchar a;
 } cairo_color_255_t;
 
-void         _gdk_color_to_cairo_color          (GdkColor          *g_color,
-			         	 	 cairo_color_t     *c_color);
-void         _gdk_color_to_cairo_color_255      (GdkColor          *g_color,
-			         	 	 cairo_color_255_t *c_color);
-void         _cairo_paint_full_gradient         (cairo_surface_t   *surface,
-				 	 	 GdkColor          *h_color1,
-				 	 	 GdkColor          *h_color2,
-				 	 	 GdkColor          *v_color1,
-				 	 	 GdkColor          *v_color2);
-void         _cairo_clear_surface               (cairo_surface_t  **surface);
-gboolean     _cairo_image_surface_get_has_alpha (cairo_surface_t   *surface);
-cairo_surface_t *
-	     _cairo_image_surface_create_from_pixbuf
-	     	     	     	     	        (GdkPixbuf         *pixbuf);
-void         _cairo_draw_rounded_box            (cairo_t           *cr,
-			 	 	 	 double             x,
-			 	 	 	 double             y,
-			 	 	 	 double             w,
-			 	 	 	 double             h,
-			 	 	 	 double             r);
-void         _cairo_draw_drop_shadow            (cairo_t           *cr,
- 	 	 	 	 	 	 double             x,
- 	 	 	 	 	 	 double             y,
- 	 	 	 	 	 	 double             w,
- 	 	 	 	 	 	 double             h,
- 	 	 	 	 	 	 double             r);
-void         _cairo_draw_frame                  (cairo_t           *cr,
- 	 	 	 	 	 	 double             x,
- 	 	 	 	 	 	 double             y,
- 	 	 	 	 	 	 double             w,
- 	 	 	 	 	 	 double             h,
- 	 	 	 	 	 	 double             r);
-void         _cairo_draw_slide                  (cairo_t           *cr,
-		   	   	   	   	 double             frame_x,
-		   	   	   	   	 double             frame_y,
-		   	   	   	   	 double             frame_width,
-		   	   	   	   	 double             frame_height,
-		   	   	   	   	 double             image_width,
-		   	   	   	   	 double             image_height,
-		   	   	   	   	 GdkColor          *frame_color,
-		   	   	   	   	 gboolean           draw_inner_border);
+/* colors */
+
+void               _gdk_color_to_cairo_color                (GdkColor          *g_color,
+							     cairo_color_t     *c_color);
+void               _gdk_color_to_cairo_color_255            (GdkColor          *g_color,
+			         	 	 	     cairo_color_255_t *c_color);
+
+
+/* surface */
+
+void               _cairo_clear_surface                     (cairo_surface_t  **surface);
+gboolean           _cairo_image_surface_get_has_alpha       (cairo_surface_t   *surface);
+cairo_surface_t *  _cairo_image_surface_create_from_pixbuf  (GdkPixbuf         *pixbuf);
+cairo_surface_t *  _cairo_image_surface_scale_to            (cairo_surface_t   *surface,
+							     int                width,
+							     int                height,
+							     cairo_filter_t     filter);
+
+/* paint / draw */
+
+void              _cairo_paint_full_gradient                (cairo_surface_t   *surface,
+				 	 	 	     GdkColor          *h_color1,
+				 	 	 	     GdkColor          *h_color2,
+				 	 	 	     GdkColor          *v_color1,
+				 	 	 	     GdkColor          *v_color2);
+void              _cairo_draw_rounded_box                   (cairo_t           *cr,
+			 	 	 	 	     double             x,
+			 	 	 	 	     double             y,
+			 	 	 	 	     double             w,
+			 	 	 	 	     double             h,
+			 	 	 	 	     double             r);
+void              _cairo_draw_drop_shadow                   (cairo_t           *cr,
+ 	 	 	 	 	 	 	     double             x,
+ 	 	 	 	 	 	 	     double             y,
+ 	 	 	 	 	 	 	     double             w,
+ 	 	 	 	 	 	 	     double             h,
+ 	 	 	 	 	 	 	     double             r);
+void              _cairo_draw_frame                         (cairo_t           *cr,
+ 	 	 	 	 	 	 	     double             x,
+ 	 	 	 	 	 	 	     double             y,
+ 	 	 	 	 	 	 	     double             w,
+ 	 	 	 	 	 	 	     double             h,
+ 	 	 	 	 	 	 	     double             r);
+void              _cairo_draw_slide                         (cairo_t           *cr,
+		   	   	   	   	 	     double             frame_x,
+		   	   	   	   	 	     double             frame_y,
+		   	   	   	   	 	     double             frame_width,
+		   	   	   	   	 	     double             frame_height,
+		   	   	   	   	 	     double             image_width,
+		   	   	   	   	 	     double             image_height,
+		   	   	   	   	 	     GdkColor          *frame_color,
+		   	   	   	   	 	     gboolean           draw_inner_border);
 
 #endif /* CAIRO_UTILS_H */
diff --git a/gthumb/gth-histogram.c b/gthumb/gth-histogram.c
index 55f5387..c107d6c 100644
--- a/gthumb/gth-histogram.c
+++ b/gthumb/gth-histogram.c
@@ -256,11 +256,12 @@ gth_histogram_calculate_for_image (GthHistogram    *self,
 
 		for (j = 0; j < width; j++) {
 			if (has_alpha)
-				CAIRO_GET_RGBA(pixel, red, green, blue, alpha);
+				CAIRO_GET_RGBA (pixel, red, green, blue, alpha);
 			else
-				CAIRO_GET_RGB(pixel, red, green, blue);
+				CAIRO_GET_RGB (pixel, red, green, blue);
 
 			/* count values for each RGB channel */
+
 			values[1][red] += 1;
 			values[2][green] += 1;
 			values[3][blue] += 1;
@@ -268,10 +269,12 @@ gth_histogram_calculate_for_image (GthHistogram    *self,
 				values[4][alpha] += 1;
 
 			/* count value for Value channel */
+
 			max = MAX (MAX (red, green), blue);
 			values[0][max] += 1;
 
 			/* track max value for each channel */
+
 			values_max[0] = MAX (values_max[0], values[0][max]);
 			values_max[1] = MAX (values_max[1], values[1][red]);
 			values_max[2] = MAX (values_max[2], values[2][green]);
diff --git a/gthumb/pixbuf-utils.c b/gthumb/pixbuf-utils.c
index 13083b0..f3f774b 100644
--- a/gthumb/pixbuf-utils.c
+++ b/gthumb/pixbuf-utils.c
@@ -101,9 +101,9 @@ _gdk_pixbuf_new_from_cairo_surface (cairo_surface_t *surface)
 	        for (i = 0; i < width; i++) {
 	        	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);
+	        	p_iter[0] = (guchar) (alpha_factor * s_iter[CAIRO_RED]  + .5);
+	        	p_iter[1] = (guchar) (alpha_factor * s_iter[CAIRO_GREEN] + .5);
+	        	p_iter[2] = (guchar) (alpha_factor * s_iter[CAIRO_BLUE] + .5);
 	        	if (p_n_channels == 4)
 	        		p_iter[3] = s_iter[CAIRO_ALPHA];
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]