[gimp] app: remove code duplication in the histogram and curve views
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: remove code duplication in the histogram and curve views
- Date: Fri, 30 Jul 2010 10:52:32 +0000 (UTC)
commit 4466b3a35bbec72a24ca0bb373d505945a24b7ed
Author: Michael Natterer <mitch gimp org>
Date: Fri Jul 30 12:51:03 2010 +0200
app: remove code duplication in the histogram and curve views
by letting the histogram view always draw the background and the outer
borders. Also fix a lot of off-by-one problems in the curve view which
occur due to the 0.5,0.5 offset of cairo line drawing.
app/widgets/gimpcurveview.c | 59 ++++++++++++++-------------------------
app/widgets/gimphistogramview.c | 23 ++++++++------
2 files changed, 34 insertions(+), 48 deletions(-)
---
diff --git a/app/widgets/gimpcurveview.c b/app/widgets/gimpcurveview.c
index 0b181a4..f02aeb9 100644
--- a/app/widgets/gimpcurveview.c
+++ b/app/widgets/gimpcurveview.c
@@ -345,7 +345,7 @@ gimp_curve_view_draw_grid (GimpCurveView *view,
for (i = 1; i < view->grid_rows; i++)
{
- gint y = i * height / view->grid_rows;
+ gint y = i * (height - 1) / view->grid_rows;
if ((view->grid_rows % 2) == 0 && (i == view->grid_rows / 2))
continue;
@@ -356,7 +356,7 @@ gimp_curve_view_draw_grid (GimpCurveView *view,
for (i = 1; i < view->grid_columns; i++)
{
- gint x = i * width / view->grid_columns;
+ gint x = i * (width - 1) / view->grid_columns;
if ((view->grid_columns % 2) == 0 && (i == view->grid_columns / 2))
continue;
@@ -376,7 +376,7 @@ gimp_curve_view_draw_grid (GimpCurveView *view,
if ((view->grid_rows % 2) == 0)
{
- gint y = height / 2;
+ gint y = (height - 1) / 2;
cairo_move_to (cr, border, border + y);
cairo_line_to (cr, border + width - 1, border + y);
@@ -384,7 +384,7 @@ gimp_curve_view_draw_grid (GimpCurveView *view,
if ((view->grid_columns % 2) == 0)
{
- gint x = width / 2;
+ gint x = (width - 1) / 2;
cairo_move_to (cr, border + x, border);
cairo_line_to (cr, border + x, border + height - 1);
@@ -414,11 +414,11 @@ gimp_curve_view_draw_point (GimpCurveView *view,
#define RADIUS 3
cairo_move_to (cr,
- border + (gdouble) width * x + RADIUS,
- border + (gdouble) height * y);
+ border + (gdouble) (width - 1) * x + RADIUS,
+ border + (gdouble) (height - 1) * y);
cairo_arc (cr,
- border + (gdouble) width * x,
- border + (gdouble) height * y,
+ border + (gdouble) (width - 1) * x,
+ border + (gdouble) (height - 1) * y,
RADIUS,
0, 2 * G_PI);
}
@@ -438,8 +438,8 @@ gimp_curve_view_draw_curve (GimpCurveView *view,
y = 1.0 - gimp_curve_map_value (curve, 0.0);
cairo_move_to (cr,
- border + (gdouble) width * x,
- border + (gdouble) height * y);
+ border + (gdouble) (width - 1) * x,
+ border + (gdouble) (height - 1)* y);
for (i = 1; i < 256; i++)
{
@@ -447,8 +447,8 @@ gimp_curve_view_draw_curve (GimpCurveView *view,
y = 1.0 - gimp_curve_map_value (curve, x);
cairo_line_to (cr,
- border + (gdouble) width * x,
- border + (gdouble) height * y);
+ border + (gdouble) (width - 1) * x,
+ border + (gdouble) (height - 1) * y);
}
cairo_stroke (cr);
@@ -478,34 +478,17 @@ gimp_curve_view_expose (GtkWidget *widget,
gtk_widget_get_allocation (widget, &allocation);
border = GIMP_HISTOGRAM_VIEW (view)->border_width;
- width = allocation.width - 2 * border - 1;
- height = allocation.height - 2 * border - 1;
+ width = allocation.width - 2 * border;
+ height = allocation.height - 2 * border;
cr = gdk_cairo_create (gtk_widget_get_window (widget));
gdk_cairo_region (cr, event->region);
cairo_clip (cr);
- if (! gimp_histogram_view_get_histogram (GIMP_HISTOGRAM_VIEW (view)) &&
- ! gimp_histogram_view_get_background (GIMP_HISTOGRAM_VIEW (view)))
- {
- gdk_cairo_set_source_color (cr, &style->base[GTK_STATE_NORMAL]);
- cairo_rectangle (cr, 0, 0,
- allocation.width,
- allocation.height);
- cairo_fill (cr);
-
- cairo_translate (cr, 0.5, 0.5);
-
- gdk_cairo_set_source_color (cr, &style->dark[GTK_STATE_NORMAL]);
- cairo_rectangle (cr, border, border,
- width - 1, height - 1);
- cairo_stroke (cr);
- }
- else
- {
- cairo_translate (cr, 0.5, 0.5);
- }
+ cairo_set_line_width (cr, 1.0);
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
+ cairo_translate (cr, 0.5, 0.5);
if (gtk_widget_has_focus (widget))
{
@@ -513,7 +496,7 @@ gimp_curve_view_expose (GtkWidget *widget,
gtk_widget_get_state (widget),
&event->area, widget, NULL,
border - 2, border - 2,
- width + 5, height + 5);
+ width + 4, height + 4);
}
/* Draw the grid lines */
@@ -575,10 +558,10 @@ gimp_curve_view_expose (GtkWidget *widget,
/* draw the color line */
cairo_move_to (cr,
- border + ROUND ((gdouble) width * view->xpos),
- border);
+ border + ROUND ((gdouble) (width - 1) * view->xpos),
+ border + 1);
cairo_line_to (cr,
- border + ROUND ((gdouble) width * view->xpos),
+ border + ROUND ((gdouble) (width - 1) * view->xpos),
border + height - 1);
cairo_stroke (cr);
diff --git a/app/widgets/gimphistogramview.c b/app/widgets/gimphistogramview.c
index d6f3578..6d14756 100644
--- a/app/widgets/gimphistogramview.c
+++ b/app/widgets/gimphistogramview.c
@@ -297,27 +297,21 @@ gimp_histogram_view_expose (GtkWidget *widget,
GdkColor *bg_color_out;
GdkColor rgb_color[3];
- if (! view->histogram && ! view->bg_histogram)
- return FALSE;
-
cr = gdk_cairo_create (gtk_widget_get_window (widget));
gdk_cairo_region (cr, event->region);
cairo_clip (cr);
+ /* Draw the background */
+ gdk_cairo_set_source_color (cr, &style->base[GTK_STATE_NORMAL]);
+ cairo_paint (cr);
+
gtk_widget_get_allocation (widget, &allocation);
border = view->border_width;
width = allocation.width - 2 * border;
height = allocation.height - 2 * border;
- x1 = CLAMP (MIN (view->start, view->end), 0, 255);
- x2 = CLAMP (MAX (view->start, view->end), 0, 255);
-
- /* Draw the background */
- gdk_cairo_set_source_color (cr, &style->base[GTK_STATE_NORMAL]);
- cairo_paint (cr);
-
cairo_set_line_width (cr, 1.0);
cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
cairo_translate (cr, 0.5, 0.5);
@@ -328,6 +322,15 @@ gimp_histogram_view_expose (GtkWidget *widget,
width - 1, height - 1);
cairo_stroke (cr);
+ if (! view->histogram && ! view->bg_histogram)
+ {
+ cairo_destroy (cr);
+ return FALSE;
+ }
+
+ x1 = CLAMP (MIN (view->start, view->end), 0, 255);
+ x2 = CLAMP (MAX (view->start, view->end), 0, 255);
+
if (view->histogram)
max = gimp_histogram_view_get_maximum (view, view->histogram,
view->channel);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]