[dali_2.3.22] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / rendering / atlas / atlas-glyph-manager.h
index 1870bd5..f1a292b 100644 (file)
@@ -1,8 +1,8 @@
-#ifndef __DALI_TOOLKIT_ATLAS_GLYPH_MANAGER_H__
-#define __DALI_TOOLKIT_ATLAS_GLYPH_MANAGER_H__
+#ifndef DALI_TOOLKIT_ATLAS_GLYPH_MANAGER_H
+#define DALI_TOOLKIT_ATLAS_GLYPH_MANAGER_H
 
 /*
- * Copyright (c) 2015 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.
 
 namespace Dali
 {
-
 namespace Toolkit
 {
-
 namespace Internal DALI_INTERNAL
 {
 class AtlasGlyphManager;
 }
 
-
 class AtlasGlyphManager : public BaseHandle
 {
 public:
-
   /**
    * Description of GlyphManager state
    */
   struct Metrics
   {
     Metrics()
-    : mGlyphCount( 0u )
-    {}
+    : mGlyphCount(0u)
+    {
+    }
 
     ~Metrics()
-    {}
+    {
+    }
+
+    uint32_t              mGlyphCount;         ///< number of glyphs being managed
+    std::string           mVerboseGlyphCounts; ///< a verbose list of the glyphs + ref counts
+    AtlasManager::Metrics mAtlasMetrics;       ///< metrics from the Atlas Manager
+  };
 
-    uint32_t mGlyphCount;                   ///< number of glyphs being managed
-    std::string mVerboseGlyphCounts;        ///< a verbose list of the glyphs + ref counts
-    AtlasManager::Metrics mAtlasMetrics;    ///< metrics from the Atlas Manager
+  struct GlyphStyle
+  {
+    GlyphStyle()
+    : outline{0u},
+      isItalic{false},
+      isBold{false}
+    {
+    }
+
+    uint16_t outline;      ///< The outline width of this glyph
+    bool     isItalic : 1; ///< Whether the glyph is italic.
+    bool     isBold : 1;   ///< Whether the glyph is bold.
   };
 
   /**
@@ -80,12 +92,14 @@ public:
    * @brief Ask Atlas Manager to add a glyph
    *
    * @param[in] glyph glyph to add to an atlas
+   * @param[in] style The style of this glyph
    * @param[in] bitmap bitmap to use for glyph addition
    * @param[out] slot information returned by atlas manager for addition
    */
-  void Add( const Text::GlyphInfo& glyph,
-            const BufferImage& bitmap,
-            AtlasManager::AtlasSlot& slot );
+  void Add(const Text::GlyphInfo&   glyph,
+           const GlyphStyle&        style,
+           const PixelData&         bitmap,
+           AtlasManager::AtlasSlot& slot);
 
   /**
    * @brief Generate mesh data for an image contained in an atlas
@@ -94,22 +108,24 @@ public:
    * @param[in] position top left of image
    * @param[out] meshData generated MeshData
    */
-  void GenerateMeshData( uint32_t imageId,
-                         const Vector2& position,
-                         Toolkit::AtlasManager::Mesh2D& mesh );
+  void GenerateMeshData(uint32_t                       imageId,
+                        const Vector2&                 position,
+                        Toolkit::AtlasManager::Mesh2D& mesh);
 
   /**
    * @brief Check to see if a glyph is being cached
    *
    * @param[in] fontId The font that this glyph comes from
    * @param[in] index The GlyphIndex of this glyph
+   * @param[in] style The style of this glyph
    * @param[out] slot container holding information about the glyph( mImage = 0 indicates not being cached )
    *
    * @return Whether glyph is cached or not ?
    */
-  bool IsCached( Text::FontId fontId,
-                 Text::GlyphIndex index,
-                 AtlasManager::AtlasSlot& slot );
+  bool IsCached(Text::FontId             fontId,
+                Text::GlyphIndex         index,
+                const GlyphStyle&        style,
+                AtlasManager::AtlasSlot& slot);
 
   /**
    * @brief Retrieve the size of an atlas
@@ -118,9 +134,9 @@ public:
    *
    * @return The pixel size of the atlas
    */
-  Vector2 GetAtlasSize( uint32_t atlasId );
+  Vector2 GetAtlasSize(uint32_t atlasId);
 
-   /**
+  /**
     * @brief Set the atlas size and block size for subsequent Atlas generation
     *
     * @param[in] width width of atlas in pixels
@@ -128,7 +144,7 @@ public:
     * @param[in] blockWidth width of a block in pixels
     * @param[in] blockHeight height of a block in pixels
     */
-  void SetNewAtlasSize( uint32_t width, uint32_t height, uint32_t blockWidth, uint32_t blockHeight );
+  void SetNewAtlasSize(uint32_t width, uint32_t height, uint32_t blockWidth, uint32_t blockHeight);
 
   /**
    * @brief Get the Pixel Format used by an atlas
@@ -137,16 +153,16 @@ public:
    *
    * @return The pixel format of the atlas
    */
-  Pixel::Format GetPixelFormat( uint32_t atlasId );
+  Pixel::Format GetPixelFormat(uint32_t atlasId);
 
   /**
-   * @brief Get the material used by an atlas
+   * @brief Get the texture set used by an atlas
    *
    * @param[in] atlasId Id of an atlas
    *
-   * @return The material used by the atlas
+   * @return The texture set used by the atlas
    */
-  Material GetMaterial( uint32_t atlasId ) const;
+  TextureSet GetTextures(uint32_t atlasId) const;
 
   /**
    * @brief Get Glyph Manager metrics
@@ -160,18 +176,24 @@ public:
    *
    * @param[in] fontId The font this image came from
    * @param[in] index The index of the glyph
+   * @param[in] style The style of this glyph
    * @param[in] delta The adjustment to make to the reference count
    */
-  void AdjustReferenceCount( Text::FontId fontId, Text::GlyphIndex index, int32_t delta );
-
-private:
+  void AdjustReferenceCount(Text::FontId fontId, Text::GlyphIndex index, const GlyphStyle& style, int32_t delta);
 
-  explicit DALI_INTERNAL AtlasGlyphManager(Internal::AtlasGlyphManager *impl);
+public:
+  // Default copy and move operator
+  AtlasGlyphManager(const AtlasGlyphManager& rhs) = default;
+  AtlasGlyphManager(AtlasGlyphManager&& rhs)      = default;
+  AtlasGlyphManager& operator=(const AtlasGlyphManager& rhs) = default;
+  AtlasGlyphManager& operator=(AtlasGlyphManager&& rhs) = default;
 
+private:
+  explicit DALI_INTERNAL AtlasGlyphManager(Internal::AtlasGlyphManager* impl);
 };
 
 } // namespace Toolkit
 
 } // namespace Dali
 
-#endif // __DALI_TOOLKIT_ATLAS_GLYPH_MANAGER_H__
+#endif // DALI_TOOLKIT_ATLAS_GLYPH_MANAGER_H