static void gimp_number_pair_entry_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { GimpNumberPairEntry *entry = GIMP_NUMBER_PAIR_ENTRY (object); GimpNumberPairEntryPrivate *priv; priv = GIMP_NUMBER_PAIR_ENTRY_GET_PRIVATE (entry); switch (property_id) { case PROP_LEFT_NUMBER: g_value_set_double (value, priv->left_number); break; case PROP_RIGHT_NUMBER: g_value_set_double (value, priv->right_number); break; case PROP_DEFAULT_LEFT_NUMBER: g_value_set_double (value, priv->default_left_number); break; case PROP_DEFAULT_RIGHT_NUMBER: g_value_set_double (value, priv->default_right_number); break; case PROP_USER_OVERRIDE: g_value_set_boolean (value, priv->user_override); break; case PROP_SEPARATORS: g_value_take_string (value, g_ucs4_to_utf8 (priv->separators, priv->num_separators, NULL, NULL, NULL)); break; case PROP_ALLOW_SIMPLIFICATION: g_value_set_boolean (value, priv->allow_simplification); break; case PROP_DEFAULT_TEXT: g_value_set_string (value, priv->default_text); break; case PROP_MIN_VALID_VALUE: g_value_set_double (value, priv->min_valid_value); break; case PROP_MAX_VALID_VALUE: g_value_set_double (value, priv->max_valid_value); break; case PROP_RATIO: g_value_set_double (value, gimp_number_pair_entry_get_ratio (entry)); break; case PROP_ASPECT: g_value_set_enum (value, gimp_number_pair_entry_get_aspect (entry)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static WidgetInfo * create_number_pair_entry (void) { GtkWidget *vbox; GtkWidget *entry; GtkWidget *align; vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); align = gtk_alignment_new (0.5, 0.5, 0.5, 0.0); entry = gimp_number_pair_entry_new (":/", TRUE, 0.001, GIMP_MAX_IMAGE_SIZE); gimp_number_pair_entry_set_values (GIMP_NUMBER_PAIR_ENTRY (entry), 4, 3); gtk_container_add (GTK_CONTAINER (align), entry); gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Number Pair Entry"), FALSE, FALSE, 0); return new_widget_info ("gimp-widget-number-pair-entry", vbox, SMALL); }
static gboolean gimp_number_pair_entry_events (GtkWidget *widget, GdkEvent *event) { GimpNumberPairEntry *entry; GimpNumberPairEntryPrivate *priv; gboolean force_user_override; entry = GIMP_NUMBER_PAIR_ENTRY (widget); priv = GIMP_NUMBER_PAIR_ENTRY_GET_PRIVATE (entry); force_user_override = FALSE; switch (event->type) { case GDK_KEY_PRESS: { GdkEventKey *kevent = (GdkEventKey *) event; if (kevent->keyval != GDK_Return && kevent->keyval != GDK_KP_Enter && kevent->keyval != GDK_ISO_Enter) break; /* If parsing was done due to widgets focus being lost, we only change * to user-override mode if the values differ from the default ones. If * Return was pressed however, we always switch to user-override mode. */ force_user_override = TRUE; } /* Fall through */ case GDK_FOCUS_CHANGE: { const gchar *text; ParseResult parse_result; gdouble left_value; gdouble right_value; text = gtk_entry_get_text (GTK_ENTRY (entry)); parse_result = gimp_number_pair_entry_parse_text (entry, text, &left_value, &right_value); switch (parse_result) { case PARSE_VALID: { if (priv->left_number != left_value || priv->right_number != right_value || force_user_override) { gimp_number_pair_entry_set_values (entry, left_value, right_value); priv->user_override = TRUE; g_object_notify (G_OBJECT (entry), "user-override"); } } break; case PARSE_CLEAR: gimp_number_pair_entry_set_values (entry, priv->default_left_number, priv->default_right_number); priv->user_override = FALSE; g_object_notify (G_OBJECT (entry), "user-override"); break; default: break; } /* Mak sure the entry text is up to date */ gimp_number_pair_entry_update_text (entry); gtk_editable_set_position (GTK_EDITABLE (entry), -1); } break; default: break; } return FALSE; }