summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
authorJabiertxof <jabier.arraiza@marker.es>2018-11-08 18:36:18 +0000
committerJabiertxof <jabier.arraiza@marker.es>2018-11-09 10:44:36 +0000
commit0ddbdf18a2cfcf54f591b1372bb3eb9dde9728e2 (patch)
tree90fe83ef220a34b5df3877e7b7dc01af82b78a4c /src/ui
parentAdd README to src/ui/view (diff)
downloadinkscape-0ddbdf18a2cfcf54f591b1372bb3eb9dde9728e2.tar.gz
inkscape-0ddbdf18a2cfcf54f591b1372bb3eb9dde9728e2.zip
This improve symbolic icon rendering moving it to CSS only. There is places in the UI whar we claim for a Pixbuf. Currently its not possible render them as symbolic without the previos hack
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/dialog/attrdialog.cpp2
-rw-r--r--src/ui/dialog/clonetiler.cpp4
-rw-r--r--src/ui/dialog/cssdialog.cpp2
-rw-r--r--src/ui/dialog/document-properties.cpp2
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp53
-rw-r--r--src/ui/dialog/inkscape-preferences.h1
-rw-r--r--src/ui/dialog/layers.cpp4
-rw-r--r--src/ui/dialog/livepatheffect-editor.cpp2
-rw-r--r--src/ui/dialog/objects.cpp2
-rw-r--r--src/ui/dialog/styledialog.cpp2
-rw-r--r--src/ui/dialog/symbols.cpp3
-rw-r--r--src/ui/dialog/tags.cpp6
-rw-r--r--src/ui/interface.cpp2
-rw-r--r--src/ui/widget/color-notebook.cpp8
14 files changed, 72 insertions, 21 deletions
diff --git a/src/ui/dialog/attrdialog.cpp b/src/ui/dialog/attrdialog.cpp
index 43322b4d3..6d40750ed 100644
--- a/src/ui/dialog/attrdialog.cpp
+++ b/src/ui/dialog/attrdialog.cpp
@@ -72,7 +72,7 @@ AttrDialog::AttrDialog():
_treeView.append_column("", *addRenderer);
Gtk::TreeViewColumn *col = _treeView.get_column(0);
if (col) {
- auto add_icon = Gtk::manage(sp_get_icon_image("list-add", GTK_ICON_SIZE_SMALL_TOOLBAR));
+ auto add_icon = Gtk::manage(sp_get_icon_image("list-add", Gtk::ICON_SIZE_SMALL_TOOLBAR));
col->set_clickable(true);
col->set_widget(*add_icon);
add_icon->set_tooltip_text(_("Add a new attribute"));
diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp
index 5505242a7..3dc88edb0 100644
--- a/src/ui/dialog/clonetiler.cpp
+++ b/src/ui/dialog/clonetiler.cpp
@@ -2681,7 +2681,7 @@ GtkWidget * CloneTiler::table_x_y_rand(int values)
auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
gtk_box_set_homogeneous(GTK_BOX(hb), FALSE);
- GtkWidget *i = GTK_WIDGET(sp_get_icon_image(INKSCAPE_ICON("object-rows"), GTK_ICON_SIZE_MENU)->gobj());
+ GtkWidget *i = sp_get_icon_image(INKSCAPE_ICON("object-rows"), GTK_ICON_SIZE_MENU);
gtk_box_pack_start(GTK_BOX(hb), i, FALSE, FALSE, 2);
GtkWidget *l = gtk_label_new("");
@@ -2695,7 +2695,7 @@ GtkWidget * CloneTiler::table_x_y_rand(int values)
auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
gtk_box_set_homogeneous(GTK_BOX(hb), FALSE);
- GtkWidget *i = GTK_WIDGET(sp_get_icon_image(INKSCAPE_ICON("object-columns"), GTK_ICON_SIZE_MENU)->gobj());
+ GtkWidget *i = sp_get_icon_image(INKSCAPE_ICON("object-columns"), GTK_ICON_SIZE_MENU);
gtk_box_pack_start(GTK_BOX(hb), i, FALSE, FALSE, 2);
GtkWidget *l = gtk_label_new("");
diff --git a/src/ui/dialog/cssdialog.cpp b/src/ui/dialog/cssdialog.cpp
index 64868f583..95f433a30 100644
--- a/src/ui/dialog/cssdialog.cpp
+++ b/src/ui/dialog/cssdialog.cpp
@@ -78,7 +78,7 @@ CssDialog::CssDialog():
_attrCol->add_attribute(_attrRenderer->property_text(), _cssColumns._styleAttrVal);
}
- GtkWidget *child = GTK_WIDGET(sp_get_icon_image("list-add", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj());
+ GtkWidget *child = sp_get_icon_image("list-add", GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_show(child);
_buttonAddProperty.add(*manage(Glib::wrap(child)));
_buttonAddProperty.set_relief(Gtk::RELIEF_NONE);
diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp
index 54277234c..f81fe79be 100644
--- a/src/ui/dialog/document-properties.cpp
+++ b/src/ui/dialog/document-properties.cpp
@@ -75,7 +75,7 @@ static Inkscape::XML::NodeEventVector const _repr_events = {
static void docprops_style_button(Gtk::Button& btn, char const* iconName)
{
- GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj());
+ GtkWidget *child = sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_show( child );
btn.add(*Gtk::manage(Glib::wrap(child)));
btn.set_relief(Gtk::RELIEF_NONE);
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp
index 5b1bcc9d0..19048bc23 100644
--- a/src/ui/dialog/inkscape-preferences.cpp
+++ b/src/ui/dialog/inkscape-preferences.cpp
@@ -29,6 +29,7 @@
#include <gtkmm/main.h>
#include <gtkmm/recentinfo.h>
#include <gtkmm/recentmanager.h>
+#include <gtkmm/cssprovider.h>
#include "cms-system.h"
#include "document.h"
@@ -55,7 +56,7 @@
#include "object/color-profile.h"
#include "style.h"
-
+#include "svg/svg-color.h"
#include "ui/interface.h"
#include "ui/widget/style-swatch.h"
@@ -635,12 +636,53 @@ void InkscapePreferences::symbolicThemeCheck()
_symbolic_color.get_parent()->hide();
}
else {
+
_symbolic_icons.get_parent()->show();
_symbolic_color.get_parent()->show();
}
}
}
+void InkscapePreferences::symbolicAddClass()
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ auto const screen = Gdk::Screen::get_default();
+ auto provider = Gtk::CssProvider::create();
+ Glib::ustring css_str = "";
+ if (prefs->getBool("/theme/symbolicIcons", false)) {
+ int colorset = prefs->getInt("/theme/symbolicColor", 0x000000ff);
+ gchar colornamed[64];
+ sp_svg_write_color(colornamed, sizeof(colornamed), colorset);
+ // Use in case the special widgets have inverse theme background and symbolic
+ int colorset_inverse = colorset ^ 0xffffff00;
+ gchar colornamed_inverse[64];
+ sp_svg_write_color(colornamed_inverse, sizeof(colornamed_inverse), colorset_inverse);
+ css_str += "*{ -gtk-icon-style: symbolic;}";
+ css_str += "image{ color:";
+ css_str += colornamed;
+ css_str += ";}";
+ css_str += "iconinverse{ color:";
+ css_str += colornamed_inverse;
+ css_str += ";}";
+ css_str += "iconregular{ -gtk-icon-style: regular;}";
+ } else {
+ css_str += "*{-gtk-icon-style: regular;}";
+ }
+ // From 3.16, throws an error which we must catch.
+ try {
+ provider->load_from_data(css_str);
+ }
+#if GTK_CHECK_VERSION(3, 16, 0)
+ // Gtk::CssProviderError not defined until 3.16.
+ catch (const Gtk::CssProviderError &ex) {
+ g_critical("CSSProviderError::load_from_data(): failed to load '%s'\n(%s)", css_str.c_str(), ex.what().c_str());
+ }
+#else
+ catch (...) {
+ }
+#endif
+ Gtk::StyleContext::add_provider_for_screen(screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+}
void InkscapePreferences::themeChange()
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
@@ -874,9 +916,13 @@ void InkscapePreferences::initPageUI()
_icon_theme.signal_changed().connect(sigc::mem_fun(*this, &InkscapePreferences::symbolicThemeCheck));
}
_symbolic_icons.init(_("Use symbolic icons"), "/theme/symbolicIcons", true);
+ _symbolic_icons.signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::symbolicAddClass));
_page_theme.add_line(true, "", _symbolic_icons, "", "", true),
_symbolic_color.init(_("Color for symbolic icons:"), "/theme/symbolicColor", 0x000000ff);
- _page_theme.add_line(false, "", _symbolic_color, _("Color for symbolic icons"), "", false);
+ Gtk::Button * _apply_color = new Gtk::Button(_("Apply color"));
+ _apply_color->set_tooltip_text(_("Apply color to symbolic icons)"));
+ _apply_color->signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::symbolicAddClass));
+ _page_theme.add_line(false, "", _symbolic_color, _("Color for symbolic icons"), "", false, _apply_color);
{
Glib::ustring sizeLabels[] = { C_("Icon size", "Larger"), C_("Icon size", "Large"), C_("Icon size", "Small"),
C_("Icon size", "Smaller") };
@@ -2388,6 +2434,9 @@ void InkscapePreferences::on_pagelist_selection_changed()
Gtk::Main::iteration();
}
this->show_all_children();
+ if (prefs->getInt("/dialogs/preferences/page",0) == PREFS_PAGE_UI_THEME) {
+ symbolicThemeCheck();
+ }
}
}
diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h
index f55680223..c60630721 100644
--- a/src/ui/dialog/inkscape-preferences.h
+++ b/src/ui/dialog/inkscape-preferences.h
@@ -579,6 +579,7 @@ protected:
private:
void themeChange();
void symbolicThemeCheck();
+ void symbolicAddClass();
InkscapePreferences();
InkscapePreferences(InkscapePreferences const &d);
InkscapePreferences operator=(InkscapePreferences const &d);
diff --git a/src/ui/dialog/layers.cpp b/src/ui/dialog/layers.cpp
index 2a08a4355..6b7402e47 100644
--- a/src/ui/dialog/layers.cpp
+++ b/src/ui/dialog/layers.cpp
@@ -87,7 +87,7 @@ void LayersPanel::_styleButton( Gtk::Button& btn, SPDesktop *desktop, unsigned i
bool set = false;
if ( iconName ) {
- GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj());
+ GtkWidget *child = sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_show( child );
btn.add( *Gtk::manage(Glib::wrap(child)) );
btn.set_relief(Gtk::RELIEF_NONE);
@@ -99,7 +99,7 @@ void LayersPanel::_styleButton( Gtk::Button& btn, SPDesktop *desktop, unsigned i
if ( verb ) {
SPAction *action = verb->get_action(Inkscape::ActionContext(desktop));
if ( !set && action && action->image ) {
- GtkWidget *child = GTK_WIDGET(sp_get_icon_image(action->image, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj());
+ GtkWidget *child = sp_get_icon_image(action->image, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_show( child );
btn.add( *Gtk::manage(Glib::wrap(child)) );
set = true;
diff --git a/src/ui/dialog/livepatheffect-editor.cpp b/src/ui/dialog/livepatheffect-editor.cpp
index 4ea6b737f..200ab86b7 100644
--- a/src/ui/dialog/livepatheffect-editor.cpp
+++ b/src/ui/dialog/livepatheffect-editor.cpp
@@ -71,7 +71,7 @@ void lpeeditor_selection_modified (Inkscape::Selection * selection, guint /*flag
static void lpe_style_button(Gtk::Button& btn, char const* iconName)
{
- GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj());
+ GtkWidget *child = sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_show( child );
btn.add(*Gtk::manage(Glib::wrap(child)));
btn.set_relief(Gtk::RELIEF_NONE);
diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp
index 4d9fcc16d..d6189fcb2 100644
--- a/src/ui/dialog/objects.cpp
+++ b/src/ui/dialog/objects.cpp
@@ -231,7 +231,7 @@ public:
*/
void ObjectsPanel::_styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip)
{
- GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj());
+ GtkWidget *child = sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_show( child );
btn.add( *Gtk::manage(Glib::wrap(child)) );
btn.set_relief(Gtk::RELIEF_NONE);
diff --git a/src/ui/dialog/styledialog.cpp b/src/ui/dialog/styledialog.cpp
index bd2cacafe..c20a458b9 100644
--- a/src/ui/dialog/styledialog.cpp
+++ b/src/ui/dialog/styledialog.cpp
@@ -1522,7 +1522,7 @@ bool StyleDialog::_delProperty(GdkEventButton *event)
void StyleDialog::_styleButton(Gtk::Button& btn, char const* iconName,
char const* tooltip)
{
- GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj());
+ GtkWidget *child = sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_show(child);
btn.add(*manage(Glib::wrap(child)));
btn.set_relief(Gtk::RELIEF_NONE);
diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp
index 8ed9ee516..d94ebc5b7 100644
--- a/src/ui/dialog/symbols.cpp
+++ b/src/ui/dialog/symbols.cpp
@@ -222,7 +222,8 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) :
overlay_opacity->set_halign(Gtk::ALIGN_START );
overlay_opacity->set_valign(Gtk::ALIGN_START );
//No results
- overlay_icon = sp_get_icon_image("searching", 110, true);
+ overlay_icon = sp_get_icon_image("searching", 110);
+ overlay_icon->set_name("iconinverse");
overlay_icon->set_halign(Gtk::ALIGN_CENTER );
overlay_icon->set_valign(Gtk::ALIGN_START );
overlay_icon->set_margin_top(45);
diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp
index f2f856758..9ee6f4851 100644
--- a/src/ui/dialog/tags.cpp
+++ b/src/ui/dialog/tags.cpp
@@ -123,7 +123,7 @@ public:
void TagsPanel::_styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip)
{
- GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj());
+ GtkWidget *child = sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_show(child);
btn.add(*manage(Glib::wrap(child)));
btn.set_relief(Gtk::RELIEF_NONE);
@@ -137,7 +137,7 @@ Gtk::MenuItem& TagsPanel::_addPopupItem( SPDesktop *desktop, unsigned int code,
const char* label = nullptr;
if ( iconName ) {
- iconWidget = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_MENU)->gobj());
+ iconWidget = sp_get_icon_image(iconName, GTK_ICON_SIZE_MENU);
}
if ( desktop ) {
@@ -145,7 +145,7 @@ Gtk::MenuItem& TagsPanel::_addPopupItem( SPDesktop *desktop, unsigned int code,
if ( verb ) {
SPAction *action = verb->get_action(desktop);
if ( !iconWidget && action && action->image ) {
- iconWidget = GTK_WIDGET(sp_get_icon_image(action->image, GTK_ICON_SIZE_MENU)->gobj());
+ iconWidget = sp_get_icon_image(action->image, GTK_ICON_SIZE_MENU);
}
if ( action ) {
diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp
index 5c0e44b44..f81d252de 100644
--- a/src/ui/interface.cpp
+++ b/src/ui/interface.cpp
@@ -504,7 +504,7 @@ static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *men
// If there is an image associated with the action, then we can add it as an icon for the menu item.
if (show_icon && action->image) {
item->set_name("ImageMenuItem"); // custom name to identify our "ImageMenuItems"
- GtkWidget *icon = GTK_WIDGET(sp_get_icon_image(action->image, GTK_ICON_SIZE_MENU)->gobj());
+ GtkWidget *icon = sp_get_icon_image(action->image, GTK_ICON_SIZE_MENU);
// create a box to hold icon and label as GtkMenuItem derives from GtkBin and can only hold one child
GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
diff --git a/src/ui/widget/color-notebook.cpp b/src/ui/widget/color-notebook.cpp
index 6d6fee5e0..cc6832815 100644
--- a/src/ui/widget/color-notebook.cpp
+++ b/src/ui/widget/color-notebook.cpp
@@ -159,21 +159,21 @@ void ColorNotebook::_initUI()
#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
/* Create color management icons */
_box_colormanaged = gtk_event_box_new();
- GtkWidget *colormanaged = GTK_WIDGET(sp_get_icon_image("color-management", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj());
+ GtkWidget *colormanaged = sp_get_icon_image("color-management", GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_container_add(GTK_CONTAINER(_box_colormanaged), colormanaged);
gtk_widget_set_tooltip_text(_box_colormanaged, _("Color Managed"));
gtk_widget_set_sensitive(_box_colormanaged, false);
gtk_box_pack_start(GTK_BOX(rgbabox), _box_colormanaged, FALSE, FALSE, 2);
_box_outofgamut = gtk_event_box_new();
- GtkWidget *outofgamut = GTK_WIDGET(sp_get_icon_image("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj());
+ GtkWidget *outofgamut = sp_get_icon_image("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_container_add(GTK_CONTAINER(_box_outofgamut), outofgamut);
gtk_widget_set_tooltip_text(_box_outofgamut, _("Out of gamut!"));
gtk_widget_set_sensitive(_box_outofgamut, false);
gtk_box_pack_start(GTK_BOX(rgbabox), _box_outofgamut, FALSE, FALSE, 2);
_box_toomuchink = gtk_event_box_new();
- GtkWidget *toomuchink = GTK_WIDGET(sp_get_icon_image("too-much-ink-icon", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj());
+ GtkWidget *toomuchink = sp_get_icon_image("too-much-ink-icon", GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_container_add(GTK_CONTAINER(_box_toomuchink), toomuchink);
gtk_widget_set_tooltip_text(_box_toomuchink, _("Too much ink!"));
gtk_widget_set_sensitive(_box_toomuchink, false);
@@ -182,7 +182,7 @@ void ColorNotebook::_initUI()
/* Color picker */
- GtkWidget *picker = GTK_WIDGET(sp_get_icon_image("color-picker", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj());
+ GtkWidget *picker = sp_get_icon_image("color-picker", GTK_ICON_SIZE_SMALL_TOOLBAR);
_btn_picker = gtk_button_new();
gtk_button_set_relief(GTK_BUTTON(_btn_picker), GTK_RELIEF_NONE);
gtk_container_add(GTK_CONTAINER(_btn_picker), picker);