libgimpwidgets: GimpUnitComboBox and GimpZoomModel...

...are now FINAL TYPEs.
This commit is contained in:
Alx Sa 2024-10-22 04:23:46 +00:00
parent 37d94f3fd6
commit bced3c5e04
4 changed files with 39 additions and 83 deletions

View file

@ -39,6 +39,12 @@
**/ **/
struct _GimpUnitComboBox
{
GtkComboBox parent_instance;
};
static void gimp_unit_combo_box_popup_shown (GimpUnitComboBox *widget); static void gimp_unit_combo_box_popup_shown (GimpUnitComboBox *widget);
static void gimp_unit_combo_box_constructed (GObject *object); static void gimp_unit_combo_box_constructed (GObject *object);

View file

@ -30,21 +30,7 @@ G_BEGIN_DECLS
#define GIMP_TYPE_UNIT_COMBO_BOX (gimp_unit_combo_box_get_type ()) #define GIMP_TYPE_UNIT_COMBO_BOX (gimp_unit_combo_box_get_type ())
G_DECLARE_DERIVABLE_TYPE (GimpUnitComboBox, gimp_unit_combo_box, GIMP, UNIT_COMBO_BOX, GtkComboBox) G_DECLARE_FINAL_TYPE (GimpUnitComboBox, gimp_unit_combo_box, GIMP, UNIT_COMBO_BOX, GtkComboBox)
struct _GimpUnitComboBoxClass
{
GtkComboBoxClass parent_class;
/* Padding for future expansion */
void (*_gimp_reserved1) (void);
void (*_gimp_reserved2) (void);
void (*_gimp_reserved3) (void);
void (*_gimp_reserved4) (void);
void (*_gimp_reserved5) (void);
void (*_gimp_reserved6) (void);
void (*_gimp_reserved7) (void);
void (*_gimp_reserved8) (void);
};
GtkWidget * gimp_unit_combo_box_new (void); GtkWidget * gimp_unit_combo_box_new (void);

View file

@ -63,12 +63,14 @@ enum
}; };
typedef struct _GimpZoomModelPrivate struct _GimpZoomModel
{ {
GObject parent_instance;
gdouble value; gdouble value;
gdouble minimum; gdouble minimum;
gdouble maximum; gdouble maximum;
} GimpZoomModelPrivate; };
static void gimp_zoom_model_set_property (GObject *object, static void gimp_zoom_model_set_property (GObject *object,
@ -84,7 +86,7 @@ static void gimp_zoom_model_get_property (GObject *object,
static guint zoom_model_signals[LAST_SIGNAL] = { 0, }; static guint zoom_model_signals[LAST_SIGNAL] = { 0, };
static GParamSpec *object_props[N_PROPS] = { NULL, }; static GParamSpec *object_props[N_PROPS] = { NULL, };
G_DEFINE_TYPE_WITH_PRIVATE (GimpZoomModel, gimp_zoom_model, G_TYPE_OBJECT) G_DEFINE_TYPE (GimpZoomModel, gimp_zoom_model, G_TYPE_OBJECT)
#define parent_class gimp_zoom_model_parent_class #define parent_class gimp_zoom_model_parent_class
@ -106,8 +108,7 @@ gimp_zoom_model_class_init (GimpZoomModelClass *klass)
g_signal_new ("zoomed", g_signal_new ("zoomed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpZoomModelClass, 0,
zoomed),
NULL, NULL, NULL, NULL,
_gimp_widgets_marshal_VOID__DOUBLE_DOUBLE, _gimp_widgets_marshal_VOID__DOUBLE_DOUBLE,
G_TYPE_NONE, 2, G_TYPE_NONE, 2,
@ -177,13 +178,9 @@ gimp_zoom_model_class_init (GimpZoomModelClass *klass)
static void static void
gimp_zoom_model_init (GimpZoomModel *model) gimp_zoom_model_init (GimpZoomModel *model)
{ {
GimpZoomModelPrivate *priv; model->value = 1.0;
model->minimum = ZOOM_MIN;
priv = gimp_zoom_model_get_instance_private (model); model->maximum = ZOOM_MAX;
priv->value = 1.0;
priv->minimum = ZOOM_MIN;
priv->maximum = ZOOM_MAX;
} }
static void static void
@ -192,17 +189,16 @@ gimp_zoom_model_set_property (GObject *object,
const GValue *value, const GValue *value,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpZoomModel *model = GIMP_ZOOM_MODEL (object); GimpZoomModel *model = GIMP_ZOOM_MODEL (object);
GimpZoomModelPrivate *priv = gimp_zoom_model_get_instance_private (model); gdouble previous_value;
gdouble previous_value;
previous_value = priv->value; previous_value = model->value;
g_object_freeze_notify (object); g_object_freeze_notify (object);
switch (property_id) switch (property_id)
{ {
case PROP_VALUE: case PROP_VALUE:
priv->value = g_value_get_double (value); model->value = g_value_get_double (value);
g_object_notify_by_pspec (object, object_props[PROP_VALUE]); g_object_notify_by_pspec (object, object_props[PROP_VALUE]);
g_object_notify_by_pspec (object, object_props[PROP_FRACTION]); g_object_notify_by_pspec (object, object_props[PROP_FRACTION]);
@ -210,11 +206,11 @@ gimp_zoom_model_set_property (GObject *object,
break; break;
case PROP_MINIMUM: case PROP_MINIMUM:
priv->minimum = MIN (g_value_get_double (value), priv->maximum); model->minimum = MIN (g_value_get_double (value), model->maximum);
break; break;
case PROP_MAXIMUM: case PROP_MAXIMUM:
priv->maximum = MAX (g_value_get_double (value), priv->minimum); model->maximum = MAX (g_value_get_double (value), model->minimum);
break; break;
default: default:
@ -222,9 +218,9 @@ gimp_zoom_model_set_property (GObject *object,
break; break;
} }
if (priv->value > priv->maximum || priv->value < priv->minimum) if (model->value > model->maximum || model->value < model->minimum)
{ {
priv->value = CLAMP (priv->value, priv->minimum, priv->maximum); model->value = CLAMP (model->value, model->minimum, model->maximum);
g_object_notify_by_pspec (object, object_props[PROP_VALUE]); g_object_notify_by_pspec (object, object_props[PROP_VALUE]);
g_object_notify_by_pspec (object, object_props[PROP_FRACTION]); g_object_notify_by_pspec (object, object_props[PROP_FRACTION]);
@ -233,10 +229,10 @@ gimp_zoom_model_set_property (GObject *object,
g_object_thaw_notify (object); g_object_thaw_notify (object);
if (priv->value != previous_value) if (model->value != previous_value)
{ {
g_signal_emit (object, zoom_model_signals[ZOOMED], g_signal_emit (object, zoom_model_signals[ZOOMED],
0, previous_value, priv->value); 0, previous_value, model->value);
} }
} }
@ -246,22 +242,21 @@ gimp_zoom_model_get_property (GObject *object,
GValue *value, GValue *value,
GParamSpec *pspec) GParamSpec *pspec)
{ {
GimpZoomModel *model = GIMP_ZOOM_MODEL (object); GimpZoomModel *model = GIMP_ZOOM_MODEL (object);
GimpZoomModelPrivate *priv = gimp_zoom_model_get_instance_private (model); gchar *tmp;
gchar *tmp;
switch (property_id) switch (property_id)
{ {
case PROP_VALUE: case PROP_VALUE:
g_value_set_double (value, priv->value); g_value_set_double (value, model->value);
break; break;
case PROP_MINIMUM: case PROP_MINIMUM:
g_value_set_double (value, priv->minimum); g_value_set_double (value, model->minimum);
break; break;
case PROP_MAXIMUM: case PROP_MAXIMUM:
g_value_set_double (value, priv->maximum); g_value_set_double (value, model->maximum);
break; break;
case PROP_FRACTION: case PROP_FRACTION:
@ -279,8 +274,8 @@ gimp_zoom_model_get_property (GObject *object,
break; break;
case PROP_PERCENTAGE: case PROP_PERCENTAGE:
tmp = g_strdup_printf (priv->value >= 0.15 ? "%.0f%%" : "%.2f%%", tmp = g_strdup_printf (model->value >= 0.15 ? "%.0f%%" : "%.2f%%",
priv->value * 100.0); model->value * 100.0);
g_value_set_string (value, tmp); g_value_set_string (value, tmp);
g_free (tmp); g_free (tmp);
break; break;
@ -294,18 +289,14 @@ gimp_zoom_model_get_property (GObject *object,
static void static void
gimp_zoom_model_zoom_in (GimpZoomModel *model) gimp_zoom_model_zoom_in (GimpZoomModel *model)
{ {
GimpZoomModelPrivate *priv = gimp_zoom_model_get_instance_private (model); if (model->value < model->maximum)
if (priv->value < priv->maximum)
gimp_zoom_model_zoom (model, GIMP_ZOOM_IN, 0.0); gimp_zoom_model_zoom (model, GIMP_ZOOM_IN, 0.0);
} }
static void static void
gimp_zoom_model_zoom_out (GimpZoomModel *model) gimp_zoom_model_zoom_out (GimpZoomModel *model)
{ {
GimpZoomModelPrivate *priv = gimp_zoom_model_get_instance_private (model); if (model->value > model->minimum)
if (priv->value > priv->minimum)
gimp_zoom_model_zoom (model, GIMP_ZOOM_OUT, 0.0); gimp_zoom_model_zoom (model, GIMP_ZOOM_OUT, 0.0);
} }
@ -392,13 +383,9 @@ gimp_zoom_model_zoom (GimpZoomModel *model,
gdouble gdouble
gimp_zoom_model_get_factor (GimpZoomModel *model) gimp_zoom_model_get_factor (GimpZoomModel *model)
{ {
GimpZoomModelPrivate *priv;
g_return_val_if_fail (GIMP_IS_ZOOM_MODEL (model), 1.0); g_return_val_if_fail (GIMP_IS_ZOOM_MODEL (model), 1.0);
priv = gimp_zoom_model_get_instance_private (model); return model->value;
return priv->value;
} }
@ -519,9 +506,7 @@ zoom_in_button_callback (GimpZoomModel *model,
gdouble new, gdouble new,
GtkWidget *button) GtkWidget *button)
{ {
GimpZoomModelPrivate *priv = gimp_zoom_model_get_instance_private (model); gtk_widget_set_sensitive (button, model->value != model->maximum);
gtk_widget_set_sensitive (button, priv->value != priv->maximum);
} }
static void static void
@ -530,9 +515,7 @@ zoom_out_button_callback (GimpZoomModel *model,
gdouble new, gdouble new,
GtkWidget *button) GtkWidget *button)
{ {
GimpZoomModelPrivate *priv = gimp_zoom_model_get_instance_private (model); gtk_widget_set_sensitive (button, model->value != model->minimum);
gtk_widget_set_sensitive (button, priv->value != priv->minimum);
} }
/** /**

View file

@ -30,26 +30,7 @@ G_BEGIN_DECLS
#define GIMP_TYPE_ZOOM_MODEL (gimp_zoom_model_get_type ()) #define GIMP_TYPE_ZOOM_MODEL (gimp_zoom_model_get_type ())
G_DECLARE_DERIVABLE_TYPE (GimpZoomModel, gimp_zoom_model, GIMP, ZOOM_MODEL, GtkGrid) G_DECLARE_FINAL_TYPE (GimpZoomModel, gimp_zoom_model, GIMP, ZOOM_MODEL, GObject)
struct _GimpZoomModelClass
{
GObjectClass parent_class;
void (* zoomed) (GimpZoomModel *model,
gdouble old_factor,
gdouble new_factor);
/* Padding for future expansion */
void (* _gimp_reserved1) (void);
void (* _gimp_reserved2) (void);
void (* _gimp_reserved3) (void);
void (* _gimp_reserved4) (void);
void (* _gimp_reserved5) (void);
void (* _gimp_reserved6) (void);
void (* _gimp_reserved7) (void);
void (* _gimp_reserved8) (void);
};
GimpZoomModel * gimp_zoom_model_new (void); GimpZoomModel * gimp_zoom_model_new (void);