1 #ifndef DALI_INTERNAL_TEXT_ABSTRACTION_FONT_CLIENT_IMPL_H
2 #define DALI_INTERNAL_TEXT_ABSTRACTION_FONT_CLIENT_IMPL_H
5 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/public-api/object/base-object.h>
25 #include <dali/devel-api/text-abstraction/font-client.h>
31 namespace TextAbstraction
36 * Implementation of the FontClient
38 class FontClient : public BaseObject
52 * @copydoc Dali::TextAbstraction::FontClient::Get()
54 static Dali::TextAbstraction::FontClient Get();
57 * @brief This is used to improve application launch performance
59 * @return A pre-initialized FontClient
61 static Dali::TextAbstraction::FontClient PreInitialize();
64 * @copydoc Dali::TextAbstraction::FontClient::ClearCache()
69 * @copydoc Dali::TextAbstraction::FontClient::SetDpi()
71 void SetDpi(unsigned int horizontalDpi, unsigned int verticalDpi);
74 * @copydoc Dali::TextAbstraction::FontClient::GetDpi()
76 void GetDpi(unsigned int& horizontalDpi, unsigned int& verticalDpi);
79 * @copydoc Dali::TextAbstraction::FontClient::GetDefaultFontSize()
81 int GetDefaultFontSize();
84 * @copydoc Dali::TextAbstraction::FontClient::ResetSystemDefaults()
86 void ResetSystemDefaults();
89 * @copydoc Dali::TextAbstraction::FontClient::GetDefaultFonts()
91 void GetDefaultFonts(FontList& defaultFonts);
94 * @copydoc Dali::TextAbstraction::FontClient::GetDefaultPlatformFontDescription()
96 void GetDefaultPlatformFontDescription(FontDescription& fontDescription);
99 * @copydoc Dali::TextAbstraction::FontClient::GetSystemFonts()
101 void GetSystemFonts(FontList& systemFonts);
104 * @copydoc Dali::TextAbstraction::FontClient::GetDescription()
106 void GetDescription(FontId id, FontDescription& fontDescription);
109 * @copydoc Dali::TextAbstraction::FontClient::GetPointSize()
111 PointSize26Dot6 GetPointSize(FontId id);
114 * @copydoc Dali::TextAbstraction::FontClient::IsCharacterSupportedByFont()
116 bool IsCharacterSupportedByFont(FontId fontId, Character character);
119 * @copydoc Dali::TextAbstraction::FontClient::FindDefaultFont()
121 FontId FindDefaultFont(Character charcode,
122 PointSize26Dot6 requestedPointSize,
126 * @copydoc Dali::TextAbstraction::FontClient::FindFallbackFont()
128 FontId FindFallbackFont(Character charcode,
129 const FontDescription& preferredFontDescription,
130 PointSize26Dot6 requestedPointSize,
134 * @copydoc Dali::TextAbstraction::FontClient::GetFontId( const FontPath& path, PointSize26Dot6 requestedPointSize, FaceIndex faceIndex )
136 FontId GetFontId(const FontPath& path, PointSize26Dot6 requestedPointSize, FaceIndex faceIndex);
139 * @copydoc Dali::TextAbstraction::FontClient::GetFontId( const FontDescription& fontDescription, PointSize26Dot6 requestedPointSize, FaceIndex faceIndex )
141 FontId GetFontId(const FontDescription& fontDescription,
142 PointSize26Dot6 requestedPointSize,
143 FaceIndex faceIndex);
146 * @copydoc Dali::TextAbstraction::FontClient::GetFontId( const BitmapFont& bitmapFont )
148 FontId GetFontId(const BitmapFont& bitmapFont);
151 * @copydoc Dali::TextAbstraction::FontClient::IsScalable( const FontPath& path )
153 bool IsScalable(const FontPath& path);
156 * @copydoc Dali::TextAbstraction::FontClient::IsScalable( const FontDescription& fontDescription )
158 bool IsScalable(const FontDescription& fontDescription);
161 * @copydoc Dali::TextAbstraction::FontClient::GetFixedSizes( const FontPath& path, Dali::Vector< PointSize26Dot6>& sizes )
163 void GetFixedSizes(const FontPath& path, Dali::Vector<PointSize26Dot6>& sizes);
166 * @copydoc Dali::TextAbstraction::FontClient::GetFixedSizes()
168 void GetFixedSizes(const FontDescription& fontDescription,
169 Dali::Vector<PointSize26Dot6>& sizes);
172 * @copydoc Dali::TextAbstraction::FontClient::HasItalicStyle()
174 bool HasItalicStyle(FontId fontId) const;
177 * @copydoc Dali::TextAbstraction::FontClient::GetFontMetrics()
179 void GetFontMetrics(FontId fontId, FontMetrics& metrics);
182 * @copydoc Dali::TextAbstraction::FontClient::GetGlyphIndex()
184 GlyphIndex GetGlyphIndex(FontId fontId, Character charcode);
187 * @copydoc Dali::TextAbstraction::FontClient::GetGlyphMetrics()
189 bool GetGlyphMetrics(GlyphInfo* array, uint32_t size, GlyphType type, bool horizontal);
192 * @copydoc Dali::TextAbstraction::FontClient::CreateBitmap( FontId fontId, GlyphIndex glyphIndex, bool isItalicRequired, bool isBoldRequired, Dali::TextAbstraction::FontClient::GlyphBufferData& data, int outlineWidth )
194 void CreateBitmap(FontId fontId, GlyphIndex glyphIndex, bool isItalicRequired, bool isBoldRequired, Dali::TextAbstraction::FontClient::GlyphBufferData& data, int outlineWidth);
197 * @copydoc Dali::TextAbstraction::FontClient::CreateBitmap( FontId fontId, GlyphIndex glyphIndex, int outlineWidth )
199 PixelData CreateBitmap(FontId fontId, GlyphIndex glyphIndex, int outlineWidth);
202 * @copydoc Dali::TextAbstraction::FontClient::CreateVectorBlob()
204 void CreateVectorBlob(FontId fontId, GlyphIndex glyphIndex, VectorBlob*& blob, unsigned int& blobLength, unsigned int& nominalWidth, unsigned int& nominalHeight);
207 * @copydoc Dali::TextAbstraction::FontClient::GetEllipsisGlyph()
209 const GlyphInfo& GetEllipsisGlyph(PointSize26Dot6 requestedPointSize);
212 * @copydoc Dali::TextAbstraction::FontClient::IsColorGlyph()
214 bool IsColorGlyph(FontId fontId, GlyphIndex glyphIndex);
217 * @copydoc Dali::TextAbstraction::FontClient::CreateEmbeddedItem()
219 GlyphIndex CreateEmbeddedItem(const TextAbstraction::FontClient::EmbeddedItemDescription& description, Pixel::Format& pixelFormat);
222 * @copydoc Dali::TextAbstraction::FontClient::EnableAtlasLimitation(bool enabled)
224 void EnableAtlasLimitation(bool enabled);
227 * @copydoc Dali::TextAbstraction::FontClient::IsAtlasLimitationEnabled()
229 bool IsAtlasLimitationEnabled() const;
232 * @copydoc Dali::TextAbstraction::FontClient::GetMaximumTextAtlasSize()
234 Size GetMaximumTextAtlasSize() const;
237 * @copydoc Dali::TextAbstraction::FontClient::GetDefaultTextAtlasSize()
239 Size GetDefaultTextAtlasSize() const;
242 * @copydoc Dali::TextAbstraction::FontClient::GetCurrentMaximumBlockSizeFitInAtlas()
244 Size GetCurrentMaximumBlockSizeFitInAtlas() const;
247 * @copydoc Dali::TextAbstraction::FontClient::SetCurrentMaximumBlockSizeFitInAtlas(const Size& currentMaximumBlockSizeFitInAtlas)
249 bool SetCurrentMaximumBlockSizeFitInAtlas(const Size& currentMaximumBlockSizeFitInAtlas);
252 * @copydoc Dali::TextAbstraction::FontClient::GetNumberOfPointsPerOneUnitOfPointSize()
254 uint32_t GetNumberOfPointsPerOneUnitOfPointSize() const;
257 * @brief Retrieves the pointer to the FreeType Font Face for the given @p fontId.
259 * @param[in] fontId The font id.
261 * @return The pointer to the FreeType Font Face.
263 FT_FaceRec_* GetFreetypeFace(FontId fontId);
266 * @brief Retrieves the type of font.
268 * @param[in] fontId The font id.
270 * @return FACE_FONT if the font has been loaded by FreeType, BITMAP_FONT if it's a font that has been loaded from images or INVALID if it's a non valid font.
272 FontDescription::Type GetFontType(FontId fontId);
275 * @copydoc Dali::TextAbstraction::FontClient::AddCustomFontDirectory()
277 bool AddCustomFontDirectory(const FontPath& path);
281 * Helper for lazy initialization.
285 // Undefined copy constructor.
286 FontClient(const FontClient&);
288 // Undefined assignment constructor.
289 FontClient& operator=(const FontClient&);
295 // Allows DPI to be set without loading plugin
296 unsigned int mDpiHorizontal;
297 unsigned int mDpiVertical;
299 static Dali::TextAbstraction::FontClient gPreInitializedFontClient;
301 }; // class FontClient
303 } // namespace Internal
305 inline static Internal::FontClient& GetImplementation(FontClient& fontClient)
307 DALI_ASSERT_ALWAYS(fontClient && "fontClient handle is empty");
308 BaseObject& handle = fontClient.GetBaseObject();
309 return static_cast<Internal::FontClient&>(handle);
312 inline static const Internal::FontClient& GetImplementation(const FontClient& fontClient)
314 DALI_ASSERT_ALWAYS(fontClient && "fontClient handle is empty");
315 const BaseObject& handle = fontClient.GetBaseObject();
316 return static_cast<const Internal::FontClient&>(handle);
319 } // namespace TextAbstraction
323 #endif // DALI_INTERNAL_TEXT_ABSTRACTION_FONT_CLIENT_IMPL_H