Remove .gitignore do nothing is ignored.
[synfig.git] / synfig-studio / trunk / src / gtkmm / workarea.cpp
index 9038bb1..edc989d 100644 (file)
@@ -117,34 +117,38 @@ public:
 
        synfig::Mutex mutex;
 
-       void set_onion_skin(bool x)
+       void set_onion_skin(bool x, int *onions)
        {
                onionskin=x;
 
                Time time(rend_desc().get_time_start());
 
+               if(!onionskin)
+                       return;
                onion_skin_queue.push_back(time);
-               //onion_skin_queue.push_back(time-1);
-               //onion_skin_queue.push_back(time+1);
 
                try
                {
-                       onion_skin_queue.push_back(
-                               get_canvas()->keyframe_list().find_prev(
-                                       time
-                               )->get_time()
-                       );
+               Time thistime=time;
+               for(int i=0; i<onions[0]; i++)
+                       {
+                               Time keytime=get_canvas()->keyframe_list().find_prev(thistime)->get_time();
+                               onion_skin_queue.push_back(keytime);
+                               thistime=keytime;
+                       }
                }
                catch(...)
                {  }
 
                try
                {
-                       onion_skin_queue.push_back(
-                               get_canvas()->keyframe_list().find_next(
-                                       time
-                               )->get_time()
-                       );
+               Time thistime=time;
+               for(int i=0; i<onions[1]; i++)
+                       {
+                               Time keytime=get_canvas()->keyframe_list().find_next(thistime)->get_time();
+                               onion_skin_queue.push_back(keytime);
+                               thistime=keytime;
+                       }
                }
                catch(...)
                {  }
@@ -413,36 +417,39 @@ public:
 
        std::list<synfig::Time> onion_skin_queue;
 
-       void set_onion_skin(bool x)
+       void set_onion_skin(bool x, int *onions)
        {
                onionskin=x;
 
                Time time(rend_desc().get_time_start());
 
+               if(!onionskin)
+                       return;
                onion_skin_queue.push_back(time);
                //onion_skin_queue.push_back(time-1);
                //onion_skin_queue.push_back(time+1);
-               if(!onionskin)
-                       return;
-
                try
                {
-                       onion_skin_queue.push_back(
-                               get_canvas()->keyframe_list().find_prev(
-                                       time
-                               )->get_time()
-                       );
+               Time thistime=time;
+               for(int i=0; i<onions[0]; i++)
+                       {
+                               Time keytime=get_canvas()->keyframe_list().find_prev(thistime)->get_time();
+                               onion_skin_queue.push_back(keytime);
+                               thistime=keytime;
+                       }
                }
                catch(...)
                {  }
 
                try
                {
-                       onion_skin_queue.push_back(
-                               get_canvas()->keyframe_list().find_next(
-                                       time
-                               )->get_time()
-                       );
+               Time thistime=time;
+               for(int i=0; i<onions[1]; i++)
+                       {
+                               Time keytime=get_canvas()->keyframe_list().find_next(thistime)->get_time();
+                               onion_skin_queue.push_back(keytime);
+                               thistime=keytime;
+                       }
                }
                catch(...)
                {  }
@@ -672,6 +679,8 @@ WorkArea::WorkArea(etl::loose_handle<synfigapp::CanvasInterface> canvas_interfac
        ph=0.001;
        last_focus_point=Point(0,0);
        onion_skin=false;
+       onion_skins[0]=0;
+       onion_skins[1]=0;
        queued=false;
        dirty_trap_enabled=false;
        solid_lines=true;
@@ -1019,6 +1028,14 @@ WorkArea::get_onion_skin()const
        return onion_skin;
 }
 
+void WorkArea::set_onion_skins(int *onions)
+{
+       onion_skins[0]=onions[0];
+       onion_skins[1]=onions[1];
+       if(onion_skin)
+               queue_render_preview();
+}
+
 void
 WorkArea::enable_grid()
 {
@@ -2289,7 +2306,7 @@ studio::WorkArea::async_update_preview()
                handle<WorkAreaTarget> trgt(new class WorkAreaTarget(this,w,h));
 
                trgt->set_rend_desc(&desc);
-               trgt->set_onion_skin(get_onion_skin());
+               trgt->set_onion_skin(get_onion_skin(), onion_skins);
                target=trgt;
        }
        else
@@ -2298,7 +2315,7 @@ studio::WorkArea::async_update_preview()
                handle<WorkAreaTarget_Full> trgt(new class WorkAreaTarget_Full(this,w,h));
 
                trgt->set_rend_desc(&desc);
-               trgt->set_onion_skin(get_onion_skin());
+               trgt->set_onion_skin(get_onion_skin(), onion_skins);
                target=trgt;
        }