X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fworkarea.cpp;h=15530d8df1aeeb8434123be32df320086dec94e4;hb=4c0fb9462ff3fcca1cb6e8faa02e9451343634c8;hp=f2b932ff953817317621eb57140191376ab28169;hpb=334e15ce6c4d9b1f30a168a55e7ef4d31320d568;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/workarea.cpp b/synfig-studio/trunk/src/gtkmm/workarea.cpp index f2b932f..15530d8 100644 --- a/synfig-studio/trunk/src/gtkmm/workarea.cpp +++ b/synfig-studio/trunk/src/gtkmm/workarea.cpp @@ -7,7 +7,7 @@ ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley ** Copyright (c) 2006 Yue Shi Lai -** Copyright (c) 2007 Chris Moore +** Copyright (c) 2007, 2008 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 @@ -124,8 +124,8 @@ public: Time time(rend_desc().get_time_start()); onion_skin_queue.push_back(time); - //onion_skin_queue.push_back(time-1); - //onion_skin_queue.push_back(time+1); + onion_skin_queue.push_back(time-1); + onion_skin_queue.push_back(time+1); try { @@ -420,8 +420,8 @@ public: Time time(rend_desc().get_time_start()); onion_skin_queue.push_back(time); - //onion_skin_queue.push_back(time-1); - //onion_skin_queue.push_back(time+1); + onion_skin_queue.push_back(time-1); + onion_skin_queue.push_back(time+1); if(!onionskin) return; @@ -828,18 +828,22 @@ WorkArea::~WorkArea() render_idle_func_id=0; } +#ifdef SINGLE_THREADED bool WorkArea::get_updating()const { return App::single_threaded && async_renderer && async_renderer->updating; } +#endif +#ifdef SINGLE_THREADED void WorkArea::stop_updating(bool cancel) { async_renderer->stop(); if (cancel) canceled_=true; } +#endif void WorkArea::save_meta_data() @@ -1164,7 +1168,7 @@ WorkArea::on_key_press_event(GdkEventKey* event) break; } - synfigapp::Action::PassiveGrouper grouper(instance.get(),"Nudge"); + synfigapp::Action::PassiveGrouper grouper(instance.get(),_("Nudge")); // Grid snap does not apply to nudging bool grid_snap_holder(get_grid_snap()); @@ -1347,8 +1351,11 @@ WorkArea::on_drawing_area_event(GdkEvent *event) selected_bezier=find_bezier(mouse_pos,radius,&bezier_click_pos); - if(duck && duck->get_editable()) + if(duck) { + if (!duck->get_editable()) + return true; + //get_selected_duck()->signal_user_click(0)(); //if(clicked_duck)clicked_duck->signal_user_click(0)(); @@ -1364,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 @@ -1617,7 +1628,7 @@ WorkArea::on_drawing_area_event(GdkEvent *event) else if(dragging==DRAG_DUCK) { - synfigapp::Action::PassiveGrouper grouper(instance.get(),"Move"); + synfigapp::Action::PassiveGrouper grouper(instance.get(),_("Move")); dragging=DRAG_NONE; //translate_selected_ducks(mouse_pos); set_axis_lock(false); @@ -1921,9 +1932,6 @@ WorkArea::refresh_dimension_info() pw=canvaswidth/w; ph=canvasheight/h; - Duckmatic::set_flip_x(pw < 0); - Duckmatic::set_flip_y(ph > 0); - scrollx_adjustment.set_page_increment(abs(get_grid_size()[0])); scrollx_adjustment.set_step_increment(abs(pw)); scrollx_adjustment.set_lower(-abs(canvaswidth)); @@ -2129,8 +2137,6 @@ WorkArea::refresh(GdkEventExpose*event) drawing_frame->unset_bg(Gtk::STATE_NORMAL); #endif - previous_focus=get_focus_point(); - return true; } @@ -2216,12 +2222,14 @@ public: bool studio::WorkArea::async_update_preview() { +#ifdef SINGLE_THREADED if (get_updating()) { stop_updating(); queue_render_preview(); return false; } +#endif async_renderer=0; @@ -2275,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)); @@ -2537,7 +2545,7 @@ WorkArea::queue_scroll() drawing_area->queue_draw_area( 0, 0, 1, maxy); drawing_area->queue_draw_area(maxx-dx, 0, maxx-dx, maxy); } - else if (dx < 0) + else if (dx < 0) { drawing_area->queue_draw_area( maxx, 0, maxx, maxy); drawing_area->queue_draw_area( -dx, 0, -dx, maxy); @@ -2547,7 +2555,7 @@ WorkArea::queue_scroll() drawing_area->queue_draw_area(0, 0, maxx, 1); drawing_area->queue_draw_area(0, maxy-dy, maxx, maxy-dy); } - else if (dy < 0) + else if (dy < 0) { drawing_area->queue_draw_area(0, maxy, maxx, maxy); drawing_area->queue_draw_area(0, -dy, maxx, -dy); @@ -2573,20 +2581,25 @@ studio::WorkArea::zoom_out() void studio::WorkArea::zoom_fit() { - // This really doesn't zoom to fit. Bug. - zoom_norm(); + 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 studio::WorkArea::zoom_norm() { - if(zoom==1.0) - set_zoom(prev_zoom); - else - { - prev_zoom=zoom; - set_zoom(1.0f); - } + if (zoom == 1.0) return set_zoom(prev_zoom); + prev_zoom = zoom; + set_zoom(1.0f); } gboolean @@ -2637,7 +2650,7 @@ 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, // priority - + 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