/** * gimp_number_pair_entry_set_aspect: * @entry: A #GimpNumberPairEntry widget. * @aspect: The new aspect. * * Sets the aspect of the ratio by swapping the left_number and * right_number if necessary (or setting them to 1.0 in case that * @aspect is %GIMP_ASPECT_SQUARE). * * Since: GIMP 2.4 **/ void gimp_number_pair_entry_set_aspect (GimpNumberPairEntry *entry, GimpAspectType aspect) { GimpNumberPairEntryPrivate *priv; g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry)); if (gimp_number_pair_entry_get_aspect (entry) == aspect) return; priv = GIMP_NUMBER_PAIR_ENTRY_GET_PRIVATE (entry); switch (aspect) { case GIMP_ASPECT_SQUARE: gimp_number_pair_entry_set_values (entry, priv->left_number, priv->left_number); break; case GIMP_ASPECT_LANDSCAPE: case GIMP_ASPECT_PORTRAIT: gimp_number_pair_entry_set_values (entry, priv->right_number, priv->left_number); break; } }
/** * gimp_number_pair_entry_set_ratio: * @entry: A #GimpNumberPairEntry widget. * @ratio: Ratio to set in the widget. * * Sets the numbers of the #GimpNumberPairEntry to have the desired * ratio. If the new ratio is different than the previous ratio, the * "ratio-changed" signal is emitted. * * An attempt is made to convert the decimal number into a fraction * with left_number and right_number < 1000. * * Since: GIMP 2.4 **/ void gimp_number_pair_entry_set_ratio (GimpNumberPairEntry *entry, gdouble ratio) { gdouble numerator; gdouble denominator; g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry)); gimp_number_pair_entry_ratio_to_fraction (ratio, &numerator, &denominator); gimp_number_pair_entry_set_values (entry, numerator, denominator); }
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); }
/** * gimp_number_pair_entry_set_default_values: * @entry: A #GimpNumberPairEntry widget. * @left: Default left value in the entry. * @right: Default right value in the entry. * * Since: GIMP 2.4 **/ void gimp_number_pair_entry_set_default_values (GimpNumberPairEntry *entry, gdouble left, gdouble right) { GimpNumberPairEntryPrivate *priv; g_return_if_fail (GIMP_IS_NUMBER_PAIR_ENTRY (entry)); priv = GIMP_NUMBER_PAIR_ENTRY_GET_PRIVATE (entry); priv->default_left_number = left; priv->default_right_number = right; if (! priv->user_override) { gimp_number_pair_entry_set_values (entry, priv->default_left_number, priv->default_right_number); } }
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; }
static void gimp_number_pair_entry_set_property (GObject *object, guint property_id, const 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: gimp_number_pair_entry_set_values (entry, g_value_get_double (value), priv->right_number); break; case PROP_RIGHT_NUMBER: gimp_number_pair_entry_set_values (entry, priv->left_number, g_value_get_double (value)); break; case PROP_DEFAULT_LEFT_NUMBER: gimp_number_pair_entry_set_default_values (entry, g_value_get_double (value), priv->default_right_number); break; case PROP_DEFAULT_RIGHT_NUMBER: gimp_number_pair_entry_set_default_values (entry, priv->default_left_number, g_value_get_double (value)); break; case PROP_USER_OVERRIDE: gimp_number_pair_entry_set_user_override (entry, g_value_get_boolean (value)); break; case PROP_SEPARATORS: g_free (priv->separators); priv->num_separators = 0; if (g_value_get_string (value)) priv->separators = g_utf8_to_ucs4 (g_value_get_string (value), -1, NULL, &priv->num_separators, NULL); else priv->separators = NULL; break; case PROP_DEFAULT_TEXT: gimp_number_pair_entry_set_default_text (entry, g_value_get_string (value)); break; case PROP_ALLOW_SIMPLIFICATION: priv->allow_simplification = g_value_get_boolean (value); break; case PROP_MIN_VALID_VALUE: priv->min_valid_value = g_value_get_double (value); break; case PROP_MAX_VALID_VALUE: priv->max_valid_value = g_value_get_double (value); break; case PROP_RATIO: gimp_number_pair_entry_set_ratio (entry, g_value_get_double (value)); break; case PROP_ASPECT: gimp_number_pair_entry_set_aspect (entry, g_value_get_enum (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }