[gimp/soc-2011-gimpunitentry: 25/68] GimpUnitEntry: add preliminary support for entering units
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/soc-2011-gimpunitentry: 25/68] GimpUnitEntry: add preliminary support for entering units
- Date: Fri, 13 Sep 2013 19:56:04 +0000 (UTC)
commit d1dd320ce4dc4341061c5d8f5db42add8577220d
Author: Enrico Schröder <enni schroeder gmail com>
Date: Sun Jun 19 17:12:13 2011 +0200
GimpUnitEntry: add preliminary support for entering units
Adds a preliminary resolution input mode. Parsing is disabled for that mode, the user can just enter a
number which is interpreted as a resolution. It needs to be discussed if that solution is sufficient.
libgimpwidgets/gimpunitentry.c | 33 ++++++++++++++++++++++++++++++---
libgimpwidgets/gimpunitentry.h | 9 +++++----
libgimpwidgets/gimpwidgets.def | 1 +
3 files changed, 36 insertions(+), 7 deletions(-)
---
diff --git a/libgimpwidgets/gimpunitentry.c b/libgimpwidgets/gimpunitentry.c
index d16644e..43468ed 100644
--- a/libgimpwidgets/gimpunitentry.c
+++ b/libgimpwidgets/gimpunitentry.c
@@ -103,7 +103,8 @@ gimp_unit_entry_init (GimpUnitEntry *unitEntry)
GTK_ADJUSTMENT (adjustment));
/* some default values */
- unitEntry->dontUpdateText = FALSE;
+ unitEntry->dontUpdateText = FALSE;
+ unitEntry->resMode = FALSE;
/* connect signals */
/* we don't need all of them... */
@@ -241,7 +242,17 @@ on_output (GtkSpinButton *spin, gpointer data)
}
/* set text of the entry */
- text = gimp_unit_adjustment_to_string (adj);
+ if (!entry->resMode)
+ {
+ text = gimp_unit_adjustment_to_string (adj);
+ }
+ else
+ {
+ text = g_malloc (30 * sizeof (gchar));
+ sprintf (text, "%.1f px/%s",
+ gimp_unit_adjustment_get_value (adj),
+ gimp_unit_get_abbreviation (gimp_unit_adjustment_get_unit (adj)));
+ }
DEBUG (("on_output: %s\n", text);)
@@ -270,12 +281,15 @@ void on_text_changed (GtkEditable *editable, gpointer user_data)
DEBUG (("on_text_changed\n");)
+ if (!entry->resMode)
+ {
/* disable updating the displayed text (user input must not be overwriten) */
entry->dontUpdateText = TRUE;
/* parse input */
gimp_unit_entry_parse (entry);
/* reenable updating */
entry->dontUpdateText = FALSE;
+ }
}
static
@@ -283,10 +297,13 @@ gint on_input (GtkSpinButton *spinButton,
gpointer arg1,
gpointer user_data)
{
+ if (!GIMP_UNIT_ENTRY (spinButton)->resMode)
+ {
/* parse and set value ourselves before GtkSpinButton does so, because
GtkSpinButton would truncate our input and ignore parts of it */
gimp_unit_entry_parse (GIMP_UNIT_ENTRY (spinButton));
on_output (spinButton, (gpointer)GIMP_UNIT_ENTRY(spinButton)->unitAdjustment);
+ }
/* we want GtkSpinButton to handle the input nontheless (there is no problem anymore
since we done the parsing), so we return FALSE */
@@ -305,7 +322,10 @@ void on_populate_popup (GtkEntry *entry,
menuItem = gtk_separator_menu_item_new ();
gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menuItem);
- for (i = gimp_unit_get_number_of_units()-1; i >= 0; i--)
+ /* ignore PIXEL when in resolution mode */
+ (GIMP_UNIT_ENTRY (entry)->resMode) ? (i = 1) : (i = 0);
+
+ for (; i < gimp_unit_get_number_of_units(); i++)
{
menuItem = gtk_menu_item_new_with_label (gimp_unit_get_singular (i));
gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menuItem);
@@ -452,3 +472,10 @@ gimp_unit_entry_set_bounds (GimpUnitEntry *entry, GimpUnit unit, gdouble upper,
GimpUnitAdjustment *adj = gimp_unit_entry_get_adjustment (entry);
gimp_unit_adjustment_set_bounds (adj, unit, upper, lower);
}
+
+void
+gimp_unit_entry_set_res_mode (GimpUnitEntry *entry,
+ gboolean activate)
+{
+ entry->resMode = TRUE;
+}
diff --git a/libgimpwidgets/gimpunitentry.h b/libgimpwidgets/gimpunitentry.h
index 6810e49..937f293 100644
--- a/libgimpwidgets/gimpunitentry.h
+++ b/libgimpwidgets/gimpunitentry.h
@@ -48,12 +48,12 @@ struct _GimpUnitEntry
/* private */
GimpUnitAdjustment *unitAdjustment; /* for convinience */
- /* set TRUE while up/down buttons/keys pressed or scrolling so that we can disable
- our parsing and display the changed value */
- gboolean buttonPressed;
- gboolean scrolling;
+ /* flag set TRUE when entry's text should not be overwritten
+ (i.e. during user input) */
gboolean dontUpdateText;
+ /* set TRUE when the entry shall be used for resolution input */
+ gboolean resMode;
const gchar *id; /* identifier string of unit entry (used by GimpUnitEntryTable) */
};
@@ -80,6 +80,7 @@ gdouble gimp_unit_entry_get_value (GimpUnitEntry *entry);
gdouble gimp_unit_entry_get_value_in_unit (GimpUnitEntry *entry, GimpUnit unit);
GimpUnit gimp_unit_entry_get_unit (GimpUnitEntry *entry);
void gimp_unit_entry_set_bounds (GimpUnitEntry *entry, GimpUnit unit, gdouble upper, gdouble lower);
+void gimp_unit_entry_set_res_mode (GimpUnitEntry *entry, gboolean activate);
G_END_DECLS
diff --git a/libgimpwidgets/gimpwidgets.def b/libgimpwidgets/gimpwidgets.def
index 4be988f..9a69c7f 100644
--- a/libgimpwidgets/gimpwidgets.def
+++ b/libgimpwidgets/gimpwidgets.def
@@ -387,6 +387,7 @@ EXPORTS
gimp_unit_entry_new
gimp_unit_entry_set_bounds
gimp_unit_entry_set_resolution
+ gimp_unit_entry_set_res_mode
gimp_unit_entry_set_unit
gimp_unit_entry_set_value
gimp_unit_entry_set_value_in_unit
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]