theme change needs to be synchronous so that application can create controls immediat... 00/27100/3
authorKimmo Hoikka <kimmo.hoikka@samsung.com>
Thu, 4 Sep 2014 13:22:26 +0000 (14:22 +0100)
committerKimmo Hoikka <kimmo.hoikka@samsung.com>
Wed, 15 Oct 2014 13:07:27 +0000 (06:07 -0700)
Change-Id: Ic14877b9ac184eabf03d52f30b0e591829138c6f

base/dali-toolkit/internal/styling/style-manager-impl.cpp
base/dali-toolkit/internal/styling/style-manager-impl.h
base/dali-toolkit/internal/styling/util.h [deleted file]

index acf1ced..0e43c19 100644 (file)
@@ -21,7 +21,6 @@
 #include <dali-toolkit/public-api/controls/control.h>
 #include <dali-toolkit/public-api/controls/control-impl.h>
 #include <dali-toolkit/public-api/styling/style-manager.h>
-#include <dali-toolkit/internal/styling/util.h>
 #include <dali/integration-api/debug.h>
 
 // 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 );
index d8d97b4..6e10e04 100644 (file)
@@ -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 (file)
index c00c136..0000000
+++ /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 <dali/dali.h>
-#include <dali-toolkit/internal/styling/style-manager-impl.h>
-
-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__
-