[gimp] app: GimpEditor styling depending on config's icon settings.
- From: Jehan Pagès <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: GimpEditor styling depending on config's icon settings.
- Date: Sat, 11 Mar 2017 02:14:55 +0000 (UTC)
commit 26f054e029468317f7c6973316ee00b9786c98b8
Author: Jehan <jehan girinstud io>
Date: Sat Mar 11 01:40:15 2017 +0100
app: GimpEditor styling depending on config's icon settings.
Do not update only the icon, but also content and button spacing.
app/widgets/gimpeditor.c | 151 +++++++++++++++++++++++++++++++++++++++-------
1 files changed, 128 insertions(+), 23 deletions(-)
---
diff --git a/app/widgets/gimpeditor.c b/app/widgets/gimpeditor.c
index 7a8132e..103d280 100644
--- a/app/widgets/gimpeditor.c
+++ b/app/widgets/gimpeditor.c
@@ -27,6 +27,10 @@
#include "widgets-types.h"
+#include "config/gimpguiconfig.h"
+
+#include "core/gimp.h"
+
#include "gimpdocked.h"
#include "gimpeditor.h"
#include "gimpdnd.h"
@@ -96,6 +100,16 @@ static gboolean gimp_editor_get_show_button_bar (GimpDocked *docked);
static GtkIconSize gimp_editor_ensure_button_box (GimpEditor *editor,
GtkReliefStyle *button_relief);
+static void gimp_editor_get_styling (GimpEditor *editor,
+ GimpGuiConfig *config,
+ gint *content_spacing,
+ GtkIconSize *button_icon_size,
+ gint *button_spacing,
+ GtkReliefStyle *button_relief);
+static void gimp_editor_icon_size_notify (GimpGuiConfig *config,
+ GParamSpec *pspec,
+ GimpEditor *editor);
+
G_DEFINE_TYPE_WITH_CODE (GimpEditor, gimp_editor, GTK_TYPE_BOX,
G_IMPLEMENT_INTERFACE (GIMP_TYPE_DOCKED,
@@ -240,6 +254,10 @@ gimp_editor_constructed (GObject *object)
editor->priv->menu_identifier,
editor->priv->popup_data,
FALSE);
+ g_signal_connect (editor->priv->ui_manager->gimp->config,
+ "notify::icon-size",
+ G_CALLBACK (gimp_editor_icon_size_notify),
+ editor);
}
}
@@ -357,17 +375,14 @@ static void
gimp_editor_style_set (GtkWidget *widget,
GtkStyle *prev_style)
{
- GimpEditor *editor = GIMP_EDITOR (widget);
- gint content_spacing;
+ GimpEditor *editor = GIMP_EDITOR (widget);
+ GimpGuiConfig *config = NULL;
GTK_WIDGET_CLASS (parent_class)->style_set (widget, prev_style);
- gtk_widget_style_get (widget, "content-spacing", &content_spacing, NULL);
-
- gtk_box_set_spacing (GTK_BOX (widget), content_spacing);
-
- if (editor->priv->button_box)
- gimp_editor_set_box_style (editor, GTK_BOX (editor->priv->button_box));
+ if (editor->priv->ui_manager)
+ config = GIMP_GUI_CONFIG (editor->priv->ui_manager->gimp->config);
+ gimp_editor_icon_size_notify (config, NULL, editor);
}
static GimpUIManager *
@@ -445,6 +460,10 @@ gimp_editor_create_menu (GimpEditor *editor,
menu_identifier,
popup_data,
FALSE);
+ g_signal_connect (editor->priv->ui_manager->gimp->config,
+ "notify::icon-size",
+ G_CALLBACK (gimp_editor_icon_size_notify),
+ editor);
if (editor->priv->ui_path)
g_free (editor->priv->ui_path);
@@ -749,25 +768,29 @@ void
gimp_editor_set_box_style (GimpEditor *editor,
GtkBox *box)
{
+ GimpGuiConfig *config = NULL;
+ GList *children;
+ GList *list;
+ gint content_spacing;
GtkIconSize button_icon_size;
gint button_spacing;
GtkReliefStyle button_relief;
- GList *children;
- GList *list;
g_return_if_fail (GIMP_IS_EDITOR (editor));
g_return_if_fail (GTK_IS_BOX (box));
- gtk_widget_style_get (GTK_WIDGET (editor),
- "button-icon-size", &button_icon_size,
- "button-spacing", &button_spacing,
- "button-relief", &button_relief,
- NULL);
+ if (editor->priv->ui_manager)
+ config = GIMP_GUI_CONFIG (editor->priv->ui_manager->gimp->config);
+
+ gimp_editor_get_styling (editor, config,
+ &content_spacing,
+ &button_icon_size,
+ &button_spacing,
+ &button_relief);
gtk_box_set_spacing (box, button_spacing);
children = gtk_container_get_children (GTK_CONTAINER (box));
-
for (list = children; list; list = g_list_next (list))
{
if (GTK_IS_BUTTON (list->data))
@@ -843,14 +866,23 @@ static GtkIconSize
gimp_editor_ensure_button_box (GimpEditor *editor,
GtkReliefStyle *button_relief)
{
- GtkIconSize button_icon_size;
- gint button_spacing;
+ GimpGuiConfig *config = NULL;
+ GtkIconSize button_icon_size;
+ gint button_spacing;
+ gint content_spacing;
- gtk_widget_style_get (GTK_WIDGET (editor),
- "button-icon-size", &button_icon_size,
- "button-spacing", &button_spacing,
- "button-relief", button_relief,
- NULL);
+ if (editor->priv->ui_manager)
+ {
+ Gimp *gimp;
+
+ gimp = editor->priv->ui_manager->gimp;
+ config = GIMP_GUI_CONFIG (gimp->config);
+ }
+ gimp_editor_get_styling (editor, config,
+ &content_spacing,
+ &button_icon_size,
+ &button_spacing,
+ button_relief);
if (! editor->priv->button_box)
{
@@ -866,3 +898,76 @@ gimp_editor_ensure_button_box (GimpEditor *editor,
return button_icon_size;
}
+
+static void
+gimp_editor_get_styling (GimpEditor *editor,
+ GimpGuiConfig *config,
+ gint *content_spacing,
+ GtkIconSize *button_icon_size,
+ gint *button_spacing,
+ GtkReliefStyle *button_relief)
+{
+ GimpIconSize size;
+
+ /* Get the theme styling. */
+ gtk_widget_style_get (GTK_WIDGET (editor),
+ "content-spacing", content_spacing,
+ "button-icon-size", button_icon_size,
+ "button-spacing", button_spacing,
+ "button-relief", button_relief,
+ NULL);
+
+ /* Check if we should override theme styling. */
+ if (config)
+ {
+ g_object_get (config, "icon-size", &size, NULL);
+ switch (size)
+ {
+ case GIMP_ICON_SIZE_SMALL:
+ *button_spacing = MIN (*button_spacing / 2, 1);
+ *content_spacing = MIN (*content_spacing / 2, 1);
+ case GIMP_ICON_SIZE_MEDIUM:
+ *button_icon_size = GTK_ICON_SIZE_MENU;
+ break;
+ case GIMP_ICON_SIZE_LARGE:
+ *button_icon_size = GTK_ICON_SIZE_LARGE_TOOLBAR;
+ *button_spacing *= 2;
+ *content_spacing *= 2;
+ break;
+ case GIMP_ICON_SIZE_HUGE:
+ *button_icon_size = GTK_ICON_SIZE_DND;
+ *button_spacing *= 3;
+ *content_spacing *= 3;
+ break;
+ default:
+ /* GIMP_ICON_SIZE_DEFAULT:
+ * let's use the sizes set by the theme. */
+ break;
+ }
+ }
+}
+
+static void
+gimp_editor_icon_size_notify (GimpGuiConfig *config,
+ GParamSpec *pspec,
+ GimpEditor *editor)
+{
+ gint content_spacing;
+ GtkIconSize button_icon_size;
+ gint button_spacing;
+ GtkReliefStyle button_relief;
+
+ gimp_editor_get_styling (editor, config,
+ &content_spacing,
+ &button_icon_size,
+ &button_spacing,
+ &button_relief);
+
+ /* Editor styling. */
+ gtk_box_set_spacing (GTK_BOX (editor), content_spacing);
+
+ /* Button box styling. */
+ if (editor->priv->button_box)
+ gimp_editor_set_box_style (editor,
+ GTK_BOX (editor->priv->button_box));
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]