X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fdialog%2Ffilter-effects-dialog.h;h=9e272fbabf86097661cf50b96cb21becd1fb999e;hb=b34fba279abab0e9fdc3f9b05bb4e2be63a7e0b4;hp=25b6bf620edb129e7137c035d0d917a6fac9b6c0;hpb=d21f06832e860b1f1078c81ce082d450ca5dc3d7;p=inkscape.git diff --git a/src/ui/dialog/filter-effects-dialog.h b/src/ui/dialog/filter-effects-dialog.h index 25b6bf620..9e272fbab 100644 --- a/src/ui/dialog/filter-effects-dialog.h +++ b/src/ui/dialog/filter-effects-dialog.h @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include @@ -28,9 +27,7 @@ #include "attributes.h" #include "dialog.h" #include "sp-filter.h" -#include "sp-feconvolvematrix.h" #include "ui/widget/filter-effect-chooser.h" -#include "ui/widget/notebook-page.h" #include "ui/widget/spin-slider.h" using namespace Inkscape::UI::Widget; @@ -39,29 +36,54 @@ namespace Inkscape { namespace UI { namespace Dialog { +class DualSpinButton; +class MultiSpinButton; class FilterEffectsDialog : public Dialog { public: - FilterEffectsDialog(); - virtual ~FilterEffectsDialog(); + ~FilterEffectsDialog(); + + void set_attrs_locked(const bool); static FilterEffectsDialog *create() { return new FilterEffectsDialog(); } private: class FilterModifier : public Gtk::VBox, public FilterEffectChooser { public: - FilterModifier(); + FilterModifier(FilterEffectsDialog&); virtual SPFilter* get_selected_filter(); virtual void select_filter(const SPFilter*); virtual Glib::SignalProxy0 signal_selection_changed(); private: + class CellRendererSel : public Gtk::CellRenderer + { + public: + CellRendererSel(); + Glib::PropertyProxy property_sel(); + protected: + virtual void get_size_vfunc(Gtk::Widget&, const Gdk::Rectangle*, + int*, int*, int*, int*) const; + virtual void render_vfunc(const Glib::RefPtr& win, Gtk::Widget& w, + const Gdk::Rectangle& bg_area, const Gdk::Rectangle& cell_area, + const Gdk::Rectangle& expose_area, Gtk::CellRendererState flags); + private: + const int _size; + Glib::Property _sel; + }; + + static void on_inkscape_change_selection(Application *, Selection *, FilterModifier*); + void update_selection(Selection *); + + void filter_list_button_press(GdkEventButton*); void filter_list_button_release(GdkEventButton*); void add_filter(); void remove_filter(); void duplicate_filter(); - void filter_name_edited(const Glib::ustring& path, const Glib::ustring& text); + void rename_filter(); + FilterEffectsDialog& _dialog; Gtk::TreeView _list; + CellRendererSel _cell_sel; Gtk::Button _add; Glib::RefPtr _menu; }; @@ -88,15 +110,18 @@ private: public: CellRendererConnection(); Glib::PropertyProxy property_primitive(); - static int input_count(const SPFilterPrimitive* prim); static const int size = 24; + + void set_text_width(const int w); + int get_text_width() const; protected: virtual void get_size_vfunc(Gtk::Widget& widget, const Gdk::Rectangle* cell_area, int* x_offset, int* y_offset, int* width, int* height) const; private: // void* should be SPFilterPrimitive*, some weirdness with properties prevents this Glib::Property _primitive; + int _text_width; }; class PrimitiveList : public Gtk::TreeView @@ -113,89 +138,45 @@ private: void select(SPFilterPrimitive *prim); int primitive_count() const; - bool is_first(const SPFilterPrimitive*) const; protected: - bool on_expose_event(GdkEventExpose*); + bool on_expose_signal(GdkEventExpose*); bool on_button_press_event(GdkEventButton*); bool on_motion_notify_event(GdkEventMotion*); bool on_button_release_event(GdkEventButton*); void on_drag_end(const Glib::RefPtr&); private: + int init_text(); + bool do_connection_node(const Gtk::TreeIter& row, const int input, std::vector& points, const int ix, const int iy); - const Gtk::TreeIter find_result(const Gtk::TreeIter& start, const SPAttributeEnum attr); + const Gtk::TreeIter find_result(const Gtk::TreeIter& start, const int attr, int& src_id); int find_index(const Gtk::TreeIter& target); - void draw_connection(const Gtk::TreeIter&, const int x1, const int y1, const int row_count); + void draw_connection(const Gtk::TreeIter&, const int attr, const int text_start_x, + const int x1, const int y1, const int row_count); void sanitize_connections(const Gtk::TreeIter& prim_iter); FilterEffectsDialog& _dialog; Glib::RefPtr _model; PrimitiveColumns _columns; + CellRendererConnection _connection_cell; Glib::RefPtr _primitive_menu; + Glib::RefPtr _vertical_layout; int _in_drag; SPFilterPrimitive* _drag_prim; }; - class SettingsGroup : public Gtk::VBox - { - public: - SettingsGroup(); - void init(FilterEffectsDialog* dlg, Glib::RefPtr sg); - - void add_setting_generic(Gtk::Widget& w, const Glib::ustring& label); - void add_setting(SpinSlider& ss, const SPAttributeEnum attr, const Glib::ustring& label); - template void add_setting(ComboBoxEnum& combo, const SPAttributeEnum attr, - const Glib::ustring& label) - { - add_setting_generic(combo, label); - combo.signal_changed().connect( - sigc::bind(sigc::mem_fun(_dialog, &FilterEffectsDialog::set_attr_comboboxenum), attr, &combo)); - } - void add_setting(std::vector& w, const Glib::ustring& label = ""); - private: - Glib::RefPtr _sizegroup; - FilterEffectsDialog* _dialog; - }; - - class ConvolveMatrixColumns : public Gtk::TreeModel::ColumnRecord - { - public: - ConvolveMatrixColumns(); - std::vector > cols; - }; - - class ConvolveMatrix : public Gtk::TreeView - { - public: - ConvolveMatrix(); - - sigc::signal& signal_changed(); - Glib::ustring get_value() const; - - void update(SPFeConvolveMatrix*); - void update(SPFeConvolveMatrix*, const int r, const int c); - private: - void rebind(const Glib::ustring&, const Glib::ustring&); - Glib::RefPtr _model; - ConvolveMatrixColumns _columns; - sigc::signal _signal_changed; - }; - + FilterEffectsDialog(); void init_settings_widgets(); // Handlers void add_primitive(); void remove_primitive(); void duplicate_primitive(); + void convolve_order_changed(); - void set_attr_spinslider(const SPAttributeEnum attr, const SpinSlider*); - template void set_attr_comboboxenum(const SPAttributeEnum attr, ComboBoxEnum* input) - { - if(input->is_sensitive()) - set_attr(attr, input->get_active_data()->key.c_str()); - } - void set_attr_special(const SPAttributeEnum); - void set_attr(const SPAttributeEnum, const gchar* val); + void set_attr_direct(const AttrWidget*); + void set_child_attr_direct(const AttrWidget*); + void set_attr(SPObject*, const SPAttributeEnum, const gchar* val); void update_settings_view(); void update_settings_sensitivity(); @@ -208,71 +189,27 @@ private: UI::Widget::ComboBoxEnum _add_primitive_type; Gtk::Button _add_primitive; - // Right pane (filter effect primitive settings) - Gtk::VBox _settings; - Glib::RefPtr _settings_labels; + // Bottom pane (filter effect primitive settings) + Gtk::VBox _settings_box; Gtk::Label _empty_settings; - // Generic settings - SettingsGroup _generic_settings; - UI::Widget::ComboBoxEnum _primitive_input1; - UI::Widget::ComboBoxEnum _primitive_input2; - - SettingsGroup _blend; - UI::Widget::ComboBoxEnum _blend_mode; - - SettingsGroup _colormatrix; - Gtk::ComboBoxText _colormatrix_type; - - SettingsGroup _componenttransfer; - - SettingsGroup _composite; - UI::Widget::ComboBoxEnum _composite_operator; - SpinSlider _composite_k1; - SpinSlider _composite_k2; - SpinSlider _composite_k3; - SpinSlider _composite_k4; - - SettingsGroup _convolvematrix; - Gtk::SpinButton _convolve_orderx; - Gtk::SpinButton _convolve_ordery; - ConvolveMatrix _convolve_kernelmatrix; - SpinSlider _convolve_divisor; - SpinSlider _convolve_bias; - - SettingsGroup _diffuselighting; - - SettingsGroup _displacementmap; - - SettingsGroup _flood; - - SettingsGroup _gaussianblur; - SpinSlider _gaussianblur_stddeviation; - - SettingsGroup _image; - - SettingsGroup _merge; - - SettingsGroup _morphology; - Gtk::ComboBoxText _morphology_operator; - SpinSlider _morphology_radius; - - SettingsGroup _offset; - SpinSlider _offset_dx; - SpinSlider _offset_dy; + class Settings; + class MatrixAttr; + class ColorMatrixValues; + class LightSourceControl; + Settings* _settings; + Glib::RefPtr _sizegroup; - SettingsGroup _specularlighting; + // Convolve Matrix + MatrixAttr* _convolve_matrix; + DualSpinButton* _convolve_order; + MultiSpinButton* _convolve_target; - SettingsGroup _tile; + // For controlling setting sensitivity + Gtk::Widget* _k1, *_k2, *_k3, *_k4; - SettingsGroup _turbulence; - SpinSlider _turbulence_basefrequency; - SpinSlider _turbulence_numoctaves; - SpinSlider _turbulence_seed; - Gtk::CheckButton _turbulence_stitchtiles; - Gtk::RadioButton::Group _turbulence_type; - Gtk::RadioButton _turbulence_fractalnoise; - Gtk::RadioButton _turbulence_turbulence; + // To prevent unwanted signals + bool _locked; FilterEffectsDialog(FilterEffectsDialog const &d); FilterEffectsDialog& operator=(FilterEffectsDialog const &d);