Implement http://wiki.synfig.com/Wish_list : "Restore Default Layout". It's on the...
[synfig.git] / synfig-studio / trunk / src / gtkmm / workarea.cpp
index d357003..661774f 100644 (file)
@@ -262,7 +262,7 @@ public:
        }
 
 
-       virtual bool start_frame(synfig::ProgressCallback *cb)
+       virtual bool start_frame(synfig::ProgressCallback */*cb*/)
        {
                synfig::Mutex::Lock lock(mutex);
 
@@ -506,7 +506,7 @@ public:
        }
 
 
-       virtual bool start_frame(synfig::ProgressCallback *cb)
+       virtual bool start_frame(synfig::ProgressCallback */*cb*/)
        {
                return true;
        }
@@ -787,7 +787,7 @@ WorkArea::WorkArea(etl::loose_handle<synfigapp::CanvasInterface> canvas_interfac
                if(!data.empty())
                {
                        if(!load_sketch(data))
-                               load_sketch(dirname(canvas->get_file_name())+ETL_DIRECTORY_SEPERATOR+basename(data));
+                               load_sketch(dirname(canvas->get_file_name())+ETL_DIRECTORY_SEPARATOR+basename(data));
                }
        }
 
@@ -1628,9 +1628,18 @@ WorkArea::on_drawing_area_event(GdkEvent *event)
                                if(canvas_view->get_smach().process_event(EventBox(drag_point,mouse_pos,MouseButton(event->button.button),modifier))==Smach::RESULT_ACCEPT)
                                        return true;
 
-                               if(!(modifier&GDK_CONTROL_MASK) && !(modifier&GDK_SHIFT_MASK))
+                               // when dragging a box around some ducks:
+                               // SHIFT selects; CTRL toggles; SHIFT+CTRL unselects; <none> clears all then selects
+                               if(modifier&GDK_SHIFT_MASK)
+                                       select_ducks_in_box(drag_point,mouse_pos);
+
+                               if(modifier&GDK_CONTROL_MASK)
+                                       toggle_select_ducks_in_box(drag_point,mouse_pos);
+                               else if(!(modifier&GDK_SHIFT_MASK))
+                               {
                                        clear_selected_ducks();
-                               select_ducks_in_box(drag_point,mouse_pos);
+                                       select_ducks_in_box(drag_point,mouse_pos);
+                               }
                                ret=true;
                        }
                        else
@@ -1772,7 +1781,7 @@ WorkArea::on_drawing_area_event(GdkEvent *event)
 }
 
 bool
-WorkArea::on_hruler_event(GdkEvent *event)
+WorkArea::on_hruler_event(GdkEvent */*event*/)
 {
 /*
        switch(event->type)
@@ -1829,7 +1838,7 @@ WorkArea::on_hruler_event(GdkEvent *event)
 }
 
 bool
-WorkArea::on_vruler_event(GdkEvent *event)
+WorkArea::on_vruler_event(GdkEvent */*event*/)
 {
 /*
        switch(event->type)
@@ -1923,7 +1932,7 @@ WorkArea::screen_to_comp_coords(synfig::Point pos)const
 }
 
 synfig::Point
-WorkArea::comp_to_screen_coords(synfig::Point pos)const
+WorkArea::comp_to_screen_coords(synfig::Point /*pos*/)const
 {
        synfig::warning("WorkArea::comp_to_screen_coords: Not yet implemented");
        return synfig::Point();
@@ -2110,6 +2119,8 @@ WorkArea::set_quality(int x)
 }
 
 
+namespace studio
+{
 class WorkAreaProgress : public synfig::ProgressCallback
 {
        WorkArea *work_area;
@@ -2147,6 +2158,7 @@ public:
                return cb->amount_complete(current,total);
        }
 };
+}
 
 bool
 studio::WorkArea::async_update_preview()
@@ -2245,7 +2257,7 @@ studio::WorkArea::async_update_finished()
        if(!async_renderer)
                return;
 
-       // If we completed successfuly, then
+       // If we completed successfully, then
        // we aren't dirty anymore
        if(async_renderer->has_success())
        {
@@ -2306,7 +2318,6 @@ again:
        dirty=false;
        get_canvas_view()->reset_cancel_status();
 
-       bool ret=false;
        RendDesc desc=get_canvas()->rend_desc();
        //newdesc->set_flags(RendDesc::PX_ASPECT|RendDesc::IM_SPAN);
 
@@ -2333,7 +2344,7 @@ again:
        if(cb)
                cb->task(strprintf("Rendering canvas %s...",get_canvas()->get_name().c_str()));
 
-       target->render(cb);
+       bool ret = target->render(cb);
 
        if(!ret && !get_canvas_view()->get_cancel_status() && dirty)
        {
@@ -2357,7 +2368,7 @@ again:
        // it is being displayed correctly
        drawing_area->queue_draw();
 
-       // If we completed successfuly, then
+       // If we completed successfully, then
        // we aren't dirty anymore
        if(ret)
        {
@@ -2525,7 +2536,12 @@ studio::WorkArea::queue_render_preview()
        {
                //synfig::info("queue_render_preview(): (re)queuing...");
                //render_idle_func_id=g_idle_add_full(G_PRIORITY_DEFAULT,__render_preview,this,NULL);
-               render_idle_func_id=g_timeout_add_full(G_PRIORITY_DEFAULT,queue_time,__render_preview,this,NULL);
+               render_idle_func_id=g_timeout_add_full(
+                       G_PRIORITY_DEFAULT,     // priority - 
+                       queue_time,                     // interval - the time between calls to the function, in milliseconds (1/1000ths of a second)
+                       __render_preview,       // function - function to call
+                       this,                           // data     - data to pass to function
+                       NULL);                          // notify   - function to call when the idle is removed, or NULL
                queued=true;
        }
 /*     else if(rendering)