2 * Copyright (c) 2014 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.
18 #include "tizen-platform-abstraction.h"
20 #ifndef DALI_PROFILE_UBUNTU
22 #endif // DALI_PROFILE_UBUNTU
25 #include <dali/integration-api/debug.h>
26 #include <dali/integration-api/bitmap.h>
27 #include <dali/integration-api/resource-types.h>
29 #include "resource-loader/resource-loader.h"
30 #include "dynamics/dynamics-factory.h"
32 #include "tizen-font-configuration-parser.h"
33 #include "data-cache/metrics-cache.h"
34 #include "image-loaders/image-loader.h"
39 Integration::PlatformAbstraction* CreatePlatformAbstraction()
41 return new TizenPlatform::TizenPlatformAbstraction();
45 namespace TizenPlatform
50 const std::string FONT_CONFIGURATION_FILE( FONT_CONFIGURATION_FILE_PATH ); ///< Default font configuration file
51 const std::string DEFAULT_FONT_FAMILY( "HelveticaNeue" ); ///< Default font family when unable to retrieve from font configuration file
52 const std::string DEFAULT_FONT_STYLE( "Book" ); ///< Default font style when unable to retrieve from font configuration file
53 const std::string NULL_FONT_FAMILY_NAME( "" );
54 const unsigned int NANOSECS_TO_MICROSECS( 1000 ); ///< 1000 nanoseconds = 1 microsecond
56 /// Settings to float point conversion table
57 const float FONT_SIZE_TABLE[5] =
67 TizenPlatformAbstraction::TizenPlatformAbstraction()
68 : mResourceLoader(new ResourceLoader),
69 mDynamicsFactory(NULL),
70 mDataStoragePath( "" ),
71 mDefaultFontSize(FONT_SIZE_TABLE[1])
73 int error = FT_Init_FreeType(&mFreeTypeHandle);
74 DALI_ASSERT_ALWAYS( error == 0 && "Freetype initialization failed" );
76 UpdateDefaultsFromDevice();
79 TizenPlatformAbstraction::~TizenPlatformAbstraction()
81 delete mResourceLoader;
82 delete mDynamicsFactory;
86 FT_Done_FreeType(mFreeTypeHandle);
90 void TizenPlatformAbstraction::GetTimeMicroseconds(unsigned int &seconds, unsigned int µSeconds)
93 clock_gettime(CLOCK_MONOTONIC, &time);
94 seconds = time.tv_sec;
95 microSeconds = time.tv_nsec / NANOSECS_TO_MICROSECS;
98 void TizenPlatformAbstraction::Suspend()
102 mResourceLoader->Pause();
106 void TizenPlatformAbstraction::Resume()
110 mResourceLoader->Resume();
114 const std::string& TizenPlatformAbstraction::GetDefaultFontFamily() const
116 // VCC TODO: return default font style as well.
117 return mDefaultFontFamily;
120 float TizenPlatformAbstraction::GetDefaultFontSize() const
122 return mDefaultFontSize;
125 PixelSize TizenPlatformAbstraction::GetFontLineHeightFromCapsHeight(const std::string& fontFamily, const std::string& fontStyle, CapsHeight capsHeight) const
131 result = mResourceLoader->GetFontLineHeightFromCapsHeight(fontFamily, fontStyle, capsHeight, mFreeTypeHandle);
137 Integration::GlyphSet* TizenPlatformAbstraction::GetGlyphData ( const Dali::Integration::TextResourceType& textRequest,
138 const std::string& fontFamily,
139 bool getBitmap) const
143 return mResourceLoader->GetGlyphData(textRequest,
151 Integration::GlyphSet* TizenPlatformAbstraction::GetCachedGlyphData( const Integration::TextResourceType& textRequest,
152 const std::string& fontFamily ) const
156 return mResourceLoader->GetCachedGlyphData( textRequest, fontFamily );
162 void TizenPlatformAbstraction::GetGlobalMetrics( const std::string& fontFamily, const std::string& fontStyle, Integration::GlobalMetrics& globalMetrics ) const
164 if( mResourceLoader )
166 mResourceLoader->GetGlobalMetrics( mFreeTypeHandle,
173 void TizenPlatformAbstraction::GetClosestImageSize( const std::string& filename,
174 const ImageAttributes& attributes,
175 Vector2& closestSize )
177 closestSize = Vector2::ZERO;
178 ImageLoader::GetClosestImageSize(filename, attributes, closestSize );
181 void TizenPlatformAbstraction::GetClosestImageSize( Integration::ResourcePointer resourceBuffer,
182 const ImageAttributes& attributes,
183 Vector2& closestSize )
185 closestSize = Vector2::ZERO;
186 ImageLoader::GetClosestImageSize(resourceBuffer, attributes, closestSize );
190 void TizenPlatformAbstraction::LoadResource(const Integration::ResourceRequest& request)
194 mResourceLoader->LoadResource(request);
198 Integration::ResourcePointer TizenPlatformAbstraction::LoadResourceSynchronously(const Integration::ResourceType& resourceType, const std::string& resourcePath)
200 return ImageLoader::LoadResourceSynchronously( resourceType, resourcePath );
204 void TizenPlatformAbstraction::SaveResource(const Integration::ResourceRequest& request)
208 if( request.GetType()->id == Integration::ResourceShader )
210 #ifdef SHADERBIN_CACHE_ENABLED
211 std::string path = mDataStoragePath;
212 path += request.GetPath();
214 Integration::ResourceRequest newRequest( request.GetId(), *request.GetType(), path, request.GetResource() );
215 mResourceLoader->SaveResource(newRequest);
220 mResourceLoader->SaveResource(request);
225 void TizenPlatformAbstraction::CancelLoad(Integration::ResourceId id, Integration::ResourceTypeId typeId)
229 mResourceLoader->CancelLoad(id, typeId);
233 bool TizenPlatformAbstraction::IsLoading()
237 return mResourceLoader->IsLoading();
243 void TizenPlatformAbstraction::GetResources(Integration::ResourceCache& cache)
247 mResourceLoader->GetResources(cache);
251 void TizenPlatformAbstraction::SetDpi(unsigned int dpiHor, unsigned int dpiVer)
255 mResourceLoader->SetDpi(dpiHor, dpiVer);
259 const std::string& TizenPlatformAbstraction::GetFontFamilyForChars(const Integration::TextArray& charsRequested) const
261 if( mResourceLoader )
263 return mResourceLoader->GetFontFamilyForChars(charsRequested);
266 return NULL_FONT_FAMILY_NAME;
269 bool TizenPlatformAbstraction::AllGlyphsSupported(const std::string &fontFamily, const std::string& fontStyle, const Integration::TextArray& charsRequested) const
274 ret = mResourceLoader->AllGlyphsSupported(fontFamily, fontStyle, charsRequested);
279 bool TizenPlatformAbstraction::ValidateFontFamilyName(const std::string& fontFamily, const std::string& fontStyle, bool& isDefaultSystemFont, std::string& closestMatch, std::string& closestStyleMatch) const
282 if( mResourceLoader )
284 // TODO: Consider retrieve both isDefaultSystemFontFamily and isDefaultSystemFontStyle.
285 bool isDefaultFamily = false;
286 bool isDefaultStyle = false;
287 ret = mResourceLoader->ValidateFontFamilyName( fontFamily, fontStyle, isDefaultFamily, isDefaultStyle, closestMatch, closestStyleMatch );
288 isDefaultSystemFont = isDefaultFamily && isDefaultStyle;
293 void TizenPlatformAbstraction::GetFontList( Dali::Integration::PlatformAbstraction::FontListMode mode, std::vector<std::string>& fontList ) const
295 if( mResourceLoader )
297 mResourceLoader->GetFontList( mode, fontList );
301 bool TizenPlatformAbstraction::LoadFile( const std::string& filename, std::vector< unsigned char >& buffer ) const
307 result = mResourceLoader->LoadFile(filename, buffer);
313 std::string TizenPlatformAbstraction::LoadFile( const std::string& filename )
318 result = mResourceLoader->LoadFile(filename);
324 bool TizenPlatformAbstraction::SaveFile(const std::string& filename, std::vector< unsigned char >& buffer) const
330 result = mResourceLoader->SaveFile(filename, buffer);
336 void TizenPlatformAbstraction::JoinLoaderThreads()
338 delete mResourceLoader;
339 mResourceLoader = NULL;
342 void TizenPlatformAbstraction::UpdateDefaultsFromDevice()
344 // FontConfigurationParser::Parse sets the default font family and the default font style.
345 // If the isn't a configuration file or is invalid, or it doesn't have any tag with the default
346 // font family nor font style then default values set by the application are used.
347 mDefaultFontFamily = DEFAULT_FONT_FAMILY;
348 mDefaultFontStyle = DEFAULT_FONT_STYLE;
350 // The initialized values above are not used to parse the configuration file. These values
351 // are set just in case FontConfigurationParser::Parse is not able to set default values.
352 FontConfigurationParser::Parse(FONT_CONFIGURATION_FILE, mDefaultFontFamily, mDefaultFontStyle);
354 if ( mResourceLoader )
356 mResourceLoader->SetDefaultFontFamily( mDefaultFontFamily, mDefaultFontStyle );
360 #ifndef DALI_PROFILE_UBUNTU
361 vconf_get_int( VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &fontSize );
362 #endif // DALI_PROFILE_UBUNTU
363 mDefaultFontSize = FONT_SIZE_TABLE[fontSize];
366 Integration::DynamicsFactory* TizenPlatformAbstraction::GetDynamicsFactory()
368 if( NULL == mDynamicsFactory )
370 mDynamicsFactory = new DynamicsFactory;
373 return mDynamicsFactory;
376 bool TizenPlatformAbstraction::ReadGlobalMetricsFromCache( const std::string& fontFamily,
377 const std::string& fontStyle,
378 Integration::GlobalMetrics& globalMetrics )
380 return MetricsCache::ReadGlobal( fontFamily, fontStyle, globalMetrics );
383 void TizenPlatformAbstraction::WriteGlobalMetricsToCache( const std::string& fontFamily,
384 const std::string& fontStyle,
385 const Integration::GlobalMetrics& globalMetrics )
387 MetricsCache::WriteGlobal( fontFamily, fontStyle, globalMetrics);
390 bool TizenPlatformAbstraction::ReadMetricsFromCache( const std::string& fontFamily,
391 const std::string& fontStyle,
392 std::vector<Integration::GlyphMetrics>& glyphMetricsContainer )
394 return MetricsCache::Read( fontFamily, fontStyle, glyphMetricsContainer );
397 void TizenPlatformAbstraction::WriteMetricsToCache( const std::string& fontFamily,
398 const std::string& fontStyle,
399 const Integration::GlyphSet& glyphSet )
401 MetricsCache::Write( fontFamily, fontStyle, glyphSet );
404 void TizenPlatformAbstraction::GetFileNamesFromDirectory( const std::string& directoryName,
405 std::vector<std::string>& fileNames )
409 dp = opendir( directoryName.c_str() );
412 const std::string dot( "." );
413 const std::string dotDot( ".." );
421 const std::string fileName( de->d_name );
422 if( ( fileName != dot ) &&
423 ( fileName != dotDot ) )
425 fileNames.push_back( fileName );
432 Integration::BitmapPtr TizenPlatformAbstraction::GetGlyphImage( const std::string& fontFamily, const std::string& fontStyle, const float fontSize, const uint32_t character ) const
434 Integration::BitmapPtr glyphImage;
436 if( mResourceLoader )
438 glyphImage = mResourceLoader->GetGlyphImage( mFreeTypeHandle, fontFamily, fontStyle, fontSize, character );
444 bool TizenPlatformAbstraction::LoadShaderBinFile( const std::string& filename, std::vector< unsigned char >& buffer ) const
448 #ifdef SHADERBIN_CACHE_ENABLED
451 if( mResourceLoader )
453 path = DALI_SHADERBIN_DIR;
455 result = mResourceLoader->LoadFile( path, buffer );
458 if( mResourceLoader && result == false )
460 path = mDataStoragePath;
462 result = mResourceLoader->LoadFile( path, buffer );
469 void TizenPlatformAbstraction::SetDataStoragePath( const std::string& path )
471 mDataStoragePath = path;
474 } // namespace TizenPlatform