[gimp] app: make the LayerOptionsDialog private
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: make the LayerOptionsDialog private
- Date: Sat, 24 Sep 2016 19:11:07 +0000 (UTC)
commit c2f264f5ca327326204ccad7363685501eebb3bf
Author: Michael Natterer <mitch gimp org>
Date: Sat Sep 24 21:10:07 2016 +0200
app: make the LayerOptionsDialog private
and provide a custom callback instead. Also attach the "New Layer"
and "Edit Layer Attributes" to their image/layer.
app/actions/layers-commands.c | 321 ++++++++++++++++++-----------------
app/dialogs/layer-options-dialog.c | 213 ++++++++++++++++--------
app/dialogs/layer-options-dialog.h | 55 +++----
3 files changed, 335 insertions(+), 254 deletions(-)
---
diff --git a/app/actions/layers-commands.c b/app/actions/layers-commands.c
index 31439bf..2e14e9a 100644
--- a/app/actions/layers-commands.c
+++ b/app/actions/layers-commands.c
@@ -112,41 +112,55 @@ static const GimpLayerModeEffects layer_modes[] =
/* local function prototypes */
-static void layers_new_layer_response (GtkWidget *widget,
- gint response_id,
- LayerOptionsDialog *dialog);
-static void layers_edit_layer_response (GtkWidget *widget,
- gint response_id,
- LayerOptionsDialog *dialog);
-static void layers_add_mask_callback (GtkWidget *dialog,
- GimpLayer *layer,
- GimpAddMaskType add_mask_type,
- GimpChannel *channel,
- gboolean invert,
- gpointer user_data);
-static void layers_scale_layer_callback (GtkWidget *dialog,
- GimpViewable *viewable,
- gint width,
- gint height,
- GimpUnit unit,
- GimpInterpolationType interpolation,
- gdouble xresolution,
- gdouble yresolution,
- GimpUnit resolution_unit,
- gpointer user_data);
-static void layers_resize_layer_callback (GtkWidget *dialog,
- GimpViewable *viewable,
- GimpContext *context,
- gint width,
- gint height,
- GimpUnit unit,
- gint offset_x,
- gint offset_y,
- GimpItemSet unused,
- gboolean unused2,
- gpointer data);
-
-static gint layers_mode_index (GimpLayerModeEffects layer_mode);
+static void layers_new_callback (GtkWidget *dialog,
+ GimpImage *image,
+ GimpLayer *layer,
+ GimpContext *context,
+ const gchar *layer_name,
+ GimpFillType layer_fill_type,
+ gint layer_width,
+ gint layer_height,
+ gboolean rename_text_layer,
+ gpointer user_data);
+static void layers_edit_attributes_callback (GtkWidget *dialog,
+ GimpImage *image,
+ GimpLayer *layer,
+ GimpContext *context,
+ const gchar *layer_name,
+ GimpFillType layer_fill_type,
+ gint layer_width,
+ gint layer_height,
+ gboolean rename_text_layer,
+ gpointer user_data);
+static void layers_add_mask_callback (GtkWidget *dialog,
+ GimpLayer *layer,
+ GimpAddMaskType add_mask_type,
+ GimpChannel *channel,
+ gboolean invert,
+ gpointer user_data);
+static void layers_scale_layer_callback (GtkWidget *dialog,
+ GimpViewable *viewable,
+ gint width,
+ gint height,
+ GimpUnit unit,
+ GimpInterpolationType interpolation,
+ gdouble xresolution,
+ gdouble yresolution,
+ GimpUnit resolution_unit,
+ gpointer user_data);
+static void layers_resize_layer_callback (GtkWidget *dialog,
+ GimpViewable *viewable,
+ GimpContext *context,
+ gint width,
+ gint height,
+ GimpUnit unit,
+ gint offset_x,
+ gint offset_y,
+ GimpItemSet unused,
+ gboolean unused2,
+ gpointer data);
+
+static gint layers_mode_index (GimpLayerModeEffects layer_mode);
/* private variables */
@@ -197,49 +211,50 @@ void
layers_edit_attributes_cmd_callback (GtkAction *action,
gpointer data)
{
- LayerOptionsDialog *dialog;
- GimpImage *image;
- GimpLayer *layer;
- GtkWidget *widget;
- GimpDialogConfig *config;
+ GimpImage *image;
+ GimpLayer *layer;
+ GtkWidget *widget;
+ GtkWidget *dialog;
return_if_no_layer (image, layer, data);
return_if_no_widget (widget, data);
- config = GIMP_DIALOG_CONFIG (image->gimp->config);
+#define EDIT_DIALOG_KEY "gimp-layer-edit-attributes-dialog"
+
+ dialog = dialogs_get_dialog (G_OBJECT (layer), EDIT_DIALOG_KEY);
- dialog = layer_options_dialog_new (gimp_item_get_image (GIMP_ITEM (layer)),
- layer,
- action_data_get_context (data),
- widget,
- _("Layer Attributes"),
- "gimp-layer-edit",
- "gtk-edit",
- _("Edit Layer Attributes"),
- GIMP_HELP_LAYER_EDIT,
- gimp_object_get_name (layer),
- config->layer_new_fill_type);
-
- g_signal_connect (dialog->dialog, "response",
- G_CALLBACK (layers_edit_layer_response),
- dialog);
-
- gtk_widget_show (dialog->dialog);
+ if (! dialog)
+ {
+ dialog = layer_options_dialog_new (gimp_item_get_image (GIMP_ITEM (layer)),
+ layer,
+ action_data_get_context (data),
+ widget,
+ _("Layer Attributes"),
+ "gimp-layer-edit",
+ "gtk-edit",
+ _("Edit Layer Attributes"),
+ GIMP_HELP_LAYER_EDIT,
+ gimp_object_get_name (layer),
+ 0 /* unused */,
+ layers_edit_attributes_callback,
+ NULL);
+
+ dialogs_attach_dialog (G_OBJECT (layer), EDIT_DIALOG_KEY, dialog);
+ }
+
+ gtk_window_present (GTK_WINDOW (dialog));
}
void
layers_new_cmd_callback (GtkAction *action,
gpointer data)
{
- LayerOptionsDialog *dialog;
- GimpImage *image;
- GtkWidget *widget;
- GimpLayer *floating_sel;
- GimpDialogConfig *config;
+ GimpImage *image;
+ GtkWidget *widget;
+ GimpLayer *floating_sel;
+ GtkWidget *dialog;
return_if_no_image (image, data);
return_if_no_widget (widget, data);
- config = GIMP_DIALOG_CONFIG (image->gimp->config);
-
/* If there is a floating selection, the new command transforms
* the current fs into a new layer
*/
@@ -260,22 +275,31 @@ layers_new_cmd_callback (GtkAction *action,
return;
}
- dialog = layer_options_dialog_new (image, NULL,
- action_data_get_context (data),
- widget,
- _("New Layer"),
- "gimp-layer-new",
- GIMP_STOCK_LAYER,
- _("Create a New Layer"),
- GIMP_HELP_LAYER_NEW,
- config->layer_new_name,
- config->layer_new_fill_type);
-
- g_signal_connect (dialog->dialog, "response",
- G_CALLBACK (layers_new_layer_response),
- dialog);
-
- gtk_widget_show (dialog->dialog);
+#define NEW_DIALOG_KEY "gimp-layer-new-dialog"
+
+ dialog = dialogs_get_dialog (G_OBJECT (image), NEW_DIALOG_KEY);
+
+ if (! dialog)
+ {
+ GimpDialogConfig *config = GIMP_DIALOG_CONFIG (image->gimp->config);
+
+ dialog = layer_options_dialog_new (image, NULL,
+ action_data_get_context (data),
+ widget,
+ _("New Layer"),
+ "gimp-layer-new",
+ GIMP_STOCK_LAYER,
+ _("Create a New Layer"),
+ GIMP_HELP_LAYER_NEW,
+ config->layer_new_name,
+ config->layer_new_fill_type,
+ layers_new_callback,
+ NULL);
+
+ dialogs_attach_dialog (G_OBJECT (image), NEW_DIALOG_KEY, dialog);
+ }
+
+ gtk_window_present (GTK_WINDOW (dialog));
}
void
@@ -1097,99 +1121,84 @@ layers_lock_alpha_cmd_callback (GtkAction *action,
/* private functions */
static void
-layers_new_layer_response (GtkWidget *widget,
- gint response_id,
- LayerOptionsDialog *dialog)
+layers_new_callback (GtkWidget *dialog,
+ GimpImage *image,
+ GimpLayer *layer,
+ GimpContext *context,
+ const gchar *layer_name,
+ GimpFillType layer_fill_type,
+ gint layer_width,
+ gint layer_height,
+ gboolean rename_text_layer, /* unused */
+ gpointer user_data)
{
- if (response_id == GTK_RESPONSE_OK)
- {
- GimpDialogConfig *config;
- GimpLayer *layer;
-
- config = GIMP_DIALOG_CONFIG (dialog->image->gimp->config);
-
- g_object_set (config,
- "layer-new-fill-type", dialog->fill_type,
- "layer-new-name",
- gtk_entry_get_text (GTK_ENTRY (dialog->name_entry)),
- NULL);
-
- dialog->xsize =
- RINT (gimp_size_entry_get_refval (GIMP_SIZE_ENTRY (dialog->size_se),
- 0));
- dialog->ysize =
- RINT (gimp_size_entry_get_refval (GIMP_SIZE_ENTRY (dialog->size_se),
- 1));
-
- layer = gimp_layer_new (dialog->image,
- dialog->xsize,
- dialog->ysize,
- gimp_image_get_layer_format (dialog->image, TRUE),
- config->layer_new_name,
- GIMP_OPACITY_OPAQUE, GIMP_NORMAL_MODE);
+ GimpDialogConfig *config = GIMP_DIALOG_CONFIG (image->gimp->config);
- if (layer)
- {
- gimp_drawable_fill (GIMP_DRAWABLE (layer),
- dialog->context,
- config->layer_new_fill_type);
+ g_object_set (config,
+ "layer-new-name", layer_name,
+ "layer-new-fill-type", layer_fill_type,
+ NULL);
- gimp_image_add_layer (dialog->image, layer,
- GIMP_IMAGE_ACTIVE_PARENT, -1, TRUE);
+ layer = gimp_layer_new (image, layer_width, layer_height,
+ gimp_image_get_layer_format (image, TRUE),
+ config->layer_new_name,
+ GIMP_OPACITY_OPAQUE, GIMP_NORMAL_MODE);
- gimp_image_flush (dialog->image);
- }
- else
- {
- g_warning ("%s: could not allocate new layer", G_STRFUNC);
- }
+ if (layer)
+ {
+ gimp_drawable_fill (GIMP_DRAWABLE (layer), context,
+ config->layer_new_fill_type);
+ gimp_image_add_layer (image, layer,
+ GIMP_IMAGE_ACTIVE_PARENT, -1, TRUE);
+ gimp_image_flush (image);
+ }
+ else
+ {
+ g_warning ("%s: could not allocate new layer", G_STRFUNC);
}
- gtk_widget_destroy (dialog->dialog);
+ gtk_widget_destroy (dialog);
}
static void
-layers_edit_layer_response (GtkWidget *widget,
- gint response_id,
- LayerOptionsDialog *dialog)
+layers_edit_attributes_callback (GtkWidget *dialog,
+ GimpImage *image,
+ GimpLayer *layer,
+ GimpContext *context,
+ const gchar *layer_name,
+ GimpFillType layer_fill_type, /* unused */
+ gint layer_width, /* unused */
+ gint layer_height, /* unused */
+ gboolean rename_text_layer,
+ gpointer user_data)
{
- if (response_id == GTK_RESPONSE_OK)
+ if (strcmp (layer_name, gimp_object_get_name (layer)))
{
- GimpLayer *layer = dialog->layer;
- const gchar *new_name;
-
- new_name = gtk_entry_get_text (GTK_ENTRY (dialog->name_entry));
+ GError *error = NULL;
- if (strcmp (new_name, gimp_object_get_name (layer)))
+ if (gimp_item_rename (GIMP_ITEM (layer), layer_name, &error))
{
- GError *error = NULL;
-
- if (gimp_item_rename (GIMP_ITEM (layer), new_name, &error))
- {
- gimp_image_flush (dialog->image);
- }
- else
- {
- gimp_message_literal (dialog->image->gimp,
- G_OBJECT (widget), GIMP_MESSAGE_WARNING,
- error->message);
- g_clear_error (&error);
-
- return;
- }
+ gimp_image_flush (image);
}
-
- if (dialog->rename_toggle &&
- gimp_item_is_text_layer (GIMP_ITEM (layer)))
+ else
{
- g_object_set (layer,
- "auto-rename",
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->rename_toggle)),
- NULL);
+ gimp_message_literal (image->gimp,
+ G_OBJECT (dialog), GIMP_MESSAGE_WARNING,
+ error->message);
+ g_clear_error (&error);
+
+ return;
}
}
- gtk_widget_destroy (dialog->dialog);
+ if (gimp_item_is_text_layer (GIMP_ITEM (layer)))
+ {
+ g_object_set (layer,
+ "auto-rename", rename_text_layer,
+ NULL);
+ }
+
+ gtk_widget_destroy (dialog);
}
static void
diff --git a/app/dialogs/layer-options-dialog.c b/app/dialogs/layer-options-dialog.c
index 0fd69ea..92f9a20 100644
--- a/app/dialogs/layer-options-dialog.c
+++ b/app/dialogs/layer-options-dialog.c
@@ -21,6 +21,7 @@
#include <gtk/gtk.h>
#include "libgimpbase/gimpbase.h"
+#include "libgimpmath/gimpmath.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "dialogs-types.h"
@@ -41,29 +42,52 @@
#include "gimp-intl.h"
+typedef struct _LayerOptionsDialog LayerOptionsDialog;
+
+struct _LayerOptionsDialog
+{
+ GimpImage *image;
+ GimpLayer *layer;
+ GimpContext *context;
+ GimpFillType fill_type;
+ GimpLayerOptionsCallback callback;
+ gpointer user_data;
+
+ GtkWidget *name_entry;
+ GtkWidget *size_se;
+ GtkWidget *rename_toggle;
+};
+
+
/* local function prototypes */
+static void layer_options_dialog_response (GtkWidget *dialog,
+ gint response_id,
+ LayerOptionsDialog *private);
static void layer_options_dialog_toggle_rename (GtkWidget *widget,
- LayerOptionsDialog *options);
-static void layer_options_dialog_free (LayerOptionsDialog *options);
+ LayerOptionsDialog *private);
+static void layer_options_dialog_free (LayerOptionsDialog *private);
/* public functions */
-LayerOptionsDialog *
-layer_options_dialog_new (GimpImage *image,
- GimpLayer *layer,
- GimpContext *context,
- GtkWidget *parent,
- const gchar *title,
- const gchar *role,
- const gchar *icon_name,
- const gchar *desc,
- const gchar *help_id,
- const gchar *layer_name,
- GimpFillType layer_fill_type)
+GtkWidget *
+layer_options_dialog_new (GimpImage *image,
+ GimpLayer *layer,
+ GimpContext *context,
+ GtkWidget *parent,
+ const gchar *title,
+ const gchar *role,
+ const gchar *icon_name,
+ const gchar *desc,
+ const gchar *help_id,
+ const gchar *layer_name,
+ GimpFillType layer_fill_type,
+ GimpLayerOptionsCallback callback,
+ gpointer user_data)
{
- LayerOptionsDialog *options;
+ LayerOptionsDialog *private;
+ GtkWidget *dialog;
GimpViewable *viewable;
GtkWidget *vbox;
GtkWidget *table;
@@ -78,41 +102,46 @@ layer_options_dialog_new (GimpImage *image,
g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL);
g_return_val_if_fail (GTK_IS_WIDGET (parent), NULL);
- options = g_slice_new0 (LayerOptionsDialog);
+ private = g_slice_new0 (LayerOptionsDialog);
- options->image = image;
- options->context = context;
- options->layer = layer;
- options->fill_type = layer_fill_type;
+ private->image = image;
+ private->layer = layer;
+ private->context = context;
+ private->fill_type = layer_fill_type;
+ private->callback = callback;
+ private->user_data = user_data;
if (layer)
viewable = GIMP_VIEWABLE (layer);
else
viewable = GIMP_VIEWABLE (image);
- options->dialog =
- gimp_viewable_dialog_new (viewable, context,
- title, role, icon_name, desc,
- parent,
- gimp_standard_help_func, help_id,
-
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
+ dialog = gimp_viewable_dialog_new (viewable, context,
+ title, role, icon_name, desc,
+ parent,
+ gimp_standard_help_func, help_id,
- NULL);
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
- g_object_weak_ref (G_OBJECT (options->dialog),
- (GWeakNotify) layer_options_dialog_free, options);
+ NULL);
- gtk_dialog_set_alternative_button_order (GTK_DIALOG (options->dialog),
+ gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
GTK_RESPONSE_OK,
GTK_RESPONSE_CANCEL,
-1);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (layer_options_dialog_response),
+ private);
+
+ g_object_weak_ref (G_OBJECT (dialog),
+ (GWeakNotify) layer_options_dialog_free, private);
+
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
gtk_box_set_spacing (GTK_BOX (vbox), 12);
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (options->dialog))),
+ gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
vbox, TRUE, TRUE, 0);
gtk_widget_show (vbox);
@@ -123,13 +152,13 @@ layer_options_dialog_new (GimpImage *image,
gtk_widget_show (table);
/* The name label and entry */
- options->name_entry = gtk_entry_new ();
+ private->name_entry = gtk_entry_new ();
gimp_table_attach_aligned (GTK_TABLE (table), 0, 0,
_("Layer _name:"), 0.0, 0.5,
- options->name_entry, 1, FALSE);
+ private->name_entry, 1, FALSE);
- gtk_entry_set_activates_default (GTK_ENTRY (options->name_entry), TRUE);
- gtk_entry_set_text (GTK_ENTRY (options->name_entry), layer_name);
+ gtk_entry_set_activates_default (GTK_ENTRY (private->name_entry), TRUE);
+ gtk_entry_set_text (GTK_ENTRY (private->name_entry), layer_name);
if (! layer)
{
@@ -158,45 +187,45 @@ layer_options_dialog_new (GimpImage *image,
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE);
gtk_entry_set_width_chars (GTK_ENTRY (spinbutton), 10);
- options->size_se = gimp_size_entry_new (1, GIMP_UNIT_PIXEL, "%a",
+ private->size_se = gimp_size_entry_new (1, GIMP_UNIT_PIXEL, "%a",
TRUE, TRUE, FALSE, 10,
GIMP_SIZE_ENTRY_UPDATE_SIZE);
- gtk_table_set_col_spacing (GTK_TABLE (options->size_se), 1, 4);
- gtk_table_set_row_spacing (GTK_TABLE (options->size_se), 0, 2);
+ gtk_table_set_col_spacing (GTK_TABLE (private->size_se), 1, 4);
+ gtk_table_set_row_spacing (GTK_TABLE (private->size_se), 0, 2);
- gimp_size_entry_add_field (GIMP_SIZE_ENTRY (options->size_se),
+ gimp_size_entry_add_field (GIMP_SIZE_ENTRY (private->size_se),
GTK_SPIN_BUTTON (spinbutton), NULL);
- gtk_table_attach_defaults (GTK_TABLE (options->size_se), spinbutton,
+ gtk_table_attach_defaults (GTK_TABLE (private->size_se), spinbutton,
1, 2, 0, 1);
gtk_widget_show (spinbutton);
- gtk_table_attach (GTK_TABLE (table), options->size_se, 1, 2, 1, 3,
+ gtk_table_attach (GTK_TABLE (table), private->size_se, 1, 2, 1, 3,
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
- gtk_widget_show (options->size_se);
+ gtk_widget_show (private->size_se);
- gimp_size_entry_set_unit (GIMP_SIZE_ENTRY (options->size_se),
+ gimp_size_entry_set_unit (GIMP_SIZE_ENTRY (private->size_se),
GIMP_UNIT_PIXEL);
- gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (options->size_se), 0,
+ gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (private->size_se), 0,
xres, FALSE);
- gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (options->size_se), 1,
+ gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (private->size_se), 1,
yres, FALSE);
- gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (options->size_se), 0,
+ gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (private->size_se), 0,
GIMP_MIN_IMAGE_SIZE,
GIMP_MAX_IMAGE_SIZE);
- gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (options->size_se), 1,
+ gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (private->size_se), 1,
GIMP_MIN_IMAGE_SIZE,
GIMP_MAX_IMAGE_SIZE);
- gimp_size_entry_set_size (GIMP_SIZE_ENTRY (options->size_se), 0,
+ gimp_size_entry_set_size (GIMP_SIZE_ENTRY (private->size_se), 0,
0, gimp_image_get_width (image));
- gimp_size_entry_set_size (GIMP_SIZE_ENTRY (options->size_se), 1,
+ gimp_size_entry_set_size (GIMP_SIZE_ENTRY (private->size_se), 1,
0, gimp_image_get_height (image));
- gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (options->size_se), 0,
+ gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (private->size_se), 0,
gimp_image_get_width (image));
- gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (options->size_se), 1,
+ gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (private->size_se), 1,
gimp_image_get_height (image));
/* The radio frame */
@@ -205,10 +234,10 @@ layer_options_dialog_new (GimpImage *image,
GIMP_FILL_TRANSPARENT,
gtk_label_new (_("Layer Fill Type")),
G_CALLBACK (gimp_radio_button_update),
- &options->fill_type,
+ &private->fill_type,
&button);
gimp_int_radio_group_set_active (GTK_RADIO_BUTTON (button),
- options->fill_type);
+ private->fill_type);
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
}
@@ -221,19 +250,19 @@ layer_options_dialog_new (GimpImage *image,
/* For text layers add a toggle to control "auto-rename" */
if (gimp_item_is_text_layer (GIMP_ITEM (layer)))
{
- options->rename_toggle =
+ private->rename_toggle =
gtk_check_button_new_with_mnemonic (_("Set name from _text"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (options->rename_toggle),
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (private->rename_toggle),
GIMP_TEXT_LAYER (layer)->auto_rename);
- gtk_table_attach (GTK_TABLE (table), options->rename_toggle, 1, 2, 1, 2,
+ gtk_table_attach (GTK_TABLE (table), private->rename_toggle, 1, 2, 1, 2,
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
- gtk_widget_show (options->rename_toggle);
+ gtk_widget_show (private->rename_toggle);
- g_signal_connect (options->rename_toggle, "toggled",
+ g_signal_connect (private->rename_toggle, "toggled",
G_CALLBACK (layer_options_dialog_toggle_rename),
- options);
+ private);
}
frame = gimp_frame_new ("Active Filters");
@@ -248,27 +277,75 @@ layer_options_dialog_new (GimpImage *image,
gtk_widget_show (view);
}
- return options;
+ return dialog;
}
/* private functions */
static void
+layer_options_dialog_response (GtkWidget *dialog,
+ gint response_id,
+ LayerOptionsDialog *private)
+{
+ if (response_id == GTK_RESPONSE_OK)
+ {
+ const gchar *name;
+ gint width = 0;
+ gint height = 0;
+ gboolean rename_text_layer = FALSE;
+
+ name = gtk_entry_get_text (GTK_ENTRY (private->name_entry));
+
+ if (! private->layer)
+ {
+ width =
+ RINT (gimp_size_entry_get_refval (GIMP_SIZE_ENTRY (private->size_se),
+ 0));
+ height =
+ RINT (gimp_size_entry_get_refval (GIMP_SIZE_ENTRY (private->size_se),
+ 1));
+ }
+
+ if (private->layer &&
+ gimp_item_is_text_layer (GIMP_ITEM (private->layer)))
+ {
+ rename_text_layer =
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (private->rename_toggle));
+ }
+
+ private->callback (dialog,
+ private->image,
+ private->layer,
+ private->context,
+ name,
+ private->fill_type,
+ width,
+ height,
+ rename_text_layer,
+ private->user_data);
+ }
+ else
+ {
+ gtk_widget_destroy (dialog);
+ }
+}
+
+static void
layer_options_dialog_toggle_rename (GtkWidget *widget,
- LayerOptionsDialog *options)
+ LayerOptionsDialog *private)
{
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) &&
- gimp_item_is_text_layer (GIMP_ITEM (options->layer)))
+ gimp_item_is_text_layer (GIMP_ITEM (private->layer)))
{
- GimpTextLayer *text_layer = GIMP_TEXT_LAYER (options->layer);
+ GimpTextLayer *text_layer = GIMP_TEXT_LAYER (private->layer);
GimpText *text = gimp_text_layer_get_text (text_layer);
if (text && text->text)
{
gchar *name = gimp_utf8_strtrim (text->text, 30);
- gtk_entry_set_text (GTK_ENTRY (options->name_entry), name);
+ gtk_entry_set_text (GTK_ENTRY (private->name_entry), name);
g_free (name);
}
@@ -276,7 +353,7 @@ layer_options_dialog_toggle_rename (GtkWidget *widget,
}
static void
-layer_options_dialog_free (LayerOptionsDialog *options)
+layer_options_dialog_free (LayerOptionsDialog *private)
{
- g_slice_free (LayerOptionsDialog, options);
+ g_slice_free (LayerOptionsDialog, private);
}
diff --git a/app/dialogs/layer-options-dialog.h b/app/dialogs/layer-options-dialog.h
index f9c7ca4..34d7168 100644
--- a/app/dialogs/layer-options-dialog.h
+++ b/app/dialogs/layer-options-dialog.h
@@ -19,36 +19,31 @@
#define __LAYER_OPTIONS_DIALOG_H__
-typedef struct _LayerOptionsDialog LayerOptionsDialog;
-
-struct _LayerOptionsDialog
-{
- GtkWidget *dialog;
- GtkWidget *name_entry;
- GtkWidget *size_se;
- GtkWidget *rename_toggle;
-
- GimpFillType fill_type;
- gint xsize;
- gint ysize;
-
- GimpImage *image;
- GimpContext *context;
- GimpLayer *layer;
-};
-
-
-LayerOptionsDialog * layer_options_dialog_new (GimpImage *image,
- GimpLayer *layer,
- GimpContext *context,
- GtkWidget *parent,
- const gchar *title,
- const gchar *role,
- const gchar *icon_name,
- const gchar *desc,
- const gchar *help_id,
- const gchar *layer_name,
- GimpFillType layer_fill_type);
+typedef void (* GimpLayerOptionsCallback) (GtkWidget *dialog,
+ GimpImage *image,
+ GimpLayer *layer,
+ GimpContext *context,
+ const gchar *layer_name,
+ GimpFillType layer_fill_type,
+ gint layer_width,
+ gint layer_height,
+ gboolean rename_text_layer,
+ gpointer user_data);
+
+
+GtkWidget * layer_options_dialog_new (GimpImage *image,
+ GimpLayer *layer,
+ GimpContext *context,
+ GtkWidget *parent,
+ const gchar *title,
+ const gchar *role,
+ const gchar *icon_name,
+ const gchar *desc,
+ const gchar *help_id,
+ const gchar *layer_name,
+ GimpFillType layer_fill_type,
+ GimpLayerOptionsCallback callback,
+ gpointer user_data);
#endif /* __LAYER_OPTIONS_DIALOG_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]