Add my copyright to files I've modified.
[synfig.git] / synfig-studio / trunk / src / gtkmm / canvasview.cpp
index cbaed03..1ab07b1 100644 (file)
@@ -6,6 +6,7 @@
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007 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
@@ -446,7 +447,7 @@ public:
        {
 //             assert(view->layer_tree);
 
-               if(!view->layer_tree) { DEBUGPOINT(); synfig::error("canvas_view.layer_tree not defined!?"); return LayerList(); }
+               if(!view->layer_tree) { DEBUGPOINT(); synfig::error("%s:%d canvas_view.layer_tree not defined!?", __FILE__, __LINE__); return LayerList(); }
                return view->layer_tree->get_selected_layers();
        }
 
@@ -455,7 +456,7 @@ public:
        {
 //             assert(view->layer_tree);
 
-               if(!view->layer_tree) { DEBUGPOINT(); synfig::error("canvas_view.layer_tree not defined!?"); return 0; }
+               if(!view->layer_tree) { DEBUGPOINT(); synfig::error("%s:%d canvas_view.layer_tree not defined!?", __FILE__, __LINE__); return 0; }
                return view->layer_tree->get_selected_layer();
        }
 
@@ -464,7 +465,7 @@ public:
        {
 //             assert(view->layer_tree);
 
-               if(!view->layer_tree) { DEBUGPOINT(); synfig::error("canvas_view.layer_tree not defined!?"); return; }
+               if(!view->layer_tree) { DEBUGPOINT(); synfig::error("%s:%d canvas_view.layer_tree not defined!?", __FILE__, __LINE__); return; }
                view->layer_tree->select_layers(layer_list);
                //view->get_smach().process_event(EVENT_REFRESH_DUCKS);
 
@@ -796,6 +797,13 @@ CanvasView::CanvasView(etl::loose_handle<Instance> instance,etl::handle<synfigap
        int h=get_canvas()->rend_desc().get_h()+70;
        while(w>700 || h>600)
        {
+               // Minor hack:
+               //   zoom_out() =>
+               //         WorkArea::async_update_preview() =>
+               //           WorkArea::set_zoom(float) =>
+               //                 WorkArea::async_update_preview() =>
+               //                       desc.set_time(cur_time), where cur_time isn't initialised
+               work_area->set_time(0);
                work_area->zoom_out();
                w=round_to_int(get_canvas()->rend_desc().get_w()*work_area->get_zoom()+70);
                h=round_to_int(get_canvas()->rend_desc().get_h()*work_area->get_zoom()+70);
@@ -905,6 +913,10 @@ CanvasView::~CanvasView()
 
        hide();
 
+       // don't be calling on_dirty_preview once this object has been deleted;
+       // this was causing a crash before
+       canvas_interface()->signal_dirty_preview().clear();
+
        synfig::info("CanvasView:~CanvasView(): Destructor Finished");
 }
 
@@ -1254,7 +1266,10 @@ CanvasView::init_menus()
                {
                        Glib::RefPtr<Gtk::RadioAction> action(Gtk::RadioAction::create(quality_group,strprintf("quality-%02d",i), strprintf("Set Quality to %d",i)));
                        if(i==10)
-                               action->property_value()=10;
+                       {
+                               action->set_active();
+                               work_area->set_quality(i);
+                       }
                        action_group->add( action,
                                sigc::bind(
                                        sigc::mem_fun(*work_area, &studio::WorkArea::set_quality),
@@ -1264,7 +1279,7 @@ CanvasView::init_menus()
                }
        }
 
-       action_group->add( Gtk::Action::create("play", Gtk::StockID("synfig-play")),
+       action_group->add( Gtk::Action::create("play", Gtk::Stock::MEDIA_PLAY),
                sigc::mem_fun(*this, &studio::CanvasView::play)
        );
 
@@ -1572,7 +1587,7 @@ CanvasView::init_menus()
                viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Preview Quality"),qualitymenu));
        }
 
-       viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("synfig-play"),
+       viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::Stock::MEDIA_PLAY,
                sigc::mem_fun(*this, &studio::CanvasView::play)));
        viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("Flipbook Dialog"),
                sigc::mem_fun(*preview_dialog, &studio::Dialog_Preview::present)));
@@ -1718,7 +1733,7 @@ CanvasView::popup_layer_menu(synfig::Layer::Handle layer)
 
        //parammenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("New Layer"),*newlayers));
 
-       if(layer->get_name()=="paste_canvas")
+       if(layer->get_name()=="PasteCanvas")
        {
                menu->items().push_back(Gtk::Menu_Helpers::MenuElem(_("Select All Children"),
                        sigc::bind(
@@ -2146,7 +2161,7 @@ CanvasView::on_layer_user_click(int button, Gtk::TreeRow /*row*/, LayerTree::Col
                                build_new_layer_menu(*newlayers);
 
                                parammenu.items().push_back(Gtk::Menu_Helpers::MenuElem("New Layer",*newlayers));
-                               if(!multiple_selected && layer->get_name()=="paste_canvas")
+                               if(!multiple_selected && layer->get_name()=="PasteCanvas")
                                {
                                        parammenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Select All Children"),
                                                sigc::bind(
@@ -2626,7 +2641,7 @@ CanvasView::rebuild_ducks_layer_(synfig::TransformStack& transform_stack, Canvas
 
                // If this is a paste canvas layer, then we need to
                // descend into it
-               if(layer_name=="paste_canvas")
+               if(layer_name=="PasteCanvas")
                {
                        Vector scale;
                        scale[0]=scale[1]=exp(layer->get_param("zoom").get(Real()));
@@ -2821,10 +2836,15 @@ CanvasView::play()
                if(!work_area->sync_render_preview())
                        break;
 
-               studio::App::iteration(false);
+               // wait for the workarea to refresh itself
+               while (studio::App::events_pending())
+                       studio::App::iteration(false);
 
                if(get_cancel_status())
+               {
+                       is_playing_=false;
                        return;
+               }
        }
        is_playing_=false;
 
@@ -3042,7 +3062,7 @@ CanvasView::on_drop_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& con
                        if(!get_instance()->perform_action(action))
                                break;
 
-                       // Ok, we have successfuly imported at least one item.
+                       // Ok, we have successfully imported at least one item.
                        success=true;
                } while(0); // END of "STRING"
 
@@ -3399,7 +3419,7 @@ CanvasView::on_audio_offset_notify()
        sound_dialog->set_offset(t);
        disp_audio->queue_draw();
 
-       synfig::info("CanvasView::on_audio_offset_notify(): offset time set to %s",t.get_string(get_canvas()->rend_desc().get_frame_rate()).c_str());
+       // synfig::info("CanvasView::on_audio_offset_notify(): offset time set to %s",t.get_string(get_canvas()->rend_desc().get_frame_rate()).c_str());
 }
 
 void