diff --git a/ChangeLog b/ChangeLog index ac4a778236..b5a4347b9f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2003-06-02 Sven Neumann + + * app/widgets/gimpvectorstreeview.h + * app/widgets/widgets-types.h: moved function definitions to the + widgets-types header file. + + * app/gui/dialogs-constructors.c + * app/widgets/gimpselectioneditor.[ch]: added a "Selection to + Path" button as suggested in bug #112448. + 2003-06-02 Michael Natterer * app/core/gimpchannel.c (gimp_channel_scale, resize): make sure diff --git a/app/dialogs/dialogs-constructors.c b/app/dialogs/dialogs-constructors.c index d47d6cd09f..420dead32c 100644 --- a/app/dialogs/dialogs-constructors.c +++ b/app/dialogs/dialogs-constructors.c @@ -766,14 +766,19 @@ dialogs_selection_editor_new (GimpDialogFactory *factory, GimpContext *context, gint preview_size) { - GimpImage *gimage; - GtkWidget *view; - GtkWidget *dockable; + GimpImage *gimage; + GtkWidget *view; + GtkWidget *dockable; + GimpSelectionEditor *selection_editor; gimage = gimp_context_get_image (context); view = gimp_selection_editor_new (gimage); + selection_editor = GIMP_SELECTION_EDITOR (view); + + selection_editor->selection_to_vectors_func = vectors_selection_to_vectors; + dockable = dialogs_dockable_new (view, _("Selection Editor"), _("Selection"), GIMP_STOCK_TOOL_RECT_SELECT, diff --git a/app/gui/dialogs-constructors.c b/app/gui/dialogs-constructors.c index d47d6cd09f..420dead32c 100644 --- a/app/gui/dialogs-constructors.c +++ b/app/gui/dialogs-constructors.c @@ -766,14 +766,19 @@ dialogs_selection_editor_new (GimpDialogFactory *factory, GimpContext *context, gint preview_size) { - GimpImage *gimage; - GtkWidget *view; - GtkWidget *dockable; + GimpImage *gimage; + GtkWidget *view; + GtkWidget *dockable; + GimpSelectionEditor *selection_editor; gimage = gimp_context_get_image (context); view = gimp_selection_editor_new (gimage); + selection_editor = GIMP_SELECTION_EDITOR (view); + + selection_editor->selection_to_vectors_func = vectors_selection_to_vectors; + dockable = dialogs_dockable_new (view, _("Selection Editor"), _("Selection"), GIMP_STOCK_TOOL_RECT_SELECT, diff --git a/app/widgets/gimpselectioneditor.c b/app/widgets/gimpselectioneditor.c index 42706fa6ae..9be9f68b5c 100644 --- a/app/widgets/gimpselectioneditor.c +++ b/app/widgets/gimpselectioneditor.c @@ -51,6 +51,7 @@ #include "gimpdnd.h" #include "gimppreview.h" #include "gimppreviewrenderer.h" +#include "gimpwidgets-utils.h" #include "gimp-intl.h" @@ -69,6 +70,11 @@ static void gimp_selection_editor_none_clicked (GtkWidget *widget, GimpImageEditor *editor); static void gimp_selection_editor_save_clicked (GtkWidget *widget, GimpImageEditor *editor); +static void gimp_selection_editor_path_clicked (GtkWidget *widget, + GimpImageEditor *editor); +static void gimp_selection_editor_path_extended_clicked (GtkWidget *widget, + guint state, + GimpImageEditor *editor); static void gimp_selection_editor_stroke_clicked (GtkWidget *widget, GimpImageEditor *editor); @@ -130,12 +136,15 @@ static void gimp_selection_editor_init (GimpSelectionEditor *selection_editor) { GtkWidget *frame; + gchar *str; frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); gtk_box_pack_start (GTK_BOX (selection_editor), frame, TRUE, TRUE, 0); gtk_widget_show (frame); + selection_editor->selection_to_vectors_func = NULL; + selection_editor->preview = gimp_preview_new_by_types (GIMP_TYPE_PREVIEW, GIMP_TYPE_DRAWABLE, GIMP_PREVIEW_SIZE_HUGE, @@ -186,14 +195,29 @@ gimp_selection_editor_init (GimpSelectionEditor *selection_editor) NULL, selection_editor); + str = g_strdup_printf (_("Selection to Path\n" + "%s Advanced Options"), + gimp_get_mod_name_shift ()); + + selection_editor->path_button = + gimp_editor_add_button (GIMP_EDITOR (selection_editor), + GIMP_STOCK_SELECTION_TO_PATH, + str, NULL, + G_CALLBACK (gimp_selection_editor_path_clicked), + G_CALLBACK (gimp_selection_editor_path_extended_clicked), + selection_editor); + + g_free (str); + selection_editor->stroke_button = gimp_editor_add_button (GIMP_EDITOR (selection_editor), - GIMP_STOCK_SELECTION_STROKE, + GIMP_STOCK_SELECTION_STROKE, _("Stroke Selection"), NULL, G_CALLBACK (gimp_selection_editor_stroke_clicked), NULL, selection_editor); + gtk_widget_set_sensitive (GTK_WIDGET (selection_editor), FALSE); } @@ -296,6 +320,28 @@ gimp_selection_editor_save_clicked (GtkWidget *widget, } } +static void +gimp_selection_editor_path_clicked (GtkWidget *widget, + GimpImageEditor *editor) +{ + gimp_selection_editor_path_extended_clicked (widget, 0, editor); +} + +static void +gimp_selection_editor_path_extended_clicked (GtkWidget *widget, + guint state, + GimpImageEditor *editor) +{ + if (editor->gimage) + { + GimpSelectionEditor *sel_editor = GIMP_SELECTION_EDITOR (editor); + + if (sel_editor->selection_to_vectors_func) + sel_editor->selection_to_vectors_func (editor->gimage, + (state & GDK_SHIFT_MASK) != 0); + } +} + static void gimp_selection_editor_stroke_clicked (GtkWidget *widget, GimpImageEditor *editor) diff --git a/app/widgets/gimpselectioneditor.h b/app/widgets/gimpselectioneditor.h index cbaa34078b..004cac8bb3 100644 --- a/app/widgets/gimpselectioneditor.h +++ b/app/widgets/gimpselectioneditor.h @@ -35,15 +35,18 @@ typedef struct _GimpSelectionEditorClass GimpSelectionEditorClass; struct _GimpSelectionEditor { - GimpImageEditor parent_instance; + GimpImageEditor parent_instance; - GtkWidget *preview; + GimpSelectionToVectorsFunc selection_to_vectors_func; - GtkWidget *all_button; - GtkWidget *none_button; - GtkWidget *invert_button; - GtkWidget *save_button; - GtkWidget *stroke_button; + GtkWidget *preview; + + GtkWidget *all_button; + GtkWidget *none_button; + GtkWidget *invert_button; + GtkWidget *save_button; + GtkWidget *path_button; + GtkWidget *stroke_button; }; struct _GimpSelectionEditorClass diff --git a/app/widgets/gimpvectorstreeview.h b/app/widgets/gimpvectorstreeview.h index 6c80c8da00..88aa21bb1d 100644 --- a/app/widgets/gimpvectorstreeview.h +++ b/app/widgets/gimpvectorstreeview.h @@ -26,11 +26,6 @@ #include "gimpitemtreeview.h" -typedef void (* GimpStrokeItemFunc) (GimpVectors *vectors); -typedef void (* GimpSelectionToVectorsFunc) (GimpImage *gimage, - gboolean advanced); - - #define GIMP_TYPE_VECTORS_TREE_VIEW (gimp_vectors_tree_view_get_type ()) #define GIMP_VECTORS_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_VECTORS_TREE_VIEW, GimpVectorsTreeView)) #define GIMP_VECTORS_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_VECTORS_TREE_VIEW, GimpVectorsTreeViewClass)) diff --git a/app/widgets/widgets-types.h b/app/widgets/widgets-types.h index 5deeb13554..06ef37859b 100644 --- a/app/widgets/widgets-types.h +++ b/app/widgets/widgets-types.h @@ -116,9 +116,13 @@ typedef struct _GimpItemFactoryEntry GimpItemFactoryEntry; /* function types */ -typedef void (* GimpItemFactorySetupFunc) (GimpItemFactory *factory); -typedef void (* GimpItemFactoryUpdateFunc) (GtkItemFactory *factory, - gpointer data); +typedef void (* GimpItemFactorySetupFunc) (GimpItemFactory *factory); +typedef void (* GimpItemFactoryUpdateFunc) (GtkItemFactory *factory, + gpointer data); + +typedef void (* GimpStrokeItemFunc) (GimpVectors *vectors); +typedef void (* GimpSelectionToVectorsFunc) (GimpImage *gimage, + gboolean advanced); #endif /* __WIDGETS_TYPES_H__ */