From Cedric Pinson, "Here a patch to be able to clone stateattribute, in order to do that i

moved the StateAttribute::Callback structure to a file
StateAttributeCallback with the same behavior as NodeCallback.
"
This commit is contained in:
Robert Osfield
2009-10-22 10:33:16 +00:00
parent 8efd251b10
commit 2d38e187fd
10 changed files with 51 additions and 37 deletions

View File

@@ -140,6 +140,7 @@ SET(LIB_PUBLIC_HEADERS
${HEADER_PATH}/ShapeDrawable
${HEADER_PATH}/State
${HEADER_PATH}/StateAttribute
${HEADER_PATH}/StateAttributeCallback
${HEADER_PATH}/StateSet
${HEADER_PATH}/Stats
${HEADER_PATH}/Stencil

View File

@@ -18,6 +18,7 @@
#include <osg/Array>
#include <osg/PrimitiveSet>
#include <osg/Shape>
#include <osg/StateAttribute>
using namespace osg;
@@ -67,7 +68,7 @@ StateAttribute* CopyOp::operator() (const StateAttribute* attr) const
NodeCallback* CopyOp::operator() (const NodeCallback* nc) const
{
if (nc && _flags&DEEP_COPY_NODECALLBACKS)
if (nc && _flags&DEEP_COPY_CALLBACKS)
{
// deep copy the full chain of callback
osg::NodeCallback* first = dynamic_cast<osg::NodeCallback*>(nc->clone(*this));
@@ -85,3 +86,17 @@ NodeCallback* CopyOp::operator() (const NodeCallback* nc) const
else
return const_cast<NodeCallback*>(nc);
}
StateAttributeCallback* CopyOp::operator() (const StateAttributeCallback* sc) const
{
if (sc && _flags&DEEP_COPY_CALLBACKS)
{
// deep copy the full chain of callback
StateAttributeCallback* cb = dynamic_cast<StateAttributeCallback*>(sc->clone(*this));
return cb;
}
else
return const_cast<StateAttributeCallback*>(sc);
}

View File

@@ -42,7 +42,7 @@ void StateAttribute::removeParent(osg::StateSet* object)
}
void StateAttribute::setUpdateCallback(Callback* uc)
void StateAttribute::setUpdateCallback(StateAttributeCallback* uc)
{
osg::notify(osg::INFO)<<"StateAttribute::Setting Update callbacks"<<std::endl;
@@ -69,7 +69,7 @@ void StateAttribute::setUpdateCallback(Callback* uc)
}
}
void StateAttribute::setEventCallback(Callback* ec)
void StateAttribute::setEventCallback(StateAttributeCallback* ec)
{
osg::notify(osg::INFO)<<"StateAttribute::Setting Event callbacks"<<std::endl;

View File

@@ -1673,7 +1673,7 @@ void StateSet::runUpdateCallbacks(osg::NodeVisitor* nv)
itr!=_attributeList.end();
++itr)
{
StateAttribute::Callback* callback = itr->second.first->getUpdateCallback();
StateAttributeCallback* callback = itr->second.first->getUpdateCallback();
if (callback) (*callback)(itr->second.first.get(),nv);
}
@@ -1686,7 +1686,7 @@ void StateSet::runUpdateCallbacks(osg::NodeVisitor* nv)
itr!=attributeList.end();
++itr)
{
StateAttribute::Callback* callback = itr->second.first->getUpdateCallback();
StateAttributeCallback* callback = itr->second.first->getUpdateCallback();
if (callback) (*callback)(itr->second.first.get(),nv);
}
}
@@ -1747,7 +1747,7 @@ void StateSet::runEventCallbacks(osg::NodeVisitor* nv)
itr!=_attributeList.end();
++itr)
{
StateAttribute::Callback* callback = itr->second.first->getEventCallback();
StateAttributeCallback* callback = itr->second.first->getEventCallback();
if (callback) (*callback)(itr->second.first.get(),nv);
}
@@ -1760,7 +1760,7 @@ void StateSet::runEventCallbacks(osg::NodeVisitor* nv)
itr!=attributeList.end();
++itr)
{
StateAttribute::Callback* callback = itr->second.first->getEventCallback();
StateAttributeCallback* callback = itr->second.first->getEventCallback();
if (callback) (*callback)(itr->second.first.get(),nv);
}
}