From 2a37efcab12aedd2d6149f61427aaa0de205d96c Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Wed, 28 Jun 2017 18:13:15 +0200 Subject: First version (non-working) --- src/ui/CMakeLists.txt | 2 + src/ui/dialog/dialog-manager.cpp | 3 + src/ui/dialog/filter-editor.cpp | 110 ++++++++++++++++++++++++++++++++++ src/ui/dialog/filter-editor.h | 61 +++++++++++++++++++ src/ui/dialog/filter-effects-dialog.h | 8 --- src/verbs.cpp | 2 +- 6 files changed, 177 insertions(+), 9 deletions(-) create mode 100644 src/ui/dialog/filter-editor.cpp create mode 100644 src/ui/dialog/filter-editor.h (limited to 'src') diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index 389e8902a..6eefdb47b 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -71,6 +71,7 @@ set(ui_SRC dialog/filedialog.cpp dialog/filedialogimpl-gtkmm.cpp dialog/fill-and-stroke.cpp + dialog/filter-editor.cpp dialog/filter-effects-dialog.cpp dialog/find.cpp dialog/floating-behavior.cpp @@ -214,6 +215,7 @@ set(ui_SRC dialog/filedialogimpl-gtkmm.h dialog/filedialogimpl-win32.h dialog/fill-and-stroke.h + dialog/filter-editor.h dialog/filter-effects-dialog.h dialog/find.h dialog/floating-behavior.h diff --git a/src/ui/dialog/dialog-manager.cpp b/src/ui/dialog/dialog-manager.cpp index 01cd9dd0f..c5392864d 100644 --- a/src/ui/dialog/dialog-manager.cpp +++ b/src/ui/dialog/dialog-manager.cpp @@ -26,6 +26,7 @@ #include "ui/dialog/extension-editor.h" #include "ui/dialog/fill-and-stroke.h" #include "ui/dialog/filter-effects-dialog.h" +#include "ui/dialog/filter-editor.h" #include "ui/dialog/find.h" #include "ui/dialog/glyphs.h" #include "ui/dialog/inkscape-preferences.h" @@ -113,6 +114,7 @@ DialogManager::DialogManager() { registerFactory("ExtensionEditor", &create); registerFactory("FillAndStroke", &create); registerFactory("FilterEffectsDialog", &create); + registerFactory("FilterEditorDialog", &create); registerFactory("Find", &create); registerFactory("Glyphs", &create); registerFactory("IconPreviewPanel", &create); @@ -155,6 +157,7 @@ DialogManager::DialogManager() { registerFactory("ExtensionEditor", &create); registerFactory("FillAndStroke", &create); registerFactory("FilterEffectsDialog", &create); + registerFactory("FilterEditorDialog", &create); registerFactory("Find", &create); registerFactory("Glyphs", &create); registerFactory("IconPreviewPanel", &create); diff --git a/src/ui/dialog/filter-editor.cpp b/src/ui/dialog/filter-editor.cpp new file mode 100644 index 000000000..bf4fbdf99 --- /dev/null +++ b/src/ui/dialog/filter-editor.cpp @@ -0,0 +1,110 @@ +/** + * @file + * Filter Effects dialog. + */ +/* Authors: + * Marc Jeanmougin + * + * Copyright (C) 2017 Authors + * + * Released under GNU GPL. Read the file 'COPYING' for more information. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "dialog-manager.h" + +#include +#if GTK_CHECK_VERSION(3, 20, 0) +# include +#else +# include +#endif + +#include "ui/widget/spinbutton.h" + +#include +#include +#include +#include + +#include "desktop.h" + +#include "document.h" +#include "document-undo.h" +#include "filter-chemistry.h" +#include "filter-editor.h" +#include "filter-enums.h" +#include "inkscape.h" +#include "filters/blend.h" +#include "filters/colormatrix.h" +#include "filters/componenttransfer.h" +#include "filters/componenttransfer-funcnode.h" +#include "filters/convolvematrix.h" +#include "filters/distantlight.h" +#include "filters/merge.h" +#include "filters/mergenode.h" +#include "filters/pointlight.h" +#include "filters/spotlight.h" + +#include "style.h" +#include "svg/svg-color.h" +#include "ui/dialog/filedialog.h" +#include "verbs.h" + +#include "io/sys.h" +#include "selection-chemistry.h" + +#include +#include +#include + +using namespace Inkscape::Filters; + +namespace Inkscape::UI::Dialog { + +FilterEditorDialog::FilterEditorDialog() { + + builder = Gtk::Builder::create_from_file("/home/mc/Desktop/test.glade"); + builder->get_widget("FilterEditor", FilterEditor); + builder->get_widget("FilterList", FilterList); + builder->get_widget("FilterFERX", FilterFERX); + builder->get_widget("FilterFERY", FilterFERY); + builder->get_widget("FilterFERH", FilterFERH); + builder->get_widget("FilterFERW", FilterFERW); + builder->get_widget("FilterPreview",FilterPreview); + builder->get_widget("FilterStore", FilterStore); + builder->get_widget("FilterPrimitiveDescImage", FilterPrimitiveDescImage); + //builder->get_widget("FilterPrimitiveParameters",FilterPrimitiveParameters); + builder->get_widget("FilterPrimitiveDescText", FilterPrimitiveDescText); + builder->get_widget("FilterPrimitiveList", FilterPrimitiveList); + builder->get_widget("FilterPrimitiveAdd", FilterPrimitiveAdd); + if (!(FilterList && FilterFERX && FilterFERY && FilterFERH && FilterFERW && FilterPreview + && FilterStore && FilterPrimitiveDescImage && FilterPrimitiveDescText && FilterPrimitiveList + && FilterPrimitiveAdd )) { + g_warning("Some widget does not exist!"); + } + _getContents()->add(*FilterEditor); + +} +FilterEditorDialog::~FilterEditorDialog(){} + + + + + + +} // namespace Inkscape::UI::Dialog + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : diff --git a/src/ui/dialog/filter-editor.h b/src/ui/dialog/filter-editor.h new file mode 100644 index 000000000..1ca4e1760 --- /dev/null +++ b/src/ui/dialog/filter-editor.h @@ -0,0 +1,61 @@ +/** @file + * @brief Filter Editor dialog + */ +/* Authors: + * Marc Jeanmougin + * + * Copyright (C) 2017 Authors + * + * Released under GNU GPL. Read the file 'COPYING' for more information. + */ + +#ifndef INKSCAPE_UI_DIALOG_FILTER_EFFECTS_H +#define INKSCAPE_UI_DIALOG_FILTER_EFFECTS_H + +#include "attributes.h" +#include "ui/widget/panel.h" +#include "sp-filter.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace Inkscape { +namespace UI { +namespace Dialog { + +class FilterEditorDialog : public UI::Widget::Panel { +public: + + FilterEditorDialog(); + ~FilterEditorDialog(); + + static FilterEditorDialog &getInstance() + { return *new FilterEditorDialog(); } + +// void set_attrs_locked(const bool); +private: + Glib::RefPtr builder; + Gtk::ComboBoxText *FilterList; + Gtk::SpinButton *FilterFERX, *FilterFERY, *FilterFERW, *FilterFERH; + Gtk::DrawingArea *FilterPreview; + Gtk::Image *FilterPrimitiveDescImage; + Gtk::Box *FilterPrimitiveParameters; + Gtk::Label *FilterPrimitiveDescText; + Gtk::ComboBox *FilterPrimitiveList; + Gtk::Button *FilterPrimitiveAdd; + Gtk::ListStore *FilterStore; + Gtk::Box *FilterEditor; +}; +} +} +} +#endif diff --git a/src/ui/dialog/filter-effects-dialog.h b/src/ui/dialog/filter-effects-dialog.h index 32fabb741..e410a88f9 100644 --- a/src/ui/dialog/filter-effects-dialog.h +++ b/src/ui/dialog/filter-effects-dialog.h @@ -132,11 +132,7 @@ private: Gtk::Button _add; Glib::RefPtr _menu; sigc::signal _signal_filter_changed; -#if __cplusplus <= 199711L - std::auto_ptr _observer; -#else std::unique_ptr _observer; -#endif }; class PrimitiveColumns : public Gtk::TreeModel::ColumnRecord @@ -244,11 +240,7 @@ private: sigc::connection _scroll_connection; int _autoscroll_y; int _autoscroll_x; -#if __cplusplus <= 199711L - std::auto_ptr _observer; -#else std::unique_ptr _observer; -#endif int _input_type_width; int _input_type_height; }; diff --git a/src/verbs.cpp b/src/verbs.cpp index 22ded60b3..0085d6549 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -2234,7 +2234,7 @@ void DialogVerb::perform(SPAction *action, void *data) dt->_dlg_mgr->showDialog("LivePathEffect"); break; case SP_VERB_DIALOG_FILTER_EFFECTS: - dt->_dlg_mgr->showDialog("FilterEffectsDialog"); + dt->_dlg_mgr->showDialog("FilterEditorDialog"); break; case SP_VERB_DIALOG_SVG_FONTS: dt->_dlg_mgr->showDialog("SvgFontsDialog"); -- cgit v1.2.3 From 54fa1347a2ead6cc79a679a97b39addc1feaea38 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Thu, 29 Jun 2017 15:28:06 +0200 Subject: glade WIP --- src/ui/dialog/filter-editor.cpp | 61 +++++++++++++++++++++++++---------------- src/ui/dialog/filter-editor.h | 14 ++-------- 2 files changed, 41 insertions(+), 34 deletions(-) (limited to 'src') diff --git a/src/ui/dialog/filter-editor.cpp b/src/ui/dialog/filter-editor.cpp index bf4fbdf99..31723506d 100644 --- a/src/ui/dialog/filter-editor.cpp +++ b/src/ui/dialog/filter-editor.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include "desktop.h" @@ -55,39 +56,53 @@ #include "verbs.h" #include "io/sys.h" +#include "io/resource.h" #include "selection-chemistry.h" -#include -#include -#include +#include -using namespace Inkscape::Filters; +#include +using namespace Inkscape::Filters; +using namespace Inkscape::IO::Resource; namespace Inkscape::UI::Dialog { -FilterEditorDialog::FilterEditorDialog() { +FilterEditorDialog::FilterEditorDialog() : UI::Widget::Panel("", "/dialogs/filtereffects", SP_VERB_DIALOG_FILTER_EFFECTS) +{ - builder = Gtk::Builder::create_from_file("/home/mc/Desktop/test.glade"); - builder->get_widget("FilterEditor", FilterEditor); - builder->get_widget("FilterList", FilterList); - builder->get_widget("FilterFERX", FilterFERX); - builder->get_widget("FilterFERY", FilterFERY); - builder->get_widget("FilterFERH", FilterFERH); - builder->get_widget("FilterFERW", FilterFERW); - builder->get_widget("FilterPreview",FilterPreview); - builder->get_widget("FilterStore", FilterStore); - builder->get_widget("FilterPrimitiveDescImage", FilterPrimitiveDescImage); - //builder->get_widget("FilterPrimitiveParameters",FilterPrimitiveParameters); - builder->get_widget("FilterPrimitiveDescText", FilterPrimitiveDescText); - builder->get_widget("FilterPrimitiveList", FilterPrimitiveList); - builder->get_widget("FilterPrimitiveAdd", FilterPrimitiveAdd); - if (!(FilterList && FilterFERX && FilterFERY && FilterFERH && FilterFERW && FilterPreview - && FilterStore && FilterPrimitiveDescImage && FilterPrimitiveDescText && FilterPrimitiveList - && FilterPrimitiveAdd )) { - g_warning("Some widget does not exist!"); + const std::string req_widgets[] = {"FilterEditor", "FilterList", "FilterFERX", "FilterFERY", "FilterFERH", "FilterFERW", "FilterPreview", "FilterPrimitiveDescImage", "FilterPrimitiveList", "FilterPrimitiveDescText", "FilterPrimitiveAdd"}; + Glib::ustring gladefile = get_filename(UIS, "filter-editor.glade"); + try { + builder = Gtk::Builder::create_from_file(gladefile); + } catch(const Glib::Error& ex) { + g_warning("Glade file loading failed for filter effect dialog"); + return; } + + Gtk::Object* test; + for(std::string w:req_widgets) { + builder->get_widget(w,test); + if(!test){ + g_warning("Required widget %s does not exist", w); + return; + } + } + + builder->get_widget("FilterEditor", FilterEditor); _getContents()->add(*FilterEditor); +//test + Gtk::ComboBox *OptionList; + builder->get_widget("OptionList",OptionList); + FilterStore = builder->get_object("FilterStore"); + Glib::RefPtr fs = Glib::RefPtr::cast_static(FilterStore); + Gtk::TreeModel::Row row = *(fs->append()); + row[3]=OptionList; + + + + + } FilterEditorDialog::~FilterEditorDialog(){} diff --git a/src/ui/dialog/filter-editor.h b/src/ui/dialog/filter-editor.h index 1ca4e1760..6acb83f02 100644 --- a/src/ui/dialog/filter-editor.h +++ b/src/ui/dialog/filter-editor.h @@ -9,8 +9,8 @@ * Released under GNU GPL. Read the file 'COPYING' for more information. */ -#ifndef INKSCAPE_UI_DIALOG_FILTER_EFFECTS_H -#define INKSCAPE_UI_DIALOG_FILTER_EFFECTS_H +#ifndef INKSCAPE_UI_DIALOG_FILTER_EDITOR_H +#define INKSCAPE_UI_DIALOG_FILTER_EDITOR_H #include "attributes.h" #include "ui/widget/panel.h" @@ -44,15 +44,7 @@ public: // void set_attrs_locked(const bool); private: Glib::RefPtr builder; - Gtk::ComboBoxText *FilterList; - Gtk::SpinButton *FilterFERX, *FilterFERY, *FilterFERW, *FilterFERH; - Gtk::DrawingArea *FilterPreview; - Gtk::Image *FilterPrimitiveDescImage; - Gtk::Box *FilterPrimitiveParameters; - Gtk::Label *FilterPrimitiveDescText; - Gtk::ComboBox *FilterPrimitiveList; - Gtk::Button *FilterPrimitiveAdd; - Gtk::ListStore *FilterStore; + Glib::RefPtr FilterStore; Gtk::Box *FilterEditor; }; } -- cgit v1.2.3 From d79cc2caf65007ac9d1d59886785ded5d5ac44a8 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Thu, 29 Jun 2017 17:38:42 +0200 Subject: Allows one to use Super, Hyper and Meta key modifiers in shortcuts --- src/helper/window.cpp | 6 ++++++ src/shortcuts.cpp | 21 +++++++++++++++++++++ src/shortcuts.h | 13 +++++++++---- 3 files changed, 36 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/helper/window.cpp b/src/helper/window.cpp index 98e886a38..270f9a3c8 100644 --- a/src/helper/window.cpp +++ b/src/helper/window.cpp @@ -23,6 +23,12 @@ static bool on_window_key_press(GdkEventKey* event) shortcut = Inkscape::UI::Tools::get_group0_keyval (event) | ( event->state & GDK_SHIFT_MASK ? SP_SHORTCUT_SHIFT_MASK : 0 ) | + ( event->state & GDK_SUPER_MASK ? + SP_SHORTCUT_SUPER_MASK : 0 ) | + ( event->state & GDK_HYPER_MASK ? + SP_SHORTCUT_HYPER_MASK : 0 ) | + ( event->state & GDK_META_MASK ? + SP_SHORTCUT_META_MASK : 0 ) | ( event->state & GDK_CONTROL_MASK ? SP_SHORTCUT_CONTROL_MASK : 0 ) | ( event->state & GDK_MOD1_MASK ? diff --git a/src/shortcuts.cpp b/src/shortcuts.cpp index f8a647040..0cb0285f8 100644 --- a/src/shortcuts.cpp +++ b/src/shortcuts.cpp @@ -122,6 +122,12 @@ unsigned int sp_gdkmodifier_to_shortcut(guint accel_key, Gdk::ModifierType gdkmo SP_SHORTCUT_SHIFT_MASK : 0 ) | ( gdkmodifier & GDK_CONTROL_MASK ? SP_SHORTCUT_CONTROL_MASK : 0 ) | + ( gdkmodifier & GDK_SUPER_MASK ? + SP_SHORTCUT_SUPER_MASK : 0 ) | + ( gdkmodifier & GDK_HYPER_MASK ? + SP_SHORTCUT_HYPER_MASK : 0 ) | + ( gdkmodifier & GDK_META_MASK ? + SP_SHORTCUT_META_MASK : 0 ) | ( gdkmodifier & GDK_MOD1_MASK ? SP_SHORTCUT_ALT_MASK : 0 ); @@ -138,6 +144,12 @@ Glib::ustring sp_shortcut_to_label(unsigned int const shortcut) { modifiers += "Shift,"; if (shortcut & SP_SHORTCUT_ALT_MASK) modifiers += "Alt,"; + if (shortcut & SP_SHORTCUT_SUPER_MASK) + modifiers += "Super,"; + if (shortcut & SP_SHORTCUT_HYPER_MASK) + modifiers += "Hyper,"; + if (shortcut & SP_SHORTCUT_META_MASK) + modifiers += "Meta,"; if(modifiers.length() > 0 && modifiers.find(',',modifiers.length()-1)!=modifiers.npos) { @@ -607,6 +619,12 @@ static void read_shortcuts_file(char const *filename, bool const is_user_set) { modifiers |= SP_SHORTCUT_SHIFT_MASK; } else if (!strcmp(mod, "Alt")) { modifiers |= SP_SHORTCUT_ALT_MASK; + } else if (!strcmp(mod, "Super")) { + modifiers |= SP_SHORTCUT_SUPER_MASK; + } else if (!strcmp(mod, "Hyper")) { + modifiers |= SP_SHORTCUT_HYPER_MASK; + } else if (!strcmp(mod, "Meta")) { + modifiers |= SP_SHORTCUT_META_MASK; } else { g_warning("Unknown modifier %s for %s", mod, verb_name); } @@ -694,6 +712,9 @@ sp_shortcut_get_modifiers(unsigned int const shortcut) return static_cast( ((shortcut & SP_SHORTCUT_SHIFT_MASK) ? GDK_SHIFT_MASK : 0) | ((shortcut & SP_SHORTCUT_CONTROL_MASK) ? GDK_CONTROL_MASK : 0) | + ((shortcut & SP_SHORTCUT_SUPER_MASK) ? GDK_SUPER_MASK : 0) | + ((shortcut & SP_SHORTCUT_HYPER_MASK) ? GDK_HYPER_MASK : 0) | + ((shortcut & SP_SHORTCUT_META_MASK) ? GDK_META_MASK : 0) | ((shortcut & SP_SHORTCUT_ALT_MASK) ? GDK_MOD1_MASK : 0) ); } diff --git a/src/shortcuts.h b/src/shortcuts.h index f24a82603..fb36dfd11 100644 --- a/src/shortcuts.h +++ b/src/shortcuts.h @@ -12,6 +12,8 @@ #include #include +#include + typedef struct _GtkAccelGroup GtkAccelGroup; typedef struct _GtkWidget GtkWidget; @@ -27,10 +29,13 @@ namespace Inkscape { /* We define high-bit mask for packing into single int */ -#define SP_SHORTCUT_SHIFT_MASK (1 << 24) -#define SP_SHORTCUT_CONTROL_MASK (1 << 25) -#define SP_SHORTCUT_ALT_MASK (1 << 26) -#define SP_SHORTCUT_MODIFIER_MASK (SP_SHORTCUT_SHIFT_MASK|SP_SHORTCUT_CONTROL_MASK|SP_SHORTCUT_ALT_MASK) +#define SP_SHORTCUT_SHIFT_MASK GDK_MODIFIER_RESERVED_20_MASK +#define SP_SHORTCUT_CONTROL_MASK GDK_MODIFIER_RESERVED_21_MASK +#define SP_SHORTCUT_ALT_MASK GDK_MODIFIER_RESERVED_22_MASK +#define SP_SHORTCUT_SUPER_MASK GDK_MODIFIER_RESERVED_23_MASK +#define SP_SHORTCUT_HYPER_MASK GDK_MODIFIER_RESERVED_24_MASK +#define SP_SHORTCUT_META_MASK GDK_MODIFIER_RESERVED_25_MASK +#define SP_SHORTCUT_MODIFIER_MASK (SP_SHORTCUT_SHIFT_MASK|SP_SHORTCUT_CONTROL_MASK|SP_SHORTCUT_ALT_MASK|SP_SHORTCUT_SUPER_MASK|SP_SHORTCUT_HYPER_MASK|SP_SHORTCUT_META_MASK) /* Returns true if action was performed */ -- cgit v1.2.3 From 93917d399e898ad73fc5652d70d4763050ca90cc Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Thu, 29 Jun 2017 17:58:59 +0200 Subject: Disable "new" filter editor --- src/ui/dialog/filter-editor.cpp | 1 - src/verbs.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'src') diff --git a/src/ui/dialog/filter-editor.cpp b/src/ui/dialog/filter-editor.cpp index 31723506d..4e7402853 100644 --- a/src/ui/dialog/filter-editor.cpp +++ b/src/ui/dialog/filter-editor.cpp @@ -97,7 +97,6 @@ FilterEditorDialog::FilterEditorDialog() : UI::Widget::Panel("", "/dialogs/filte FilterStore = builder->get_object("FilterStore"); Glib::RefPtr fs = Glib::RefPtr::cast_static(FilterStore); Gtk::TreeModel::Row row = *(fs->append()); - row[3]=OptionList; diff --git a/src/verbs.cpp b/src/verbs.cpp index 0085d6549..22ded60b3 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -2234,7 +2234,7 @@ void DialogVerb::perform(SPAction *action, void *data) dt->_dlg_mgr->showDialog("LivePathEffect"); break; case SP_VERB_DIALOG_FILTER_EFFECTS: - dt->_dlg_mgr->showDialog("FilterEditorDialog"); + dt->_dlg_mgr->showDialog("FilterEffectsDialog"); break; case SP_VERB_DIALOG_SVG_FONTS: dt->_dlg_mgr->showDialog("SvgFontsDialog"); -- cgit v1.2.3 From 258904bc7102d6edae51aa09d7e1fa47ebc06b2a Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Thu, 29 Jun 2017 18:04:34 +0200 Subject: Filter editor fix for gcc 5 --- src/ui/dialog/filter-editor.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/ui/dialog/filter-editor.cpp b/src/ui/dialog/filter-editor.cpp index 4e7402853..730f8175c 100644 --- a/src/ui/dialog/filter-editor.cpp +++ b/src/ui/dialog/filter-editor.cpp @@ -65,7 +65,9 @@ using namespace Inkscape::Filters; using namespace Inkscape::IO::Resource; -namespace Inkscape::UI::Dialog { +namespace Inkscape { +namespace UI { +namespace Dialog { FilterEditorDialog::FilterEditorDialog() : UI::Widget::Panel("", "/dialogs/filtereffects", SP_VERB_DIALOG_FILTER_EFFECTS) { @@ -110,7 +112,9 @@ FilterEditorDialog::~FilterEditorDialog(){} -} // namespace Inkscape::UI::Dialog +} // Never put these namespaces together unless you are using gcc 6+ +} +} // P.S. This is for Inkscape::UI::Dialog /* Local Variables: -- cgit v1.2.3