/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <dali/devel-api/scripting/scripting.h>
#include <dali/internal/event/common/property-helper.h> // DALI_PROPERTY_TABLE_BEGIN, DALI_PROPERTY, DALI_PROPERTY_TABLE_END
#include <dali/internal/event/common/property-input-impl.h>
+#include <dali/internal/update/common/animatable-property-messages.h>
+#include <dali/internal/update/common/property-owner.h>
#include <dali/internal/update/manager/update-manager.h>
#include <dali/internal/update/rendering/scene-graph-renderer.h>
#include <dali/public-api/object/type-registry.h>
* @param animatableProperty The animatable property to set on the update-thread
*/
template<typename T>
-void SetValue(EventThreadServices& eventThreadServices, const Property::Value& propertyValue, T& cachedValue, const SceneGraph::AnimatableProperty<T>& animatableProperty)
+void SetValue(EventThreadServices& eventThreadServices, const SceneGraph::PropertyOwner& propertyOwner, const Property::Value& propertyValue, T& cachedValue, const SceneGraph::AnimatableProperty<T>& animatableProperty)
{
if(propertyValue.Get(cachedValue))
{
- BakeMessage<T>(eventThreadServices, animatableProperty, cachedValue);
+ BakeMessage<T>(eventThreadServices, propertyOwner, animatableProperty, cachedValue);
}
}
DecoratedVisualRendererPtr DecoratedVisualRenderer::New()
{
// create scene object first so it's guaranteed to exist for the event side
- auto sceneObject = SceneGraph::Renderer::New();
+ auto sceneObjectKey = SceneGraph::Renderer::NewKey();
- auto animatableVisualProperties = new AnimatableVisualProperties();
- auto animatableDecoratedVisualProperties = new AnimatableDecoratedVisualProperties();
+ auto animatableVisualProperties = new SceneGraph::VisualRenderer::AnimatableVisualProperties();
+ auto animatableDecoratedVisualProperties = new SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties();
// Append extended properties as AnimatableDecoratedVisualProperties.
animatableVisualProperties->mExtendedProperties = animatableDecoratedVisualProperties;
- animatableVisualProperties->mExtendedPropertiesDeleteFunction = AnimatableDecoratedVisualProperties::DeleteFunction;
+ animatableVisualProperties->mExtendedPropertiesDeleteFunction = SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties::DeleteFunction;
- sceneObject->SetVisualProperties(animatableVisualProperties);
+ sceneObjectKey->SetVisualProperties(animatableVisualProperties);
- OwnerPointer<SceneGraph::Renderer> transferOwnership(sceneObject);
// pass the pointer to base for message passing
- DecoratedVisualRendererPtr rendererPtr(new DecoratedVisualRenderer(sceneObject));
+ DecoratedVisualRendererPtr rendererPtr(new DecoratedVisualRenderer(sceneObjectKey.Get()));
rendererPtr->AddUniformMappings(); // Ensure properties are mapped to uniforms
- // transfer scene object ownership to update manager
EventThreadServices& eventThreadServices = rendererPtr->GetEventThreadServices();
SceneGraph::UpdateManager& updateManager = eventThreadServices.GetUpdateManager();
- AddRendererMessage(updateManager, transferOwnership);
+ AddRendererMessage(updateManager, sceneObjectKey);
eventThreadServices.RegisterObject(rendererPtr.Get());
return rendererPtr;
}
else
{
- const SceneGraph::Renderer& sceneObject = GetVisualRendererSceneObject();
- auto visualProperties = sceneObject.GetVisualProperties();
+ const SceneGraph::Renderer& sceneObject = GetVisualRendererSceneObject();
+ auto visualProperties = sceneObject.GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
if(decoratedVisualProperties)
{
{
case Dali::DecoratedVisualRenderer::Property::CORNER_RADIUS:
{
- SetValue(eventThreadServices, propertyValue, mDecoratedPropertyCache.mCornerRadius, decoratedVisualProperties->mCornerRadius);
+ SetValue(eventThreadServices, *mUpdateObject, propertyValue, mDecoratedPropertyCache.mCornerRadius, decoratedVisualProperties->mCornerRadius);
break;
}
case Dali::DecoratedVisualRenderer::Property::CORNER_RADIUS_POLICY:
{
- SetValue(eventThreadServices, propertyValue, mDecoratedPropertyCache.mCornerRadiusPolicy, decoratedVisualProperties->mCornerRadiusPolicy);
+ SetValue(eventThreadServices, *mUpdateObject, propertyValue, mDecoratedPropertyCache.mCornerRadiusPolicy, decoratedVisualProperties->mCornerRadiusPolicy);
break;
}
case Dali::DecoratedVisualRenderer::Property::BORDERLINE_WIDTH:
{
- SetValue(eventThreadServices, propertyValue, mDecoratedPropertyCache.mBorderlineWidth, decoratedVisualProperties->mBorderlineWidth);
+ SetValue(eventThreadServices, *mUpdateObject, propertyValue, mDecoratedPropertyCache.mBorderlineWidth, decoratedVisualProperties->mBorderlineWidth);
break;
}
case Dali::DecoratedVisualRenderer::Property::BORDERLINE_COLOR:
{
- SetValue(eventThreadServices, propertyValue,mDecoratedPropertyCache.mBorderlineColor, decoratedVisualProperties->mBorderlineColor);
+ SetValue(eventThreadServices, *mUpdateObject, propertyValue, mDecoratedPropertyCache.mBorderlineColor, decoratedVisualProperties->mBorderlineColor);
break;
}
case Dali::DecoratedVisualRenderer::Property::BORDERLINE_OFFSET:
{
- SetValue(eventThreadServices, propertyValue,mDecoratedPropertyCache.mBorderlineOffset, decoratedVisualProperties->mBorderlineOffset);
+ SetValue(eventThreadServices, *mUpdateObject, propertyValue, mDecoratedPropertyCache.mBorderlineOffset, decoratedVisualProperties->mBorderlineOffset);
break;
}
case Dali::DecoratedVisualRenderer::Property::BLUR_RADIUS:
{
- SetValue(eventThreadServices, propertyValue,mDecoratedPropertyCache.mBlurRadius, decoratedVisualProperties->mBlurRadius);
+ SetValue(eventThreadServices, *mUpdateObject, propertyValue, mDecoratedPropertyCache.mBlurRadius, decoratedVisualProperties->mBlurRadius);
break;
}
}
auto visualProperties = sceneObject.GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
if(decoratedVisualProperties)
{
value = decoratedVisualProperties->mCornerRadius[GetEventThreadServices().GetEventBufferIndex()];
auto visualProperties = sceneObject.GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
if(decoratedVisualProperties)
{
value = decoratedVisualProperties->mCornerRadiusPolicy[GetEventThreadServices().GetEventBufferIndex()];
auto visualProperties = sceneObject.GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
if(decoratedVisualProperties)
{
value = decoratedVisualProperties->mBorderlineWidth[GetEventThreadServices().GetEventBufferIndex()];
auto visualProperties = sceneObject.GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
if(decoratedVisualProperties)
{
value = decoratedVisualProperties->mBorderlineColor[GetEventThreadServices().GetEventBufferIndex()];
auto visualProperties = sceneObject.GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
if(decoratedVisualProperties)
{
value = decoratedVisualProperties->mBorderlineOffset[GetEventThreadServices().GetEventBufferIndex()];
auto visualProperties = sceneObject.GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
if(decoratedVisualProperties)
{
value = decoratedVisualProperties->mBlurRadius[GetEventThreadServices().GetEventBufferIndex()];
auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
if(decoratedVisualProperties)
{
property = &decoratedVisualProperties->mCornerRadius;
auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
if(decoratedVisualProperties)
{
property = &decoratedVisualProperties->mBorderlineWidth;
auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
if(decoratedVisualProperties)
{
property = &decoratedVisualProperties->mBorderlineColor;
auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
if(decoratedVisualProperties)
{
property = &decoratedVisualProperties->mBorderlineOffset;
auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
if(decoratedVisualProperties)
{
property = &decoratedVisualProperties->mBlurRadius;
auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
if(decoratedVisualProperties)
{
return &decoratedVisualProperties->mCornerRadiusPolicy;