mirror of https://github.com/GNOME/gimp.git
app: GimpEditor styling depending on config's icon settings.
Do not update only the icon, but also content and button spacing.
This commit is contained in:
parent
86cd53e9e6
commit
26f054e029
|
@ -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));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue