[gimp] app: Add axis lables to dynamics curves and curveview
- From: Alexia Death <alexiade src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: Add axis lables to dynamics curves and curveview
- Date: Sun, 15 Jan 2012 00:56:52 +0000 (UTC)
commit 3f7ee00469466e060d231c2da32730ebfde875b2
Author: Alexia Death <alexiadeath gmail com>
Date: Sun Jan 15 01:53:40 2012 +0200
app: Add axis lables to dynamics curves and curveview
app/widgets/gimpcurveview.c | 137 ++++++++++++++++++++++++++++---
app/widgets/gimpcurveview.h | 11 +++-
app/widgets/gimpdynamicsoutputeditor.c | 19 ++++-
3 files changed, 151 insertions(+), 16 deletions(-)
---
diff --git a/app/widgets/gimpcurveview.c b/app/widgets/gimpcurveview.c
index 304a068..c71f7c4 100644
--- a/app/widgets/gimpcurveview.c
+++ b/app/widgets/gimpcurveview.c
@@ -44,7 +44,9 @@ enum
PROP_GIMP,
PROP_BASE_LINE,
PROP_GRID_ROWS,
- PROP_GRID_COLUMNS
+ PROP_GRID_COLUMNS,
+ PROP_X_AXIS_LABEL,
+ PROP_Y_AXIS_LABEL
};
enum
@@ -156,6 +158,16 @@ gimp_curve_view_class_init (GimpCurveViewClass *klass)
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (object_class, PROP_X_AXIS_LABEL,
+ g_param_spec_string ("x-axis-label", NULL, NULL,
+ NULL,
+ GIMP_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class, PROP_Y_AXIS_LABEL,
+ g_param_spec_string ("y-axis-label", NULL, NULL,
+ NULL,
+ GIMP_PARAM_READWRITE));
+
curve_view_signals[CUT_CLIPBOARD] =
g_signal_new ("cut-clipboard",
G_TYPE_FROM_CLASS (klass),
@@ -209,6 +221,9 @@ gimp_curve_view_init (GimpCurveView *view)
view->range_y_min = 0.0;
view->range_y_max = 1.0;
+ view->x_axis_label = NULL;
+ view->y_axis_label = NULL;
+
gtk_widget_set_can_focus (GTK_WIDGET (view), TRUE);
gtk_widget_add_events (GTK_WIDGET (view),
GDK_BUTTON_PRESS_MASK |
@@ -224,10 +239,10 @@ gimp_curve_view_finalize (GObject *object)
{
GimpCurveView *view = GIMP_CURVE_VIEW (object);
- if (view->xpos_layout)
+ if (view->layout)
{
- g_object_unref (view->xpos_layout);
- view->xpos_layout = NULL;
+ g_object_unref (view->layout);
+ view->layout = NULL;
}
if (view->cursor_layout)
@@ -236,6 +251,18 @@ gimp_curve_view_finalize (GObject *object)
view->cursor_layout = NULL;
}
+ if (view->x_axis_label)
+ {
+ g_free (view->x_axis_label);
+ view->x_axis_label = NULL;
+ }
+
+ if (view->y_axis_label)
+ {
+ g_free (view->y_axis_label);
+ view->y_axis_label = NULL;
+ }
+
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -274,6 +301,12 @@ gimp_curve_view_set_property (GObject *object,
case PROP_BASE_LINE:
view->draw_base_line = g_value_get_boolean (value);
break;
+ case PROP_X_AXIS_LABEL:
+ view->x_axis_label = g_value_dup_string (value);
+ break;
+ case PROP_Y_AXIS_LABEL:
+ view->y_axis_label = g_value_dup_string (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -302,6 +335,12 @@ gimp_curve_view_get_property (GObject *object,
case PROP_BASE_LINE:
g_value_set_boolean (value, view->draw_base_line);
break;
+ case PROP_X_AXIS_LABEL:
+ gimp_curve_view_set_x_axis_label (view, g_value_get_string (value));
+ break;
+ case PROP_Y_AXIS_LABEL:
+ gimp_curve_view_set_y_axis_label (view, g_value_get_string (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -316,10 +355,10 @@ gimp_curve_view_style_set (GtkWidget *widget,
GTK_WIDGET_CLASS (parent_class)->style_set (widget, prev_style);
- if (view->xpos_layout)
+ if (view->layout)
{
- g_object_unref (view->xpos_layout);
- view->xpos_layout = NULL;
+ g_object_unref (view->layout);
+ view->layout = NULL;
}
if (view->cursor_layout)
@@ -462,6 +501,8 @@ gimp_curve_view_expose (GtkWidget *widget,
gint border;
gint width;
gint height;
+ gint layout_x;
+ gint layout_y;
gdouble x, y;
gint i;
@@ -499,6 +540,42 @@ gimp_curve_view_expose (GtkWidget *widget,
gimp_curve_view_draw_grid (view, cr, width, height, border);
+ /* Draw the axis labels */
+
+ if (view->x_axis_label)
+ {
+ if (! view->layout)
+ view->layout = gtk_widget_create_pango_layout (widget, NULL);
+
+ pango_layout_set_text (view->layout, view->x_axis_label, -1);
+ pango_layout_get_pixel_size (view->layout, &layout_x, &layout_y);
+
+ cairo_move_to (cr,
+ width - border - layout_x,
+ height + border - layout_y);
+ pango_cairo_show_layout (cr, view->layout);
+ cairo_fill (cr);
+ }
+
+ if (view->y_axis_label)
+ {
+ if (! view->layout)
+ view->layout = gtk_widget_create_pango_layout (widget, NULL);
+
+ pango_layout_set_text (view->layout, view->y_axis_label, -1);
+ pango_layout_get_pixel_size (view->layout, &layout_x, &layout_y);
+
+ cairo_save (cr);
+ cairo_rotate (cr, G_PI / 2);
+ cairo_move_to (cr,
+ 2 * border,
+ -(border + layout_y));
+ pango_cairo_show_layout (cr, view->layout);
+ cairo_fill (cr);
+ cairo_restore (cr);
+ }
+
+
/* Draw the background curves */
for (list = view->bg_curves; list; list = g_list_next (list))
{
@@ -550,8 +627,6 @@ gimp_curve_view_expose (GtkWidget *widget,
if (view->xpos >= 0.0)
{
- gint layout_x;
- gint layout_y;
gchar buf[32];
gdk_cairo_set_source_color (cr, &style->text[GTK_STATE_NORMAL]);
@@ -568,11 +643,11 @@ gimp_curve_view_expose (GtkWidget *widget,
/* and xpos indicator */
g_snprintf (buf, sizeof (buf), "x:%d", (gint) (view->xpos * 255.999));
- if (! view->xpos_layout)
- view->xpos_layout = gtk_widget_create_pango_layout (widget, NULL);
+ if (! view->layout)
+ view->layout = gtk_widget_create_pango_layout (widget, NULL);
- pango_layout_set_text (view->xpos_layout, buf, -1);
- pango_layout_get_pixel_size (view->xpos_layout, &layout_x, &layout_y);
+ pango_layout_set_text (view->layout, buf, -1);
+ pango_layout_get_pixel_size (view->layout, &layout_x, &layout_y);
if (view->xpos < 0.5)
layout_x = border;
@@ -582,7 +657,7 @@ gimp_curve_view_expose (GtkWidget *widget,
cairo_move_to (cr,
border + (gdouble) width * view->xpos + layout_x,
border + height - border - layout_y);
- pango_cairo_show_layout (cr, view->xpos_layout);
+ pango_cairo_show_layout (cr, view->layout);
cairo_fill (cr);
}
@@ -1275,6 +1350,40 @@ gimp_curve_view_set_xpos (GimpCurveView *view,
gtk_widget_queue_draw (GTK_WIDGET (view));
}
+void
+gimp_curve_view_set_x_axis_label (GimpCurveView *view,
+ const gchar *label)
+{
+ g_return_if_fail (GIMP_IS_CURVE_VIEW (view));
+
+ if (view->x_axis_label)
+ {
+ g_free (view->x_axis_label);
+ view->x_axis_label = NULL;
+ }
+ view->x_axis_label = g_strdup (label);
+
+ g_object_notify (G_OBJECT (view), "x-axis-label");
+
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+}
+void
+gimp_curve_view_set_y_axis_label (GimpCurveView *view,
+ const gchar *label)
+{
+ g_return_if_fail (GIMP_IS_CURVE_VIEW (view));
+
+ if (view->y_axis_label)
+ {
+ g_free (view->y_axis_label);
+ view->y_axis_label = NULL;
+ }
+ view->y_axis_label = g_strdup (label);
+
+ g_object_notify (G_OBJECT (view), "y-axis-label");
+
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+}
/* private functions */
diff --git a/app/widgets/gimpcurveview.h b/app/widgets/gimpcurveview.h
index fae2f86..6b1cdb9 100644
--- a/app/widgets/gimpcurveview.h
+++ b/app/widgets/gimpcurveview.h
@@ -57,7 +57,8 @@ struct _GimpCurveView
GdkCursorType cursor_type;
gdouble xpos;
- PangoLayout *xpos_layout;
+
+ PangoLayout *layout;
gdouble range_x_min;
gdouble range_x_max;
@@ -68,6 +69,9 @@ struct _GimpCurveView
gdouble cursor_y;
PangoLayout *cursor_layout;
PangoRectangle cursor_rect;
+
+ gchar *x_axis_label;
+ gchar *y_axis_label;
};
struct _GimpCurveViewClass
@@ -108,5 +112,10 @@ void gimp_curve_view_set_range_y (GimpCurveView *view,
void gimp_curve_view_set_xpos (GimpCurveView *view,
gdouble x);
+void gimp_curve_view_set_x_axis_label (GimpCurveView *view,
+ const gchar *label);
+void gimp_curve_view_set_y_axis_label (GimpCurveView *view,
+ const gchar *label);
+
#endif /* __GIMP_CURVE_VIEW_H__ */
diff --git a/app/widgets/gimpdynamicsoutputeditor.c b/app/widgets/gimpdynamicsoutputeditor.c
index 6470920..234abc6 100644
--- a/app/widgets/gimpdynamicsoutputeditor.c
+++ b/app/widgets/gimpdynamicsoutputeditor.c
@@ -22,8 +22,9 @@
#include <gtk/gtk.h>
-#include "libgimpwidgets/gimpwidgets.h"
+#include "libgimpbase/gimpbase.h"
#include "libgimpcolor/gimpcolor.h"
+#include "libgimpwidgets/gimpwidgets.h"
#include "widgets-types.h"
@@ -171,6 +172,8 @@ gimp_dynamics_output_editor_constructed (GObject *object)
GtkCellRenderer *cell;
GtkTreeSelection *tree_sel;
gint i;
+ GimpDynamicsOutputType output_type;
+ const gchar *type_desc;
editor = GIMP_DYNAMICS_OUTPUT_EDITOR (object);
private = GET_PRIVATE (object);
@@ -184,6 +187,17 @@ gimp_dynamics_output_editor_constructed (GObject *object)
g_object_set (private->curve_view,
"border-width", CURVE_BORDER,
NULL);
+
+ g_object_get (private->output,
+ "type", &output_type,
+ NULL);
+
+ if (gimp_enum_get_value (GIMP_TYPE_DYNAMICS_OUTPUT_TYPE, output_type,
+ NULL, NULL, &type_desc, NULL))
+ g_object_set (private->curve_view,
+ "y-axis-label", type_desc,
+ NULL);
+
gtk_widget_set_size_request (private->curve_view,
CURVE_SIZE + CURVE_BORDER * 2,
CURVE_SIZE + CURVE_BORDER * 2);
@@ -412,6 +426,9 @@ gimp_dynamics_output_editor_activate_input (GimpDynamicsOutputEditor *editor,
gimp_curve_view_set_curve (GIMP_CURVE_VIEW (private->curve_view),
input_curve, &inputs[i].color);
private->active_curve = input_curve;
+
+ gimp_curve_view_set_x_axis_label (GIMP_CURVE_VIEW (private->curve_view),
+ inputs[i].label);
}
else if (use_input)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]