app: make GimpCurveView's cursor label look pretty for 0..100 ranges

and generally clean up the cursor label code a bit.
This commit is contained in:
Michael Natterer 2013-12-26 16:33:59 +01:00
parent f79bff0719
commit 262d312dfc
1 changed files with 53 additions and 54 deletions

View File

@ -645,14 +645,24 @@ gimp_curve_view_expose (GtkWidget *widget,
border + height - 1);
cairo_stroke (cr);
/* stupid heuristic: special-case for 0..255 */
if (view->range_x_max == 255.0)
{
/* stupid heuristic: special-case for 0..255 */
g_snprintf (buf, sizeof (buf), "x:%3d",
(gint) (view->xpos *
(view->range_x_max - view->range_x_min) +
view->range_x_min));
}
else if (view->range_x_max == 100.0)
{
/* and for 0..100 */
g_snprintf (buf, sizeof (buf), "x:%0.2f",
view->xpos *
(view->range_x_max - view->range_x_min) +
view->range_x_min);
}
else
{
g_snprintf (buf, sizeof (buf), "x:%0.3f",
@ -681,27 +691,52 @@ gimp_curve_view_expose (GtkWidget *widget,
if (view->cursor_x >= 0.0 && view->cursor_x <= 1.0 &&
view->cursor_y >= 0.0 && view->cursor_y <= 1.0)
{
gchar buf[32];
gint w, h;
gchar buf[32];
gint w, h;
if (! view->cursor_layout)
view->cursor_layout = gtk_widget_create_pango_layout (widget, NULL);
if (view->range_x_max == 255.0 &&
view->range_y_max == 255.0)
{
/* stupid heuristic: special-case for 0..255 */
if (view->range_x_max == 255.0 &&
view->range_y_max == 255.0)
{
view->cursor_layout =
gtk_widget_create_pango_layout (widget, "x:888 y:888");
}
else
{
view->cursor_layout =
gtk_widget_create_pango_layout (widget, "x:0.888 y:0.888");
}
pango_layout_get_pixel_extents (view->cursor_layout,
NULL, &view->cursor_rect);
g_snprintf (buf, sizeof (buf), "x:%3d y:%3d",
(gint) (view->cursor_x *
(view->range_x_max - view->range_x_min) +
view->range_x_min),
(gint) ((1.0 - view->cursor_y) *
(view->range_y_max - view->range_y_min) +
view->range_y_min));
}
else if (view->range_x_max == 100.0 &&
view->range_y_max == 100.0)
{
/* and for 0..100 */
g_snprintf (buf, sizeof (buf), "x:%0.2f y:%0.2f",
view->cursor_x *
(view->range_x_max - view->range_x_min) +
view->range_x_min,
(1.0 - view->cursor_y) *
(view->range_y_max - view->range_y_min) +
view->range_y_min);
}
else
{
g_snprintf (buf, sizeof (buf), "x:%0.3f y:%0.3f",
view->cursor_x *
(view->range_x_max - view->range_x_min) +
view->range_x_min,
(1.0 - view->cursor_y) *
(view->range_y_max - view->range_y_min) +
view->range_y_min);
}
pango_layout_set_text (view->cursor_layout, buf, -1);
pango_layout_get_pixel_extents (view->cursor_layout,
NULL, &view->cursor_rect);
x = border * 2 + 3;
y = border * 2 + 3;
@ -721,33 +756,7 @@ gimp_curve_view_expose (GtkWidget *widget,
cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
cairo_stroke (cr);
/* stupid heuristic: special-case for 0..255 */
if (view->range_x_max == 255.0 &&
view->range_y_max == 255.0)
{
g_snprintf (buf, sizeof (buf), "x:%3d y:%3d",
(gint) (view->cursor_x *
(view->range_x_max - view->range_x_min) +
view->range_x_min),
(gint) ((1.0 - view->cursor_y) *
(view->range_y_max - view->range_y_min) +
view->range_y_min));
}
else
{
g_snprintf (buf, sizeof (buf), "x:%0.3f y:%0.3f",
view->cursor_x *
(view->range_x_max - view->range_x_min) +
view->range_x_min,
(1.0 - view->cursor_y) *
(view->range_y_max - view->range_y_min) +
view->range_y_min);
}
pango_layout_set_text (view->cursor_layout, buf, -1);
gdk_cairo_set_source_color (cr, &style->base[GTK_STATE_NORMAL]);
cairo_move_to (cr, x, y);
pango_cairo_show_layout (cr, view->cursor_layout);
@ -1346,12 +1355,6 @@ gimp_curve_view_set_range_x (GimpCurveView *view,
view->range_x_min = min;
view->range_x_max = max;
if (view->cursor_layout)
{
g_object_unref (view->cursor_layout);
view->cursor_layout = NULL;
}
gtk_widget_queue_draw (GTK_WIDGET (view));
}
@ -1365,12 +1368,6 @@ gimp_curve_view_set_range_y (GimpCurveView *view,
view->range_y_min = min;
view->range_y_max = max;
if (view->cursor_layout)
{
g_object_unref (view->cursor_layout);
view->cursor_layout = NULL;
}
gtk_widget_queue_draw (GTK_WIDGET (view));
}
@ -1428,6 +1425,7 @@ gimp_curve_view_set_cursor (GimpCurveView *view,
view->cursor_x = x;
view->cursor_y = y;
/* TODO: only invalidate the cursor label area */
gtk_widget_queue_draw (GTK_WIDGET (view));
}
@ -1437,5 +1435,6 @@ gimp_curve_view_unset_cursor (GimpCurveView *view)
view->cursor_x = -1.0;
view->cursor_y = -1.0;
/* TODO: only invalidate the cursor label area */
gtk_widget_queue_draw (GTK_WIDGET (view));
}