- float radius = get<float>("shadow-radius"),
- inset = get<float>("shadow-inset"),
- slice_width = radius + inset;
-
- if( slice_width <= 1 || _canvas_content.expired() )
- {
- if( _image_shadow )
- {
- getGroup()->removeChild(_image_shadow->getMatrixTransform());
- _image_shadow.reset();
- }
- }
- else
- {
- if( !_image_shadow )
- {
- _image_shadow.reset(new simgear::canvas::Image(
- _canvas_content,
- _node->getChild("image-shadow", 0, true)
- ));
- _image_shadow->set<std::string>("file", "gui/images/shadow.png");
- _image_shadow->set<float>("slice", 7);
- _image_shadow->set<std::string>("fill", "#000000");
- getGroup()->insertChild(0, _image_shadow->getMatrixTransform());
- }
-
- simgear::canvas::CanvasPtr canvas = _canvas_decoration
- ? _canvas_decoration
- : _canvas_content.lock();
-
- _image_shadow->set<float>("slice-width", slice_width);
- _image_shadow->set<int>("x", -radius);
- _image_shadow->set<int>("y", -radius);
- _image_shadow->set<int>("size[0]", canvas->getViewWidth() + 2 * radius);
- _image_shadow->set<int>("size[1]", canvas->getViewHeight()+ 2 * radius);
- }
-
- _attributes_dirty &= ~SHADOW;