Honor the "amount" parameter of the 'duplicate' layer.
[synfig.git] / synfig-core / trunk / src / synfig / layer_duplicate.cpp
index 5a8719d..6fa857c 100644 (file)
@@ -127,7 +127,7 @@ Layer::Vocab
 Layer_Duplicate::get_param_vocab()const
 {
        Layer::Vocab ret;
-       //ret=Layer_Composite::get_param_vocab();
+       ret=Layer_Composite::get_param_vocab();
 
        ret.push_back(ParamDesc("index")
                .set_local_name(_("Index"))
@@ -173,6 +173,7 @@ Layer_Duplicate::accelerated_render(Context context,Surface *surface,int quality
        Color::BlendMethod blend_method(get_blend_method());
        int steps = duplicate_param->count_steps(time_cur);
 
+       Mutex::Lock lock(mutex);
        duplicate_param->reset_index(time_cur);
        do
        {
@@ -183,14 +184,12 @@ Layer_Duplicate::accelerated_render(Context context,Surface *surface,int quality
                if(!context.accelerated_render(&tmp,quality,renddesc,&subimagecb)) return false;
 
                Surface::alpha_pen apen(surface->begin());
-               apen.set_alpha(1.0);
+               apen.set_alpha(get_amount());
                // \todo have a checkbox allowing use of 'behind' to reverse the order?
-               apen.set_blend_method(blend_method);
+               apen.set_blend_method(i ? blend_method : Color::BLEND_COMPOSITE);
                tmp.blit_to(apen);
                i++;
        } while (duplicate_param->step(time_cur));
 
-       duplicate_param->reset_index(time_cur);
-
        return true;
 }