Create ProjectionDirection property at CameraActor
[platform/core/uifw/dali-core.git] / dali / internal / event / actors / camera-actor-impl.h
index 30f9bc6..a817811 100644 (file)
@@ -1,8 +1,8 @@
-#ifndef __DALI_INTERNAL_CAMERA_ACTOR_H__
-#define __DALI_INTERNAL_CAMERA_ACTOR_H__
+#ifndef DALI_INTERNAL_CAMERA_ACTOR_H
+#define DALI_INTERNAL_CAMERA_ACTOR_H
 
 /*
- * Copyright (c) 2017 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.
  */
 
 // INTERNAL INCLUES
-#include <dali/public-api/actors/camera-actor.h>
-#include <dali/internal/event/actors/actor-impl.h>
+#include <dali/devel-api/actors/camera-actor-devel.h>
 #include <dali/internal/event/actors/actor-declarations.h>
+#include <dali/internal/event/actors/actor-impl.h>
+#include <dali/public-api/actors/camera-actor.h>
 
 namespace Dali
 {
-
 namespace Internal
 {
-
 namespace SceneGraph
 {
 class Camera;
@@ -40,7 +39,6 @@ class Camera;
 class CameraActor : public Actor
 {
 public:
-
   /**
    * Create an initialised camera actor.
    *
@@ -50,12 +48,21 @@ public:
    *
    * @return A smart-pointer to a newly allocated camera actor.
    */
-  static CameraActorPtr New( const Size& size );
+  static CameraActorPtr New(const Size& size);
+
+  /**
+   * Sets the reflection plane for the camera
+   *
+   * @param[in] plane Plane parameters
+   *
+   * @note plane.xyz are normal vector of the plane.
+   */
+  void SetReflectByPlane(const Vector4& plane);
 
   /**
    * @copydoc Dali::CameraActor::SetTargetPosition
    */
-  void SetTarget( const Vector3& targetPosition );
+  void SetTarget(const Vector3& targetPosition);
 
   /**
    * @copydoc Dali::CameraActor::GetTargetPosition
@@ -65,7 +72,7 @@ public:
   /**
    * @copydoc Dali::CameraActor::SetType
    */
-  void SetType( Dali::Camera::Type type );
+  void SetType(Dali::Camera::Type type);
 
   /**
    * @copydoc Dali::CameraActor::GetType
@@ -75,7 +82,7 @@ public:
   /**
    * @copydoc Dali::CameraActor::SetProjectionMode
    */
-  void SetProjectionMode( Dali::Camera::ProjectionMode mode );
+  void SetProjectionMode(Dali::Camera::ProjectionMode mode);
 
   /**
    * @copydoc Dali::CameraActor::GetProjectionMode
@@ -83,9 +90,16 @@ public:
   Dali::Camera::ProjectionMode GetProjectionMode() const;
 
   /**
+   * @brief Set the projection direction
+   *
+   * @param[in] direction Direction of projection
+   */
+  void SetProjectionDirection(Dali::DevelCameraActor::ProjectionDirection direction);
+
+  /**
    * @copydoc Dali::CameraActor::SetFieldOfView
    */
-  void SetFieldOfView( float fieldOfView );
+  void SetFieldOfView(float fieldOfView);
 
   /**
    * @copydoc Dali::CameraActor::GetFieldOfView
@@ -95,7 +109,7 @@ public:
   /**
    * @copydoc Dali::CameraActor::SetAspectRatio
    */
-  void SetAspectRatio( float aspectRatio );
+  void SetAspectRatio(float aspectRatio);
 
   /**
    * @copydoc Dali::CameraActor::GetAspectRatio
@@ -105,7 +119,7 @@ public:
   /**
    * @copydoc Dali::CameraActor::SetNearClippingPlane
    */
-  void SetNearClippingPlane( float nearClippingPlane );
+  void SetNearClippingPlane(float nearClippingPlane);
 
   /**
    * @copydoc Dali::CameraActor::GetNearClippingPlane
@@ -115,7 +129,7 @@ public:
   /**
    * @copydoc Dali::CameraActor::SetFarClippingPlane
    */
-  void SetFarClippingPlane( float farClippingPlane );
+  void SetFarClippingPlane(float farClippingPlane);
 
   /**
    * @copydoc Dali::CameraActor::GetFarClippingPlane
@@ -125,27 +139,27 @@ public:
   /**
    * @param leftClippingPlane to use
    */
-  void SetLeftClippingPlane( float leftClippingPlane );
+  void SetLeftClippingPlane(float leftClippingPlane);
 
   /**
    * @param rightClippingPlane to use
    */
-  void SetRightClippingPlane( float rightClippingPlane );
+  void SetRightClippingPlane(float rightClippingPlane);
 
   /**
    * @param topClippingPlane to use
    */
-  void SetTopClippingPlane( float topClippingPlane );
+  void SetTopClippingPlane(float topClippingPlane);
 
   /**
    * @param bottomClippingPlane to use
    */
-  void SetBottomClippingPlane( float bottomClippingPlane );
+  void SetBottomClippingPlane(float bottomClippingPlane);
 
   /**
    * @copydoc Dali::CameraActor::SetInvertYAxis
    */
-  void SetInvertYAxis( bool invertYAxis );
+  void SetInvertYAxis(bool invertYAxis);
 
   /**
    * @copydoc Dali::CameraActor::GetCurrentInvertYAxis
@@ -154,19 +168,18 @@ public:
 
   /**
    * @copydoc Dali::CameraActor::SetPerspectiveProjection()
-   * @param[in] stereoBias The frustum horizontal and vertical offset for stereoscopic cameras
    */
-  void SetPerspectiveProjection( const Size& size, const Vector2& stereoBias = Vector2::ZERO );
+  void SetPerspectiveProjection(const Size& size);
 
   /**
    * @copydoc Dali::CameraActor::SetOrthographicProjection(const Vector2& size);
    */
-  void SetOrthographicProjection( const Vector2& size );
+  void SetOrthographicProjection(const Vector2& size);
 
   /**
    * @copydoc Dali::CameraActor::SetOrthographicProjection(float left, float right, float top, float bottom, float near, float far);
    */
-  void SetOrthographicProjection( float left, float right, float top, float bottom, float near, float far );
+  void SetOrthographicProjection(float left, float right, float top, float bottom, float near, float far);
 
   /**
    * Build a picking ray with this camera and given screen coordinates
@@ -176,7 +189,7 @@ public:
    * @param [out] rayDirection for the picking ray
    * @return true if the building was successful, false if its not possible (camera is not valid for hit testing)
    */
-  bool BuildPickingRay( const Vector2& screenCoordinates, const Viewport& viewport, Vector4& rayOrigin, Vector4& rayDirection );
+  bool BuildPickingRay(const Vector2& screenCoordinates, const Viewport& viewport, Vector4& rayOrigin, Vector4& rayDirection);
 
   /**
    * Retrieve the view-matrix; This will only be valid when the actor is on-stage.
@@ -196,102 +209,79 @@ public:
    */
   const SceneGraph::Camera* GetCamera() const;
 
-public: // properties
-
-  /**
-   * copydoc Dali::Internal::Object
-   */
-  virtual unsigned int GetDefaultPropertyCount() const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetDefaultPropertyIndices()
-   */
-  virtual void GetDefaultPropertyIndices( Property::IndexContainer& indices ) const;
-
   /**
-   * copydoc Dali::Internal::Object
+   * Rotate the projection.
+   * It is used in case that the target buffer direction is different from the window direction.
+   * @param [in] rotationAngle The rotation angle
    */
-  virtual bool IsDefaultPropertyAnimatable( Property::Index index ) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::IsDefaultPropertyAConstraintInput()
-   */
-  virtual bool IsDefaultPropertyAConstraintInput( Property::Index index ) const;
-
-  /**
-   * copydoc Dali::Internal::Object
-   */
-  virtual Property::Type GetDefaultPropertyType( Property::Index index ) const;
-
-  /**
-   * copydoc Dali::Internal::Object
-   */
-  virtual const char* GetDefaultPropertyName( Property::Index index ) const;
-
-  /**
-   * @copydoc Dali::Internal::Object::GetDefaultPropertyIndex()
-   */
-  virtual Property::Index GetDefaultPropertyIndex(const std::string& name) const;
+  void RotateProjection(int rotationAngle);
 
+public: // properties
   /**
    * copydoc Dali::Internal::Object::SetDefaultProperty()
    */
-  virtual void SetDefaultProperty( Property::Index index, const Property::Value& propertyValue );
+  void SetDefaultProperty(Property::Index index, const Property::Value& propertyValue) override;
 
   /**
    * copydoc Dali::Internal::Object::GetDefaultProperty()
    */
-  virtual Property::Value GetDefaultProperty( Property::Index index ) const;
+  Property::Value GetDefaultProperty(Property::Index index) const override;
 
   /**
    * copydoc Dali::Internal::Object::GetDefaultPropertyCurrentValue()
    */
-  virtual Property::Value GetDefaultPropertyCurrentValue( Property::Index index ) const;
+  Property::Value GetDefaultPropertyCurrentValue(Property::Index index) const override;
 
   /**
-   * copydoc Dali::Internal::Object
+   * @copydoc Dali::Internal::Object::GetSceneObjectInputProperty()
    */
-  virtual bool IsDefaultPropertyWritable( Property::Index index ) const ;
+  const PropertyInputImpl* GetSceneObjectInputProperty(Property::Index index) const override;
 
+private:
   /**
-   * @copydoc Dali::Internal::Object::GetSceneObjectAnimatableProperty()
+   * Constructor; see also CameraActor::New()
+   * @param node the scene graph node
    */
-  virtual const SceneGraph::PropertyBase* GetSceneObjectAnimatableProperty( Property::Index index ) const;
+  CameraActor(const SceneGraph::Node& node);
 
   /**
-   * @copydoc Dali::Internal::Object::GetSceneObjectInputProperty()
+   * A reference counted object may only be deleted by calling Unreference()
    */
-  virtual const PropertyInputImpl* GetSceneObjectInputProperty( Property::Index index ) const;
-
-private:
+  ~CameraActor() override;
 
   /**
-   * Constructor; see also CameraActor::New()
+   * @copydoc Dali::Internal::Actor::OnInitialize()
    */
-  CameraActor();
+  void OnInitialize() override;
 
   /**
-   * A reference counted object may only be deleted by calling Unreference()
+   * @copydoc Dali::Internal::Actor::OnSceneConnectionInternal()
    */
-  virtual ~CameraActor();
+  void OnSceneConnectionInternal() override;
 
-private: // Data
+  /**
+   * @copydoc Internal::Object::OnPropertySet
+   */
+  void OnPropertySet(Property::Index index, const Property::Value& propertyValue) override;
 
+private:                                  // Data
   const SceneGraph::Camera* mSceneObject; ///< Not owned
 
-  Vector3            mTarget;
-  Dali::Camera::Type mType;
-  Dali::Camera::ProjectionMode mProjectionMode;
-  float              mFieldOfView;
-  float              mAspectRatio;
-  float              mNearClippingPlane;
-  float              mFarClippingPlane;
-  float              mLeftClippingPlane;
-  float              mRightClippingPlane;
-  float              mTopClippingPlane;
-  float              mBottomClippingPlane;
-  bool               mInvertYAxis;
-
+  Vector3                                     mTarget;
+  Vector2                                     mCanvasSize;
+  Dali::Camera::Type                          mType;
+  Dali::Camera::ProjectionMode                mProjectionMode;
+  Dali::DevelCameraActor::ProjectionDirection mProjectionDirection;
+  float                                       mFieldOfView;
+  float                                       mAspectRatio;
+  float                                       mNearClippingPlane;
+  float                                       mFarClippingPlane;
+  float                                       mLeftClippingPlane;
+  float                                       mRightClippingPlane;
+  float                                       mTopClippingPlane;
+  float                                       mBottomClippingPlane;
+  bool                                        mInvertYAxis;
+  bool                                        mPropertyChanged;
 };
 
 } // namespace Internal
@@ -318,4 +308,4 @@ inline const Internal::CameraActor& GetImplementation(const Dali::CameraActor& c
 
 } // namespace Dali
 
-#endif // __DALI_INTERNAL_CAMERA_ACTOR_H__
+#endif // DALI_INTERNAL_CAMERA_ACTOR_H