void Widget_CompSelect::new_instance(etl::handle<studio::Instance> instance) { if(studio::App::shutdown_in_progress) return; assert(instance); etl::loose_handle<studio::Instance> loose_instance(instance); instance->synfigapp::Instance::signal_filename_changed().connect(sigc::mem_fun(*this,&Widget_CompSelect::refresh)); instance->synfigapp::Instance::signal_filename_changed().connect( sigc::bind<etl::loose_handle<studio::Instance> >( sigc::mem_fun(*this,&Widget_CompSelect::set_selected_instance), loose_instance ) ); { std::string name=basename(instance->get_file_name()); instances.push_back(loose_instance); append(name); } }
void Dock_History::set_selected_instance_(etl::handle<studio::Instance> instance) { if(studio::App::shutdown_in_progress) return; if (on_undo_tree_changed_connection) on_undo_tree_changed_connection.disconnect(); selected_instance=instance; if(instance) { on_undo_tree_changed_connection = selected_instance->history_tree_store()->signal_undo_tree_changed().connect( sigc::mem_fun(*this,&Dock_History::on_undo_tree_changed)); action_tree->set_model(instance->history_tree_store()); action_tree->show(); update_undo_redo(); action_group->set_sensitive(true); } else { action_tree->set_model(Glib::RefPtr< Gtk::TreeModel >()); action_tree->hide(); action_group->set_sensitive(false); } }
virtual int next_frame(Time& time) { Glib::Mutex::Lock lock(mutex); if(!alive_flag) return 0; return warm_target->next_frame(time); }
void Super::add_action_front(etl::handle<Undoable> action) { action_list_.push_front(action); CanvasSpecific *specific_action=dynamic_cast<CanvasSpecific *>(action.get()); if(specific_action && !get_canvas()) set_canvas(specific_action->get_canvas()); }
int ValueNode::replace(etl::handle<ValueNode> x) { if(x.get()==this) return 0; while(parent_set.size()) { (*parent_set.begin())->add_child(x.get()); (*parent_set.begin())->remove_child(this); //x->parent_set.insert(*parent_set.begin()); //parent_set.erase(parent_set.begin()); } int r(RHandle(this).replace(x)); x->changed(); return r; }
AsyncTarget_Cairo(etl::handle<synfig::Target_Cairo> warm_target): warm_target(warm_target), surface(), callback(), alive_flag(), ready_next() { set_avoid_time_sync(warm_target->get_avoid_time_sync()); set_canvas(warm_target->get_canvas()); set_quality(warm_target->get_quality()); set_alpha_mode(warm_target->get_alpha_mode()); set_rend_desc(&warm_target->rend_desc()); alive_flag=true; #ifndef GLIB_DISPATCHER_BROKEN ready_connection=frame_ready_signal.connect(sigc::mem_fun(*this,&AsyncTarget_Cairo::frame_ready)); #endif }
bool Action::System::redo_(etl::handle<UIInterface> uim) { handle<Action::Undoable> action(redo_action_stack().front()); most_recent_action_name_=action->get_name(); try { if(action->is_active()) action->perform(); } catch(Action::Error err) { if(err.get_type()!=Action::Error::TYPE_UNABLE) { if(err.get_desc().empty()) uim->error(action->get_local_name()+_(" (Redo): ")+strprintf("%d",err.get_type())); else uim->error(action->get_local_name()+_(" (Redo): ")+err.get_desc()); } return false; } catch(std::runtime_error x) { uim->error(x.what()); return false; } catch(...) { return false; } inc_action_count(); if(undo_action_stack_.empty()) signal_undo_status()(true); undo_action_stack_.push_front(redo_action_stack_.front()); redo_action_stack_.pop_front(); if(redo_action_stack_.empty()) signal_redo_status()(false); if(!group_stack_.empty()) group_stack_.front()->inc_depth(); signal_redo_(); return true; }
//! \writeme int synfig::activepoint_collect(set<Activepoint, std::less<UniqueID> >& /*activepoint_set*/,const Time& time, const etl::handle<Node>& node) { const TimePointSet& timepoint_set(node->get_times()); // Check to see if there is anything in here at the given time if(timepoint_set.find(time)==timepoint_set.end()) return 0; return 0; }
void frame_ready() { Glib::Mutex::Lock lock(mutex); if(alive_flag) alive_flag=warm_target->put_surface(surface, callback); #ifdef SINGLE_THREADED if (!single_threaded()) #endif cond_frame_queue_empty.signal(); ready_next=true; }
AsyncTarget_Cairo_Tile(etl::handle<synfig::Target_Cairo_Tile> warm_target): warm_target(warm_target) { set_avoid_time_sync(warm_target->get_avoid_time_sync()); set_tile_w(warm_target->get_tile_w()); set_tile_h(warm_target->get_tile_h()); set_canvas(warm_target->get_canvas()); set_quality(warm_target->get_quality()); set_alpha_mode(warm_target->get_alpha_mode()); set_threads(warm_target->get_threads()); set_clipping(warm_target->get_clipping()); set_rend_desc(&warm_target->rend_desc()); alive_flag=true; #ifndef GLIB_DISPATCHER_BROKEN ready_connection=tile_ready_signal.connect(sigc::mem_fun(*this,&AsyncTarget_Cairo_Tile::tile_ready)); #endif }
Gtk::StockID studio::valuenode_icon(etl::handle<synfig::ValueNode> value_node) { if(handle<ValueNode_Const>::cast_dynamic(value_node)) { return value_icon(value_node->get_type()); } else { return Gtk::StockID("synfig-value_node"); } }
AsyncTarget_Scanline(etl::handle<synfig::Target_Scanline> warm_target): warm_target(warm_target) { set_avoid_time_sync(warm_target->get_avoid_time_sync()); set_canvas(warm_target->get_canvas()); set_quality(warm_target->get_quality()); set_remove_alpha(warm_target->get_remove_alpha()); set_threads(warm_target->get_threads()); set_rend_desc(&warm_target->rend_desc()); alive_flag=true; #ifndef GLIB_DISPATCHER_BROKEN ready_connection=frame_ready_signal.connect(sigc::mem_fun(*this,&AsyncTarget_Scanline::frame_ready)); #endif surface.set_wh(warm_target->rend_desc().get_w(),warm_target->rend_desc().get_h()); }
void ValueBase::set(etl::handle<Canvas> x) { clear(); if(x #ifndef TRY_FIX_FOR_BUG_27 && x->is_inline() #endif ) _set(etl::handle<Canvas>(x)); else _set(etl::loose_handle<Canvas>(x)); assert(get(x)==x); }
void HistoryTreeStore::on_action_status_changed(etl::handle<synfigapp::Action::Undoable> action) { Gtk::TreeModel::Children::iterator iter; Gtk::TreeModel::Children children_(children()); for(iter=children_.begin(); iter != children_.end(); ++iter) { Gtk::TreeModel::Row row = *iter; if(action == (etl::handle<synfigapp::Action::Undoable>)row[model.action]) { row[model.is_active]=action->is_active(); return; } } }
virtual bool start_frame(synfig::ProgressCallback *cb=0) { if(!alive_flag) return false; return warm_target->start_frame(cb); }
virtual int next_frame(Time& time) { if(!alive_flag) return 0; return warm_target->next_frame(time); }
virtual int total_tiles()const { return warm_target->total_tiles(); }
WorkArea * get_work_area()const{return canvas_view->get_work_area();}
etl::handle<synfigapp::CanvasInterface> get_canvas_interface()const{return canvas_view->canvas_interface();}
synfig::Canvas::Handle get_canvas()const{return canvas_view_->get_canvas();}
Widget_Waypoint::Widget_Waypoint(etl::handle<synfig::Canvas> canvas): Gtk::Alignment(0, 0, 1, 1), waypoint(synfig::ValueBase(),0), adj_tension(Gtk::Adjustment::create(0.0,-20,20,0.1,1)), adj_continuity(Gtk::Adjustment::create(0.0,-20,20,0.1,1)), adj_bias(Gtk::Adjustment::create(0.0,-20,20,0.1,1)), adj_temporal_tension(Gtk::Adjustment::create(0.0,-20,20,0.1,1)) { value_widget=manage(new Widget_ValueBase()); value_widget->set_canvas(canvas); value_widget->show(); value_node_label=manage(new Gtk::Label(_("(Non-static value)"))); time_widget=manage(new Widget_Time()); time_widget->set_fps(canvas->rend_desc().get_frame_rate()); before_options=manage(new class Widget_Enum()); before_options->show(); before_options->set_param_desc( ParamDesc("interpolation") .set_hint("enum") .add_enum_value(INTERPOLATION_CLAMPED,"clamped",_("Clamped")) .add_enum_value(INTERPOLATION_TCB,"auto",_("TCB")) .add_enum_value(INTERPOLATION_CONSTANT,"constant",_("Constant")) .add_enum_value(INTERPOLATION_HALT,"ease",_("Ease In/Out")) .add_enum_value(INTERPOLATION_LINEAR,"linear",_("Linear")) ); before_options->set_icon(0, Gtk::Button().render_icon_pixbuf(Gtk::StockID("synfig-interpolation_type_clamped"),Gtk::ICON_SIZE_MENU)); before_options->set_icon(1, Gtk::Button().render_icon_pixbuf(Gtk::StockID("synfig-interpolation_type_tcb"),Gtk::ICON_SIZE_MENU)); before_options->set_icon(2, Gtk::Button().render_icon_pixbuf(Gtk::StockID("synfig-interpolation_type_const"),Gtk::ICON_SIZE_MENU)); before_options->set_icon(3, Gtk::Button().render_icon_pixbuf(Gtk::StockID("synfig-interpolation_type_ease"),Gtk::ICON_SIZE_MENU)); before_options->set_icon(4, Gtk::Button().render_icon_pixbuf(Gtk::StockID("synfig-interpolation_type_linear"),Gtk::ICON_SIZE_MENU)); after_options=manage(new class Widget_Enum()); after_options->show(); after_options->set_param_desc( ParamDesc("interpolation") .set_hint("enum") .add_enum_value(INTERPOLATION_CLAMPED,"clamped",_("Clamped")) .add_enum_value(INTERPOLATION_TCB,"auto",_("TCB")) .add_enum_value(INTERPOLATION_CONSTANT,"constant",_("Constant")) .add_enum_value(INTERPOLATION_HALT,"ease",_("Ease In/Out")) .add_enum_value(INTERPOLATION_LINEAR,"linear",_("Linear")) ); after_options->set_icon(0, Gtk::Button().render_icon_pixbuf(Gtk::StockID("synfig-interpolation_type_clamped"),Gtk::ICON_SIZE_MENU)); after_options->set_icon(1, Gtk::Button().render_icon_pixbuf(Gtk::StockID("synfig-interpolation_type_tcb"),Gtk::ICON_SIZE_MENU)); after_options->set_icon(2, Gtk::Button().render_icon_pixbuf(Gtk::StockID("synfig-interpolation_type_const"),Gtk::ICON_SIZE_MENU)); after_options->set_icon(3, Gtk::Button().render_icon_pixbuf(Gtk::StockID("synfig-interpolation_type_ease"),Gtk::ICON_SIZE_MENU)); after_options->set_icon(4, Gtk::Button().render_icon_pixbuf(Gtk::StockID("synfig-interpolation_type_linear"),Gtk::ICON_SIZE_MENU)); spin_tension=manage(new class Gtk::SpinButton(adj_tension,0.1,3)); spin_tension->show(); spin_continuity=manage(new class Gtk::SpinButton(adj_continuity,0.1,3)); spin_continuity->show(); spin_bias=manage(new class Gtk::SpinButton(adj_bias,0.1,3)); spin_bias->show(); spin_temporal_tension=manage(new class Gtk::SpinButton(adj_temporal_tension,0.1,3)); spin_temporal_tension->show(); set_padding(12, 12, 12, 12); Gtk::VBox *widgetBox = manage(new Gtk::VBox(false, 12)); add(*widgetBox); Gtk::Frame *waypointFrame = manage(new Gtk::Frame(_("Waypoint"))); waypointFrame->set_shadow_type(Gtk::SHADOW_NONE); ((Gtk::Label *) waypointFrame->get_label_widget())->set_markup(_("<b>Waypoint</b>")); widgetBox->pack_start(*waypointFrame, false, false, 0); Gtk::Alignment *waypointPadding = manage(new Gtk::Alignment(0, 0, 1, 1)); waypointPadding->set_padding(6, 0, 24, 0); waypointFrame->add(*waypointPadding); Gtk::Table *waypointTable = manage(new Gtk::Table(2, 2, false)); waypointTable->set_row_spacings(6); waypointTable->set_col_spacings(12); waypointPadding->add(*waypointTable); Gtk::Label *waypointValueLabel = manage(new Gtk::Label(_("_Value"), true)); waypointValueLabel->set_alignment(0, 0.5); waypointValueLabel->set_mnemonic_widget(*value_widget); waypointTable->attach(*waypointValueLabel, 0, 1, 0, 1, Gtk::SHRINK | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); waypointTable->attach(*value_widget, 1, 2, 0, 1, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); waypointTable->attach(*value_node_label, 1, 2, 0, 1, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); Gtk::Label *waypointTimeLabel = manage(new Gtk::Label(_("_Time"), true)); waypointTimeLabel->set_alignment(0, 0.5); waypointTimeLabel->set_mnemonic_widget(*time_widget); waypointTable->attach(*waypointTimeLabel, 0, 1, 1, 2, Gtk::SHRINK | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); waypointTable->attach(*time_widget, 1, 2, 1, 2, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); Gtk::Frame *interpolationFrame = manage(new Gtk::Frame(_("Interpolation"))); interpolationFrame->set_shadow_type(Gtk::SHADOW_NONE); ((Gtk::Label *) interpolationFrame->get_label_widget())->set_markup(_("<b>Interpolation</b>")); widgetBox->pack_start(*interpolationFrame, false, false, 0); Gtk::Alignment *interpolationPadding = manage(new Gtk::Alignment(0, 0, 1, 1)); interpolationPadding->set_padding(6, 0, 24, 0); interpolationFrame->add(*interpolationPadding); Gtk::Table *interpolationTable = manage(new Gtk::Table(2, 2, false)); interpolationTable->set_row_spacings(6); interpolationTable->set_col_spacings(12); interpolationPadding->add(*interpolationTable); Gtk::Label *interpolationInLabel = manage(new Gtk::Label(_("_In Interpolation"), true)); interpolationInLabel->set_alignment(0, 0.5); interpolationInLabel->set_mnemonic_widget(*before_options); interpolationTable->attach(*interpolationInLabel, 0, 1, 0, 1, Gtk::SHRINK | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); interpolationTable->attach(*before_options, 1, 2, 0, 1, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); Gtk::Label *interpolationOutLabel = manage(new Gtk::Label(_("_Out Interpolation"), true)); interpolationOutLabel->set_alignment(0, 0.5); interpolationOutLabel->set_mnemonic_widget(*after_options); interpolationTable->attach(*interpolationOutLabel, 0, 1, 1, 2, Gtk::SHRINK | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); interpolationTable->attach(*after_options, 1, 2, 1, 2, Gtk::SHRINK | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); Gtk::Frame *tcbFrame = manage(new Gtk::Frame(_("TCB Parameters"))); tcbFrame->set_shadow_type(Gtk::SHADOW_NONE); ((Gtk::Label *) tcbFrame->get_label_widget())->set_markup(_("<b>TCB Parameter</b>")); widgetBox->pack_start(*tcbFrame, false, false, 0); Gtk::Alignment *tcbPadding = manage(new Gtk::Alignment(0, 0, 1, 1)); tcbPadding->set_padding(6, 0, 24, 0); tcbFrame->add(*tcbPadding); Gtk::Table *tcbTable = manage(new Gtk::Table(4, 2, false)); tcbTable->set_row_spacings(6); tcbTable->set_col_spacings(12); tcbPadding->add(*tcbTable); Gtk::Label *tensionLabel = manage(new Gtk::Label(_("T_ension"), true)); tensionLabel->set_alignment(0, 0.5); tensionLabel->set_mnemonic_widget(*spin_tension); spin_tension->set_alignment(1); tcbTable->attach(*tensionLabel, 0, 1, 0, 1, Gtk::SHRINK | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); tcbTable->attach(*spin_tension, 1, 2, 0, 1, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); Gtk::Label *continuityLabel = manage(new Gtk::Label(_("_Continuity"), true)); continuityLabel->set_alignment(0, 0.5); continuityLabel->set_mnemonic_widget(*spin_continuity); spin_continuity->set_alignment(1); tcbTable->attach(*continuityLabel, 0, 1, 1, 2, Gtk::SHRINK | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); tcbTable->attach(*spin_continuity, 1, 2, 1, 2, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); Gtk::Label *biasLabel = manage(new Gtk::Label(_("_Bias"), true)); biasLabel->set_alignment(0, 0.5); biasLabel->set_mnemonic_widget(*spin_bias); spin_bias->set_alignment(1); tcbTable->attach(*biasLabel, 0, 1, 2, 3, Gtk::SHRINK | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); tcbTable->attach(*spin_bias, 1, 2, 2, 3, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); Gtk::Label *temporalTensionLabel = manage(new Gtk::Label(_("Te_mporal Tension"), true)); temporalTensionLabel->set_alignment(0, 0.5); temporalTensionLabel->set_mnemonic_widget(*spin_temporal_tension); spin_temporal_tension->set_alignment(1); tcbTable->attach(*temporalTensionLabel, 0, 1, 3, 4, Gtk::SHRINK | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); tcbTable->attach(*spin_temporal_tension, 1, 2, 3, 4, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); show_all(); hide(); set_canvas(canvas); }
bool Action::System::perform_action(etl::handle<Action::Base> action) { if (getenv("SYNFIG_DEBUG_ACTIONS")) synfig::info("%s:%d perform_action: '%s'", __FILE__, __LINE__, action->get_name().c_str()); handle<UIInterface> uim(get_ui_interface()); assert(action); if(!action->is_ready()) { uim->error(action->get_local_name()+": "+_("Action is not ready.")); return false; } most_recent_action_name_=action->get_name(); static bool inuse=false; if(inuse) return false; inuse=true; try { assert(action); Action::CanvasSpecific* canvas_specific(dynamic_cast<Action::CanvasSpecific*>(action.get())); if(canvas_specific && canvas_specific->get_canvas()) { handle<CanvasInterface> canvas_interface=static_cast<Instance*>(this)->find_canvas_interface(canvas_specific->get_canvas()); assert(canvas_interface); uim=canvas_interface->get_ui_interface(); } handle<Action::Undoable> undoable_action=handle<Action::Undoable>::cast_dynamic(action); // If we cannot undo this action, make sure // that the user knows this. if(!undoable_action) { if(uim->yes_no( action->get_local_name(), _("This action cannot be undone! Are you sure you want to continue?"), UIInterface::RESPONSE_NO ) == UIInterface::RESPONSE_NO ) return false; else { // Because this action cannot be undone, // we need to clear the undo stack clear_undo_stack(); } } else assert(undoable_action->is_active()); // Perform the action try { action->perform(); } catch(Action::Error err) { uim->task(action->get_local_name()+' '+_("Failed")); inuse=false; if(err.get_type()!=Action::Error::TYPE_UNABLE) { if(err.get_desc().empty()) uim->error(action->get_local_name()+": "+strprintf("%d",err.get_type())); else uim->error(action->get_local_name()+": "+err.get_desc()); } // If action failed for whatever reason, just return false and do // not add the action onto the list return false; } catch(std::exception err) { uim->task(action->get_local_name()+' '+_("Failed")); inuse=false; uim->error(action->get_local_name()+": "+err.what()); // If action failed for whatever reason, just return false and do // not add the action onto the list return false; } catch(...) { uim->task(action->get_local_name()+' '+_("Failed")); inuse=false; // If action failed for whatever reason, just return false and do // not add the action onto the list return false; } // Clear the redo stack if(clear_redo_stack_on_new_action_) clear_redo_stack(); if(!group_stack_.empty()) group_stack_.front()->inc_depth(); else inc_action_count(); // Push this action onto the action list if we can undo it if(undoable_action) { // If necessary, signal the change in status of undo if(undo_action_stack_.empty()) signal_undo_status_(true); // Add it to the list undo_action_stack_.push_front(undoable_action); // Signal that a new action has been added if(group_stack_.empty()) signal_new_action()(undoable_action); } inuse=false; uim->task(action->get_local_name()+' '+_("Successful")); // If the action has "dirtied" the preview, signal it. if(0)if(canvas_specific && canvas_specific->is_dirty()) { Canvas::Handle canvas=canvas_specific->get_canvas(); if(!group_stack_.empty()) group_stack_.front()->request_redraw(canvas_specific->get_canvas_interface()); else { handle<CanvasInterface> canvas_interface=static_cast<Instance*>(this)->find_canvas_interface(canvas); assert(canvas_interface); //canvas_interface->signal_dirty_preview()(); } } }catch(...) { inuse=false; throw; } return true; }
synfig::Vector perform(const synfig::Vector& x)const { return layer->transform_backward(x); //Point pos(x-layer->origin); //return Point(layer->cos_val*pos[0]-layer->sin_val*pos[1],layer->sin_val*pos[0]+layer->cos_val*pos[1])+layer->origin; }
void refresh_radius() { duck_dragger_->set_radius(get_radius()*pressure); }
//! \writeme int synfig::waypoint_collect(set<Waypoint, std::less<UniqueID> > &waypoint_set, const Time &time, const etl::handle<Node> &node) { const TimePointSet& timepoint_set(node->get_times()); // Check to see if there is anything in here at the given time if(timepoint_set.find(time)==timepoint_set.end()) return 0; // Check if we are a linkable value node LinkableValueNode::Handle linkable_value_node; linkable_value_node=linkable_value_node.cast_dynamic(node); if(linkable_value_node) { const int link_count(linkable_value_node->link_count()); int i,ret(0); for(i=0;i<link_count;i++) ret+=waypoint_collect(waypoint_set,time,linkable_value_node->get_link(i).get()); return ret; } // Check if we are a layer Layer::Handle layer; layer=layer.cast_dynamic(node); if(layer) { const Layer::DynamicParamList& dyn_param_list(layer->dynamic_param_list()); Layer::DynamicParamList::const_iterator iter; int ret(0); for(iter=dyn_param_list.begin();iter!=dyn_param_list.end();++iter) ret+=waypoint_collect(waypoint_set,time,iter->second); ValueBase canvas_value(layer->get_param("canvas")); if(canvas_value.get_type()==type_canvas) { etl::handle<Layer_PasteCanvas> p = etl::handle<Layer_PasteCanvas>::cast_dynamic(layer); if (p) ret+=waypoint_collect(waypoint_set, time + p->get_time_offset(), Canvas::Handle(canvas_value.get(Canvas::Handle()))); else ret+=waypoint_collect(waypoint_set, time, Canvas::Handle(canvas_value.get(Canvas::Handle()))); } return ret; } // Check if we are a canvas Canvas::Handle canvas; canvas=canvas.cast_dynamic(node); if(canvas) { Canvas::const_iterator iter; int ret(0); for(iter=canvas->begin();iter!=canvas->end();++iter) ret+=waypoint_collect(waypoint_set,time,*iter); return ret; } // Check if we are an animated value node ValueNode_Animated::Handle value_node_animated; value_node_animated=value_node_animated.cast_dynamic(node); if(value_node_animated) { try{ Waypoint waypoint=*value_node_animated->find(time); // If it is already in the waypoint set, then // don't bother adding it again if(waypoint_set.find(waypoint)!=waypoint_set.end()) return 0; waypoint_set.insert(waypoint); return 1; }catch(...) { return 0; } } return 0; }
bool Action::System::set_action_status(etl::handle<Action::Undoable> action, bool x) { Stack::iterator iter; int failed=false; if(action->is_active()==x) return true; handle<Action::Undoable> cur_pos=undo_action_stack_.front(); Action::CanvasSpecific* canvas_specific(dynamic_cast<Action::CanvasSpecific*>(action.get())); handle<UIInterface> uim=new ConfidentUIInterface(); iter=find(undo_action_stack_.begin(),undo_action_stack_.end(),action); if(iter!=undo_action_stack_.end()) { while(undo_action_stack_.front()!=action) { if(!undo_(uim)) { return false; } } if(!undo_(uim)) { return false; } action->set_active(x); if(redo_(get_ui_interface())) { signal_action_status_changed_(action); } else { action->set_active(!x); failed=true; } while(undo_action_stack_.front()!=cur_pos) { if(!redo_(uim)) { redo_action_stack_.front()->set_active(false); signal_action_status_changed_(redo_action_stack_.front()); } } if(!failed && canvas_specific && canvas_specific->is_dirty()) { Canvas::Handle canvas=canvas_specific->get_canvas(); handle<CanvasInterface> canvas_interface=static_cast<Instance*>(this)->find_canvas_interface(canvas); assert(canvas_interface); //canvas_interface->signal_dirty_preview()(); } return true; } iter=find(redo_action_stack_.begin(),redo_action_stack_.end(),action); if(iter!=redo_action_stack_.end()) { action->set_active(x); signal_action_status_changed_(action); if(canvas_specific && canvas_specific->is_dirty()) { Canvas::Handle canvas=canvas_specific->get_canvas(); handle<CanvasInterface> canvas_interface=static_cast<Instance*>(this)->find_canvas_interface(canvas); assert(canvas_interface); //canvas_interface->signal_dirty_preview()(); } return true; } return false; }
RenderSettings::RenderSettings(Gtk::Window& parent, etl::handle<synfigapp::CanvasInterface> canvas_interface): Gtk::Dialog(_("Render Settings"),parent,false,true), canvas_interface_(canvas_interface), adjustment_quality(3,0,9), entry_quality(adjustment_quality,1,0), adjustment_antialias(1,1,31), entry_antialias(adjustment_antialias,1,0), toggle_single_frame(_("Render _current frame only"), true), tparam("mpeg4",200) { tparam.sequence_separator=App::sequence_separator; widget_rend_desc.show(); widget_rend_desc.signal_changed().connect(sigc::mem_fun(*this,&studio::RenderSettings::on_rend_desc_changed)); widget_rend_desc.set_rend_desc(canvas_interface_->get_canvas()->rend_desc()); canvas_interface->signal_rend_desc_changed().connect(sigc::mem_fun(*this,&RenderSettings::on_rend_desc_changed)); menu_target=manage(new class Gtk::Menu()); menu_target->items().push_back(Gtk::Menu_Helpers::MenuElem(_("Auto"), sigc::bind(sigc::mem_fun(*this,&RenderSettings::set_target),String()) )); synfig::Target::Book::iterator iter; synfig::Target::Book book(synfig::Target::book()); for(iter=book.begin();iter!=book.end();iter++) { menu_target->items().push_back(Gtk::Menu_Helpers::MenuElem(iter->first, sigc::bind(sigc::mem_fun(*this,&RenderSettings::set_target),iter->first) )); } optionmenu_target.set_menu(*menu_target); optionmenu_target.set_history(0); Gtk::Alignment *dialogPadding = manage(new Gtk::Alignment(0, 0, 1, 1)); dialogPadding->set_padding(12, 12, 12, 12); get_vbox()->pack_start(*dialogPadding, false, false, 0); Gtk::VBox *dialogBox = manage(new Gtk::VBox(false, 12)); dialogPadding->add(*dialogBox); Gtk::Button *choose_button(manage(new class Gtk::Button(Gtk::StockID(_("Choose..."))))); choose_button->show(); choose_button->signal_clicked().connect(sigc::mem_fun(*this, &studio::RenderSettings::on_choose_pressed)); tparam_button=manage(new class Gtk::Button(Gtk::StockID(_("Parameters...")))); tparam_button->show(); tparam_button->set_sensitive(false); tparam_button->signal_clicked().connect(sigc::mem_fun(*this, &studio::RenderSettings::on_targetparam_pressed)); Gtk::Frame *target_frame=manage(new Gtk::Frame(_("Target"))); target_frame->set_shadow_type(Gtk::SHADOW_NONE); ((Gtk::Label *) target_frame->get_label_widget())->set_markup(_("<b>Target</b>")); dialogBox->pack_start(*target_frame); Gtk::Alignment *targetPadding = manage(new Gtk::Alignment(0, 0, 1, 1)); targetPadding->set_padding(6, 0, 24, 0); target_frame->add(*targetPadding); Gtk::Table *target_table = manage(new Gtk::Table(2, 3, false)); target_table->set_row_spacings(6); target_table->set_col_spacings(12); targetPadding->add(*target_table); Gtk::Label *filenameLabel = manage(new Gtk::Label(_("_Filename"), true)); filenameLabel->set_alignment(0, 0.5); filenameLabel->set_mnemonic_widget(entry_filename); target_table->attach(*filenameLabel, 0, 1, 0, 1, Gtk::SHRINK|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0); target_table->attach(entry_filename, 1, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0); target_table->attach(*choose_button, 2, 3, 0, 1, Gtk::SHRINK|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0); Gtk::Label *targetLabel = manage(new Gtk::Label(_("_Target"), true)); targetLabel->set_alignment(0, 0.5); targetLabel->set_mnemonic_widget(optionmenu_target); target_table->attach(*targetLabel, 0, 1, 1, 2, Gtk::SHRINK|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0); target_table->attach(optionmenu_target, 1, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0); target_table->attach(*tparam_button, 2, 3, 1, 2, Gtk::SHRINK|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0); toggle_single_frame.signal_toggled().connect(sigc::mem_fun(*this, &studio::RenderSettings::on_single_frame_toggle)); Gtk::Frame *settings_frame=manage(new Gtk::Frame(_("Settings"))); settings_frame->set_shadow_type(Gtk::SHADOW_NONE); ((Gtk::Label *) settings_frame->get_label_widget())->set_markup(_("<b>Settings</b>")); dialogBox->pack_start(*settings_frame); Gtk::Alignment *settingsPadding = manage(new Gtk::Alignment(0, 0, 1, 1)); settingsPadding->set_padding(6, 0, 24, 0); settings_frame->add(*settingsPadding); Gtk::Table *settings_table=manage(new Gtk::Table(2,2,false)); settings_table->set_row_spacings(6); settings_table->set_col_spacings(12); settingsPadding->add(*settings_table); Gtk::Label *qualityLabel = manage(new Gtk::Label(_("_Quality"), true)); qualityLabel->set_alignment(0, 0.5); qualityLabel->set_mnemonic_widget(entry_quality); settings_table->attach(*qualityLabel, 0, 1, 0, 1, Gtk::SHRINK|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0); settings_table->attach(entry_quality, 1, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0); Gtk::Label *antiAliasLabel = manage(new Gtk::Label(_("_Anti-Aliasing"), true)); antiAliasLabel->set_alignment(0, 0.5); antiAliasLabel->set_mnemonic_widget(entry_antialias); settings_table->attach(*antiAliasLabel, 0, 1, 1, 2, Gtk::SHRINK|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0); settings_table->attach(entry_antialias, 1, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0); toggle_single_frame.set_alignment(0, 0.5); settings_table->attach(toggle_single_frame, 0, 2, 2, 3, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK|Gtk::FILL, 0, 0); dialogBox->pack_start(widget_rend_desc); Gtk::Button *render_button(manage(new class Gtk::Button(Gtk::StockID(_("Render"))))); render_button->show(); add_action_widget(*render_button,1); render_button->signal_clicked().connect(sigc::mem_fun(*this, &studio::RenderSettings::on_render_pressed)); Gtk::Button *cancel_button(manage(new class Gtk::Button(Gtk::StockID("gtk-cancel")))); cancel_button->show(); add_action_widget(*cancel_button,0); cancel_button->signal_clicked().connect(sigc::mem_fun(*this, &studio::RenderSettings::on_cancel_pressed)); //set_default_response(1); set_title(_("Render Settings")+String(" - ")+canvas_interface_->get_canvas()->get_name()); toggle_single_frame.set_active(false); widget_rend_desc.enable_time_section(); set_entry_filename(); get_vbox()->show_all(); }