Fixed Text Quality Regression
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / atlas-manager / atlas-manager-impl.h
index d120f4f..5111a6b 100644 (file)
@@ -46,7 +46,7 @@ typedef Dali::Vector< Toolkit::AtlasManager::AtlasSlot > slotContainer;
 class AtlasManager;
 typedef IntrusivePtr<AtlasManager> AtlasManagerPtr;
 
-class AtlasManager : public Dali::BaseObject
+class AtlasManager : public Dali::BaseObject, public ConnectionTracker
 {
 public:
 
@@ -60,15 +60,16 @@ public:
   struct AtlasDescriptor
   {
     Dali::Atlas mAtlas;                                                 // atlas image
-    SizeType mWidth;                                                    // width of atlas
-    SizeType mHeight;                                                   // height of atlas
-    SizeType mBlockWidth;                                               // width of a block in atlas
-    SizeType mBlockHeight;                                              // height of a block in atlas
+    Toolkit::AtlasManager::AtlasSize mSize;                             // size of atlas
     Pixel::Format mPixelFormat;                                         // pixel format used by atlas
-    BufferImage mEdgeX;                                                 // Image used to pad upload
-    BufferImage mEdgeY;                                                 // Image used to pad upload
+    BufferImage mHorizontalStrip;                                       // Image used to pad upload
+    BufferImage mVerticalStrip;                                         // Image used to pad upload
+    BufferImage mFilledPixelImage;                                      // Image used by atlas for operations such as underline
+    PixelBuffer* mStripBuffer;                                          // Blank image buffer used to pad upload
     Material mMaterial;                                                 // material used for atlas texture
-    SizeType mNextFreeBlock;                                            // next free block will be placed here ( actually +1 )
+    Sampler mSampler;                                                   // sampler used for atlas texture
+    SizeType mTotalBlocks;                                              // total number of blocks in atlas
+    SizeType mAvailableBlocks;                                          // number of blocks available in atlas
     Dali::Vector< SizeType > mFreeBlocksList;                           // unless there are any previously freed blocks
   };
 
@@ -93,11 +94,7 @@ public:
   /**
    * @copydoc: Toolkit::AtlasManager::CreateAtlas
    */
-  AtlasId CreateAtlas( SizeType width,
-                       SizeType height,
-                       SizeType blockWidth,
-                       SizeType blockHeight,
-                       Pixel::Format pixelformat );
+  AtlasId CreateAtlas( const Toolkit::AtlasManager::AtlasSize& size, Pixel::Format pixelformat );
 
   /**
    * @copydoc Toolkit::AtlasManager::SetAddPolicy
@@ -116,21 +113,23 @@ public:
    */
   void GenerateMeshData( ImageId id,
                          const Vector2& position,
-                         MeshData& mesh );
+                         Toolkit::AtlasManager::Mesh2D& mesh,
+                         bool addReference );
 
   /**
    * @copydoc Toolkit::AtlasManager::StitchMesh
    */
-  void StitchMesh( MeshData& first,
-                   const MeshData& second,
+  void StitchMesh( Toolkit::AtlasManager::Mesh2D& first,
+                   const Toolkit::AtlasManager::Mesh2D& second,
                    bool optimize );
 
   /**
    * @copydoc Toolkit::AtlasManager::StitchMesh
    */
-  void StitchMesh( const MeshData& first,
-                   const MeshData& second,
-                   MeshData& out, bool optimize );
+  void StitchMesh(  const Toolkit::AtlasManager::Mesh2D& first,
+                    const Toolkit::AtlasManager::Mesh2D& second,
+                    Toolkit::AtlasManager::Mesh2D& out,
+                    bool optimize );
 
   /**
    * @copydoc Toolkit::AtlasManager::Remove
@@ -150,13 +149,12 @@ public:
   /**
    * @copydoc Toolkit::AtlasManager::SetNewAtlasSize
    */
-  void SetNewAtlasSize( const Vector2& size,
-                        const Vector2& blockSize );
+  void SetNewAtlasSize( const Toolkit::AtlasManager::AtlasSize& size );
 
   /**
    * @copydoc Toolkit::AtlasManager::GetAtlasSize
    */
-  Vector2 GetAtlasSize( AtlasId atlas );
+  const Toolkit::AtlasManager::AtlasSize& GetAtlasSize( AtlasId atlas );
 
   /**
    * @copydoc Toolkit::AtlasManager::GetBlockSize
@@ -183,17 +181,30 @@ public:
    */
   void GetMetrics( Toolkit::AtlasManager::Metrics& metrics );
 
+  /**
+   * @copydoc Toolkit::AtlasManager::GetMaterial
+   */
+  Material GetMaterial( AtlasId atlas ) const;
+
+/**
+   * @copydoc Toolkit::AtlasManager::GetSampler
+   */
+  Sampler GetSampler( AtlasId atlas ) const;
+
 private:
 
-  std::vector< AtlasDescriptor > mAtlasList;        // List of atlases created
-  std::vector< AtlasSlotDescriptor > mImageList;  // List of bitmaps store in atlases
+  std::vector< AtlasDescriptor > mAtlasList;            // List of atlases created
+  std::vector< AtlasSlotDescriptor > mImageList;        // List of bitmaps store in atlases
+  Vector< PixelBuffer* > mUploadedImages;               // List of PixelBuffers passed to UploadedSignal
+  Toolkit::AtlasManager::AtlasSize mNewAtlasSize;       // Atlas size to use in next creation
+  Toolkit::AtlasManager::AddFailPolicy mAddFailPolicy;  // Policy for faling to add an Image
+  SizeType mFilledPixel;                                // 32Bit pixel image for underlining
 
   SizeType CheckAtlas( SizeType atlas,
                        SizeType width,
                        SizeType height,
                        Pixel::Format pixelFormat,
-                       SizeType& blockArea,
-                       SizeType& totalBlocks );
+                       SizeType& blockArea );
 
   void CreateMesh( SizeType atlas,
                    SizeType imageWidth,
@@ -201,23 +212,22 @@ private:
                    const Vector2& position,
                    SizeType widthInBlocks,
                    SizeType heightInBlocks,
-                   Dali::MeshData& meshData,
+                   Toolkit::AtlasManager::Mesh2D& mesh,
                    AtlasSlotDescriptor& desc );
 
-  void OptimizeVertices( const MeshData::VertexContainer& in,
-                         MeshData::FaceIndices& faces,
-                         MeshData::VertexContainer& out );
+  void OptimizeMesh( const Toolkit::AtlasManager::Mesh2D& in,
+                     Toolkit::AtlasManager::Mesh2D& out );
 
   void UploadImage( const BufferImage& image,
                     const AtlasSlotDescriptor& desc );
 
-  void PrintMeshData( const MeshData& meshData );
+  void PrintMeshData( const Toolkit::AtlasManager::Mesh2D& mesh );
+
+  void OnUpload( Image image );
+
+  Shader mShaderL8;
+  Shader mShaderRgba;
 
-  Vector2 mNewAtlasSize;
-  Vector2 mNewBlockSize;
-  Toolkit::AtlasManager::AddFailPolicy mAddFailPolicy;
-  PixelBuffer* mEdgeBuffer;
-  uint32_t mEdgeBufferSize;
 };
 
 } // namespace Internal