X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fworkarea.cpp;h=d662c5508f1651119e0558e0666c0f4cc655780e;hb=2eaa4571bf99d6426b7a6f88add4119d0f8ce71b;hp=f638b017dbe62017262acd5a7cc5698980623463;hpb=98e42d53eff7c7130b90d657d4ef812a2ee6db79;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/workarea.cpp b/synfig-studio/trunk/src/gtkmm/workarea.cpp index f638b01..d662c55 100644 --- a/synfig-studio/trunk/src/gtkmm/workarea.cpp +++ b/synfig-studio/trunk/src/gtkmm/workarea.cpp @@ -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; } @@ -1288,26 +1288,16 @@ WorkArea::on_drawing_area_event(GdkEvent *event) if(duck) { - clicked_duck=0; + // make a note of whether the duck we click on was selected or not if(duck_is_selected(duck)) - { clicked_duck=duck; - } else { - if(modifier&GDK_SHIFT_MASK) - { - select_duck(duck); - } - else if(modifier&GDK_CONTROL_MASK) - { - select_duck(duck); - } - else - { + clicked_duck=0; + // if CTRL isn't pressed, clicking an unselected duck will unselect all other ducks + if(!(modifier&GDK_CONTROL_MASK)) clear_selected_ducks(); - select_duck(duck); - } + select_duck(duck); } } } @@ -1597,37 +1587,20 @@ WorkArea::on_drawing_area_event(GdkEvent *event) get_canvas_view()->duck_refresh_flag=true; if(!drag_did_anything) { - //etl::handle duck=find_duck(mouse_pos,radius); - - if(modifier&GDK_SHIFT_MASK) + // if we originally clicked on a selected duck ... + if(clicked_duck) { - //synfig::info("DUCK_DRAG_RELEASE: SHIFT-MASK ON!"); - if(clicked_duck) - { - //synfig::info("DUCK_DRAG_RELEASE: CLICKED DUCK!"); + // ... and CTRL is pressed, then just toggle the clicked duck + // otherwise make the clicked duck the only selected duck + if(modifier&GDK_CONTROL_MASK) unselect_duck(clicked_duck); - } - } - else if(modifier&GDK_CONTROL_MASK) - { - //synfig::info("DUCK_DRAG_RELEASE: CONTROL-MASK ON!"); - if(clicked_duck) - { - //synfig::info("DUCK_DRAG_RELEASE: CLICKED DUCK!"); - unselect_duck(clicked_duck); - } - } - else - { - //synfig::info("DUCK_DRAG_RELEASE: NO MASK!"); - if(clicked_duck) + else { - //synfig::info("DUCK_DRAG_RELEASE: CLICKED DUCK!"); clear_selected_ducks(); select_duck(clicked_duck); } + clicked_duck->signal_user_click(0)(); } - if(clicked_duck)clicked_duck->signal_user_click(0)(); } else { @@ -1655,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; 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 @@ -1799,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) @@ -1856,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) @@ -1950,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(); @@ -2272,7 +2254,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()) { @@ -2384,7 +2366,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) {