private string[] transitionNames;
private bool controlStatePropagation = false;
private ViewStyle viewStyle;
+ private bool themeChangeSensitive = false;
internal Size2D sizeSetExplicitly = new Size2D(); // Store size set by API, will be used in place of NaturalSize if not set.
internal BackgroundExtraData backgroundExtraData;
+ // List of constraint
+ private Constraint widthConstraint = null;
+ private Constraint heightConstraint = null;
+
static View() {}
/// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
/// This will be public opened in next release of tizen after ACR done. Before ACR, it is used as HiddenAPI (InhouseAPI).
[EditorBrowsable(EditorBrowsableState.Never)]
- public View(ViewStyle viewStyle) : this(Interop.View.View_New(), true)
+ public View(ViewStyle viewStyle) : this(Interop.View.View_New(), true, viewStyle)
{
- ApplyStyle((viewStyle == null) ? GetViewStyle() : viewStyle.Clone());
}
/// <summary>
internal View(global::System.IntPtr cPtr, bool cMemoryOwn, ViewStyle viewStyle, bool shown = true) : this(cPtr, cMemoryOwn, shown)
{
- ApplyStyle((viewStyle == null) ? GetViewStyle() : viewStyle.Clone());
+ if (!ThemeManager.ThemeApplied) return;
+
+ if (viewStyle == null) UpdateStyle(); // Use style in the current theme
+ else ApplyStyle(viewStyle.Clone()); // Use given style
}
internal View(global::System.IntPtr cPtr, bool cMemoryOwn, bool shown = true) : base(Interop.View.View_SWIGUpcast(cPtr), cMemoryOwn)
PositionUsesPivotPoint = false;
}
- //ToDo: this has memory leak and this is not used currently. will be fixed soon by using Event subscribing pattern.
- //_onWindowSendEventCallback = SendViewAddedEventToWindow;
- //this.OnWindowSignal().Connect(_onWindowSendEventCallback);
+ _onWindowSendEventCallback = SendViewAddedEventToWindow;
+ this.OnWindowSignal().Connect(_onWindowSendEventCallback);
if (!shown)
{
}
/// <summary>
+ /// Whether the children of this view can be focusable by keyboard navigation. If user sets this to false, the children of this actor view will not be focused.
+ /// Note : Default value is true.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public bool FocusableChildren
+ {
+ set
+ {
+ SetValue(FocusableChildrenProperty, value);
+ NotifyPropertyChanged();
+ }
+ get
+ {
+ return (bool)GetValue(FocusableChildrenProperty);
+ }
+ }
+
+ /// <summary>
+ /// Whether this view can focus by touch.
+ /// If Focusable is false, FocusableInTouch is disabled.
+ /// If you want to have focus on touch, you need to set both Focusable and FocusableInTouch settings to true.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public bool FocusableInTouch
+ {
+ set
+ {
+ SetValue(FocusableInTouchProperty, value);
+ NotifyPropertyChanged();
+ }
+ get
+ {
+ return (bool)GetValue(FocusableInTouchProperty);
+ }
+ }
+
+ /// <summary>
/// Retrieves the position of the view.<br />
/// The coordinates are relative to the view's parent.<br />
/// </summary>
get
{
Size2D temp = (Size2D)GetValue(Size2DProperty);
+ int width = temp.Width;
+ int height = temp.Height;
if (this.Layout == null)
{
- if (temp.Width < 0) { temp.Width = 0; }
- if (temp.Height < 0) { temp.Height = 0; }
+ if (width < 0) { width = 0; }
+ if (height < 0) { height = 0; }
}
- return new Size2D(OnSize2DChanged, temp.Width, temp.Height);
+ return new Size2D(OnSize2DChanged, width, height);
}
set
{
if (basehandle is Layer layer)
{
ret = new View(Layer.getCPtr(layer).Handle, false);
- NUILog.Error("This Parent property is deprecated, shoud do not be used");
+ NUILog.Error("This Parent property is deprecated, should do not be used");
}
else
{
else
{
// First Layout to be added to the View hence copy
-
// Do not try to set Margins or Padding on a null Layout (when a layout is being removed from a View)
- if (value !=null)
+ if (value != null)
{
- if (Margin.Top != 0 || Margin.Bottom !=0 || Margin.Start !=0 || Margin.End != 0)
+ if (Margin.Top != 0 || Margin.Bottom != 0 || Margin.Start != 0 || Margin.End != 0)
{
// If View already has a margin set then store it in Layout instead.
value.Margin = Margin;
- SetValue(MarginProperty, new Extents(0,0,0,0));
+ SetValue(MarginProperty, new Extents(0, 0, 0, 0));
NotifyPropertyChanged();
}
- if (Padding.Top != 0 || Padding.Bottom !=0 || Padding.Start !=0 || Padding.End != 0)
+ if (Padding.Top != 0 || Padding.Bottom != 0 || Padding.Start != 0 || Padding.End != 0)
{
// If View already has a padding set then store it in Layout instead.
value.Padding = Padding;
- SetValue(PaddingProperty, new Extents(0,0,0,0));
- NotifyPropertyChanged();
+ // If Layout is a LayoutItem then it could be a View that handles it's own padding.
+ // Let the View keeps it's padding. Still store Padding in Layout to reduce code paths.
+ if (typeof(LayoutGroup).IsAssignableFrom(value.GetType())) // If a Layout container of some kind.
+ {
+ SetValue(PaddingProperty, new Extents(0, 0, 0, 0));
+ NotifyPropertyChanged();
+ }
}
}
}
}
/// <summary>
+ /// If the value is true, the View will change its style as the theme changes.
+ /// It is false by default, but turned to true when setting StyleName (by setting property or using specified constructor).
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public bool ThemeChangeSensitive
+ {
+ get => (bool)GetValue(ThemeChangeSensitiveProperty);
+ set => SetValue(ThemeChangeSensitiveProperty, value);
+ }
+
+ /// <summary>
/// Get Style, it is abstract function and must be override.
/// </summary>
/// <since_tizen> 6 </since_tizen>
{
}
+ /// <summary>
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected virtual void OnThemeChanged(object sender, ThemeChangedEventArgs e)
+ {
+ UpdateStyle();
+ }
+
/// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
[EditorBrowsable(EditorBrowsableState.Never)]
public virtual void ApplyStyle(ViewStyle viewStyle)
BindableProperty viewProperty;
bindablePropertyOfView.TryGetValue(keyValuePair.Key, out viewProperty);
- if (null != viewProperty)
+ if (null != viewProperty && viewProperty != StyleNameProperty)
{
object value = viewStyle.GetValue(keyValuePair.Value);