[gimp] Bug 767348 - Make Paint Dynamics icon customizable



commit af88e98afd3c10995d95fa84605953a32ff78473
Author: Michael Natterer <mitch gimp org>
Date:   Thu Jun 30 11:38:03 2016 +0200

    Bug 767348 - Make Paint Dynamics icon customizable
    
    Add an icon button to the dynamics editor's "mapping matrix" page. It
    looks just as ugly as the icon button of the tool preset editor, the
    two should be visually improved together.

 app/widgets/gimpdynamicseditor.c |   96 +++++++++++++++++++++++++++----------
 app/widgets/gimpdynamicseditor.h |    1 -
 2 files changed, 70 insertions(+), 27 deletions(-)
---
diff --git a/app/widgets/gimpdynamicseditor.c b/app/widgets/gimpdynamicseditor.c
index da154f1..8d19f5d 100644
--- a/app/widgets/gimpdynamicseditor.c
+++ b/app/widgets/gimpdynamicseditor.c
@@ -54,6 +54,10 @@ static void   gimp_dynamics_editor_notify_data     (GimpDynamics       *options,
                                                     const GParamSpec   *pspec,
                                                     GimpDynamicsEditor *editor);
 
+static void   gimp_dynamics_editor_add_icon_editor (GimpDynamics       *dynamics,
+                                                    Gimp               *gimp,
+                                                    GtkWidget          *vbox);
+
 static void   gimp_dynamics_editor_add_output_row  (GObject     *config,
                                                     const gchar *row_label,
                                                     GtkTable    *table,
@@ -97,14 +101,10 @@ static void
 gimp_dynamics_editor_init (GimpDynamicsEditor *editor)
 {
   GimpDataEditor *data_editor = GIMP_DATA_EDITOR (editor);
-  GimpDynamics   *dynamics;
-  GtkWidget      *input_labels[7];
-  gint            n_inputs    = G_N_ELEMENTS (input_labels);
-  gint            i;
 
-  dynamics = editor->dynamics_model = g_object_new (GIMP_TYPE_DYNAMICS, NULL);
+  editor->dynamics_model = g_object_new (GIMP_TYPE_DYNAMICS, NULL);
 
-  g_signal_connect (dynamics, "notify",
+  g_signal_connect (editor->dynamics_model, "notify",
                     G_CALLBACK (gimp_dynamics_editor_notify_model),
                     editor);
 
@@ -119,25 +119,44 @@ gimp_dynamics_editor_init (GimpDynamicsEditor *editor)
   gtk_notebook_set_show_tabs (GTK_NOTEBOOK (editor->notebook), FALSE);
   gtk_box_pack_start (GTK_BOX (editor), editor->notebook, TRUE, TRUE, 0);
   gtk_widget_show (editor->notebook);
+}
 
-  editor->check_grid = gtk_table_new (10, n_inputs + 2, FALSE);
+static void
+gimp_dynamics_editor_constructed (GObject *object)
+{
+  GimpDataEditor     *data_editor = GIMP_DATA_EDITOR (object);
+  GimpDynamicsEditor *editor      = GIMP_DYNAMICS_EDITOR (object);
+  GimpDynamics       *dynamics    = editor->dynamics_model;
+  GtkWidget          *input_labels[7];
+  GtkWidget          *vbox;
+  GtkWidget          *icon_box;
+  GtkWidget          *table;
+  gint                n_inputs    = G_N_ELEMENTS (input_labels);
+  gint                i;
 
-  gimp_dynamics_editor_init_output_editors (dynamics,
-                                            editor->view_selector,
-                                            editor->notebook,
-                                            editor->check_grid);
+  G_OBJECT_CLASS (parent_class)->constructed (object);
 
+  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
   gtk_notebook_append_page (GTK_NOTEBOOK (editor->notebook),
-                            editor->check_grid, NULL);
-  gtk_widget_show (editor->check_grid);
+                            vbox, NULL);
+  gtk_widget_show (vbox);
 
-  gimp_int_combo_box_prepend (GIMP_INT_COMBO_BOX (editor->view_selector),
-                              GIMP_INT_STORE_VALUE,     -1,
-                              GIMP_INT_STORE_LABEL,     _("Mapping matrix"),
-                              GIMP_INT_STORE_USER_DATA, editor->check_grid,
-                              -1);
+  icon_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
+  gtk_box_pack_start (GTK_BOX (vbox), icon_box, FALSE, FALSE, 0);
+  gtk_widget_show (icon_box);
 
-  gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (editor->view_selector), -1);
+  gimp_dynamics_editor_add_icon_editor (dynamics,
+                                        data_editor->context->gimp,
+                                        vbox);
+
+  table = gtk_table_new (10, n_inputs + 2, FALSE);
+  gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
+  gtk_widget_show (table);
+
+  gimp_dynamics_editor_init_output_editors (dynamics,
+                                            editor->view_selector,
+                                            editor->notebook,
+                                            table);
 
   input_labels[0] = gtk_label_new (_("Pressure"));
   input_labels[1] = gtk_label_new (_("Velocity"));
@@ -152,17 +171,19 @@ gimp_dynamics_editor_init (GimpDynamicsEditor *editor)
       gtk_label_set_angle (GTK_LABEL (input_labels[i]), 90);
       gtk_misc_set_alignment (GTK_MISC (input_labels[i]), 0.5, 1.0);
 
-      gtk_table_attach (GTK_TABLE (editor->check_grid), input_labels[i],
+      gtk_table_attach (GTK_TABLE (table), input_labels[i],
                         i + 1, i + 2, 0, 1,
                         GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
       gtk_widget_show (input_labels[i]);
     }
-}
 
-static void
-gimp_dynamics_editor_constructed (GObject *object)
-{
-  G_OBJECT_CLASS (parent_class)->constructed (object);
+  gimp_int_combo_box_prepend (GIMP_INT_COMBO_BOX (editor->view_selector),
+                              GIMP_INT_STORE_VALUE,     -1,
+                              GIMP_INT_STORE_LABEL,     _("Mapping matrix"),
+                              GIMP_INT_STORE_USER_DATA, vbox,
+                              -1);
+
+  gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (editor->view_selector), -1);
 
   gimp_docked_set_show_button_bar (GIMP_DOCKED (object), FALSE);
 }
@@ -228,7 +249,8 @@ gimp_dynamics_editor_set_data (GimpDataEditor *editor,
                           GIMP_INT_STORE_USER_DATA, &widget,
                           -1);
 
-      gtk_widget_set_sensitive (widget, editor->data_editable);
+      if (widget)
+        gtk_widget_set_sensitive (widget, editor->data_editable);
     }
 }
 
@@ -299,6 +321,28 @@ gimp_dynamics_editor_notify_data (GimpDynamics       *options,
 }
 
 static void
+gimp_dynamics_editor_add_icon_editor (GimpDynamics *dynamics,
+                                      Gimp         *gimp,
+                                      GtkWidget    *vbox)
+{
+  GtkWidget *hbox;
+  GtkWidget *label;
+  GtkWidget *button;
+
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Icon:"));
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+  gtk_widget_show (label);
+
+  button = gimp_prop_icon_picker_new (GIMP_VIEWABLE (dynamics), gimp);
+  gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+  gtk_widget_show (button);
+}
+
+static void
 gimp_dynamics_editor_add_output_row (GObject     *config,
                                      const gchar *row_label,
                                      GtkTable    *table,
diff --git a/app/widgets/gimpdynamicseditor.h b/app/widgets/gimpdynamicseditor.h
index cbcd419..4139110 100644
--- a/app/widgets/gimpdynamicseditor.h
+++ b/app/widgets/gimpdynamicseditor.h
@@ -38,7 +38,6 @@ struct _GimpDynamicsEditor
 
   GimpDynamics   *dynamics_model;
 
-  GtkWidget      *check_grid;
   GtkWidget      *view_selector;
   GtkWidget      *notebook;
 };


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]