X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftags%2Fsynfigstudio_0_61_07_rc3%2Fsrc%2Fgtkmm%2Fstate_fill.cpp;fp=synfig-studio%2Ftags%2Fsynfigstudio_0_61_07_rc3%2Fsrc%2Fgtkmm%2Fstate_fill.cpp;h=28bfa400f5a28d0394a5c9f170946433bf07e080;hb=1f5a0e6a86f9cf4798b6e1fb8dfcb4b6e84beb5d;hp=0000000000000000000000000000000000000000;hpb=0e729dddd753ed872265ba82c0089bc55e64bf55;p=synfig.git diff --git a/synfig-studio/tags/synfigstudio_0_61_07_rc3/src/gtkmm/state_fill.cpp b/synfig-studio/tags/synfigstudio_0_61_07_rc3/src/gtkmm/state_fill.cpp new file mode 100644 index 0000000..28bfa40 --- /dev/null +++ b/synfig-studio/tags/synfigstudio_0_61_07_rc3/src/gtkmm/state_fill.cpp @@ -0,0 +1,177 @@ +/* === S Y N F I G ========================================================= */ +/*! \file state_fill.cpp +** \brief Template File +** +** $Id$ +** +** \legal +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** +** 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. +** +** 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 +*/ +/* ========================================================================= */ + +/* === H E A D E R S ======================================================= */ + +#ifdef USING_PCH +# include "pch.h" +#else +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "state_fill.h" +#include "workarea.h" +#include +#include "app.h" +#include "dialog_color.h" +#include "event_mouse.h" +#include "event_layerclick.h" +#include "toolbox.h" +#include "canvasview.h" +#include + +#endif + +/* === U S I N G =========================================================== */ + +using namespace std; +using namespace etl; +using namespace synfig; +using namespace studio; + +/* === M A C R O S ========================================================= */ + +/* === C L A S S E S & S T R U C T S ======================================= */ + +class studio::StateFill_Context +{ + CanvasView *canvas_view; + CanvasView::IsWorking is_working; + +public: + StateFill_Context(CanvasView *canvas_view); + ~StateFill_Context(); + + Smach::event_result event_stop_handler(const Smach::event& x); + + Smach::event_result event_refresh_handler(const Smach::event& x); + + Smach::event_result event_workarea_layer_clicked_handler(const Smach::event& x); + + + etl::handle get_canvas_view()const{return canvas_view;} + 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();} + + +}; // END of class StateFill_Context + +/* === G L O B A L S ======================================================= */ + +StateFill studio::state_fill; + +/* === P R O C E D U R E S ================================================= */ + +/* === M E T H O D S ======================================================= */ + +StateFill::StateFill(): + Smach::state("fill") +{ + insert(event_def(EVENT_LAYER_SELECTION_CHANGED,&StateFill_Context::event_stop_handler)); + insert(event_def(EVENT_STOP,&StateFill_Context::event_stop_handler)); + insert(event_def(EVENT_REFRESH,&StateFill_Context::event_refresh_handler)); + insert(event_def(EVENT_WORKAREA_LAYER_CLICKED,&StateFill_Context::event_workarea_layer_clicked_handler)); +} + +StateFill::~StateFill() +{ +} + +StateFill_Context::StateFill_Context(CanvasView *canvas_view): + canvas_view(canvas_view), + is_working(*canvas_view) +{ + synfig::info("Enterted Fill State"); + canvas_view->work_area->set_cursor(Gdk::CROSSHAIR); + + App::toolbox->refresh(); +} + +StateFill_Context::~StateFill_Context() +{ + synfig::info("Left Fill State"); + canvas_view->work_area->reset_cursor(); + App::toolbox->refresh(); +} + +Smach::event_result +StateFill_Context::event_stop_handler(const Smach::event& /*x*/) +{ + synfig::info("STATE FILL: Received Stop Event"); + throw Smach::egress_exception(); +// canvas_view->get_smach().pop_state(); +// return Smach::RESULT_ACCEPT; +} + +Smach::event_result +StateFill_Context::event_refresh_handler(const Smach::event& /*x*/) +{ + synfig::info("STATE FILL: Received Refresh Event"); + canvas_view->work_area->queue_render_preview(); + return Smach::RESULT_ACCEPT; +} + +Smach::event_result +StateFill_Context::event_workarea_layer_clicked_handler(const Smach::event& x) +{ + synfig::info("STATE FILL: Received layer clicked Event"); + const EventLayerClick& event(*reinterpret_cast(&x)); + + if(!event.layer) + { + get_canvas_view()->get_ui_interface()->warning(_("No layer here")); + return Smach::RESULT_ACCEPT; + } + + + //synfigapp::Action::Handle action(synfigapp::Action::create("value_desc_set")); + synfigapp::ValueDesc value_desc(event.layer,"color"); + + if(!get_canvas_interface()->change_value(value_desc,ValueBase(synfigapp::Main::get_foreground_color()))) + { + get_canvas_view()->get_ui_interface()->warning(_("Unable to set layer color")); + return Smach::RESULT_ERROR; + } + /* + assert(action); + + action->set_param("canvas",get_canvas()); + action->set_param("canvas_interface",get_canvas_interface()); + action->set_param("value_desc",value_desc); + action->set_param("time",get_canvas_interface()->get_time()); + //action->set_param("layer",event.layer); + //if(!action->set_param("param",String("color"))) + // synfig::error("LayerParamConnect didn't like \"param\""); + if(!action->set_param("new_value",ValueBase(synfigapp::Main::get_foreground_color()))) + synfig::error("LayerParamConnect didn't like \"foreground_color\""); + + if(!get_canvas_interface()->get_instance()->perform_action(action)) + { + get_canvas_view()->get_ui_interface()->warning(_("Unable to set layer color")); + return Smach::RESULT_ERROR; + } + get_canvas_view()->get_ui_interface()->task(_("Idle")); + */ + return Smach::RESULT_ACCEPT; +}