[Tizen] Add screen and client rotation itself function
[platform/core/uifw/dali-adaptor.git] / dali / integration-api / adaptor-framework / render-surface-interface.h
index 687dd38..05b4c13 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_RENDER_SURFACE_INTERFACE_H
 
 /*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 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.
  */
 
 // EXTERNAL INCLUDES
-#include <dali/integration-api/render-surface.h>
 #include <dali/integration-api/core-enumerations.h>
+#include <dali/public-api/common/vector-wrapper.h>
 #include <dali/public-api/math/vector4.h>
+#include <dali/public-api/math/rect.h>
+#include <dali/public-api/object/any.h>
+#include <dali/public-api/object/weak-handle.h>
+#include <dali/integration-api/scene.h>
+#include <dali/public-api/math/uint-16-pair.h>
 
 namespace Dali
 {
@@ -39,6 +44,12 @@ class GraphicsInterface;
 }
 
 /**
+ * @brief The position and size of the render surface.
+ */
+using PositionSize =  Dali::Rect<int>;
+using SurfaceSize = Uint16Pair;
+
+/**
  * @brief Interface for a render surface onto which Dali draws.
  *
  * Dali::Adaptor requires a render surface to draw on to. This is
@@ -51,10 +62,17 @@ class GraphicsInterface;
  * implementation of RenderSurface for the given platform
  */
 
-class RenderSurfaceInterface : public Dali::Integration::RenderSurface
+class RenderSurfaceInterface
 {
 public:
 
+  enum Type
+  {
+    WINDOW_RENDER_SURFACE,
+    PIXMAP_RENDER_SURFACE,
+    NATIVE_RENDER_SURFACE
+  };
+
   /**
    * @brief Constructor
    * Inlined as this is a pure abstract interface
@@ -63,6 +81,7 @@ public:
   : mAdaptor( nullptr ),
     mGraphics( nullptr ),
     mDisplayConnection( nullptr ),
+    mScene(),
     mDepthBufferRequired( Integration::DepthBufferAvailable::FALSE ),
     mStencilBufferRequired( Integration::StencilBufferAvailable::FALSE )
   {}
@@ -129,9 +148,10 @@ public:
    * If the operation fails, then Core::Render should not be called until there is
    * a surface to render onto.
    * @param[in] resizingSurface True if the surface is being resized
+   * @param[in] damagedRects List of damaged rects this render pass
    * @return True if the operation is successful, False if the operation failed
    */
-  virtual bool PreRender( bool resizingSurface ) = 0;
+  virtual bool PreRender( bool resizingSurface, const std::vector<Rect<int>>& damagedRects, Rect<int>& clippingRect ) = 0;
 
   /**
    * @brief Invoked by render thread after Core::Render
@@ -139,7 +159,8 @@ public:
    * @param[in] replacingSurface True if the surface is being replaced.
    * @param[in] resizingSurface True if the surface is being resized.
    */
-  virtual void PostRender( bool renderToFbo, bool replacingSurface, bool resizingSurface ) = 0;
+  virtual void PostRender( bool renderToFbo, bool replacingSurface, bool resizingSurface, const std::vector<Rect<int>>& damagedRects ) = 0;
+
   /**
    * @brief Invoked by render thread when the thread should be stop
    */
@@ -160,7 +181,7 @@ public:
   /**
    * @brief Gets the surface type
    */
-  virtual Dali::Integration::RenderSurface::Type GetSurfaceType() = 0;
+  virtual Dali::RenderSurfaceInterface::Type GetSurfaceType() = 0;
 
   /**
    * @brief Makes the graphics context current
@@ -196,6 +217,15 @@ public:
     mDisplayConnection = &displayConnection;
   }
 
+  /**
+   * @brief Sets a Scene that is rendered on this surface.
+   * @param scene The Scene object
+   */
+  void SetScene( Dali::Integration::Scene& scene )
+  {
+    mScene = scene;
+  }
+
 private:
 
   /**
@@ -213,6 +243,7 @@ protected:
   Dali::Internal::Adaptor::AdaptorInternalServices* mAdaptor;
   Dali::Internal::Adaptor::GraphicsInterface* mGraphics;
   Dali::DisplayConnection* mDisplayConnection;
+  WeakHandle< Dali::Integration::Scene > mScene;
 
 private: