private int heightPolicy = LayoutParamPolicies.WrapContent; // Layout height policy
private float weight = 0.0f; // Weighting of child View in a Layout
private bool backgroundImageSynchronosLoading = false;
- private bool controlStatePropagation = false;
- private ViewStyle viewStyle;
- private bool themeChangeSensitive = false;
private bool excludeLayouting = false;
private LayoutTransition layoutTransition;
- private ControlState controlStates = ControlState.Normal;
private TransitionOptions transitionOptions = null;
+ private ThemeData themeData;
+
+ internal class ThemeData
+ {
+ public bool controlStatePropagation = false;
+ public ViewStyle viewStyle;
+ public bool themeChangeSensitive = false;
+ public ControlState controlStates = ControlState.Normal;
+ public ViewSelectorData selectorData;
+ }
static View() { }
{
get
{
- if (null == viewStyle)
+ if (themeData == null) themeData = new ThemeData();
+
+ if (themeData.viewStyle == null)
{
ApplyStyle(CreateViewStyle());
}
-
- return viewStyle;
+ return themeData.viewStyle;
}
}
{
get
{
- return controlStates;
+ return themeData == null ? ControlState.Normal : themeData.controlStates;
}
protected set
{
- if (controlStates == value)
+ if (ControlState == value)
{
return;
}
- var prevState = controlStates;
+ var prevState = ControlState;
- controlStates = value;
+ if (themeData == null) themeData = new ThemeData();
+ themeData.controlStates = value;
var changeInfo = new ControlStateChangedEventArgs(prevState, value);
ControlStateChangeEventInternal?.Invoke(this, changeInfo);
- if (controlStatePropagation)
+ if (themeData.controlStatePropagation)
{
foreach (View child in Children)
{
[EditorBrowsable(EditorBrowsableState.Never)]
public bool EnableControlStatePropagation
{
- get => controlStatePropagation;
+ get => themeData?.controlStatePropagation ?? false;
set
{
- controlStatePropagation = value;
+ if (EnableControlStatePropagation == value) return;
+
+ if (themeData == null) themeData = new ThemeData();
+
+ themeData.controlStatePropagation = value;
foreach (View child in Children)
{
/// <since_tizen> 9 </since_tizen>
public virtual void ApplyStyle(ViewStyle viewStyle)
{
- if (viewStyle == null || this.viewStyle == viewStyle) return;
+ if (viewStyle == null || themeData?.viewStyle == viewStyle) return;
+
+ if (themeData == null) themeData = new ThemeData();
- this.viewStyle = viewStyle;
+ themeData.viewStyle = viewStyle;
if (viewStyle.DirtyProperties == null || viewStyle.DirtyProperties.Count == 0)
{
{
var view = (View)bindable;
- view.selectorData?.ClearBackground(view);
+ view.themeData?.selectorData?.ClearBackground(view);
if (newValue is Selector<Color> selector)
{
{
var view = (View)bindable;
- view.selectorData?.Color?.Reset(view);
+ view.themeData?.selectorData?.Color?.Reset(view);
if (newValue is Selector<Color> selector)
{
{
var view = (View)bindable;
- if (view.selectorData != null)
+ if (view.themeData?.selectorData != null)
{
- view.selectorData.BackgroundColor?.Reset(view);
- view.selectorData.BackgroundImage?.Reset(view);
+ view.themeData.selectorData.BackgroundColor?.Reset(view);
+ view.themeData.selectorData.BackgroundImage?.Reset(view);
}
if (newValue is Selector<string> selector)
{
var view = (View)bindable;
- view.selectorData?.BackgroundImageBorder?.Reset(view);
+ view.themeData?.selectorData?.BackgroundImageBorder?.Reset(view);
if (newValue is Selector<Rectangle> selector)
{
{
var view = (View)bindable;
- view.selectorData?.Opacity?.Reset(view);
+ view.themeData?.selectorData?.Opacity?.Reset(view);
if (newValue is Selector<float?> selector)
{
{
var view = (View)bindable;
- view.selectorData?.ClearShadow(view);
+ view.themeData?.selectorData?.ClearShadow(view);
if (newValue is Selector<ImageShadow> selector)
{
{
var view = (View)bindable;
- view.selectorData?.ClearShadow(view);
+ view.themeData?.selectorData?.ClearShadow(view);
if (newValue is Selector<Shadow> selector)
{
{
var view = (View)bindable;
- if (view.themeChangeSensitive == (bool)newValue) return;
+ if (view.ThemeChangeSensitive == (bool)newValue) return;
- view.themeChangeSensitive = (bool)newValue;
+ if (view.themeData == null) view.themeData = new ThemeData();
- if (view.themeChangeSensitive)
+ view.themeData.themeChangeSensitive = (bool)newValue;
+
+ if (view.themeData.themeChangeSensitive)
{
ThemeManager.ThemeChangedInternal.Add(view.OnThemeChanged);
}
},
defaultValueCreator: (bindable) =>
{
- return ((View)bindable).themeChangeSensitive;
+ return ((View)bindable).themeData?.themeChangeSensitive ?? false;
});
/// <summary>
/// <since_tizen> 3 </since_tizen>
public partial class View
{
- private ViewSelectorData selectorData;
-
internal string styleName;
/// <summary>
//Called by User
//Release your own managed resources here.
//You should release all of your own disposable objects here.
- selectorData?.Reset(this);
- if (themeChangeSensitive)
+ themeData?.selectorData?.Reset(this);
+ if (ThemeChangeSensitive)
{
ThemeManager.ThemeChangedInternal.Remove(OnThemeChanged);
}
}
}
- private ViewSelectorData EnsureSelectorData() => selectorData ?? (selectorData = new ViewSelectorData());
+ private ViewSelectorData EnsureSelectorData()
+ {
+ if (themeData == null) themeData = new ThemeData();
+
+ return themeData.selectorData ?? (themeData.selectorData = new ViewSelectorData());
+ }
}
}
*
*/
+#if !PROFILE_TV
+#define ExternalThemeEnabled
+#endif
+
using System;
using System.Collections.Generic;
using System.ComponentModel;
/// <param name="externalTheme">The external theme instance to be applied as base.</param>
internal static void ApplyExternalTheme(IExternalTheme externalTheme)
{
+#if ExternalThemeEnabled
Debug.Assert(defaultTheme != null);
if (defaultTheme.HasSameIdAndVersion(externalTheme))
defaultTheme = newTheme;
NotifyThemeChanged();
+#endif
}
internal static void AddPackageTheme(IThemeCreator themeCreator)
var packageTheme = themeCreator.Create();
Debug.Assert(packageTheme != null);
+#if ExternalThemeEnabled
var externalTheme = ExternalThemeManager.GetCurrentTheme();
if (externalTheme != null && !packageTheme.HasSameIdAndVersion(externalTheme))
{
packageTheme.ApplyExternalTheme(externalTheme, themeCreator.GetExternalThemeKeyListSet());
}
-
+#endif
if (defaultTheme == null)
{
defaultTheme = new Theme()