X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fcanvas.cpp;h=2464c4218b72ca9c9ae08ba5bd0eb4ecbac8ce51;hb=ea034bdb2e7e75f32315ed7b818cac37ab048c50;hp=b60734543b3c902ccee998ad3134ba53e19e0443;hpb=9917f387c36f82a079e817e14a8052b8e21cdf96;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/canvas.cpp b/synfig-core/trunk/src/synfig/canvas.cpp index b607345..2464c42 100644 --- a/synfig-core/trunk/src/synfig/canvas.cpp +++ b/synfig-core/trunk/src/synfig/canvas.cpp @@ -1013,7 +1013,7 @@ Canvas::get_meta_data_keys()const } void -synfig::optimize_layers(Context context, Canvas::Handle op_canvas) +synfig::optimize_layers(Context context, Canvas::Handle op_canvas, bool seen_motion_blur) { Context iter; @@ -1035,13 +1035,16 @@ synfig::optimize_layers(Context context, Canvas::Handle op_canvas) if(value.get_type()==ValueBase::TYPE_REAL && value.get(Real())==0) continue; + if(layer->get_name()=="MotionBlur") + seen_motion_blur = true; + Layer_PasteCanvas* paste_canvas(static_cast(layer.get())); if(layer->get_name()=="PasteCanvas" && paste_canvas->get_time_offset()==0) { Canvas::Handle sub_canvas(Canvas::create_inline(op_canvas)); Canvas::Handle paste_sub_canvas = paste_canvas->get_sub_canvas(); if(paste_sub_canvas) - optimize_layers(paste_sub_canvas->get_context(),sub_canvas); + optimize_layers(paste_sub_canvas->get_context(),sub_canvas,seen_motion_blur); //#define SYNFIG_OPTIMIZE_PASTE_CANVAS 1 #ifdef SYNFIG_OPTIMIZE_PASTE_CANVAS @@ -1078,6 +1081,12 @@ synfig::optimize_layers(Context context, Canvas::Handle op_canvas) #endif Layer::Handle new_layer(Layer::create("PasteCanvas")); dynamic_cast(new_layer.get())->set_muck_with_time(false); + if (seen_motion_blur) + { + Layer::DynamicParamList dynamic_param_list(paste_canvas->dynamic_param_list()); + for(Layer::DynamicParamList::const_iterator iter(dynamic_param_list.begin()); iter != dynamic_param_list.end(); ++iter) + new_layer->connect_dynamic_param(iter->first, iter->second); + } Layer::ParamList param_list(paste_canvas->get_param_list()); //param_list.erase("canvas"); new_layer->set_param_list(param_list);