X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fstyling%2Fstyle-manager-impl.cpp;h=b38d23b0b815cc5f605086a52b853ebff024558f;hb=refs%2Fchanges%2F53%2F113753%2F8;hp=a550a1164d487538f53dc02fddf33de15d2ad7ab;hpb=93c1881a3d13228479ebb96fd6bbdbf1984c2cff;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/styling/style-manager-impl.cpp b/dali-toolkit/internal/styling/style-manager-impl.cpp index a550a11..b38d23b 100644 --- a/dali-toolkit/internal/styling/style-manager-impl.cpp +++ b/dali-toolkit/internal/styling/style-manager-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2016 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. @@ -20,10 +20,12 @@ // EXTERNAL INCLUDES #include #include -#include +#include #include +#include // INTERNAL INCLUDES +#include #include #include #include @@ -34,11 +36,13 @@ namespace const char* LANDSCAPE_QUALIFIER = "landscape"; const char* PORTRAIT_QUALIFIER = "portrait"; -const char* FONT_SIZE_QUALIFIER = "FontSize"; +const char* FONT_SIZE_QUALIFIER = "fontsize"; const char* DEFAULT_THEME = DALI_STYLE_DIR "dali-toolkit-default-theme.json"; const char* PACKAGE_PATH_KEY = "PACKAGE_PATH"; +const char* APPLICATION_RESOURCE_PATH_KEY = "APPLICATION_RESOURCE_PATH"; + const char* DEFAULT_PACKAGE_PATH = DALI_DATA_READ_ONLY_DIR "/toolkit/"; } // namespace @@ -104,12 +108,12 @@ StyleManager::StyleManager() { // Add theme builder constants mThemeBuilderConstants[ PACKAGE_PATH_KEY ] = DEFAULT_PACKAGE_PATH; + mThemeBuilderConstants[ APPLICATION_RESOURCE_PATH_KEY ] = Application::GetResourcePath(); mStyleMonitor = StyleMonitor::Get(); if( mStyleMonitor ) { mStyleMonitor.StyleChangeSignal().Connect( this, &StyleManager::StyleMonitorChange ); - mDefaultFontSize = mStyleMonitor.GetDefaultFontSize(); } @@ -288,7 +292,7 @@ bool StyleManager::LoadJSON( Toolkit::Builder builder, const std::string& jsonFi } } -void StyleManager::CollectQualifiers( StringList& qualifiersOut ) +static void CollectQualifiers( std::vector& qualifiersOut ) { // Append the relevant qualifier for orientation int orientation = 0; // Get the orientation from the system @@ -310,11 +314,24 @@ void StyleManager::CollectQualifiers( StringList& qualifiersOut ) } } -void StyleManager::BuildQualifiedStyleName( const std::string& styleName, const StringList& qualifiers, std::string& qualifiedStyleOut ) +/** + * @brief Construct a qualified style name out of qualifiers + * + * A qualifed style name will be in the format: style-qualifier0-qualifier1-qualifierN + * + * @param[in] styleName The root name of the style + * @param[in] qualifiers List of qualifier names + * @param[out] qualifiedStyleOut The qualified style name + */ +static void BuildQualifiedStyleName( + const std::string& styleName, + const std::vector& qualifiers, + std::string& qualifiedStyleOut ) { qualifiedStyleOut.append( styleName ); - for( StringList::const_iterator it = qualifiers.begin(), itEnd = qualifiers.end(); it != itEnd; ++it ) + for( std::vector::const_iterator it = qualifiers.begin(), + itEnd = qualifiers.end(); it != itEnd; ++it ) { const std::string& str = *it; @@ -323,34 +340,53 @@ void StyleManager::BuildQualifiedStyleName( const std::string& styleName, const } } -void StyleManager::ApplyStyle( Toolkit::Builder builder, Toolkit::Control control ) +static bool GetStyleNameForControl( Toolkit::Builder builder, Toolkit::Control control, std::string& styleName) { - std::string styleName = control.GetStyleName(); + styleName = control.GetStyleName(); if( styleName.empty() ) { - // Convert control name to lower case styleName = control.GetTypeName(); - std::transform( styleName.begin(), styleName.end(), styleName.begin(), ::tolower ); } // Apply the style after choosing the correct actual style (e.g. landscape or portrait) - StringList qualifiers; + std::vector qualifiers; CollectQualifiers( qualifiers ); - while( true ) + bool found = 0; + std::string qualifiedStyleName; + do { - std::string qualifiedStyleName; + qualifiedStyleName.clear(); BuildQualifiedStyleName( styleName, qualifiers, qualifiedStyleName ); // Break if style found or we have tried the root style name (qualifiers is empty) - if( builder.ApplyStyle( qualifiedStyleName, control ) || qualifiers.size() == 0 ) + if( GetImpl(builder).LookupStyleName( qualifiedStyleName ) ) + { + found = true; + break; + } + if( qualifiers.size() == 0 ) { break; } - // Remove the last qualifier in an attempt to find a style that is valid qualifiers.pop_back(); + } while (!found); + + if(found) + { + styleName = qualifiedStyleName; + } + return found; +} + +void StyleManager::ApplyStyle( Toolkit::Builder builder, Toolkit::Control control ) +{ + std::string styleName = control.GetStyleName(); + if( GetStyleNameForControl( builder, control, styleName ) ) + { + builder.ApplyStyle( styleName, control ); } if( mDefaultFontSize >= 0 ) @@ -362,6 +398,21 @@ void StyleManager::ApplyStyle( Toolkit::Builder builder, Toolkit::Control contro } } +const StylePtr StyleManager::GetRecordedStyle( Toolkit::Control control ) +{ + if( mThemeBuilder ) + { + std::string styleName = control.GetStyleName(); + + if( GetStyleNameForControl( mThemeBuilder, control, styleName ) ) + { + const StylePtr style = GetImpl(mThemeBuilder).GetStyle( styleName ); + return style; + } + } + return StylePtr(NULL); +} + Toolkit::Builder StyleManager::FindCachedBuilder( const std::string& key ) { BuilderMap::iterator builderIt = mBuilderCache.find( key );