summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2019-02-04 22:51:54 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2019-02-18 21:18:27 +0000
commitb41e95304a0269c587f6ba7b6cf3727c3ecfff1c (patch)
tree4d3ef2da78d2875cb873b1bd8d6af29fe8f5f16b /src
parentadd sorting and favorites (diff)
downloadinkscape-b41e95304a0269c587f6ba7b6cf3727c3ecfff1c.tar.gz
inkscape-b41e95304a0269c587f6ba7b6cf3727c3ecfff1c.zip
Working with event boxes
Diffstat (limited to 'src')
-rw-r--r--src/ui/dialog/livepatheffect-add.cpp198
-rw-r--r--src/ui/dialog/livepatheffect-add.h6
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;