diff --git a/ChangeLog b/ChangeLog index 7742ad1b5a..194715f6d1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-03-21 Michael Natterer + + * app/tools/gimpmeasuretool.[ch]: added width and height to the + info displayed in the statusbar and the info window. + Fixes bug #165275. + 2005-03-20 Bill Skaggs * libgimpwidgets/gimpcolorscales.c (gimp_color_scales_update_scales): diff --git a/app/tools/gimpmeasuretool.c b/app/tools/gimpmeasuretool.c index 99e64a9df3..5f3451c8af 100644 --- a/app/tools/gimpmeasuretool.c +++ b/app/tools/gimpmeasuretool.c @@ -733,10 +733,14 @@ gimp_measure_tool_dialog_update (GimpMeasureTool *mtool, GimpImage *image = gdisp->gimage; gint ax, ay; gint bx, by; - gdouble theta1, theta2; + gint pixel_width; + gint pixel_height; + gdouble unit_width; + gdouble unit_height; gdouble pixel_distance; - gdouble pixel_angle; gdouble unit_distance; + gdouble theta1, theta2; + gdouble pixel_angle; gdouble unit_angle; gchar format[128]; gchar buf[128]; @@ -756,6 +760,14 @@ gimp_measure_tool_dialog_update (GimpMeasureTool *mtool, by = 0; } + pixel_width = ABS (ax - bx); + pixel_height = ABS (ay - by); + + unit_width = (_gimp_unit_get_factor (image->gimp, shell->unit) * + pixel_width / image->xresolution); + unit_height = (_gimp_unit_get_factor (image->gimp, shell->unit) * + pixel_height / image->yresolution); + pixel_distance = sqrt (SQR (ax - bx) + SQR (ay - by)); unit_distance = (_gimp_unit_get_factor (image->gimp, shell->unit) * sqrt (SQR ((gdouble)(ax - bx) / image->xresolution) + @@ -785,16 +797,21 @@ gimp_measure_tool_dialog_update (GimpMeasureTool *mtool, if (shell->unit == GIMP_UNIT_PIXEL) { - g_snprintf (buf, sizeof (buf), "%.1f %s, %.2f \302\260", - pixel_distance, _("pixels"), pixel_angle); + g_snprintf (buf, sizeof (buf), "%.1f %s, %.2f \302\260 (%d x %d)", + pixel_distance, _("pixels"), pixel_angle, + pixel_width, pixel_height); } else { - g_snprintf (format, sizeof (format), "%%.%df %s, %%.2f \302\260", + g_snprintf (format, sizeof (format), + "%%.%df %s, %%.2f \302\260 (%%.%df x %%.%df)", _gimp_unit_get_digits (image->gimp, shell->unit), - _gimp_unit_get_plural (image->gimp, shell->unit)); + _gimp_unit_get_plural (image->gimp, shell->unit), + _gimp_unit_get_digits (image->gimp, shell->unit), + _gimp_unit_get_digits (image->gimp, shell->unit)); - g_snprintf (buf, sizeof (buf), format, unit_distance, unit_angle); + g_snprintf (buf, sizeof (buf), format, unit_distance, unit_angle, + unit_width, unit_height); } gimp_tool_pop_status (GIMP_TOOL (mtool)); @@ -802,20 +819,23 @@ gimp_measure_tool_dialog_update (GimpMeasureTool *mtool, if (mtool->dialog) { + g_snprintf (format, sizeof (format), "%%.%df", + _gimp_unit_get_digits (image->gimp, shell->unit)); + + /* Distance */ g_snprintf (buf, sizeof (buf), "%.1f", pixel_distance); gtk_label_set_text (GTK_LABEL (mtool->distance_label[0]), buf); - g_snprintf (buf, sizeof (buf), "%.2f", pixel_angle); - gtk_label_set_text (GTK_LABEL (mtool->angle_label[0]), buf); - - g_snprintf (format, sizeof (format), - "%%.%df", _gimp_unit_get_digits (image->gimp, shell->unit)); g_snprintf (buf, sizeof (buf), format, unit_distance); gtk_label_set_text (GTK_LABEL (mtool->distance_label[1]), buf); gtk_label_set_text (GTK_LABEL (mtool->unit_label[0]), _gimp_unit_get_plural (image->gimp, shell->unit)); + /* Angle */ + g_snprintf (buf, sizeof (buf), "%.2f", pixel_angle); + gtk_label_set_text (GTK_LABEL (mtool->angle_label[0]), buf); + if (fabs (unit_angle - pixel_angle) > 0.01) { g_snprintf (buf, sizeof (buf), "%.2f", unit_angle); @@ -829,6 +849,26 @@ gimp_measure_tool_dialog_update (GimpMeasureTool *mtool, gtk_label_set_text (GTK_LABEL (mtool->unit_label[1]), " "); } + /* Width */ + g_snprintf (buf, sizeof (buf), "%d", pixel_width); + gtk_label_set_text (GTK_LABEL (mtool->width_label[0]), buf); + + g_snprintf (buf, sizeof (buf), format, unit_width); + gtk_label_set_text (GTK_LABEL (mtool->width_label[1]), buf); + + gtk_label_set_text (GTK_LABEL (mtool->unit_label[2]), + _gimp_unit_get_plural (image->gimp, shell->unit)); + + /* Height */ + g_snprintf (buf, sizeof (buf), "%d", pixel_height); + gtk_label_set_text (GTK_LABEL (mtool->height_label[0]), buf); + + g_snprintf (buf, sizeof (buf), format, unit_height); + gtk_label_set_text (GTK_LABEL (mtool->height_label[1]), buf); + + gtk_label_set_text (GTK_LABEL (mtool->unit_label[3]), + _gimp_unit_get_plural (image->gimp, shell->unit)); + if (GTK_WIDGET_VISIBLE (mtool->dialog)) gdk_window_show (mtool->dialog->window); else @@ -856,7 +896,7 @@ gimp_measure_tool_dialog_new (GimpMeasureTool *mtool) G_CALLBACK (gtk_widget_destroy), NULL); - table = gtk_table_new (2, 5, TRUE); + table = gtk_table_new (4, 5, TRUE); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_container_set_border_width (GTK_CONTAINER (table), 6); @@ -915,5 +955,57 @@ gimp_measure_tool_dialog_new (GimpMeasureTool *mtool) gtk_table_attach_defaults (GTK_TABLE (table), label, 4, 5, 1, 2); gtk_widget_show (label); + + label = gtk_label_new (_("Width:")); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + gtk_widget_show (label); + + mtool->width_label[0] = label = gtk_label_new ("0.0"); + gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 2, 3); + gtk_widget_show (label); + + label = gtk_label_new (_("pixels")); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 2, 3); + gtk_widget_show (label); + + mtool->width_label[1] = label = gtk_label_new ("0.0"); + gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, 2, 3); + gtk_widget_show (label); + + mtool->unit_label[2] = label = gtk_label_new (" "); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_table_attach_defaults (GTK_TABLE (table), label, 4, 5, 2, 3); + gtk_widget_show (label); + + + label = gtk_label_new (_("Height:")); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4); + gtk_widget_show (label); + + mtool->height_label[0] = label = gtk_label_new ("0.0"); + gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); + gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 3, 4); + gtk_widget_show (label); + + label = gtk_label_new (_("pixels")); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 3, 4); + gtk_widget_show (label); + + mtool->height_label[1] = label = gtk_label_new ("0.0"); + gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); + gtk_table_attach_defaults (GTK_TABLE (table), label, 3, 4, 3, 4); + gtk_widget_show (label); + + mtool->unit_label[3] = label = gtk_label_new (" "); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_table_attach_defaults (GTK_TABLE (table), label, 4, 5, 3, 4); + gtk_widget_show (label); + return dialog; } diff --git a/app/tools/gimpmeasuretool.h b/app/tools/gimpmeasuretool.h index 3223ba9192..53ad5bf9fc 100644 --- a/app/tools/gimpmeasuretool.h +++ b/app/tools/gimpmeasuretool.h @@ -63,7 +63,9 @@ struct _GimpMeasureTool GtkWidget *dialog; GtkWidget *distance_label[2]; GtkWidget *angle_label[2]; - GtkWidget *unit_label[2]; + GtkWidget *width_label[2]; + GtkWidget *height_label[2]; + GtkWidget *unit_label[4]; }; struct _GimpMeasureToolClass