X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fworkarea.cpp;h=fc6bb847cf6b815b9a80fa2b157ec370a0bcd90f;hb=f83c48489a30958935cdab2e9f5b7c34bd72b390;hp=57d079ddbf68fe98d4c994fe324688933a639a5f;hpb=933698eb69791193b53ce0142909502de42a6124;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/workarea.cpp b/synfig-studio/trunk/src/gtkmm/workarea.cpp index 57d079d..fc6bb84 100644 --- a/synfig-studio/trunk/src/gtkmm/workarea.cpp +++ b/synfig-studio/trunk/src/gtkmm/workarea.cpp @@ -1371,15 +1371,19 @@ WorkArea::on_drawing_area_event(GdkEvent *event) // if the tangent isn't split, then split it if (!((*(parent_value_node->get_link("split")))(get_time()).get(bool()))) { - get_canvas_view()->canvas_interface()-> + if (get_canvas_view()->canvas_interface()-> change_value(synfigapp::ValueDesc(parent_value_node, parent_value_node->get_link_index_from_name("split")), - true); - // rebuild the ducks from scratch, so the tangents ducks aren't connected - get_canvas_view()->rebuild_ducks(); - - // reprocess the mouse click - return on_drawing_area_event(event); + true)) + { + // rebuild the ducks from scratch, so the tangents ducks aren't connected + get_canvas_view()->rebuild_ducks(); + + // reprocess the mouse click + return on_drawing_area_event(event); + } + else + return true; } } else { // I don't know how to access the vertex from the tangent duck when originally drawing the bline in the bline tool @@ -2133,8 +2137,6 @@ WorkArea::refresh(GdkEventExpose*event) drawing_frame->unset_bg(Gtk::STATE_NORMAL); #endif - previous_focus=get_focus_point(); - return true; } @@ -2281,7 +2283,7 @@ studio::WorkArea::async_update_preview() // if we have lots of pixels to render and the tile renderer isn't disabled, use it int div; div = low_resolution ? low_res_pixel_size : 1; - if (w*h > 240*div*135*div && !getenv("SYNFIG_DISABLE_TILE_RENDER")) + if ((w*h > 240*div*135*div && !getenv("SYNFIG_DISABLE_TILE_RENDER")) || getenv("SYNFIG_FORCE_TILE_RENDER")) { // do a tile render handle trgt(new class WorkAreaTarget(this,w,h)); @@ -2579,10 +2581,17 @@ studio::WorkArea::zoom_out() void studio::WorkArea::zoom_fit() { - float new_zoom(min(drawing_area->get_width() * zoom / w, drawing_area->get_height() * zoom / h)); - if (zoom == new_zoom) return set_zoom(prev_zoom); + float new_zoom(min(drawing_area->get_width() * zoom / w, + drawing_area->get_height() * zoom / h) * 0.995); + if (zoom / new_zoom > 0.995 && new_zoom / zoom > 0.995) + { + set_zoom(prev_zoom); + return set_focus_point(previous_focus); + } + previous_focus = get_focus_point(); prev_zoom = zoom; set_zoom(new_zoom); + set_focus_point(Point(0,0)); } void