X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fprimitive%2Fprimitive-visual.h;h=806f5946b36faf90ec1958653e54738b56e19e8b;hp=054e9f0b8e4471a5df44d2e8c4d3ac0a1e877c1e;hb=HEAD;hpb=b81c20064def5a5017e77876effd01ddc5bb39d6 diff --git a/dali-toolkit/internal/visuals/primitive/primitive-visual.h b/dali-toolkit/internal/visuals/primitive/primitive-visual.h index 054e9f0..6608fef 100644 --- a/dali-toolkit/internal/visuals/primitive/primitive-visual.h +++ b/dali-toolkit/internal/visuals/primitive/primitive-visual.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_INTERNAL_PRIMITIVE_VISUAL_H /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 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. @@ -44,19 +44,21 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +// EXTERNAL INCLUDES +#include // INTERNAL INCLUDES -#include #include +#include namespace Dali { - namespace Toolkit { - namespace Internal { +class PrimitiveVisual; +typedef IntrusivePtr PrimitiveVisualPtr; /** * The visual which renders a simple 3D shape to the control's quad @@ -74,11 +76,11 @@ namespace Internal * | %Property Name | Type | Shapes Affected | * |-------------------|-------------|------------------------------------------| * | shapeColor | VECTOR4 | all | - * | slices | INTEGER | sphere, cone, conical frustrum, cylinder | + * | slices | INTEGER | sphere, cone, conical frustum, cylinder | * | stacks | INTEGER | sphere | - * | scaleTopRadius | FLOAT | conical frustrum | - * | scaleBottomRadius | FLOAT | cone, conical frustrum | - * | scaleHeight | FLOAT | cone, conical frustrum, cylinder | + * | scaleTopRadius | FLOAT | conical frustum | + * | scaleBottomRadius | FLOAT | cone, conical frustum | + * | scaleHeight | FLOAT | cone, conical frustum, cylinder | * | scaleRadius | FLOAT | cylinder | * | scaleDimensions | VECTOR3 | cube, octahedron, bevelled cube | * | bevelPercentage | FLOAT | bevelled cube | @@ -92,62 +94,80 @@ namespace Internal * |-----------------|-------------|-----------------------------------------| * | lightPosition | VECTOR3 | The position (on stage) of the light | */ -class PrimitiveVisual: public Visual::Base +class PrimitiveVisual : public Visual::Base { public: - /** - * @brief Constructor. + * @brief Create a new primitive visual. * * @param[in] factoryCache A pointer pointing to the VisualFactoryCache object + * @param[in] properties A Property::Map containing settings for this visual + * @return A smart-pointer to the newly allocated visual. */ - PrimitiveVisual( VisualFactoryCache& factoryCache ); + static PrimitiveVisualPtr New(VisualFactoryCache& factoryCache, const Property::Map& properties); +public: // from Visual /** - * @brief A reference counted object may only be deleted by calling Unreference(). + * @copydoc Visual::Base::GetNaturalSize */ - virtual ~PrimitiveVisual(); + void GetNaturalSize(Vector2& naturalSize) override; -public: // from Visual + /** + * @copydoc Visual::Base::CreatePropertyMap + */ + void DoCreatePropertyMap(Property::Map& map) const override; /** - * @copydoc Visual::Base::SetSize + * @copydoc Visual::Base::CreateInstancePropertyMap */ - virtual void SetSize( const Vector2& size ); + void DoCreateInstancePropertyMap(Property::Map& map) const override; +protected: /** - * @copydoc Visual::Base::GetNaturalSize + * @brief Constructor. + * + * @param[in] factoryCache A pointer pointing to the VisualFactoryCache object */ - virtual void GetNaturalSize( Vector2& naturalSize ) const; + PrimitiveVisual(VisualFactoryCache& factoryCache); /** - * @copydoc Visual::Base::CreatePropertyMap + * @brief A reference counted object may only be deleted by calling Unreference(). */ - virtual void DoCreatePropertyMap( Property::Map& map ) const; + virtual ~PrimitiveVisual(); -protected: + /** + * @copydoc Visual::Base::OnInitialize + */ + void OnInitialize() override; /** - * @copydoc Visual::Base::DoInitialize + * @copydoc Visual::Base::DoSetProperties */ - virtual void DoInitialize( Actor& actor, const Property::Map& propertyMap ); + void DoSetProperties(const Property::Map& propertyMap) override; /** - * @copydoc Visual::Base::DoSetOnStage + * @copydoc Visual::Base::DoSetOnScene */ - virtual void DoSetOnStage( Actor& actor ); + void DoSetOnScene(Actor& actor) override; -private: + /** + * @copydoc Visual::Base::OnSetTransform + */ + void OnSetTransform() override; +private: //Simple struct to store the position and normal of a single vertex. struct Vertex { Vertex() - {} + { + } - Vertex( const Vector3& position, const Vector3& normal, const Vector2& textureCoord ) - : position( position ), normal( normal ) - {} + Vertex(const Vector3& position, const Vector3& normal, const Vector2& textureCoord) + : position(position), + normal(normal) + { + } Vector3 position; Vector3 normal; @@ -180,7 +200,7 @@ private: * @param[in] slices The number of slices as you go around the sphere. Affects the smoothness of the surface. * @param[in] stacks The number of stacks as you go down the sphere. Affects the smoothness of the surface. */ - void CreateSphere( Vector& vertices, Vector& indices, int slices, int stacks ); + void CreateSphere(Vector& vertices, Vector& indices, int slices, int stacks); /** * @brief Compute the vertices and the triangles for a conic shape. @@ -191,8 +211,7 @@ private: * @param[in] scaleHeight The scale of the height of the object, compared to the other dimensions. * @param[in] slices The number of slices as you go around the conic shape. Affects the smoothness of the surface. */ - void CreateConic( Vector& vertices, Vector& indices, float scaleTopRadius, - float scaleBottomRadius, float scaleHeight, int slices ); + void CreateConic(Vector& vertices, Vector& indices, float scaleTopRadius, float scaleBottomRadius, float scaleHeight, int slices); /** * @brief Compute the vertices and the triangles for a bevelled cube. @@ -202,8 +221,7 @@ private: * @param[in] bevelPercentage The ratio of the outer face widths to the cube's width. Between 0.0 and 1.0. * @param[in] bevelSmoothness The smoothness of the bevelled edges. Between 0.0 and 1.0. */ - void CreateBevelledCube( Vector& vertices, Vector& indices, Vector3 dimensions, - float bevelPercentage, float bevelSmoothness ); + void CreateBevelledCube(Vector& vertices, Vector& indices, Vector3 dimensions, float bevelPercentage, float bevelSmoothness); /** * @brief Computes look-up tables for sin and cos, over angle divisions of (2 * Pi) / divisions @@ -212,7 +230,7 @@ private: * @param[in] divisions Determines the angle coverage of the table. E.g divisions of '4' will have the sin values 0 = sin(0), 1 = sin(Pi/2), 2 = sin(Pi), 3 = sin(3Pi/2) * @Param[in] halfCircle If true, go from 0 to Pi instead of 0 to 2Pi. */ - void ComputeCircleTables( Vector& sinTable, Vector& cosTable, int divisions, bool halfCircle ); + void ComputeCircleTables(Vector& sinTable, Vector& cosTable, int divisions, bool halfCircle); /** * @brief Compute the vertices for a sphere. @@ -220,7 +238,7 @@ private: * @param[in] slices The number of slices as you go around the sphere. Affects the smoothness of the surface. * @param[in] stacks The number of stacks as you go down the sphere. Affects the smoothness of the surface. */ - void ComputeSphereVertices( Vector& vertices, int slices, int stacks ); + void ComputeSphereVertices(Vector& vertices, int slices, int stacks); /** * @brief Compute the triangles for a sphere. @@ -228,7 +246,7 @@ private: * @param[in] slices The number of slices as you go around the sphere. Affects the smoothness of the surface. * @param[in] stacks The number of stacks as you go down the sphere. Affects the smoothness of the surface. */ - void FormSphereTriangles( Vector& indices, int slices, int stacks ); + void FormSphereTriangles(Vector& indices, int slices, int stacks); /** * @brief Compute the vertices for a conical. @@ -238,8 +256,7 @@ private: * @param[in] scaleHeight The scale of the height of the object, compared to the other dimensions. * @param[in] slices The number of slices as you go around the conical. Affects the smoothness of the surface. */ - void ComputeConicVertices( Vector& vertices, float scaleTopRadius, float scaleBottomRadius, - float scaleHeight, int slices ); + void ComputeConicVertices(Vector& vertices, float scaleTopRadius, float scaleBottomRadius, float scaleHeight, int slices); /** * @brief Compute the triangles for a conic. @@ -248,21 +265,20 @@ private: * @param[in] coneBottom True if the bottom circle has a radius of zero, i.e. the object is an inverted complete cone. * @param[in] slices The number of slices as you go around the conic. Affects the smoothness of the surface. */ - void FormConicTriangles( Vector& indices, float scaleTopRadius, float scaleBottomRadius, - int slices ); + void FormConicTriangles(Vector& indices, float scaleTopRadius, float scaleBottomRadius, int slices); /** * @brief Compute the vertices for a cube. * @param[in, out] vertices The vector of vertices. * @Param[in] dimensions The dimensions of the object. */ - void ComputeCubeVertices( Vector& vertices, Vector3 dimensions ); + void ComputeCubeVertices(Vector& vertices, Vector3 dimensions); /** * @brief Compute the triangles for a cube. * @param[in, out] indices The vector of triangles, consisting of groups of three vertex indices. */ - void FormCubeTriangles( Vector& indices ); + void FormCubeTriangles(Vector& indices); /** * @brief Compute the vertices for an octahedron (maximumly bevelled cube). @@ -270,13 +286,13 @@ private: * @Param[in] dimensions The dimensions of the object. * @Param[in] smoothness Defines how rounded the edges appear under lighting. Between 0.0 and 1.0. */ - void ComputeOctahedronVertices( Vector& vertices, Vector3 dimensions, float smoothness ); + void ComputeOctahedronVertices(Vector& vertices, Vector3 dimensions, float smoothness); /** * @brief Compute the triangles for an octahedron. * @param[in, out] indices The vector of triangles, consisting of groups of three vertex indices. */ - void FormOctahedronTriangles( Vector& indices ); + void FormOctahedronTriangles(Vector& indices); /** * @brief Compute the vertices for a bevelled cube. @@ -285,29 +301,26 @@ private: * @param[in] bevelPercentage The ratio of the outer face widths to the cube's width. Between 0.0 and 1.0. * @param[in] bevelSmoothness The smoothness of the bevelled edges. Between 0.0 and 1.0. */ - void ComputeBevelledCubeVertices( Vector& vertices, Vector3 dimensions, float bevelPercentage, - float bevelSmoothness ); + void ComputeBevelledCubeVertices(Vector& vertices, Vector3 dimensions, float bevelPercentage, float bevelSmoothness); /** * @brief Compute the triangles for a bevelled cube. * @param[in, out] indices The vector of triangles, consisting of groups of three vertex indices. */ - void FormBevelledCubeTriangles( Vector& indices ); + void FormBevelledCubeTriangles(Vector& indices); private: - // Undefined - PrimitiveVisual( const PrimitiveVisual& PrimitiveVisual ); + PrimitiveVisual(const PrimitiveVisual& PrimitiveVisual); // Undefined - PrimitiveVisual& operator=( const PrimitiveVisual& PrimitiveVisual ); + PrimitiveVisual& operator=(const PrimitiveVisual& PrimitiveVisual); private: - Shader mShader; + Shader mShader; Geometry mGeometry; - Vector4 mColor; //Color of shape. - Vector3 mObjectDimensions; //Dimensions of shape, scaled to be between 0.0 and 1.0. + Vector3 mObjectDimensions; //Dimensions of shape, scaled to be between 0.0 and 1.0. Vector3 mSceneCenter; Vector3 mSceneSize; @@ -316,17 +329,17 @@ private: Vector3 mLightPosition; //Shape properties. - Vector3 mScaleDimensions; ///< Scale of dimensions of bevelled cube and sub-shapes. - float mScaleTopRadius; ///< Scale of radius of top circle, to use when creating certain objects. - float mScaleBottomRadius; ///< Scale of radius of bottom circle, to use when creating certain objects. - float mScaleHeight; ///< Scale of height, to use when creating certain objects. - float mScaleRadius; ///< Scale of radius, to use when creating certain objects. - float mBevelPercentage; ///< Used to determine bevel amount when creating certain objects. - float mBevelSmoothness; ///< Used to determine the smoothness of bevelled edges. - int mSlices; ///< Number of slices to use when creating certain objects. - int mStacks; ///< Number of stacks to use when creating certain objects. - - Toolkit::PrimitiveVisual::Shape::Type mPrimitiveType; //Shape to render, as enum. + Vector3 mScaleDimensions; ///< Scale of dimensions of bevelled cube and sub-shapes. + float mScaleTopRadius; ///< Scale of radius of top circle, to use when creating certain objects. + float mScaleBottomRadius; ///< Scale of radius of bottom circle, to use when creating certain objects. + float mScaleHeight; ///< Scale of height, to use when creating certain objects. + float mScaleRadius; ///< Scale of radius, to use when creating certain objects. + float mBevelPercentage; ///< Used to determine bevel amount when creating certain objects. + float mBevelSmoothness; ///< Used to determine the smoothness of bevelled edges. + int mSlices; ///< Number of slices to use when creating certain objects. + int mStacks; ///< Number of stacks to use when creating certain objects. + + Toolkit::PrimitiveVisual::Shape::Type mPrimitiveType; //Shape to render, as enum. }; } // namespace Internal