Add my copyright to files I've modified.
[synfig.git] / synfig-core / trunk / src / synfig / canvas.cpp
index e5b8ab7..1d54730 100644 (file)
@@ -6,6 +6,7 @@
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007 Chris Moore
 **
 **     This package is free software; you can redistribute it and/or
 **     modify it under the terms of the GNU General Public License as
@@ -1018,10 +1019,10 @@ synfig::optimize_layers(Context context, Canvas::Handle op_canvas, bool seen_mot
        Context iter;
 
        std::vector< std::pair<float,Layer::Handle> > sort_list;
-       int i, motion_blur_i;           // motion_blur_i is for resolving which layer comes first in the event of a z_depth tie
-       float motion_blur_z_depth;      // the z_depth of the least deep motion blur layer in this context
+       int i, motion_blur_i=0; // motion_blur_i is for resolving which layer comes first in the event of a z_depth tie
+       float motion_blur_z_depth=0; // the z_depth of the least deep motion blur layer in this context
        bool seen_motion_blur_locally = false;
-       bool motion_blurred;            // the final result - is this layer blurred or not?
+       bool motion_blurred; // the final result - is this layer blurred or not?
 
        // If the parent didn't cause us to already be motion blurred,
        // check whether there's a motion blur in this context,
@@ -1080,33 +1081,36 @@ synfig::optimize_layers(Context context, Canvas::Handle op_canvas, bool seen_mot
                        continue;
 
                Layer_PasteCanvas* paste_canvas(static_cast<Layer_PasteCanvas*>(layer.get()));
-               if(layer->get_name()=="PasteCanvas" && paste_canvas->get_time_offset()==0)
+
+               // note: this used to include "&& paste_canvas->get_time_offset()==0", but then
+               //               time-shifted layers weren't being sorted by z-depth (bug #1806852)
+               if(layer->get_name()=="PasteCanvas")
                {
-                       Canvas::Handle sub_canvas(Canvas::create_inline(op_canvas));
-                       Canvas::Handle paste_sub_canvas = paste_canvas->get_sub_canvas();
-                       if(paste_sub_canvas)
-                       {
-                               // we need to blur the sub canvas if:
-                               // our parent is blurred,
-                               // or the child is lower than a local blur,
-                               // or the child is at the same z_depth as a local blur, but later in the context
+                       // we need to blur the sub canvas if:
+                       // our parent is blurred,
+                       // or the child is lower than a local blur,
+                       // or the child is at the same z_depth as a local blur, but later in the context
+
 #if 0 // DEBUG
-                               if (seen_motion_blur_in_parent)                                 synfig::info("seen BLUR in parent\n");
-                               else if (seen_motion_blur_locally)
-                                       if (z_depth > motion_blur_z_depth)                      synfig::info("paste is deeper than BLUR\n");
-                                       else if (z_depth == motion_blur_z_depth) {      synfig::info("paste is same depth as BLUR\n");
-                                               if (i > motion_blur_i)                                  synfig::info("paste is physically deeper than BLUR\n");
-                                               else                                                                    synfig::info("paste is less physically deep than BLUR\n");
-                                       } else                                                                          synfig::info("paste is less deep than BLUR\n");
-                               else                                                                                    synfig::info("no BLUR at all\n");
+                       if (seen_motion_blur_in_parent)                                 synfig::info("seen BLUR in parent\n");
+                       else if (seen_motion_blur_locally)
+                               if (z_depth > motion_blur_z_depth)                      synfig::info("paste is deeper than BLUR\n");
+                               else if (z_depth == motion_blur_z_depth) {      synfig::info("paste is same depth as BLUR\n");
+                                       if (i > motion_blur_i)                                  synfig::info("paste is physically deeper than BLUR\n");
+                                       else                                                                    synfig::info("paste is less physically deep than BLUR\n");
+                               } else                                                                          synfig::info("paste is less deep than BLUR\n");
+                       else                                                                                    synfig::info("no BLUR at all\n");
 #endif // DEBUG
 
-                               motion_blurred = (seen_motion_blur_in_parent ||
-                                                                 (seen_motion_blur_locally &&
-                                                                  (z_depth > motion_blur_z_depth ||
-                                                                       (z_depth == motion_blur_z_depth && i > motion_blur_i))));
+                       motion_blurred = (seen_motion_blur_in_parent ||
+                                                         (seen_motion_blur_locally &&
+                                                          (z_depth > motion_blur_z_depth ||
+                                                               (z_depth == motion_blur_z_depth && i > motion_blur_i))));
+
+                       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,motion_blurred);
-                       }
 //#define SYNFIG_OPTIMIZE_PASTE_CANVAS 1
 
 #ifdef SYNFIG_OPTIMIZE_PASTE_CANVAS