Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TimeTrack: fix regression No context menu for waypoints at Canvas Parameter #2363

Merged
merged 1 commit into from Oct 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
42 changes: 33 additions & 9 deletions synfig-studio/src/gui/widgets/widget_timetrack.cpp
Expand Up @@ -842,24 +842,48 @@ void Widget_Timetrack::draw_selected_background(const Cairo::RefPtr<Cairo::Conte
}
}

bool Widget_Timetrack::fetch_waypoints(const WaypointItem &wi, std::set<synfig::Waypoint, std::less<synfig::UniqueID>>& waypoint_set) const
{
try {
const synfigapp::ValueDesc &value_desc = param_info_map.at(wi.path.to_string()).get_value_desc();

etl::handle<synfig::Node> node;
if (value_desc.is_value_node())
node = value_desc.get_value_node() ;
else if (value_desc.parent_is_layer() && value_desc.get_layer()->get_param(value_desc.get_param_name()).get_type() == synfig::type_canvas)
node = value_desc.get_canvas();

if (node)
synfig::waypoint_collect(waypoint_set, wi.time_point.get_time(), node);

morevnaproject marked this conversation as resolved.
Show resolved Hide resolved
return node;
} catch (std::out_of_range& ex) {
synfig::error(_("Timetrack: trying to fetch waypoints of not-mapped parameter: %s [%f]"), wi.path.to_string().c_str(), wi.time_point.get_time());
} catch (...) {
synfig::error(_("Timetrack: Unknown error"));
}

return false;
}

void Widget_Timetrack::on_waypoint_clicked(const Widget_Timetrack::WaypointItem& wi, unsigned int button, Gdk::Point)
{
std::set<synfig::Waypoint, std::less<synfig::UniqueID> > waypoint_set;
const synfigapp::ValueDesc &value_desc = param_info_map[wi.path.to_string()].get_value_desc();
if (value_desc.is_value_node())
synfig::waypoint_collect(waypoint_set, wi.time_point.get_time(), value_desc.get_value_node());
if (waypoint_set.size() > 0)
fetch_waypoints(wi, waypoint_set);
if (waypoint_set.size() > 0) {
const synfigapp::ValueDesc &value_desc = param_info_map.at(wi.path.to_string()).get_value_desc();
signal_waypoint_clicked().emit(value_desc, waypoint_set, button);
}
}

void Widget_Timetrack::on_waypoint_double_clicked(const Widget_Timetrack::WaypointItem& wi, unsigned int button, Gdk::Point)
{
std::set<synfig::Waypoint, std::less<synfig::UniqueID> > waypoint_set;
const synfigapp::ValueDesc &value_desc = param_info_map[wi.path.to_string()].get_value_desc();
if (value_desc.is_value_node())
synfig::waypoint_collect(waypoint_set, wi.time_point.get_time(), value_desc.get_value_node());
if (waypoint_set.size() > 0)
signal_waypoint_double_clicked().emit(value_desc, waypoint_set, button);
fetch_waypoints(wi, waypoint_set);
if (waypoint_set.size() > 0) {
const synfigapp::ValueDesc &value_desc = param_info_map.at(wi.path.to_string()).get_value_desc();
signal_waypoint_double_clicked().emit(value_desc, waypoint_set, button);
}
}

Widget_Timetrack::WaypointScaleInfo Widget_Timetrack::compute_scale_params() const
Expand Down
1 change: 1 addition & 0 deletions synfig-studio/src/gui/widgets/widget_timetrack.h
Expand Up @@ -214,6 +214,7 @@ class Widget_Timetrack : public Widget_TimeGraphBase
void draw_waypoints(const Cairo::RefPtr<Cairo::Context> &cr, const Gtk::TreePath &path, const RowInfo &row_info, const std::vector<std::pair<synfig::TimePoint, synfig::Time>> &waypoints) const;
void draw_selected_background(const Cairo::RefPtr<Cairo::Context> &cr, const Gtk::TreePath &path, const RowInfo &row_info) const;

bool fetch_waypoints(const WaypointItem &wi, std::set<synfig::Waypoint, std::less<synfig::UniqueID> > &waypoint_set) const;
void on_waypoint_clicked(const WaypointItem &wi, unsigned int button, Gdk::Point /*point*/);
void on_waypoint_double_clicked(const WaypointItem &wi, unsigned int button, Gdk::Point /*point*/);

Expand Down