X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftags%2Fstable%2Fsrc%2Fgtkmm%2Fstate_scale.cpp;h=300ff4b1824bb1d21a715011bdb0ec0677af113c;hb=47fce282611fbba1044921d22ca887f9b53ad91a;hp=94525b34cd22d95a89599af8409a1369c6f2fd3a;hpb=7c6d5426922cb3cda793f688dcd4d534b02765c8;p=synfig.git diff --git a/synfig-studio/tags/stable/src/gtkmm/state_scale.cpp b/synfig-studio/tags/stable/src/gtkmm/state_scale.cpp index 94525b3..300ff4b 100644 --- a/synfig-studio/tags/stable/src/gtkmm/state_scale.cpp +++ b/synfig-studio/tags/stable/src/gtkmm/state_scale.cpp @@ -1,20 +1,22 @@ -/* === S I N F G =========================================================== */ +/* === S Y N F I G ========================================================= */ /*! \file state_scale.cpp ** \brief Template File ** -** $Id: state_scale.cpp,v 1.1.1.1 2005/01/07 03:34:37 darco Exp $ +** $Id$ ** ** \legal -** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2008 Chris Moore ** -** This software and associated documentation -** are CONFIDENTIAL and PROPRIETARY property of -** the above-mentioned copyright holder. +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. ** -** You may not copy, print, publish, or in any -** other way distribute this software without -** a prior written agreement with -** the copyright holder. +** This package is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. ** \endlegal */ /* ========================================================================= */ @@ -31,22 +33,24 @@ #include #include -#include -#include +#include +#include #include "state_scale.h" #include "canvasview.h" #include "workarea.h" #include "app.h" -#include +#include #include "event_mouse.h" #include "event_layerclick.h" #include "toolbox.h" #include "dialog_tooloptions.h" #include #include "duck.h" -#include +#include + +#include "general.h" #endif @@ -54,7 +58,7 @@ using namespace std; using namespace etl; -using namespace sinfg; +using namespace synfig; using namespace studio; /* === M A C R O S ========================================================= */ @@ -68,38 +72,38 @@ StateScale studio::state_scale; class DuckDrag_Scale : public DuckDrag_Base { - sinfg::Vector last_scale; - sinfg::Vector drag_offset; - sinfg::Vector center; - sinfg::Vector snap; + synfig::Vector last_scale; + synfig::Vector drag_offset; + synfig::Vector center; + synfig::Vector snap; - std::vector positions; + std::vector positions; bool move_only; - + bool bad_drag; public: bool lock_aspect; DuckDrag_Scale(); - void begin_duck_drag(Duckmatic* duckmatic, const sinfg::Vector& begin); + void begin_duck_drag(Duckmatic* duckmatic, const synfig::Vector& begin); bool end_duck_drag(Duckmatic* duckmatic); - void duck_drag(Duckmatic* duckmatic, const sinfg::Vector& vector); + void duck_drag(Duckmatic* duckmatic, const synfig::Vector& vector); }; class studio::StateScale_Context : public sigc::trackable { etl::handle canvas_view_; - - sinfgapp::Settings& settings; + + synfigapp::Settings& settings; etl::handle duck_dragger_; Gtk::Table options_table; - - + + Gtk::CheckButton checkbutton_aspect_lock; - + public: bool get_aspect_lock_flag()const { return checkbutton_aspect_lock.get_active(); } @@ -116,10 +120,10 @@ public: ~StateScale_Context(); const etl::handle& get_canvas_view()const{return canvas_view_;} - etl::handle get_canvas_interface()const{return canvas_view_->canvas_interface();} - sinfg::Canvas::Handle get_canvas()const{return canvas_view_->get_canvas();} + etl::handle get_canvas_interface()const{return canvas_view_->canvas_interface();} + synfig::Canvas::Handle get_canvas()const{return canvas_view_->get_canvas();} WorkArea * get_work_area()const{return canvas_view_->get_work_area();} - + void load_settings(); void save_settings(); }; // END of class StateScale_Context @@ -130,7 +134,7 @@ StateScale::StateScale(): Smach::state("scale") { insert(event_def(EVENT_REFRESH_TOOL_OPTIONS,&StateScale_Context::event_refresh_tool_options)); -} +} StateScale::~StateScale() { @@ -138,7 +142,7 @@ StateScale::~StateScale() void StateScale_Context::load_settings() -{ +{ String value; if(settings.get_value("scale.lock_aspect",value) && value=="0") @@ -149,27 +153,27 @@ StateScale_Context::load_settings() void StateScale_Context::save_settings() -{ +{ settings.set_value("scale.lock_aspect",get_aspect_lock_flag()?"1":"0"); } StateScale_Context::StateScale_Context(CanvasView* canvas_view): canvas_view_(canvas_view), - settings(sinfgapp::Main::get_selected_input_device()->settings()), + settings(synfigapp::Main::get_selected_input_device()->settings()), duck_dragger_(new DuckDrag_Scale()), checkbutton_aspect_lock(_("Lock Aspect Ratio")) -{ +{ // Set up the tool options dialog - //options_table.attach(*manage(new Gtk::Label(_("Scale Tool"))), 0, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0); - options_table.attach(checkbutton_aspect_lock, 0, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0); + options_table.attach(*manage(new Gtk::Label(_("Scale Tool"))), 0, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0); + options_table.attach(checkbutton_aspect_lock, 0, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0); checkbutton_aspect_lock.signal_toggled().connect(sigc::mem_fun(*this,&StateScale_Context::refresh_aspect_lock_flag)); - + options_table.show_all(); refresh_tool_options(); App::dialog_tool_options->present(); - - get_work_area()->allow_layer_clicks=true; + + get_work_area()->set_allow_layer_clicks(true); get_work_area()->set_duck_dragger(duck_dragger_); // get_canvas_view()->work_area->set_cursor(Gdk::CROSSHAIR); @@ -191,7 +195,7 @@ StateScale_Context::refresh_tool_options() } Smach::event_result -StateScale_Context::event_refresh_tool_options(const Smach::event& x) +StateScale_Context::event_refresh_tool_options(const Smach::event& /*x*/) { refresh_tool_options(); return Smach::RESULT_ACCEPT; @@ -222,19 +226,19 @@ DuckDrag_Scale::DuckDrag_Scale(): #endif void -DuckDrag_Scale::begin_duck_drag(Duckmatic* duckmatic, const sinfg::Vector& offset) +DuckDrag_Scale::begin_duck_drag(Duckmatic* duckmatic, const synfig::Vector& offset) { last_scale=Vector(1,1); const DuckList selected_ducks(duckmatic->get_selected_ducks()); DuckList::const_iterator iter; - + //if(duckmatic->get_selected_ducks().size()<2) //{ // bad_drag=true; // return; // } bad_drag=false; - + drag_offset=duckmatic->find_duck(offset)->get_trans_point(); //snap=drag_offset-duckmatic->snap_point_to_grid(drag_offset); @@ -260,22 +264,22 @@ DuckDrag_Scale::begin_duck_drag(Duckmatic* duckmatic, const sinfg::Vector& offse move_only=true; else move_only=false; - + center=(vmin+vmax)*0.5; } void -DuckDrag_Scale::duck_drag(Duckmatic* duckmatic, const sinfg::Vector& vector) +DuckDrag_Scale::duck_drag(Duckmatic* duckmatic, const synfig::Vector& vector) { const DuckList selected_ducks(duckmatic->get_selected_ducks()); DuckList::const_iterator iter; if(bad_drag) return; - + //std::set >::iterator iter; - sinfg::Vector vect(duckmatic->snap_point_to_grid(vector)-center); + synfig::Vector vect(duckmatic->snap_point_to_grid(vector)-center); last_scale=vect; if(move_only) @@ -284,9 +288,9 @@ DuckDrag_Scale::duck_drag(Duckmatic* duckmatic, const sinfg::Vector& vector) for(i=0,iter=selected_ducks.begin();iter!=selected_ducks.end();++iter,i++) { if(((*iter)->get_type()!=Duck::TYPE_VERTEX&&(*iter)->get_type()!=Duck::TYPE_POSITION))continue; - + Vector p(positions[i]); - + p[0]+=vect[0]; p[1]+=vect[1]; (*iter)->set_trans_point(p); @@ -294,16 +298,16 @@ DuckDrag_Scale::duck_drag(Duckmatic* duckmatic, const sinfg::Vector& vector) for(i=0,iter=selected_ducks.begin();iter!=selected_ducks.end();++iter,i++) { if(!((*iter)->get_type()!=Duck::TYPE_VERTEX&&(*iter)->get_type()!=Duck::TYPE_POSITION))continue; - + Vector p(positions[i]); - + p[0]+=vect[0]; p[1]+=vect[1]; (*iter)->set_trans_point(p); } return; } - + if(!lock_aspect) { if(abs(drag_offset[0]-center[0])>EPSILON) @@ -326,12 +330,12 @@ DuckDrag_Scale::duck_drag(Duckmatic* duckmatic, const sinfg::Vector& vector) vect[0]=1; if(vect[1]-EPSILON) vect[1]=1; - + int i; for(i=0,iter=selected_ducks.begin();iter!=selected_ducks.end();++iter,i++) { if(((*iter)->get_type()!=Duck::TYPE_VERTEX&&(*iter)->get_type()!=Duck::TYPE_POSITION))continue; - + Vector p(positions[i]-center); p[0]*=vect[0]; @@ -342,7 +346,7 @@ DuckDrag_Scale::duck_drag(Duckmatic* duckmatic, const sinfg::Vector& vector) for(i=0,iter=selected_ducks.begin();iter!=selected_ducks.end();++iter,i++) { if(!((*iter)->get_type()!=Duck::TYPE_VERTEX&&(*iter)->get_type()!=Duck::TYPE_POSITION))continue; - + Vector p(positions[i]-center); p[0]*=vect[0]; @@ -350,7 +354,7 @@ DuckDrag_Scale::duck_drag(Duckmatic* duckmatic, const sinfg::Vector& vector) p+=center; (*iter)->set_trans_point(p); } - + last_scale=vect; //snap=Vector(0,0); } @@ -359,7 +363,7 @@ bool DuckDrag_Scale::end_duck_drag(Duckmatic* duckmatic) { if(bad_drag)return false; - + if((last_scale-Vector(1,1)).mag()>0.0001) { duckmatic->signal_edited_selected_ducks();