mirror of https://github.com/GNOME/gimp.git
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:
parent
f79bff0719
commit
262d312dfc
|
@ -645,14 +645,24 @@ gimp_curve_view_expose (GtkWidget *widget,
|
||||||
border + height - 1);
|
border + height - 1);
|
||||||
cairo_stroke (cr);
|
cairo_stroke (cr);
|
||||||
|
|
||||||
/* stupid heuristic: special-case for 0..255 */
|
|
||||||
if (view->range_x_max == 255.0)
|
if (view->range_x_max == 255.0)
|
||||||
{
|
{
|
||||||
|
/* stupid heuristic: special-case for 0..255 */
|
||||||
|
|
||||||
g_snprintf (buf, sizeof (buf), "x:%3d",
|
g_snprintf (buf, sizeof (buf), "x:%3d",
|
||||||
(gint) (view->xpos *
|
(gint) (view->xpos *
|
||||||
(view->range_x_max - view->range_x_min) +
|
(view->range_x_max - view->range_x_min) +
|
||||||
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
|
else
|
||||||
{
|
{
|
||||||
g_snprintf (buf, sizeof (buf), "x:%0.3f",
|
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 &&
|
if (view->cursor_x >= 0.0 && view->cursor_x <= 1.0 &&
|
||||||
view->cursor_y >= 0.0 && view->cursor_y <= 1.0)
|
view->cursor_y >= 0.0 && view->cursor_y <= 1.0)
|
||||||
{
|
{
|
||||||
gchar buf[32];
|
gchar buf[32];
|
||||||
gint w, h;
|
gint w, h;
|
||||||
|
|
||||||
if (! view->cursor_layout)
|
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 */
|
/* 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,
|
g_snprintf (buf, sizeof (buf), "x:%3d y:%3d",
|
||||||
NULL, &view->cursor_rect);
|
(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;
|
x = border * 2 + 3;
|
||||||
y = 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_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
|
||||||
cairo_stroke (cr);
|
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]);
|
gdk_cairo_set_source_color (cr, &style->base[GTK_STATE_NORMAL]);
|
||||||
|
|
||||||
cairo_move_to (cr, x, y);
|
cairo_move_to (cr, x, y);
|
||||||
pango_cairo_show_layout (cr, view->cursor_layout);
|
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_min = min;
|
||||||
view->range_x_max = max;
|
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));
|
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_min = min;
|
||||||
view->range_y_max = max;
|
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));
|
gtk_widget_queue_draw (GTK_WIDGET (view));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1428,6 +1425,7 @@ gimp_curve_view_set_cursor (GimpCurveView *view,
|
||||||
view->cursor_x = x;
|
view->cursor_x = x;
|
||||||
view->cursor_y = y;
|
view->cursor_y = y;
|
||||||
|
|
||||||
|
/* TODO: only invalidate the cursor label area */
|
||||||
gtk_widget_queue_draw (GTK_WIDGET (view));
|
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_x = -1.0;
|
||||||
view->cursor_y = -1.0;
|
view->cursor_y = -1.0;
|
||||||
|
|
||||||
|
/* TODO: only invalidate the cursor label area */
|
||||||
gtk_widget_queue_draw (GTK_WIDGET (view));
|
gtk_widget_queue_draw (GTK_WIDGET (view));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue