X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fui%2Fwidget%2Ffilter-effect-chooser.cpp;h=f8aee43f0f0640fd05809c43e49c9d270d30924a;hb=ee3ad2b5b26e1e7be85a2de966ac7f208d88ff45;hp=fd8f46e0441611eac9c9810d7b932ba201826e58;hpb=6e369d7e74c36e07f5fb1e27d37923fbed7dd89c;p=inkscape.git diff --git a/src/ui/widget/filter-effect-chooser.cpp b/src/ui/widget/filter-effect-chooser.cpp index fd8f46e04..f8aee43f0 100644 --- a/src/ui/widget/filter-effect-chooser.cpp +++ b/src/ui/widget/filter-effect-chooser.cpp @@ -16,130 +16,33 @@ #include "document.h" #include "filter-effect-chooser.h" #include "inkscape.h" -#include "ui/dialog/dialog-manager.h" namespace Inkscape { namespace UI { namespace Widget { -FilterEffectChooser::FilterEffectChooser() -{ - _model = Gtk::ListStore::create(_columns); - - g_signal_connect(G_OBJECT(INKSCAPE), "activate_desktop", - G_CALLBACK(&FilterEffectChooser::on_activate_desktop), this); - - - on_activate_desktop(INKSCAPE, SP_ACTIVE_DESKTOP, this); -} - -void FilterEffectChooser::on_activate_desktop(Inkscape::Application*, SPDesktop* desktop, FilterEffectChooser* fec) -{ - fec->update_filters(); - - fec->_doc_replaced.disconnect(); - fec->_doc_replaced = desktop->connectDocumentReplaced( - sigc::mem_fun(fec, &FilterEffectChooser::on_document_replaced)); - - fec->_resource_changed.disconnect(); - fec->_resource_changed = - sp_document_resources_changed_connect(sp_desktop_document(desktop), "filter", - sigc::mem_fun(fec, &FilterEffectChooser::update_filters)); -} - -void FilterEffectChooser::on_document_replaced(SPDesktop* desktop, SPDocument* document) -{ - update_filters(); -} - -/* Add all filters in the document to the combobox. - Keeps the same selection if possible, otherwise selects the first element */ -void FilterEffectChooser::update_filters() -{ - SPDesktop* desktop = SP_ACTIVE_DESKTOP; - SPDocument* document = sp_desktop_document(desktop); - const GSList* filters = sp_document_get_resource_list(document, "filter"); - - _model->clear(); - - for(const GSList *l = filters; l; l = l->next) { - Gtk::TreeModel::Row row = *_model->append(); - SPFilter* f = (SPFilter*)l->data; - row[_columns.filter] = f; - const gchar* id = SP_OBJECT_ID(f); - row[_columns.id] = id ? id : ""; - } -} - SimpleFilterModifier::SimpleFilterModifier() : _lb_blend(_("_Blend mode:")), _lb_blur(_("B_lur:"), Gtk::ALIGN_LEFT), - _lb_filter(_("F_ilter:"), Gtk::ALIGN_LEFT), _blend(BlendModeConverter), - _blur(0, 0, 100, 1, 0.01, 1), - _edit_filters(_("_Edit")) + _blur(0, 0, 100, 1, 0.01, 1) { add(_hb_blend); add(_vb_blur); - add(_hb_filter); _hb_blend.pack_start(_lb_blend, false, false); _hb_blend.pack_start(_blend); _vb_blur.add(_lb_blur); _vb_blur.add(_blur); - _hb_filter.pack_start(_lb_filter, false, false); - _hb_filter.pack_start(_hb_filter_sub); - _hb_filter_sub.add(_filter); - _hb_filter_sub.add(_edit_filters); show_all_children(); - signal_show().connect(sigc::mem_fun(*this, &SimpleFilterModifier::blend_mode_changed)); _hb_blend.set_spacing(12); - _hb_filter.set_spacing(12); _lb_blend.set_use_underline(); _lb_blend.set_mnemonic_widget(_blend); _lb_blur.set_use_underline(); _lb_blur.set_mnemonic_widget(_blur.get_scale()); - _lb_filter.set_use_underline(); - _lb_filter.set_mnemonic_widget(_filter); - _blend.add_row("Filter"); - _blend.signal_changed().connect(sigc::mem_fun(*this, &SimpleFilterModifier::blend_mode_changed)); _blend.signal_changed().connect(signal_blend_blur_changed()); _blur.signal_value_changed().connect(signal_blend_blur_changed()); - _filter.set_model(_model); - _filter.pack_start(_columns.id); - _edit_filters.signal_clicked().connect(sigc::mem_fun(*this, &SimpleFilterModifier::show_filter_dialog)); - _edit_filters.set_use_underline(); - - update_filters(); -} - -Glib::SignalProxy0 SimpleFilterModifier::signal_selection_changed() -{ - return _filter.signal_changed(); -} - -SPFilter* SimpleFilterModifier::get_selected_filter() -{ - Gtk::TreeModel::iterator i = _filter.get_active(); - - if(i) - return (*i)[_columns.filter]; - - return 0; -} - -void SimpleFilterModifier::select_filter(const SPFilter* filter) -{ - if(filter) { - for(Gtk::TreeModel::iterator i = _model->children().begin(); - i != _model->children().end(); ++i) { - if((*i)[_columns.filter] == filter) { - _filter.set_active(i); - break; - } - } - } } sigc::signal& SimpleFilterModifier::signal_blend_blur_changed() @@ -149,7 +52,7 @@ sigc::signal& SimpleFilterModifier::signal_blend_blur_changed() const Glib::ustring SimpleFilterModifier::get_blend_mode() { - return _blend.get_active_row_number() == 5 ? "filter" : _blend.get_active_data()->name; + return _blend.get_active_row_number() == 5 ? "filter" : _blend.get_active_data()->key; } void SimpleFilterModifier::set_blend_mode(const int val) @@ -172,72 +75,6 @@ void SimpleFilterModifier::set_blur_sensitive(const bool s) _blur.set_sensitive(s); } -void SimpleFilterModifier::update_filters() -{ - const SPFilter* active_filter = get_selected_filter(); - - FilterEffectChooser::update_filters(); - - if(_model->children().empty()) { - // Set state if no filters exist - Gtk::TreeModel::Row row = *_model->prepend(); - row[_columns.filter] = 0; - row[_columns.id] = "None"; - _filter.set_sensitive(false); - _filter.set_active(0); - } - else { - _filter.set_sensitive(true); - select_filter(active_filter); - } -} - -void SimpleFilterModifier::show_filter_dialog() -{ - SP_ACTIVE_DESKTOP->_dlg_mgr->showDialog("FilterEffectsDialog"); -} - -void SimpleFilterModifier::blend_mode_changed() -{ - if(_blend.get_active_row_number() == 5) { - _vb_blur.hide(); - _hb_filter.show(); - } - else { - _hb_filter.hide(); - _vb_blur.show(); - } -} - -/*** From filter-effect-enums.h ***/ -const EnumData FPData[NR::NR_FILTER_ENDPRIMITIVETYPE] = { - {NR::NR_FILTER_BLEND, _("Blend"), "svg:feBlend"}, - {NR::NR_FILTER_COLORMATRIX, _("Color Matrix"), "svg:feColorMatrix"}, - {NR::NR_FILTER_COMPONENTTRANSFER, _("Component Transfer"), "svg:feComponentTransfer"}, - {NR::NR_FILTER_COMPOSITE, _("Composite"), "svg:feComposite"}, - {NR::NR_FILTER_CONVOLVEMATRIX, _("Convolve Matrix"), "svg:feConvolveMatrix"}, - {NR::NR_FILTER_DIFFUSELIGHTING, _("Diffuse Lighting"), "svg:feDiffuseLighting"}, - {NR::NR_FILTER_DISPLACEMENTMAP, _("Displacement Map"), "svg:feDisplacementMap"}, - {NR::NR_FILTER_FLOOD, _("Flood"), "svg:feFlood"}, - {NR::NR_FILTER_GAUSSIANBLUR, _("Gaussian Blur"), "svg:feGaussianBlur"}, - {NR::NR_FILTER_IMAGE, _("Image"), "svg:feImage"}, - {NR::NR_FILTER_MERGE, _("Merge"), "svg:feMerge"}, - {NR::NR_FILTER_MORPHOLOGY, _("Morphology"), "svg:feMorphology"}, - {NR::NR_FILTER_OFFSET, _("Offset"), "svg:feOffset"}, - {NR::NR_FILTER_SPECULARLIGHTING, _("Specular Lighting"), "svg:feSpecularLighting"}, - {NR::NR_FILTER_TILE, _("Tile"), "svg:feTile"}, - {NR::NR_FILTER_TURBULENCE, _("Turbulence"), "svg:feTurbulence"} -}; -const Converter FPConverter(FPData, NR::NR_FILTER_ENDPRIMITIVETYPE); -const EnumData BlendModeData[NR::BLEND_ENDMODE] = { - {NR::BLEND_NORMAL, _("Normal"), "normal"}, - {NR::BLEND_MULTIPLY, _("Multiply"), "multiply"}, - {NR::BLEND_SCREEN, _("Screen"), "screen"}, - {NR::BLEND_DARKEN, _("Darken"), "darken"}, - {NR::BLEND_LIGHTEN, _("Lighten"), "lighten"} -}; -const Converter BlendModeConverter(BlendModeData, NR::BLEND_ENDMODE); - } } }