X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Fdevel-api%2Ftext-abstraction%2Ffont-client.cpp;h=5d9f1754ae7ff70abd94c95bdf5d73e316319dce;hb=e955a01e265d73072f39b87248b44701f8f4f025;hp=43519c81634a96bb7b98812ff1905bd2a2a1e186;hpb=fe8f8ee27e49309bfe4b1400ee0c279da3d8336d;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/dali/devel-api/text-abstraction/font-client.cpp b/dali/devel-api/text-abstraction/font-client.cpp index 43519c8..5d9f175 100644 --- a/dali/devel-api/text-abstraction/font-client.cpp +++ b/dali/devel-api/text-abstraction/font-client.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 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. @@ -23,56 +23,78 @@ namespace Dali { - namespace TextAbstraction { +// FontClient static const value definition. -const PointSize26Dot6 FontClient::DEFAULT_POINT_SIZE = 768u; // 12*64 +const PointSize26Dot6 FontClient::DEFAULT_POINT_SIZE = 768u; // 12*64 +const float FontClient::DEFAULT_ITALIC_ANGLE = 12.f * Dali::Math::PI_OVER_180; // FreeType documentation states the software italic is done by doing a horizontal shear of 12 degrees (file ftsynth.h). -FontClient::GlyphBufferData::GlyphBufferData() -: buffer( NULL ), - width( 0u ), - height( 0u ), - format( Pixel::A8 ) -{ -} +//Default atlas block +const bool FontClient::DEFAULT_ATLAS_LIMITATION_ENABLED = true; +const uint32_t FontClient::DEFAULT_TEXT_ATLAS_WIDTH = 512u; +const uint32_t FontClient::DEFAULT_TEXT_ATLAS_HEIGHT = 512u; +const Size FontClient::DEFAULT_TEXT_ATLAS_SIZE(DEFAULT_TEXT_ATLAS_WIDTH, DEFAULT_TEXT_ATLAS_HEIGHT); -FontClient::GlyphBufferData::~GlyphBufferData() -{ -} +//Maximum atlas block +const uint32_t FontClient::MAX_TEXT_ATLAS_WIDTH = 1024u; +const uint32_t FontClient::MAX_TEXT_ATLAS_HEIGHT = 1024u; +const Size FontClient::MAX_TEXT_ATLAS_SIZE(MAX_TEXT_ATLAS_WIDTH, MAX_TEXT_ATLAS_HEIGHT); + +//MAX_WIDTH_FIT_IN_ATLAS: blockWidth + 2 * DOUBLE_PIXEL_PADDING + 1u <= atlasWidth +//MAX_HEIGHT_FIT_IN_ATLAS: blockHeight + 2 * DOUBLE_PIXEL_PADDING + 1u <= atlasHeight +const uint16_t FontClient::PADDING_TEXT_ATLAS_BLOCK = 5u; // 2 * DOUBLE_PIXEL_PADDING + 1u + +//Maximum block size to fit into atlas block +const Size FontClient::MAX_SIZE_FIT_IN_ATLAS(MAX_TEXT_ATLAS_WIDTH - PADDING_TEXT_ATLAS_BLOCK, MAX_TEXT_ATLAS_HEIGHT - PADDING_TEXT_ATLAS_BLOCK); + +const uint32_t FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE = 64u; //Found this value from toolkit + +// FontClient FontClient FontClient::Get() { return Internal::FontClient::Get(); } -FontClient::FontClient() +FontClient FontClient::New(uint32_t horizontalDpi, uint32_t verticalDpi) { + auto fontClientImpl = new Internal::FontClient(); + + fontClientImpl->SetDpi(horizontalDpi, verticalDpi); + + return FontClient(fontClientImpl); } -FontClient::~FontClient() +FontClient::FontClient() { } -FontClient::FontClient( const FontClient& handle ) -: BaseHandle( handle ) +FontClient::~FontClient() { } -FontClient& FontClient::operator=( const FontClient& handle ) +FontClient::FontClient(const FontClient& handle) = default; + +FontClient& FontClient::operator=(const FontClient& handle) = default; + +FontClient::FontClient(FontClient&& handle) = default; + +FontClient& FontClient::operator=(FontClient&& handle) = default; + +void FontClient::ClearCache() { - BaseHandle::operator=( handle ); - return *this; + GetImplementation(*this).ClearCache(); } -void FontClient::SetDpi( unsigned int horizontalDpi, unsigned int verticalDpi ) +void FontClient::SetDpi(unsigned int horizontalDpi, unsigned int verticalDpi) { - GetImplementation(*this).SetDpi( horizontalDpi, verticalDpi ); + GetImplementation(*this).SetDpi(horizontalDpi, verticalDpi); } -void FontClient::GetDpi( unsigned int& horizontalDpi, unsigned int& verticalDpi ) +void FontClient::GetDpi(unsigned int& horizontalDpi, unsigned int& verticalDpi) { - GetImplementation(*this).GetDpi( horizontalDpi, verticalDpi ); + GetImplementation(*this).GetDpi(horizontalDpi, verticalDpi); } int FontClient::GetDefaultFontSize() @@ -85,131 +107,211 @@ void FontClient::ResetSystemDefaults() GetImplementation(*this).ResetSystemDefaults(); } -void FontClient::GetDefaultFonts( FontList& defaultFonts ) +void FontClient::GetDefaultFonts(FontList& defaultFonts) +{ + GetImplementation(*this).GetDefaultFonts(defaultFonts); +} + +void FontClient::InitDefaultFontDescription() +{ + GetImplementation(*this).InitDefaultFontDescription(); +} + +void FontClient::GetDefaultPlatformFontDescription(FontDescription& fontDescription) +{ + GetImplementation(*this).GetDefaultPlatformFontDescription(fontDescription); +} + +void FontClient::GetSystemFonts(FontList& systemFonts) +{ + GetImplementation(*this).GetSystemFonts(systemFonts); +} + +void FontClient::GetDescription(FontId fontId, FontDescription& fontDescription) +{ + GetImplementation(*this).GetDescription(fontId, fontDescription); +} + +PointSize26Dot6 FontClient::GetPointSize(FontId fontId) +{ + return GetImplementation(*this).GetPointSize(fontId); +} + +bool FontClient::IsCharacterSupportedByFont(FontId fontId, Character character) +{ + return GetImplementation(*this).IsCharacterSupportedByFont(fontId, character); +} + +FontId FontClient::FindDefaultFont(Character charcode, + PointSize26Dot6 requestedPointSize, + bool preferColor) +{ + return GetImplementation(*this).FindDefaultFont(charcode, + requestedPointSize, + preferColor); +} + +FontId FontClient::FindFallbackFont(Character charcode, + const FontDescription& preferredFontDescription, + PointSize26Dot6 requestedPointSize, + bool preferColor) +{ + return GetImplementation(*this).FindFallbackFont(charcode, preferredFontDescription, requestedPointSize, preferColor); +} + +FontId FontClient::GetFontId(const FontPath& path, PointSize26Dot6 requestedPointSize, FaceIndex faceIndex) +{ + return GetImplementation(*this).GetFontId(path, requestedPointSize, faceIndex); +} + +FontId FontClient::GetFontId(const FontDescription& fontDescription, + PointSize26Dot6 requestedPointSize, + FaceIndex faceIndex) +{ + return GetImplementation(*this).GetFontId(fontDescription, + requestedPointSize, + faceIndex); +} + +FontId FontClient::GetFontId(const BitmapFont& bitmapFont) +{ + return GetImplementation(*this).GetFontId(bitmapFont); +} + +bool FontClient::IsScalable(const FontPath& path) +{ + return GetImplementation(*this).IsScalable(path); +} + +bool FontClient::IsScalable(const FontDescription& fontDescription) +{ + return GetImplementation(*this).IsScalable(fontDescription); +} + +void FontClient::GetFixedSizes(const FontPath& path, Dali::Vector& sizes) +{ + GetImplementation(*this).GetFixedSizes(path, sizes); +} + +void FontClient::GetFixedSizes(const FontDescription& fontDescription, + Dali::Vector& sizes) +{ + GetImplementation(*this).GetFixedSizes(fontDescription, sizes); +} + +bool FontClient::HasItalicStyle(FontId fontId) const { - GetImplementation(*this).GetDefaultFonts( defaultFonts ); + return GetImplementation(*this).HasItalicStyle(fontId); } -void FontClient::GetDefaultPlatformFontDescription( FontDescription& fontDescription ) +void FontClient::GetFontMetrics(FontId fontId, FontMetrics& metrics) { - GetImplementation(*this).GetDefaultPlatformFontDescription( fontDescription ); + GetImplementation(*this).GetFontMetrics(fontId, metrics); } -void FontClient::GetSystemFonts( FontList& systemFonts ) +GlyphIndex FontClient::GetGlyphIndex(FontId fontId, Character charcode) { - GetImplementation(*this).GetSystemFonts( systemFonts ); + return GetImplementation(*this).GetGlyphIndex(fontId, charcode); } -void FontClient::GetDescription( FontId id, FontDescription& fontDescription ) +GlyphIndex FontClient::GetGlyphIndex(FontId fontId, Character charcode, Character variantSelector) { - GetImplementation(*this).GetDescription( id, fontDescription ); + return GetImplementation(*this).GetGlyphIndex(fontId, charcode, variantSelector); } -PointSize26Dot6 FontClient::GetPointSize( FontId id ) +bool FontClient::GetGlyphMetrics(GlyphInfo* array, uint32_t size, GlyphType type, bool horizontal) { - return GetImplementation(*this).GetPointSize( id ); + return GetImplementation(*this).GetGlyphMetrics(array, size, type, horizontal); } -bool FontClient::IsCharacterSupportedByFont( FontId fontId, Character character ) +void FontClient::CreateBitmap(FontId fontId, GlyphIndex glyphIndex, bool isItalicRequired, bool isBoldRequired, GlyphBufferData& data, int outlineWidth) { - return GetImplementation(*this).IsCharacterSupportedByFont( fontId, character ); + GetImplementation(*this).CreateBitmap(fontId, glyphIndex, isItalicRequired, isBoldRequired, data, outlineWidth); } -FontId FontClient::FindDefaultFont( Character charcode, - PointSize26Dot6 requestedPointSize, - bool preferColor ) +PixelData FontClient::CreateBitmap(FontId fontId, GlyphIndex glyphIndex, int outlineWidth) { - return GetImplementation(*this).FindDefaultFont( charcode, - requestedPointSize, - preferColor ); + return GetImplementation(*this).CreateBitmap(fontId, glyphIndex, outlineWidth); } -FontId FontClient::FindFallbackFont( Character charcode, - const FontDescription& preferredFontDescription, - PointSize26Dot6 requestedPointSize, - bool preferColor ) +void FontClient::CreateVectorBlob(FontId fontId, GlyphIndex glyphIndex, VectorBlob*& blob, unsigned int& blobLength, unsigned int& nominalWidth, unsigned int& nominalHeight) { - return GetImplementation(*this).FindFallbackFont( charcode, preferredFontDescription, requestedPointSize, preferColor ); + GetImplementation(*this).CreateVectorBlob(fontId, glyphIndex, blob, blobLength, nominalWidth, nominalHeight); } -FontId FontClient::GetFontId( const FontPath& path, PointSize26Dot6 requestedPointSize, FaceIndex faceIndex ) +const GlyphInfo& FontClient::GetEllipsisGlyph(PointSize26Dot6 requestedPointSize) { - return GetImplementation(*this).GetFontId( path, requestedPointSize, faceIndex ); + return GetImplementation(*this).GetEllipsisGlyph(requestedPointSize); } -FontId FontClient::GetFontId( const FontDescription& fontDescription, - PointSize26Dot6 requestedPointSize, - FaceIndex faceIndex ) +bool FontClient::IsColorGlyph(FontId fontId, GlyphIndex glyphIndex) { - return GetImplementation(*this).GetFontId( fontDescription, - requestedPointSize, - faceIndex ); + return GetImplementation(*this).IsColorGlyph(fontId, glyphIndex); } -bool FontClient::IsScalable( const FontPath& path ) +bool FontClient::AddCustomFontDirectory(const FontPath& path) { - return GetImplementation(*this).IsScalable( path ); + return GetImplementation(*this).AddCustomFontDirectory(path); } -bool FontClient::IsScalable( const FontDescription& fontDescription ) +GlyphIndex FontClient::CreateEmbeddedItem(const EmbeddedItemDescription& description, Pixel::Format& pixelFormat) { - return GetImplementation(*this).IsScalable( fontDescription ); + return GetImplementation(*this).CreateEmbeddedItem(description, pixelFormat); } -void FontClient::GetFixedSizes( const FontPath& path, Dali::Vector< PointSize26Dot6>& sizes ) +void FontClient::EnableAtlasLimitation(bool enabled) { - GetImplementation(*this).GetFixedSizes( path, sizes ); + return GetImplementation(*this).EnableAtlasLimitation(enabled); } -void FontClient::GetFixedSizes( const FontDescription& fontDescription, - Dali::Vector< PointSize26Dot6 >& sizes ) +bool FontClient::IsAtlasLimitationEnabled() const { - GetImplementation(*this).GetFixedSizes( fontDescription, sizes ); + return GetImplementation(*this).IsAtlasLimitationEnabled(); } -void FontClient::GetFontMetrics( FontId fontId, FontMetrics& metrics ) +Size FontClient::GetMaximumTextAtlasSize() const { - GetImplementation(*this).GetFontMetrics( fontId, metrics ); + return GetImplementation(*this).GetMaximumTextAtlasSize(); } -GlyphIndex FontClient::GetGlyphIndex( FontId fontId, Character charcode ) +Size FontClient::GetDefaultTextAtlasSize() const { - return GetImplementation(*this).GetGlyphIndex( fontId, charcode ); + return GetImplementation(*this).GetDefaultTextAtlasSize(); } -bool FontClient::GetGlyphMetrics( GlyphInfo* array, uint32_t size, GlyphType type, bool horizontal ) +Size FontClient::GetCurrentMaximumBlockSizeFitInAtlas() const { - return GetImplementation(*this).GetGlyphMetrics( array, size, type, horizontal ); + return GetImplementation(*this).GetCurrentMaximumBlockSizeFitInAtlas(); } -void FontClient::CreateBitmap( FontId fontId, GlyphIndex glyphIndex, GlyphBufferData& data, int outlineWidth ) +bool FontClient::SetCurrentMaximumBlockSizeFitInAtlas(const Size& currentMaximumBlockSizeFitInAtlas) { - GetImplementation(*this).CreateBitmap( fontId, glyphIndex, data, outlineWidth ); + return GetImplementation(*this).SetCurrentMaximumBlockSizeFitInAtlas(currentMaximumBlockSizeFitInAtlas); } -PixelData FontClient::CreateBitmap( FontId fontId, GlyphIndex glyphIndex, int outlineWidth ) +uint32_t FontClient::GetNumberOfPointsPerOneUnitOfPointSize() const { - return GetImplementation(*this).CreateBitmap( fontId, glyphIndex, outlineWidth ); + return GetImplementation(*this).GetNumberOfPointsPerOneUnitOfPointSize(); } -void FontClient::CreateVectorBlob( FontId fontId, GlyphIndex glyphIndex, VectorBlob*& blob, unsigned int& blobLength, unsigned int& nominalWidth, unsigned int& nominalHeight ) +FontClient::FontClient(Internal::FontClient* internal) +: BaseHandle(internal) { - GetImplementation(*this).CreateVectorBlob( fontId, glyphIndex, blob, blobLength, nominalWidth, nominalHeight ); } -const GlyphInfo& FontClient::GetEllipsisGlyph( PointSize26Dot6 requestedPointSize ) +FontClient FontClientPreInitialize() { - return GetImplementation(*this).GetEllipsisGlyph( requestedPointSize ); + return Internal::FontClient::PreInitialize(); } -bool FontClient::IsColorGlyph( FontId fontId, GlyphIndex glyphIndex ) +void FontClientPreCache(const FontFamilyList& fallbackFamilyList, const FontFamilyList& extraFamilyList, const FontFamily& localeFamily, bool useThread) { - return GetImplementation(*this).IsColorGlyph( fontId, glyphIndex ); + Internal::FontClient::PreCache(fallbackFamilyList, extraFamilyList, localeFamily, useThread); } -FontClient::FontClient( Internal::FontClient* internal ) -: BaseHandle( internal ) +void FontClientFontPreLoad(const FontPathList& fontPathList, const FontPathList& memoryFontPathList, bool useThread) { + Internal::FontClient::PreLoad(fontPathList, memoryFontPathList, useThread); } } // namespace TextAbstraction