X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fvisual-base-data-impl.h;h=52e0d98b6f765561c3961be57f4781af9407b4d1;hp=f563f941da947b7274219f123ba12500f0eac427;hb=HEAD;hpb=5359a575636e678baf178dab5209b587be1a7551 diff --git a/dali-toolkit/internal/visuals/visual-base-data-impl.h b/dali-toolkit/internal/visuals/visual-base-data-impl.h index f563f94..e54c3ae 100644 --- a/dali-toolkit/internal/visuals/visual-base-data-impl.h +++ b/dali-toolkit/internal/visuals/visual-base-data-impl.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_INTERNAL_VISUAL_BASE_DATA_IMPL_H /* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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. @@ -20,27 +20,23 @@ // EXTERNAL INCLUDES #include -#include +#include // INTERNAL INCLUDES +#include #include #include #include #include -#include namespace Dali { - namespace Toolkit { - namespace Internal { - namespace Visual { - struct Base::Impl { /** @@ -48,7 +44,7 @@ struct Base::Impl * @param [in] fittingMode that the derived class prefers * @param [in] type The type of the this visual */ - Impl( FittingMode fittingMode, Toolkit::Visual::Type type ); + Impl(FittingMode fittingMode, Toolkit::Visual::Type type); /** * Destructor @@ -57,21 +53,21 @@ struct Base::Impl enum Flags { - IS_ON_SCENE = 1, - IS_ATLASING_APPLIED = 1<<1, - IS_PREMULTIPLIED_ALPHA = 1 << 2, - IS_SYNCHRONOUS_RESOURCE_LOADING = 1 << 3 + IS_ON_SCENE = 1, + IS_ATLASING_APPLIED = 1 << 1, + IS_PREMULTIPLIED_ALPHA = 1 << 2, + IS_SYNCHRONOUS_RESOURCE_LOADING = 1 << 3, }; struct CustomShader { - CustomShader( const Property::Map& map ); - void SetPropertyMap( const Property::Map& map ); - void CreatePropertyMap( Property::Map& map ) const; + CustomShader(const Property::Map& map); + void SetPropertyMap(const Property::Map& map); + void CreatePropertyMap(Property::Map& map) const; - std::string mVertexShader; - std::string mFragmentShader; - Dali::ImageDimensions mGridSize; + std::string mVertexShader; + std::string mFragmentShader; + Dali::ImageDimensions mGridSize; Dali::Shader::Hint::Value mHints; //(bitfield) values from enum Shader::Hint }; @@ -87,54 +83,179 @@ struct Base::Impl * attributes, and sets the remaining attributes to their default * values. */ - void SetPropertyMap( const Property::Map& map ); + void SetPropertyMap(const Property::Map& map); /** * Add the transform attributes to the map (using integer keys) */ - void GetPropertyMap( Property::Map& map ) const; + void GetPropertyMap(Property::Map& map) const; /** * Update zero or more attributes from the property map. */ - void UpdatePropertyMap( const Property::Map& map ); + void UpdatePropertyMap(const Property::Map& map); /** - * Register or set the uniform properties onto the renderer + * Set the uniform properties onto the renderer */ - void RegisterUniforms( Renderer renderer, Toolkit::Direction::Type direction ); + void SetUniforms(VisualRenderer renderer, Toolkit::Direction::Type direction); /** * Convert the control size and the transform attributes into the actual * size of the visual. */ - Vector2 GetVisualSize( const Vector2& controlSize ); + Vector2 GetVisualSize(const Vector2& controlSize); - Vector2 mOffset; - Vector2 mSize; - Vector2 mExtraSize; - Vector4 mOffsetSizeMode; + Vector2 mOffset; + Vector2 mSize; + Vector2 mExtraSize; + Vector4 mOffsetSizeMode; Toolkit::Align::Type mOrigin; Toolkit::Align::Type mAnchorPoint; }; - Renderer mRenderer; - CustomShader* mCustomShader; - SlotDelegate* mBlendSlotDelegate; ///< Used to own mix color animation connection - EventObserver* mEventObserver; ///< Allows controls to observe when the visual has events to notify - std::string mName; - Transform mTransform; - Vector4 mMixColor; - Size mControlSize; - float mCornerRadius; - float mCornerRadiusPolicy; - int mDepthIndex; - Property::Index mMixColorIndex; - Property::Index mCornerRadiusIndex; - FittingMode mFittingMode; //< How the contents should fit the view - int mFlags; - Toolkit::Visual::ResourceStatus mResourceStatus; - const Toolkit::Visual::Type mType; + struct DecorationData + { + // Default constructor + DecorationData() + : mBorderlineColor(Color::BLACK), + mCornerRadius(Vector4::ZERO), + mBorderlineWidth(0.0f), + mBorderlineOffset(0.0f), + mCornerRadiusPolicy(static_cast(Toolkit::Visual::Transform::Policy::ABSOLUTE)) + { + } + Vector4 mBorderlineColor; + Vector4 mCornerRadius; + float mBorderlineWidth; + float mBorderlineOffset; + int mCornerRadiusPolicy; + }; + + DecorationData* EnsureDecorationData() + { + if(mDecorationData == nullptr) + { + mDecorationData = new DecorationData(); + } + return mDecorationData; + } + + /** + * @brief Get decoration data value : borderline width + * + * Keep these API as inline function due to the performance. + */ + float GetBorderlineWidth() + { + return mDecorationData ? mDecorationData->mBorderlineWidth : 0.0f; + } + + /** + * @brief Set decoration data value : borderline width + * + * Keep these API as inline function due to the performance. + */ + void SetBorderlineWidth(float value) + { + EnsureDecorationData()->mBorderlineWidth = value; + } + + /** + * @brief Get decoration data value : borderline color + * + * Keep these API as inline function due to the performance. + */ + Vector4 GetBorderlineColor() + { + return mDecorationData ? mDecorationData->mBorderlineColor : Color::BLACK; + } + + /** + * @brief Set decoration data value : borderline color + * + * Keep these API as inline function due to the performance. + */ + void SetBorderlineColor(Vector4 value) + { + EnsureDecorationData()->mBorderlineColor = value; + } + + /** + * @brief Get decoration data value : borderline offset + * + * Keep these API as inline function due to the performance. + */ + float GetBorderlineOffset() + { + return mDecorationData ? mDecorationData->mBorderlineOffset : 0.0f; + } + + /** + * @brief Set decoration data value : borderline offset + * + * Keep these API as inline function due to the performance. + */ + void SetBorderlineOffset(float value) + { + EnsureDecorationData()->mBorderlineOffset = value; + } + + /** + * @brief Get decoration data value : corner radius + * + * Keep these API as inline function due to the performance. + */ + Vector4 GetCornerRadius() + { + return mDecorationData ? mDecorationData->mCornerRadius : Vector4::ZERO; + } + + /** + * @brief Set decoration data value : corner radius + * + * Keep these API as inline function due to the performance. + */ + void SetCornerRadius(Vector4 value) + { + EnsureDecorationData()->mCornerRadius = value; + } + + /** + * @brief Get decoration data value : corner radius policy + * + * Keep these API as inline function due to the performance. + */ + int GetCornerRadiusPolicy() + { + return mDecorationData ? mDecorationData->mCornerRadiusPolicy : static_cast(Toolkit::Visual::Transform::Policy::ABSOLUTE); + } + + /** + * @brief Set decoration data value : corner radius policy + * + * Keep these API as inline function due to the performance. + */ + void SetCornerRadiusPolicy(int value) + { + EnsureDecorationData()->mCornerRadiusPolicy = value; + } + + VisualRenderer mRenderer; + CustomShader* mCustomShader; + EventObserver* mEventObserver; ///< Allows controls to observe when the visual has events to notify + std::string mName; + Transform mTransform; + Vector4 mMixColor; + Size mControlSize; + DecorationData* mDecorationData; + int mDepthIndex; + FittingMode mFittingMode; ///< How the contents should fit the view + int mFlags; + Toolkit::Visual::ResourceStatus mResourceStatus; + const Toolkit::Visual::Type mType; + bool mAlwaysUsingBorderline : 1; ///< Whether we need the borderline in shader always. + bool mAlwaysUsingCornerRadius : 1; ///< Whether we need the corner radius in shader always. }; } // namespace Visual