diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-02-04 22:51:54 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-02-18 21:18:27 +0000 |
| commit | b41e95304a0269c587f6ba7b6cf3727c3ecfff1c (patch) | |
| tree | 4d3ef2da78d2875cb873b1bd8d6af29fe8f5f16b /src | |
| parent | add sorting and favorites (diff) | |
| download | inkscape-b41e95304a0269c587f6ba7b6cf3727c3ecfff1c.tar.gz inkscape-b41e95304a0269c587f6ba7b6cf3727c3ecfff1c.zip | |
Working with event boxes
Diffstat (limited to 'src')
| -rw-r--r-- | src/ui/dialog/livepatheffect-add.cpp | 198 | ||||
| -rw-r--r-- | src/ui/dialog/livepatheffect-add.h | 6 |
2 files changed, 120 insertions, 84 deletions
diff --git a/src/ui/dialog/livepatheffect-add.cpp b/src/ui/dialog/livepatheffect-add.cpp index 9137f529d..c438cfa3e 100644 --- a/src/ui/dialog/livepatheffect-add.cpp +++ b/src/ui/dialog/livepatheffect-add.cpp @@ -54,6 +54,25 @@ void sp_remove_fav(Glib::ustring effect){ } } +bool +LivePathEffectAdd::mouseover(GdkEventCrossing* evt, GtkWidget *wdg) +{ + GdkDisplay *display = gdk_display_get_default(); + GdkCursor *cursor = gdk_cursor_new_for_display(display, GDK_HAND2); + GdkWindow *window = gtk_widget_get_window(wdg); + gdk_window_set_cursor(window, cursor); + g_object_unref(cursor); + return true; +} + +bool +LivePathEffectAdd::mouseout(GdkEventCrossing* evt, GtkWidget *wdg) +{ + GdkWindow *window = gtk_widget_get_window(wdg); + gdk_window_set_cursor(window, nullptr); + return true; +} + LivePathEffectAdd::LivePathEffectAdd() : converter(Inkscape::LivePathEffect::LPETypeConverter) { @@ -66,12 +85,14 @@ LivePathEffectAdd::LivePathEffectAdd() } _builder->get_widget("LPEDialogSelector", _LPEDialogSelector); _builder->get_widget("LPESelectorFlowBox", _LPESelectorFlowBox); - _builder->get_widget("LPESelectorEffectInfo", _LPESelectorEffectInfo); + _builder->get_widget("LPESelectorEffectInfoPop", _LPESelectorEffectInfoPop); _builder->get_widget("LPEFilter", _LPEFilter); _builder->get_widget("LPEInfo", _LPEInfo); _builder->get_widget("LPEExperimentals", _LPEExperimentals); _builder->get_widget("LPEScrolled", _LPEScrolled); _LPEFilter->signal_search_changed().connect(sigc::mem_fun(*this, &LivePathEffectAdd::on_search)); + _LPESelectorFlowBox->signal_child_activated().connect(sigc::mem_fun(*this, &LivePathEffectAdd::on_activate)); + _LPEDialogSelector->add_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::ENTER_NOTIFY_MASK | Gdk::LEAVE_NOTIFY_MASK ); Glib::ustring effectgladefile = get_filename(Inkscape::IO::Resource::UIS, "dialog-livepatheffect-add-effect.ui"); for (int i = 0; i < static_cast<int>(converter._length); ++i) { Glib::RefPtr<Gtk::Builder> builder_effect; @@ -81,7 +102,7 @@ LivePathEffectAdd::LivePathEffectAdd() g_warning("Glade file loading failed for filter effect dialog"); return; } - Gtk::Box *LPESelectorEffect; + Gtk::EventBox *LPESelectorEffect; builder_effect->get_widget("LPESelectorEffect", LPESelectorEffect); const LivePathEffect::EnumEffectData<LivePathEffect::EffectType> *data = &converter.data(i); Gtk::Label *LPEName; @@ -97,25 +118,28 @@ LivePathEffectAdd::LivePathEffectAdd() Gtk::Image *LPEIcon; builder_effect->get_widget("LPEIcon", LPEIcon); LPEIcon->set_from_icon_name(converter.get_icon(data->id), Gtk::BuiltinIconSize(Gtk::ICON_SIZE_DIALOG)); - Gtk::EventBox *LPESelectorEffectInfoLauncher; - builder_effect->get_widget("LPESelectorEffectInfoLauncher", LPESelectorEffectInfoLauncher); - LPESelectorEffectInfoLauncher->signal_button_press_event().connect(sigc::bind<Glib::RefPtr<Gtk::Builder> >(sigc::mem_fun(*this, &LivePathEffectAdd::pop_description), builder_effect)); - Gtk::EventBox *LPESelectorEffectFavLauncher; - builder_effect->get_widget("LPESelectorEffectFavLauncher", LPESelectorEffectFavLauncher); - Gtk::EventBox *LPESelectorEffectFavLauncherTop; - builder_effect->get_widget("LPESelectorEffectFavLauncherTop", LPESelectorEffectFavLauncherTop); - LPESelectorEffectFavLauncher ->signal_button_press_event().connect(sigc::bind<Glib::RefPtr<Gtk::Builder> >(sigc::mem_fun(*this, &LivePathEffectAdd::fav_toggler), builder_effect)); - LPESelectorEffectFavLauncherTop->signal_button_press_event().connect(sigc::bind<Glib::RefPtr<Gtk::Builder> >(sigc::mem_fun(*this, &LivePathEffectAdd::fav_toggler), builder_effect)); + Gtk::EventBox *LPESelectorEffectEventInfo; + //LPESelectorEffectEventFav->add_events(Gdk::BUTTON_PRESS_MASK); + builder_effect->get_widget("LPESelectorEffectEventInfo", LPESelectorEffectEventInfo); + LPESelectorEffectEventInfo->signal_button_press_event().connect(sigc::bind<Glib::RefPtr<Gtk::Builder> >(sigc::mem_fun(*this, &LivePathEffectAdd::pop_description), builder_effect)); + Gtk::EventBox *LPESelectorEffectEventFav; + builder_effect->get_widget("LPESelectorEffectEventFav", LPESelectorEffectEventFav); + // LPESelectorEffectEventFav->add_events(Gdk::BUTTON_PRESS_MASK); + Gtk::EventBox *LPESelectorEffectEventFavTop; + builder_effect->get_widget("LPESelectorEffectEventFavTop", LPESelectorEffectEventFavTop); + //LPESelectorEffectFavTop->add_events(Gdk::BUTTON_PRESS_MASK); + LPESelectorEffectEventFav ->signal_button_press_event().connect(sigc::bind<Glib::RefPtr<Gtk::Builder> >(sigc::mem_fun(*this, &LivePathEffectAdd::fav_toggler), builder_effect)); + LPESelectorEffectEventFavTop->signal_button_press_event().connect(sigc::bind<Glib::RefPtr<Gtk::Builder> >(sigc::mem_fun(*this, &LivePathEffectAdd::fav_toggler), builder_effect)); + LPESelectorEffect->signal_enter_notify_event().connect(sigc::bind<GtkWidget *>(sigc::mem_fun(*this, &LivePathEffectAdd::mouseover), GTK_WIDGET(LPESelectorEffect->gobj()))); + LPESelectorEffect->signal_leave_notify_event().connect(sigc::bind<GtkWidget *>(sigc::mem_fun(*this, &LivePathEffectAdd::mouseout), GTK_WIDGET(LPESelectorEffect->gobj()))); _LPESelectorFlowBox->insert(*LPESelectorEffect, i); } _visiblelpe = _LPESelectorFlowBox->get_children().size(); - _LPESelectorFlowBox->signal_child_activated().connect(sigc::mem_fun(*this, &LivePathEffectAdd::on_activate)); - _LPEDialogSelector->show_all_children(); - _LPEDialogSelector->add_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::ENTER_NOTIFY_MASK | Gdk::LEAVE_NOTIFY_MASK ); _LPEInfo->set_visible(false); _LPESelectorFlowBox->set_sort_func(sigc::mem_fun(*this, &LivePathEffectAdd::on_sort)); _LPESelectorFlowBox->set_filter_func(sigc::mem_fun(*this, &LivePathEffectAdd::on_filter)); _LPEExperimentals->property_active().signal_changed().connect(sigc::mem_fun(*this, &LivePathEffectAdd::reload_effect_list)); + _LPEDialogSelector->show_all_children(); } void LivePathEffectAdd::on_activate(Gtk::FlowBoxChild *child) @@ -125,12 +149,15 @@ void LivePathEffectAdd::on_activate(Gtk::FlowBoxChild *child) leitem->get_style_context()->remove_class("lpeactive"); leitem->get_style_context()->remove_class("colorinverse"); leitem->get_style_context()->remove_class("backgroundinverse"); - Gtk::Box *box = dynamic_cast<Gtk::Box *>(leitem->get_child()); - if (box) { - std::vector<Gtk::Widget *> contents = box->get_children(); - Gtk::Box *actions = dynamic_cast<Gtk::Box *>(contents[4]); - if (actions) { - actions->set_visible(false); + Gtk::EventBox *eventbox = dynamic_cast<Gtk::EventBox *>(leitem->get_child()); + if (eventbox) { + Gtk::Box *box = dynamic_cast<Gtk::Box *>(eventbox->get_child()); + if (box) { + std::vector<Gtk::Widget *> contents = box->get_children(); + Gtk::Box *actions = dynamic_cast<Gtk::Box *>(contents[4]); + if (actions) { + actions->set_visible(false); + } } } } @@ -142,9 +169,9 @@ void LivePathEffectAdd::on_activate(Gtk::FlowBoxChild *child) bool LivePathEffectAdd::pop_description(GdkEventButton* evt, Glib::RefPtr<Gtk::Builder> builder_effect) { - Gtk::EventBox *LPESelectorEffectInfoLauncher; - builder_effect->get_widget("LPESelectorEffectInfoLauncher", LPESelectorEffectInfoLauncher); - _LPESelectorEffectInfo->set_relative_to(*LPESelectorEffectInfoLauncher->get_children()[0]); + Gtk::Image *LPESelectorEffectInfo; + builder_effect->get_widget("LPESelectorEffectInfo", LPESelectorEffectInfo); + _LPESelectorEffectInfoPop->set_relative_to(*LPESelectorEffectInfo); Gtk::Label *LPEName; builder_effect->get_widget("LPEName", LPEName); @@ -165,35 +192,33 @@ bool LivePathEffectAdd::pop_description(GdkEventButton* evt, Glib::RefPtr<Gtk::B _builder->get_widget("LPESelectorEffectInfoDescription", LPESelectorEffectInfoDescription); LPESelectorEffectInfoDescription->set_text(LPEDescription->get_text()); - _LPESelectorEffectInfo->show(); + _LPESelectorEffectInfoPop->show(); return true; } bool LivePathEffectAdd::fav_toggler(GdkEventButton* evt, Glib::RefPtr<Gtk::Builder> builder_effect) { - Gtk::Box *LPESelectorEffect; + Gtk::EventBox *LPESelectorEffect; builder_effect->get_widget("LPESelectorEffect", LPESelectorEffect); Gtk::Label *LPEName; builder_effect->get_widget("LPEName", LPEName); - Gtk::EventBox *LPESelectorEffectFavLauncher; - builder_effect->get_widget("LPESelectorEffectFavLauncher", LPESelectorEffectFavLauncher); - Gtk::Image *favimg = dynamic_cast<Gtk::Image *>(LPESelectorEffectFavLauncher->get_child()); - Gtk::EventBox *LPESelectorEffectFavLauncherTop; - builder_effect->get_widget("LPESelectorEffectFavLauncherTop", LPESelectorEffectFavLauncherTop); - Gtk::Image *favimgtop = dynamic_cast<Gtk::Image *>(LPESelectorEffectFavLauncherTop->get_child()); - if (favimg && favimgtop) { + Gtk::Image *LPESelectorEffectFav; + builder_effect->get_widget("LPESelectorEffectFav", LPESelectorEffectFav); + Gtk::EventBox *LPESelectorEffectEventFavTop; + builder_effect->get_widget("LPESelectorEffectEventFavTop", LPESelectorEffectEventFavTop); + if (LPESelectorEffectFav && LPESelectorEffectEventFavTop) { if (sp_has_fav(LPEName->get_text())){ //favimg->set_from_icon_name("draw-star-outline", Gtk::IconSize(30)); - LPESelectorEffectFavLauncherTop->set_visible(false); - LPESelectorEffectFavLauncherTop->hide(); + LPESelectorEffectEventFavTop->set_visible(false); + LPESelectorEffectEventFavTop->hide(); sp_remove_fav(LPEName->get_text()); LPESelectorEffect->get_parent()->get_style_context()->remove_class("lpefav"); _LPESelectorFlowBox->invalidate_sort(); } else { //favimg->set_from_icon_name("draw-star", Gtk::IconSize(30)); - LPESelectorEffectFavLauncherTop->set_visible(true); - LPESelectorEffectFavLauncherTop->show(); + LPESelectorEffectEventFavTop->set_visible(true); + LPESelectorEffectEventFavTop->show(); sp_add_fav(LPEName->get_text()); LPESelectorEffect->get_parent()->get_style_context()->add_class("lpefav"); Glib::RefPtr< Gtk::Adjustment > vadjust = _LPEScrolled->get_vadjustment(); @@ -206,33 +231,36 @@ bool LivePathEffectAdd::fav_toggler(GdkEventButton* evt, Glib::RefPtr<Gtk::Build bool LivePathEffectAdd::on_filter(Gtk::FlowBoxChild *child) { - Gtk::Box *box = dynamic_cast<Gtk::Box *>(child->get_child()); - if (box) { - std::vector<Gtk::Widget *> contents = box->get_children(); - Gtk::ToggleButton *experimental = dynamic_cast<Gtk::ToggleButton *>(contents[3]); - if (experimental) { - if (experimental->get_active() && !_LPEExperimentals->get_active()) { - return false; + Gtk::EventBox *eventbox = dynamic_cast<Gtk::EventBox *>(child->get_child()); + if (eventbox) { + Gtk::Box *box = dynamic_cast<Gtk::Box *>(eventbox->get_child()); + if (box) { + std::vector<Gtk::Widget *> contents = box->get_children(); + Gtk::ToggleButton *experimental = dynamic_cast<Gtk::ToggleButton *>(contents[3]); + if (experimental) { + if (experimental->get_active() && !_LPEExperimentals->get_active()) { + return false; + } } - } - if (_LPEFilter->get_text().length() < 1) { - _visiblelpe++; - return true; - } - Gtk::Label *lpename = dynamic_cast<Gtk::Label *>(contents[1]); - if (lpename) { - size_t s = lpename->get_text().uppercase().find(_LPEFilter->get_text().uppercase(), 0); - if (s != -1) { + if (_LPEFilter->get_text().length() < 1) { _visiblelpe++; return true; } - } - Gtk::Label *lpedesc = dynamic_cast<Gtk::Label *>(contents[2]); - if (lpedesc) { - size_t s = lpedesc->get_text().uppercase().find(_LPEFilter->get_text().uppercase(), 0); - if (s != -1) { - _visiblelpe++; - return true; + Gtk::Label *lpename = dynamic_cast<Gtk::Label *>(contents[1]); + if (lpename) { + size_t s = lpename->get_text().uppercase().find(_LPEFilter->get_text().uppercase(), 0); + if (s != -1) { + _visiblelpe++; + return true; + } + } + Gtk::Label *lpedesc = dynamic_cast<Gtk::Label *>(contents[2]); + if (lpedesc) { + size_t s = lpedesc->get_text().uppercase().find(_LPEFilter->get_text().uppercase(), 0); + if (s != -1) { + _visiblelpe++; + return true; + } } } } @@ -262,33 +290,39 @@ int LivePathEffectAdd::on_sort(Gtk::FlowBoxChild *child1, Gtk::FlowBoxChild *chi { Glib::ustring name1 = ""; Glib::ustring name2 = ""; - Gtk::Box *box = dynamic_cast<Gtk::Box *>(child1->get_child()); - if (box) { - std::vector<Gtk::Widget *> contents = box->get_children(); - Gtk::Label *lpename = dynamic_cast<Gtk::Label *>(contents[1]); - name1 = lpename->get_text(); - Gtk::Overlay *overlay = dynamic_cast<Gtk::Overlay *>(contents[0]); - if (overlay) { - std::vector<Gtk::Widget *> contents_overlay = overlay->get_children(); - Gtk::EventBox *LPESelectorEffectFavLauncherTop = dynamic_cast<Gtk::EventBox *>(contents_overlay[1]); - if (LPESelectorEffectFavLauncherTop) { - if (sp_has_fav(name1)){ - LPESelectorEffectFavLauncherTop->set_visible(true); - LPESelectorEffectFavLauncherTop->show(); - child1->get_style_context()->add_class("lpefav"); - } else { - LPESelectorEffectFavLauncherTop->set_visible(false); - LPESelectorEffectFavLauncherTop->hide(); - child1->get_style_context()->remove_class("lpefav"); + Gtk::EventBox *eventbox = dynamic_cast<Gtk::EventBox *>(child1->get_child()); + if (eventbox) { + Gtk::Box *box = dynamic_cast<Gtk::Box *>(eventbox->get_child()); + if (box) { + std::vector<Gtk::Widget *> contents = box->get_children(); + Gtk::Label *lpename = dynamic_cast<Gtk::Label *>(contents[1]); + name1 = lpename->get_text(); + Gtk::Overlay *overlay = dynamic_cast<Gtk::Overlay *>(contents[0]); + if (overlay) { + std::vector<Gtk::Widget *> contents_overlay = overlay->get_children(); + Gtk::EventBox *LPESelectorEffectEventFavTop = dynamic_cast<Gtk::EventBox *>(contents_overlay[1]); + if (LPESelectorEffectEventFavTop) { + if (sp_has_fav(name1)){ + LPESelectorEffectEventFavTop->set_visible(true); + LPESelectorEffectEventFavTop->show(); + child1->get_style_context()->add_class("lpefav"); + } else { + LPESelectorEffectEventFavTop->set_visible(false); + LPESelectorEffectEventFavTop->hide(); + child1->get_style_context()->remove_class("lpefav"); + } } } } } - box = dynamic_cast<Gtk::Box *>(child2->get_child()); - if (box) { - std::vector<Gtk::Widget *> contents = box->get_children(); - Gtk::Label *lpename = dynamic_cast<Gtk::Label *>(contents[1]); - name2 = lpename->get_text(); + eventbox = dynamic_cast<Gtk::EventBox *>(child2->get_child()); + if (eventbox) { + Gtk::Box *box = dynamic_cast<Gtk::Box *>(eventbox->get_child()); + if (box) { + std::vector<Gtk::Widget *> contents = box->get_children(); + Gtk::Label *lpename = dynamic_cast<Gtk::Label *>(contents[1]); + name2 = lpename->get_text(); + } } std::vector<Glib::ustring> effect; diff --git a/src/ui/dialog/livepatheffect-add.h b/src/ui/dialog/livepatheffect-add.h index b99c40ece..f0f75ee3d 100644 --- a/src/ui/dialog/livepatheffect-add.h +++ b/src/ui/dialog/livepatheffect-add.h @@ -42,7 +42,7 @@ namespace Dialog { class LivePathEffectAdd { public: LivePathEffectAdd(); - ~LivePathEffectAdd(){}; + ~LivePathEffectAdd()= default;; /** * Show the dialog @@ -63,6 +63,8 @@ public: void on_activate(Gtk::FlowBoxChild *child); bool pop_description(GdkEventButton* evt, Glib::RefPtr<Gtk::Builder> builder_effect); bool fav_toggler(GdkEventButton* evt, Glib::RefPtr<Gtk::Builder> builder_effect); + bool mouseover(GdkEventCrossing* evt, GtkWidget *wdg); + bool mouseout(GdkEventCrossing* evt, GtkWidget *wdg); void reload_effect_list(); /** * Add button was clicked @@ -83,7 +85,7 @@ private: Gtk::Dialog *_LPEDialogSelector; Glib::RefPtr<Gtk::Builder> _builder; Gtk::FlowBox *_LPESelectorFlowBox; - Gtk::Popover *_LPESelectorEffectInfo; + Gtk::Popover *_LPESelectorEffectInfoPop; Gtk::Switch * _LPEExperimentals; Gtk::SearchEntry *_LPEFilter; Gtk::ScrolledWindow *_LPEScrolled; |
