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/adaptor-framework/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 FontClient::FontClient()
48 FontClient::~FontClient()
53 Dali::TextAbstraction::FontClient FontClient::Get()
55 Dali::TextAbstraction::FontClient fontClientHandle;
57 Dali::SingletonService service( SingletonService::Get() );
60 // Check whether the singleton is already created
61 Dali::BaseHandle handle = service.GetSingleton( typeid( Dali::TextAbstraction::FontClient ) );
64 // If so, downcast the handle
65 FontClient* impl = dynamic_cast< Dali::TextAbstraction::Internal::FontClient* >( handle.GetObjectPtr() );
66 fontClientHandle = Dali::TextAbstraction::FontClient( impl );
68 else // create and register the object
70 fontClientHandle = Dali::TextAbstraction::FontClient( new FontClient );
71 service.Register( typeid( fontClientHandle ), fontClientHandle );
75 return fontClientHandle;
78 void FontClient::ClearCache()
82 mPlugin->ClearCache();
87 void FontClient::SetDpi( unsigned int horizontalDpi, unsigned int verticalDpi )
89 mDpiHorizontal = horizontalDpi;
90 mDpiVertical = verticalDpi;
92 // Allow DPI to be set without loading plugin
95 mPlugin->SetDpi( horizontalDpi, verticalDpi );
99 void FontClient::GetDpi( unsigned int& horizontalDpi, unsigned int& verticalDpi )
101 horizontalDpi = mDpiHorizontal;
102 verticalDpi = mDpiVertical;
105 int FontClient::GetDefaultFontSize()
109 #if !(defined(DALI_PROFILE_UBUNTU) || defined(ANDROID) || defined(WIN32))
110 vconf_get_int( VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &fontSize );
116 void FontClient::ResetSystemDefaults()
120 mPlugin->ResetSystemDefaults();
123 void FontClient::GetDefaultFonts( FontList& defaultFonts )
127 mPlugin->GetDefaultFonts( defaultFonts );
130 void FontClient::GetDefaultPlatformFontDescription( FontDescription& fontDescription )
134 mPlugin->GetDefaultPlatformFontDescription( fontDescription );
137 void FontClient::GetDescription( FontId id, FontDescription& fontDescription )
141 mPlugin->GetDescription( id, fontDescription );
144 PointSize26Dot6 FontClient::GetPointSize( FontId id )
148 return mPlugin->GetPointSize( id );
151 bool FontClient::IsCharacterSupportedByFont( FontId fontId, Character character )
155 return mPlugin->IsCharacterSupportedByFont( fontId, character );
158 void FontClient::GetSystemFonts( FontList& systemFonts )
162 mPlugin->GetSystemFonts( systemFonts );
165 FontId FontClient::FindDefaultFont( Character charcode,
166 PointSize26Dot6 requestedPointSize,
171 return mPlugin->FindDefaultFont( charcode,
176 FontId FontClient::FindFallbackFont( Character charcode,
177 const FontDescription& preferredFontDescription,
178 PointSize26Dot6 requestedPointSize,
183 return mPlugin->FindFallbackFont( charcode,
184 preferredFontDescription,
189 bool FontClient::IsScalable( const FontPath& path )
193 return mPlugin->IsScalable( path );
196 bool FontClient::IsScalable( const FontDescription& fontDescription )
200 return mPlugin->IsScalable( fontDescription );
203 void FontClient::GetFixedSizes( const FontPath& path, Dali::Vector< PointSize26Dot6>& sizes )
207 mPlugin->GetFixedSizes( path, sizes );
210 void FontClient::GetFixedSizes( const FontDescription& fontDescription,
211 Dali::Vector< PointSize26Dot6 >& sizes )
215 mPlugin->GetFixedSizes( fontDescription, sizes );
218 bool FontClient::HasItalicStyle( FontId fontId ) const
224 return mPlugin->HasItalicStyle( fontId );
227 FontId FontClient::GetFontId( const FontPath& path, PointSize26Dot6 requestedPointSize, FaceIndex faceIndex )
231 return mPlugin->GetFontId( path,
237 FontId FontClient::GetFontId( const FontDescription& fontDescription,
238 PointSize26Dot6 requestedPointSize,
239 FaceIndex faceIndex )
243 return mPlugin->GetFontId( fontDescription,
248 FontId FontClient::GetFontId( const BitmapFont& bitmapFont )
252 return mPlugin->GetFontId( bitmapFont );
255 void FontClient::GetFontMetrics( FontId fontId, FontMetrics& metrics )
259 mPlugin->GetFontMetrics( fontId, metrics );
262 GlyphIndex FontClient::GetGlyphIndex( FontId fontId, Character charcode )
266 return mPlugin->GetGlyphIndex( fontId, charcode );
269 bool FontClient::GetGlyphMetrics( GlyphInfo* array, uint32_t size, GlyphType type, bool horizontal )
273 return mPlugin->GetGlyphMetrics( array, size, type, horizontal );
276 void FontClient::CreateBitmap( FontId fontId, GlyphIndex glyphIndex, bool isItalicRequired, bool isBoldRequired, Dali::TextAbstraction::FontClient::GlyphBufferData& data, int outlineWidth )
280 mPlugin->CreateBitmap( fontId, glyphIndex, isItalicRequired, isBoldRequired, data, outlineWidth );
283 PixelData FontClient::CreateBitmap( FontId fontId, GlyphIndex glyphIndex, int outlineWidth )
287 return mPlugin->CreateBitmap( fontId, glyphIndex, outlineWidth );
290 void FontClient::CreateVectorBlob( FontId fontId, GlyphIndex glyphIndex, VectorBlob*& blob, unsigned int& blobLength, unsigned int& nominalWidth, unsigned int& nominalHeight )
294 mPlugin->CreateVectorBlob( fontId, glyphIndex, blob, blobLength, nominalWidth, nominalHeight );
297 const GlyphInfo& FontClient::GetEllipsisGlyph( PointSize26Dot6 requestedPointSize )
301 return mPlugin->GetEllipsisGlyph( requestedPointSize );
304 bool FontClient::IsColorGlyph( FontId fontId, GlyphIndex glyphIndex )
308 return mPlugin->IsColorGlyph( fontId, glyphIndex );
311 GlyphIndex FontClient::CreateEmbeddedItem(const TextAbstraction::FontClient::EmbeddedItemDescription& description, Pixel::Format& pixelFormat)
315 return mPlugin->CreateEmbeddedItem( description, pixelFormat );
318 FT_FaceRec_* FontClient::GetFreetypeFace( FontId fontId )
322 return mPlugin->GetFreetypeFace( fontId );
325 FontDescription::Type FontClient::GetFontType( FontId fontId )
329 return mPlugin->GetFontType( fontId );
332 bool FontClient::AddCustomFontDirectory( const FontPath& path )
336 return mPlugin->AddCustomFontDirectory( path );
339 void FontClient::CreatePlugin()
343 mPlugin = new Plugin( mDpiHorizontal, mDpiVertical );
347 } // namespace Internal
349 } // namespace TextAbstraction