From 467273430b68ef02ca30677af8dbb64277e5a668 Mon Sep 17 00:00:00 2001 From: Kimmo Hoikka Date: Thu, 4 Sep 2014 14:22:26 +0100 Subject: [PATCH] theme change needs to be synchronous so that application can create controls immediately and they get right styling Change-Id: Ic14877b9ac184eabf03d52f30b0e591829138c6f --- .../internal/styling/style-manager-impl.cpp | 37 ++++------ .../internal/styling/style-manager-impl.h | 2 - base/dali-toolkit/internal/styling/util.h | 82 ---------------------- 3 files changed, 13 insertions(+), 108 deletions(-) delete mode 100644 base/dali-toolkit/internal/styling/util.h diff --git a/base/dali-toolkit/internal/styling/style-manager-impl.cpp b/base/dali-toolkit/internal/styling/style-manager-impl.cpp index acf1ced..0e43c19 100644 --- a/base/dali-toolkit/internal/styling/style-manager-impl.cpp +++ b/base/dali-toolkit/internal/styling/style-manager-impl.cpp @@ -21,7 +21,6 @@ #include #include #include -#include #include // EXTERNAL INCLUDES @@ -108,8 +107,7 @@ Toolkit::StyleManager StyleManager::Get() } StyleManager::StyleManager() - : mOrientationDegrees( 0 ), // Portrait - mSetThemeConnection( false ) + : mOrientationDegrees( 0 ) // Portrait { // Add theme builder constants mThemeBuilderConstants[ PACKAGE_PATH_KEY ] = DEFAULT_PACKAGE_PATH; @@ -125,16 +123,17 @@ StyleManager::StyleManager() StyleManager::~StyleManager() { - // Disconnect from signal - SetOrientation( Orientation() ); } void StyleManager::SetOrientationValue( int orientation ) { - mOrientationDegrees = orientation; - - Util::ConnectEventProcessingFinishedSignal(); - mSetThemeConnection = true; + if( orientation != mOrientationDegrees ) + { + mOrientationDegrees = orientation; + // TODO: if orientation changed, apply the new style to all controls + // dont want to really do the whole load from file again if the bundle contains both portrait & landscape + SetTheme(); + } } int StyleManager::GetOrientationValue() @@ -182,12 +181,9 @@ bool StyleManager::GetStyleConstant( const std::string& key, Property::Value& va void StyleManager::OnOrientationChanged( Orientation orientation ) { mOrientation = orientation; - - if( mOrientation ) - { - Util::ConnectEventProcessingFinishedSignal(); - mSetThemeConnection = true; - } + // TODO: if orientation changed, apply the new style to all controls + // dont want to really do the whole load from file again if the bundle contains both portrait & landscape + SetTheme(); } Toolkit::Builder StyleManager::CreateBuilder( const PropertyValueMap& constants ) @@ -350,8 +346,8 @@ void StyleManager::RequestThemeChange( const std::string& themeFile ) { mThemeFile = themeFile; - Util::ConnectEventProcessingFinishedSignal(); - mSetThemeConnection = true; + // need to do style change synchronously as app might create a UI control on the next line + SetTheme(); } void StyleManager::RequestDefaultTheme() @@ -359,18 +355,11 @@ void StyleManager::RequestDefaultTheme() RequestThemeChange( DEFAULT_THEME ); } -bool StyleManager::IsThemeRequestPending() -{ - return mSetThemeConnection; -} - void StyleManager::SetTheme() { mThemeBuilder = CreateBuilder( mThemeBuilderConstants ); LoadJSON( mThemeBuilder, mThemeFile ); - mSetThemeConnection = false; - StyleChange change; change.themeChange = true; mStyleChangeSignal.Emit( Toolkit::StyleManager::Get(), change ); diff --git a/base/dali-toolkit/internal/styling/style-manager-impl.h b/base/dali-toolkit/internal/styling/style-manager-impl.h index d8d97b4..6e10e04 100644 --- a/base/dali-toolkit/internal/styling/style-manager-impl.h +++ b/base/dali-toolkit/internal/styling/style-manager-impl.h @@ -245,8 +245,6 @@ private: BuilderMap mBuilderCache; ///< Cache of builders keyed by JSON file name - bool mSetThemeConnection; ///< Has the callback to set the theme been set - // Signals Toolkit::StyleManager::StyleChangeSignalType mStyleChangeSignal; ///< Emitted when the style( theme/font ) changes }; diff --git a/base/dali-toolkit/internal/styling/util.h b/base/dali-toolkit/internal/styling/util.h deleted file mode 100644 index c00c136..0000000 --- a/base/dali-toolkit/internal/styling/util.h +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef __DALI_TOOLKIT_INTERNAL_UTIL_H__ -#define __DALI_TOOLKIT_INTERNAL_UTIL_H__ - -// -// Copyright (c) 2014 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. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// EXTERNAL INCLUDES - -// INTERNAL INCLUDES - -#include -#include - -namespace Dali -{ - -namespace Toolkit -{ - -namespace Internal -{ - -namespace Util -{ - -/** - * @brief Callback that the EventProcessingFinishedSignal signal calls - * - * Priorities calls to managers - */ -inline void EventProcessingFinishedSignalPrioritizer() -{ - // Priority 0: Set all styles - Toolkit::StyleManager styleManager = Toolkit::StyleManager::Get(); - if( GetImpl(styleManager).IsThemeRequestPending() ) - { - GetImpl(styleManager).SetTheme(); - } - - // Todo: Priority 1: Do relayout after styles have been set -} - -/** - * @brief Connect to the EventProcessingFinishedSignal - * - * Needs to be called only once, but will still operate successfully if called multiple times. - * Makes the assumption that this is the only thing connecting to the EventProcessingFinishedSignal. - */ -inline void ConnectEventProcessingFinishedSignal() -{ - Stage stage = Stage::GetCurrent(); - - // This is only intended for one purpose! - if( stage.EventProcessingFinishedSignal().GetConnectionCount() == 0 ) - { - stage.EventProcessingFinishedSignal().Connect( &EventProcessingFinishedSignalPrioritizer ); - } -} - -} // namespace Util - -} // namespace Internal - -} // namespace Toolkit - -} // namespace Dali - -#endif // __DALI_TOOLKIT_INTERNAL_STYLE_MANAGER_H__ - -- 2.7.4