[Tizen] Add support for FontClientFontPreLoad API
[platform/core/uifw/dali-adaptor.git] / dali / devel-api / text-abstraction / font-client.cpp
index 747ce2d..8899d5b 100644 (file)
@@ -58,7 +58,7 @@ FontClient::GlyphBufferData::GlyphBufferData()
   outlineOffsetX{0},
   outlineOffsetY{0},
   format{Pixel::A8},
-  compressType(CompressType::NO_COMPRESS),
+  compressionType{CompressionType::NO_COMPRESSION},
   isColorEmoji{false},
   isColorBitmap{false},
   isBufferOwned{false}
@@ -73,15 +73,52 @@ FontClient::GlyphBufferData::~GlyphBufferData()
   }
 }
 
+FontClient::GlyphBufferData::GlyphBufferData(FontClient::GlyphBufferData&& rhs) noexcept
+: buffer{rhs.buffer},
+  width{rhs.width},
+  height{rhs.height},
+  outlineOffsetX{rhs.outlineOffsetX},
+  outlineOffsetY{rhs.outlineOffsetY},
+  format{rhs.format},
+  compressionType{rhs.compressionType},
+  isColorEmoji{rhs.isColorEmoji},
+  isColorBitmap{rhs.isColorBitmap},
+  isBufferOwned{rhs.isBufferOwned}
+{
+  // Remove moved data
+  rhs.buffer        = nullptr;
+  rhs.isBufferOwned = false;
+}
+
+FontClient::GlyphBufferData& FontClient::GlyphBufferData::operator=(FontClient::GlyphBufferData&& rhs) noexcept
+{
+  buffer          = rhs.buffer;
+  width           = rhs.width;
+  height          = rhs.height;
+  outlineOffsetX  = rhs.outlineOffsetX;
+  outlineOffsetY  = rhs.outlineOffsetY;
+  format          = rhs.format;
+  compressionType = rhs.compressionType;
+  isColorEmoji    = rhs.isColorEmoji;
+  isColorBitmap   = rhs.isColorBitmap;
+  isBufferOwned   = rhs.isBufferOwned;
+
+  // Remove moved data
+  rhs.buffer        = nullptr;
+  rhs.isBufferOwned = false;
+
+  return *this;
+}
+
 size_t FontClient::GlyphBufferData::Compress(const uint8_t* const __restrict__ inBuffer, GlyphBufferData& __restrict__ outBufferData)
 {
   size_t bufferSize                       = 0u;
   uint8_t*& __restrict__ compressedBuffer = outBufferData.buffer;
-  switch(outBufferData.compressType)
+  switch(outBufferData.compressionType)
   {
-    case TextAbstraction::FontClient::GlyphBufferData::CompressType::NO_COMPRESS:
+    case TextAbstraction::FontClient::GlyphBufferData::CompressionType::NO_COMPRESSION:
     {
-      bufferSize = outBufferData.width * outBufferData.height * Pixel::GetBytesPerPixel(outBufferData.format);
+      bufferSize = static_cast<size_t>(outBufferData.width) * static_cast<size_t>(outBufferData.height) * static_cast<size_t>(Pixel::GetBytesPerPixel(outBufferData.format));
 
       compressedBuffer = (uint8_t*)malloc(bufferSize);
       if(DALI_UNLIKELY(compressedBuffer == nullptr))
@@ -94,14 +131,14 @@ size_t FontClient::GlyphBufferData::Compress(const uint8_t* const __restrict__ i
       memcpy(compressedBuffer, inBuffer, bufferSize);
       break;
     }
-    case TextAbstraction::FontClient::GlyphBufferData::CompressType::BIT_PER_PIXEL_4:
+    case TextAbstraction::FontClient::GlyphBufferData::CompressionType::BPP_4:
     {
       const uint32_t widthByte       = outBufferData.width * Pixel::GetBytesPerPixel(outBufferData.format);
       const uint32_t componentCount  = (widthByte >> 1);
       const bool     considerPadding = (widthByte & 1) ? true : false;
 
       // For BIT_PER_PIXEL_4 type, we can know final compressed buffer size immediatly.
-      bufferSize       = outBufferData.height * (componentCount + (considerPadding ? 1 : 0));
+      bufferSize       = static_cast<size_t>(outBufferData.height) * static_cast<size_t>(componentCount + (considerPadding ? 1 : 0));
       compressedBuffer = (uint8_t*)malloc(bufferSize);
       if(DALI_UNLIKELY(compressedBuffer == nullptr))
       {
@@ -129,7 +166,7 @@ size_t FontClient::GlyphBufferData::Compress(const uint8_t* const __restrict__ i
       }
       break;
     }
-    case TextAbstraction::FontClient::GlyphBufferData::CompressType::COMPRESS_RLE4:
+    case TextAbstraction::FontClient::GlyphBufferData::CompressionType::RLE_4:
     {
       const uint32_t widthByte = outBufferData.width * Pixel::GetBytesPerPixel(outBufferData.format);
 
@@ -309,9 +346,9 @@ void FontClient::GlyphBufferData::Decompress(const GlyphBufferData& __restrict__
     return;
   }
 
-  switch(inBufferData.compressType)
+  switch(inBufferData.compressionType)
   {
-    case TextAbstraction::FontClient::GlyphBufferData::CompressType::NO_COMPRESS:
+    case TextAbstraction::FontClient::GlyphBufferData::CompressionType::NO_COMPRESSION:
     {
       const auto bufferSize = inBufferData.width * inBufferData.height * Pixel::GetBytesPerPixel(inBufferData.format);
 
@@ -319,7 +356,7 @@ void FontClient::GlyphBufferData::Decompress(const GlyphBufferData& __restrict__
       memcpy(outBuffer, inBufferData.buffer, bufferSize);
       break;
     }
-    case TextAbstraction::FontClient::GlyphBufferData::CompressType::BIT_PER_PIXEL_4:
+    case TextAbstraction::FontClient::GlyphBufferData::CompressionType::BPP_4:
     {
       const uint32_t widthByte       = inBufferData.width * Pixel::GetBytesPerPixel(inBufferData.format);
       const uint32_t componentCount  = (widthByte >> 1);
@@ -348,7 +385,7 @@ void FontClient::GlyphBufferData::Decompress(const GlyphBufferData& __restrict__
       }
       break;
     }
-    case TextAbstraction::FontClient::GlyphBufferData::CompressType::COMPRESS_RLE4:
+    case TextAbstraction::FontClient::GlyphBufferData::CompressionType::RLE_4:
     {
       const uint32_t widthByte = inBufferData.width * Pixel::GetBytesPerPixel(inBufferData.format);
 
@@ -441,9 +478,9 @@ void FontClient::GlyphBufferData::Decompress(const GlyphBufferData& __restrict__
 
 void FontClient::GlyphBufferData::DecompressScanline(const GlyphBufferData& __restrict__ inBufferData, uint8_t* __restrict__ outBuffer, uint32_t& __restrict__ offset)
 {
-  switch(inBufferData.compressType)
+  switch(inBufferData.compressionType)
   {
-    case TextAbstraction::FontClient::GlyphBufferData::CompressType::NO_COMPRESS:
+    case TextAbstraction::FontClient::GlyphBufferData::CompressionType::NO_COMPRESSION:
     {
       const auto bufferSize = inBufferData.width * Pixel::GetBytesPerPixel(inBufferData.format);
 
@@ -454,7 +491,7 @@ void FontClient::GlyphBufferData::DecompressScanline(const GlyphBufferData& __re
       offset += bufferSize;
       break;
     }
-    case TextAbstraction::FontClient::GlyphBufferData::CompressType::BIT_PER_PIXEL_4:
+    case TextAbstraction::FontClient::GlyphBufferData::CompressionType::BPP_4:
     {
       const uint32_t widthByte       = inBufferData.width * Pixel::GetBytesPerPixel(inBufferData.format);
       const uint32_t componentCount  = (widthByte >> 1);
@@ -483,7 +520,7 @@ void FontClient::GlyphBufferData::DecompressScanline(const GlyphBufferData& __re
       offset += (widthByte + 1u) >> 1u;
       break;
     }
-    case TextAbstraction::FontClient::GlyphBufferData::CompressType::COMPRESS_RLE4:
+    case TextAbstraction::FontClient::GlyphBufferData::CompressionType::RLE_4:
     {
       const uint32_t widthByte = inBufferData.width * Pixel::GetBytesPerPixel(inBufferData.format);
 
@@ -592,16 +629,13 @@ FontClient::~FontClient()
 {
 }
 
-FontClient::FontClient(const FontClient& handle)
-: BaseHandle(handle)
-{
-}
+FontClient::FontClient(const FontClient& handle) = default;
 
-FontClient& FontClient::operator=(const FontClient& handle)
-{
-  BaseHandle::operator=(handle);
-  return *this;
-}
+FontClient& FontClient::operator=(const FontClient& handle) = default;
+
+FontClient::FontClient(FontClient&& handle) = default;
+
+FontClient& FontClient::operator=(FontClient&& handle) = default;
 
 void FontClient::ClearCache()
 {
@@ -633,6 +667,11 @@ void FontClient::GetDefaultFonts(FontList& defaultFonts)
   GetImplementation(*this).GetDefaultFonts(defaultFonts);
 }
 
+void FontClient::InitDefaultFontDescription()
+{
+  GetImplementation(*this).InitDefaultFontDescription();
+}
+
 void FontClient::GetDefaultPlatformFontDescription(FontDescription& fontDescription)
 {
   GetImplementation(*this).GetDefaultPlatformFontDescription(fontDescription);
@@ -643,14 +682,14 @@ void FontClient::GetSystemFonts(FontList& systemFonts)
   GetImplementation(*this).GetSystemFonts(systemFonts);
 }
 
-void FontClient::GetDescription(FontId id, FontDescription& fontDescription)
+void FontClient::GetDescription(FontId fontId, FontDescription& fontDescription)
 {
-  GetImplementation(*this).GetDescription(id, fontDescription);
+  GetImplementation(*this).GetDescription(fontId, fontDescription);
 }
 
-PointSize26Dot6 FontClient::GetPointSize(FontId id)
+PointSize26Dot6 FontClient::GetPointSize(FontId fontId)
 {
-  return GetImplementation(*this).GetPointSize(id);
+  return GetImplementation(*this).GetPointSize(fontId);
 }
 
 bool FontClient::IsCharacterSupportedByFont(FontId fontId, Character character)
@@ -820,6 +859,16 @@ FontClient FontClientPreInitialize()
   return Internal::FontClient::PreInitialize();
 }
 
+void FontClientPreCache(const FontFamilyList& fallbackFamilyList, const FontFamilyList& extraFamilyList, const FontFamily& localeFamily, bool useThread)
+{
+  Internal::FontClient::PreCache(fallbackFamilyList, extraFamilyList, localeFamily, useThread);
+}
+
+void FontClientFontPreLoad(const FontPathList& fontPathList, const FontPathList& memoryFontPathList, bool useThread)
+{
+  Internal::FontClient::PreLoad(fontPathList, memoryFontPathList, useThread);
+}
+
 } // namespace TextAbstraction
 
 } // namespace Dali