2 * Copyright (c) 2019 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali/internal/text/text-abstraction/font-client-impl.h>
22 #if !(defined(DALI_PROFILE_UBUNTU) || defined(ANDROID) || defined(WIN32))
27 #include <dali/devel-api/common/singleton-service.h>
28 #include <dali/internal/text/text-abstraction/font-client-plugin-impl.h>
30 #include <dali/devel-api/text-abstraction/glyph-info.h>
35 namespace TextAbstraction
41 Dali::TextAbstraction::FontClient FontClient::gPreInitializedFontClient( NULL );
43 FontClient::FontClient()
50 FontClient::~FontClient()
55 Dali::TextAbstraction::FontClient FontClient::Get()
57 Dali::TextAbstraction::FontClient fontClientHandle;
59 Dali::SingletonService service( SingletonService::Get() );
62 // Check whether the singleton is already created
63 Dali::BaseHandle handle = service.GetSingleton( typeid( Dali::TextAbstraction::FontClient ) );
66 // If so, downcast the handle
67 FontClient* impl = dynamic_cast< Dali::TextAbstraction::Internal::FontClient* >( handle.GetObjectPtr() );
68 fontClientHandle = Dali::TextAbstraction::FontClient( impl );
70 else // create and register the object
72 if( gPreInitializedFontClient )
74 fontClientHandle = gPreInitializedFontClient;
75 gPreInitializedFontClient.Reset(); // No longer needed
79 fontClientHandle = Dali::TextAbstraction::FontClient( new FontClient );
82 service.Register( typeid( fontClientHandle ), fontClientHandle );
86 return fontClientHandle;
89 Dali::TextAbstraction::FontClient FontClient::PreInitialize()
91 gPreInitializedFontClient = Dali::TextAbstraction::FontClient( new FontClient );
93 // Make DefaultFontDescription cached
94 Dali::TextAbstraction::FontDescription defaultFontDescription;
95 gPreInitializedFontClient.GetDefaultPlatformFontDescription( defaultFontDescription );
97 return gPreInitializedFontClient;
100 void FontClient::ClearCache()
104 mPlugin->ClearCache();
109 void FontClient::SetDpi( unsigned int horizontalDpi, unsigned int verticalDpi )
111 mDpiHorizontal = horizontalDpi;
112 mDpiVertical = verticalDpi;
114 // Allow DPI to be set without loading plugin
117 mPlugin->SetDpi( horizontalDpi, verticalDpi );
121 void FontClient::GetDpi( unsigned int& horizontalDpi, unsigned int& verticalDpi )
123 horizontalDpi = mDpiHorizontal;
124 verticalDpi = mDpiVertical;
127 int FontClient::GetDefaultFontSize()
131 #if !(defined(DALI_PROFILE_UBUNTU) || defined(ANDROID) || defined(WIN32))
132 vconf_get_int( VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &fontSize );
138 void FontClient::ResetSystemDefaults()
142 mPlugin->ResetSystemDefaults();
145 void FontClient::GetDefaultFonts( FontList& defaultFonts )
149 mPlugin->GetDefaultFonts( defaultFonts );
152 void FontClient::GetDefaultPlatformFontDescription( FontDescription& fontDescription )
156 mPlugin->GetDefaultPlatformFontDescription( fontDescription );
159 void FontClient::GetDescription( FontId id, FontDescription& fontDescription )
163 mPlugin->GetDescription( id, fontDescription );
166 PointSize26Dot6 FontClient::GetPointSize( FontId id )
170 return mPlugin->GetPointSize( id );
173 bool FontClient::IsCharacterSupportedByFont( FontId fontId, Character character )
177 return mPlugin->IsCharacterSupportedByFont( fontId, character );
180 void FontClient::GetSystemFonts( FontList& systemFonts )
184 mPlugin->GetSystemFonts( systemFonts );
187 FontId FontClient::FindDefaultFont( Character charcode,
188 PointSize26Dot6 requestedPointSize,
193 return mPlugin->FindDefaultFont( charcode,
198 FontId FontClient::FindFallbackFont( Character charcode,
199 const FontDescription& preferredFontDescription,
200 PointSize26Dot6 requestedPointSize,
205 return mPlugin->FindFallbackFont( charcode,
206 preferredFontDescription,
211 bool FontClient::IsScalable( const FontPath& path )
215 return mPlugin->IsScalable( path );
218 bool FontClient::IsScalable( const FontDescription& fontDescription )
222 return mPlugin->IsScalable( fontDescription );
225 void FontClient::GetFixedSizes( const FontPath& path, Dali::Vector< PointSize26Dot6>& sizes )
229 mPlugin->GetFixedSizes( path, sizes );
232 void FontClient::GetFixedSizes( const FontDescription& fontDescription,
233 Dali::Vector< PointSize26Dot6 >& sizes )
237 mPlugin->GetFixedSizes( fontDescription, sizes );
240 bool FontClient::HasItalicStyle( FontId fontId ) const
246 return mPlugin->HasItalicStyle( fontId );
249 FontId FontClient::GetFontId( const FontPath& path, PointSize26Dot6 requestedPointSize, FaceIndex faceIndex )
253 return mPlugin->GetFontId( path,
259 FontId FontClient::GetFontId( const FontDescription& fontDescription,
260 PointSize26Dot6 requestedPointSize,
261 FaceIndex faceIndex )
265 return mPlugin->GetFontId( fontDescription,
270 FontId FontClient::GetFontId( const BitmapFont& bitmapFont )
274 return mPlugin->GetFontId( bitmapFont );
277 void FontClient::GetFontMetrics( FontId fontId, FontMetrics& metrics )
281 mPlugin->GetFontMetrics( fontId, metrics );
284 GlyphIndex FontClient::GetGlyphIndex( FontId fontId, Character charcode )
288 return mPlugin->GetGlyphIndex( fontId, charcode );
291 bool FontClient::GetGlyphMetrics( GlyphInfo* array, uint32_t size, GlyphType type, bool horizontal )
295 return mPlugin->GetGlyphMetrics( array, size, type, horizontal );
298 void FontClient::CreateBitmap( FontId fontId, GlyphIndex glyphIndex, bool isItalicRequired, bool isBoldRequired, Dali::TextAbstraction::FontClient::GlyphBufferData& data, int outlineWidth )
302 mPlugin->CreateBitmap( fontId, glyphIndex, isItalicRequired, isBoldRequired, data, outlineWidth );
305 PixelData FontClient::CreateBitmap( FontId fontId, GlyphIndex glyphIndex, int outlineWidth )
309 return mPlugin->CreateBitmap( fontId, glyphIndex, outlineWidth );
312 void FontClient::CreateVectorBlob( FontId fontId, GlyphIndex glyphIndex, VectorBlob*& blob, unsigned int& blobLength, unsigned int& nominalWidth, unsigned int& nominalHeight )
316 mPlugin->CreateVectorBlob( fontId, glyphIndex, blob, blobLength, nominalWidth, nominalHeight );
319 const GlyphInfo& FontClient::GetEllipsisGlyph( PointSize26Dot6 requestedPointSize )
323 return mPlugin->GetEllipsisGlyph( requestedPointSize );
326 bool FontClient::IsColorGlyph( FontId fontId, GlyphIndex glyphIndex )
330 return mPlugin->IsColorGlyph( fontId, glyphIndex );
333 GlyphIndex FontClient::CreateEmbeddedItem(const TextAbstraction::FontClient::EmbeddedItemDescription& description, Pixel::Format& pixelFormat)
337 return mPlugin->CreateEmbeddedItem( description, pixelFormat );
340 FT_FaceRec_* FontClient::GetFreetypeFace( FontId fontId )
344 return mPlugin->GetFreetypeFace( fontId );
347 FontDescription::Type FontClient::GetFontType( FontId fontId )
351 return mPlugin->GetFontType( fontId );
354 bool FontClient::AddCustomFontDirectory( const FontPath& path )
358 return mPlugin->AddCustomFontDirectory( path );
361 void FontClient::CreatePlugin()
365 mPlugin = new Plugin( mDpiHorizontal, mDpiVertical );
369 } // namespace Internal
371 } // namespace TextAbstraction