return _root_group;
}
+ //----------------------------------------------------------------------------
+ void Canvas::setLayout(const LayoutRef& layout)
+ {
+ _layout = layout;
+ _layout->setCanvas(this);
+ _status |= LAYOUT_DIRTY;
+ }
+
//----------------------------------------------------------------------------
void Canvas::enableRendering(bool force)
{
//----------------------------------------------------------------------------
void Canvas::update(double delta_time_sec)
{
- if( (!_texture.serviceable() && _status != STATUS_DIRTY)
- || (_status & CREATE_FAILED) )
+ if( _status & (CREATE_FAILED | MISSING_SIZE) )
return;
- if( _status == STATUS_DIRTY )
+ if( _status & STATUS_DIRTY )
{
_texture.setSize(_size_x, _size_y);
}
}
+ if( _layout )
+ {
+ if( (_status & LAYOUT_DIRTY) )
+ {
+ _layout->setGeometry(SGRecti(0, 0, _view_width, _view_height));
+ _status &= ~LAYOUT_DIRTY;
+ }
+ else
+ _layout->update();
+ }
+
if( _visible || _render_always )
{
BOOST_FOREACH(CanvasWeakPtr canvas_weak, _child_canvases)
const EventListener& cb )
{
if( !_root_group.get() )
- throw std::runtime_error("Canvas::AddEventListener: no root group!");
+ throw std::runtime_error("Canvas::addEventListener: no root group!");
return _root_group->addEventListener(type, cb);
}
+ //----------------------------------------------------------------------------
+ bool Canvas::dispatchEvent(const EventPtr& event)
+ {
+ if( !_root_group.get() )
+ throw std::runtime_error("Canvas::dispatchEvent: no root group!");
+
+ return _root_group->dispatchEvent(event);
+ }
+
//----------------------------------------------------------------------------
void Canvas::setSizeX(int sx)
{
if( _view_width == w )
return;
_view_width = w;
+ _status |= LAYOUT_DIRTY;
_texture.setViewSize(_view_width, _view_height);
}
if( _view_height == h )
return;
_view_height = h;
+ _status |= LAYOUT_DIRTY;
_texture.setViewSize(_view_width, _view_height);
}
else if( node->getIndex() == 1 )
setSizeY( node->getIntValue() );
}
+ else if( name == "update" )
+ {
+ if( _root_group )
+ _root_group->update(0);
+ return update(0);
+ }
else if( name == "view" )
{
if( node->getIndex() == 0 )
_status_msg = "Missing size-y";
else if( _status & CREATE_FAILED )
_status_msg = "Creating render target failed";
- else if( _status == STATUS_DIRTY )
+ else if( _status & STATUS_DIRTY )
_status_msg = "Creation pending...";
else
_status_msg = "Ok";