diff --git a/include/osgWidget/StyleManager b/include/osgWidget/StyleManager index 19c5f7ce6..edea6a0a4 100644 --- a/include/osgWidget/StyleManager +++ b/include/osgWidget/StyleManager @@ -22,6 +22,7 @@ #include #include #include +#include namespace osgWidget { @@ -44,6 +45,9 @@ class OSGWIDGET_EXPORT Style: public osg::Object virtual bool applyStyle (Box*, Reader); virtual bool applyStyle (Frame::Corner*, Reader); virtual bool applyStyle (Frame::Border*, Reader); + virtual bool applyStyle (Canvas*, Reader); + + void setStyle(const std::string& style) { _style = style; @@ -104,7 +108,8 @@ class OSGWIDGET_EXPORT StyleManager: public osg::Object Styles _styles; template - bool _applySpecificStyle(T* t, const std::string& style) { + bool _applySpecificStyle(T* t, const std::string& style) + { osgDB::FieldReaderIterator r; std::istringstream input(_styles[style]->getStyle()); @@ -113,7 +118,15 @@ class OSGWIDGET_EXPORT StyleManager: public osg::Object bool inc = false; - while(!r.eof()) if(_styles[style]->applyStyle(t, r)) inc = true; + while(!r.eof()) + { + if(_styles[style]->applyStyle(t, r)) + inc = true; + else + r.advanceOverCurrentFieldOrBlock(); + } + + return inc; } diff --git a/src/osgWidget/StyleManager.cpp b/src/osgWidget/StyleManager.cpp index 48e129a2e..e9f3b39c2 100644 --- a/src/osgWidget/StyleManager.cpp +++ b/src/osgWidget/StyleManager.cpp @@ -218,6 +218,11 @@ bool Style::applyStyle(Window* window, Reader r) { return true; } +bool Style::applyStyle(Canvas* label, Reader r) { + return false; +} + + bool Style::applyStyle(Window::EmbeddedWindow*, Reader r) { return false; } @@ -353,6 +358,12 @@ bool StyleManager::_applyStyleToObject(osg::Object* obj, const std::string& styl style, c ); + else if(!std::string("Canvas").compare(c)) return _coerceAndApply( + obj, + style, + c + ); + else warn() << "StyleManager does not support coercion of objects of type "