Use the 'feather' and 'invert' tool options when creating outline or region layers...
[synfig.git] / synfig-studio / trunk / src / gtkmm / state_circle.cpp
index 733567b..04df2f3 100644 (file)
@@ -490,6 +490,8 @@ StateCircle_Context::~StateCircle_Context()
        // Refresh the work area
        get_work_area()->queue_draw();
 
+       get_canvas_view()->queue_rebuild_ducks();
+
        App::toolbox->refresh();
 }
 
@@ -514,7 +516,7 @@ StateCircle_Context::make_circle(const Point& _p1, const Point& _p2)
 
        Layer::Handle layer;
 
-       Canvas::Handle canvas(get_canvas_view()->get_canvas());
+       Canvas::Handle canvas;
        int depth(0);
 
        // we are temporarily using the layer to hold something
@@ -526,6 +528,8 @@ StateCircle_Context::make_circle(const Point& _p1, const Point& _p2)
        }
 
        synfigapp::SelectionManager::LayerList layer_selection;
+       if (!getenv("SYNFIG_TOOLS_CLEAR_SELECTION"))
+               layer_selection = get_canvas_view()->get_selection_manager()->get_selected_layers();
 
        const synfig::TransformStack& transform(get_canvas_view()->get_curr_transform_stack());
        const Point p1(transform.unperform(_p1));
@@ -560,6 +564,11 @@ StateCircle_Context::make_circle(const Point& _p1, const Point& _p2)
        // Set the looping flag
        value_node_bline->set_loop(true);
 
+       if(!canvas)
+               canvas=get_canvas_view()->get_canvas();
+
+       value_node_bline->set_member_canvas(canvas);
+
        // count how many layers we're going to be creating
        int layers_to_create = this->layers_to_create();
 
@@ -727,11 +736,11 @@ StateCircle_Context::make_circle(const Point& _p1, const Point& _p2)
                layer->set_description(get_id()+_(" Region"));
                get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
 
-               if(get_feather())
-               {
-                       layer->set_param("feather",get_feather());
-                       get_canvas_interface()->signal_layer_param_changed()(layer,"feather");
-               }
+               layer->set_param("feather",get_feather());
+               get_canvas_interface()->signal_layer_param_changed()(layer,"feather");
+
+               layer->set_param("invert",get_invert());
+               get_canvas_interface()->signal_layer_param_changed()(layer,"invert");
 
                if(get_layer_outline_flag())
                        layer->set_param("color",synfigapp::Main::get_background_color());
@@ -794,11 +803,12 @@ StateCircle_Context::make_circle(const Point& _p1, const Point& _p2)
                layer_selection.push_back(layer);
                layer->set_description(get_id()+_(" Outline"));
                get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
-               if(get_feather())
-               {
-                       layer->set_param("feather",get_feather());
-                       get_canvas_interface()->signal_layer_param_changed()(layer,"feather");
-               }
+
+               layer->set_param("feather",get_feather());
+               get_canvas_interface()->signal_layer_param_changed()(layer,"feather");
+
+               layer->set_param("invert",get_invert());
+               get_canvas_interface()->signal_layer_param_changed()(layer,"invert");
 
                {
                        synfigapp::Action::Handle action(synfigapp::Action::create("layer_param_connect"));