[EditorBrowsable(EditorBrowsableState.Never)]
protected virtual TextLabel CreateText()
{
- return new TextLabel
- {
- PositionUsesPivotPoint = true,
- ParentOrigin = NUI.ParentOrigin.Center,
- PivotPoint = NUI.PivotPoint.Center,
- WidthResizePolicy = ResizePolicyType.FillToParent,
- HeightResizePolicy = ResizePolicyType.FillToParent,
- HorizontalAlignment = HorizontalAlignment.Center,
- VerticalAlignment = VerticalAlignment.Center
- };
+ return new TextLabel();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
protected virtual ImageView CreateIcon()
{
- return new ImageView
- {
- PositionUsesPivotPoint = true,
- ParentOrigin = NUI.ParentOrigin.Center,
- PivotPoint = NUI.PivotPoint.Center
- };
+ return new ImageView();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
protected virtual ImageView CreateOverlayImage()
{
- return new ImageView
- {
- PositionUsesPivotPoint = true,
- ParentOrigin = NUI.ParentOrigin.Center,
- PivotPoint = NUI.PivotPoint.Center,
- WidthResizePolicy = ResizePolicyType.FillToParent,
- HeightResizePolicy = ResizePolicyType.FillToParent
- };
+ return new ImageView();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
protected virtual void MeasureText()
{
- if (buttonIcon == null || buttonText == null)
+ if (Icon == null || TextLabel == null)
{
return;
}
- buttonText.WidthResizePolicy = ResizePolicyType.Fixed;
- buttonText.HeightResizePolicy = ResizePolicyType.Fixed;
+ TextLabel.WidthResizePolicy = ResizePolicyType.Fixed;
+ TextLabel.HeightResizePolicy = ResizePolicyType.Fixed;
int textPaddingStart = buttonStyle.TextPadding.Start;
int textPaddingEnd = buttonStyle.TextPadding.End;
int textPaddingTop = buttonStyle.TextPadding.Top;
if (IconRelativeOrientation == IconOrientation.Top || IconRelativeOrientation == IconOrientation.Bottom)
{
- buttonText.SizeWidth = SizeWidth - textPaddingStart - textPaddingEnd;
- buttonText.SizeHeight = SizeHeight - textPaddingTop - textPaddingBottom - iconPaddingTop - iconPaddingBottom - buttonIcon.SizeHeight;
+ TextLabel.SizeWidth = SizeWidth - textPaddingStart - textPaddingEnd;
+ TextLabel.SizeHeight = SizeHeight - textPaddingTop - textPaddingBottom - iconPaddingTop - iconPaddingBottom - Icon.SizeHeight;
}
else
{
- buttonText.SizeWidth = SizeWidth - textPaddingStart - textPaddingEnd - iconPaddingStart - iconPaddingEnd - buttonIcon.SizeWidth;
- buttonText.SizeHeight = SizeHeight - textPaddingTop - textPaddingBottom;
+ TextLabel.SizeWidth = SizeWidth - textPaddingStart - textPaddingEnd - iconPaddingStart - iconPaddingEnd - Icon.SizeWidth;
+ TextLabel.SizeHeight = SizeHeight - textPaddingTop - textPaddingBottom;
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected virtual void LayoutChild()
{
- if (buttonIcon == null || buttonText == null)
+ if (Icon == null || TextLabel == null)
{
return;
}
+ var buttonIcon = Icon;
+ var buttonText = TextLabel;
+
int textPaddingStart = buttonStyle.TextPadding.Start;
int textPaddingEnd = buttonStyle.TextPadding.End;
int textPaddingTop = buttonStyle.TextPadding.Top;
}
/// <summary>
+ /// Theme change callback when theme is changed, this callback will be trigger.
+ /// </summary>
+ /// <param name="sender">The sender</param>
+ /// <param name="e">The event data</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e)
+ {
+ ButtonStyle buttonStyle = StyleManager.Instance.GetViewStyle(StyleName) as ButtonStyle;
+ if (buttonStyle != null)
+ {
+ ApplyStyle(buttonStyle);
+ UpdateUIContent();
+ }
+ }
+
+ /// <summary>
/// Dispose Button and all children on it.
/// </summary>
/// <param name="type">Dispose type.</param>
{
Extension?.OnDispose(this);
- if (buttonIcon != null)
+ if (Icon != null)
{
- Utility.Dispose(buttonIcon);
+ Utility.Dispose(Icon);
}
- if (buttonText != null)
+ if (TextLabel != null)
{
- Utility.Dispose(buttonText);
+ Utility.Dispose(TextLabel);
}
- if (overlayImage != null)
+ if (OverlayImage != null)
{
- Utility.Dispose(overlayImage);
+ Utility.Dispose(OverlayImage);
}
}
var instance = (Button)bindable;
if (newValue != null)
{
- bool newEnabled = (bool)newValue;
- if (instance.isEnabled != newEnabled)
+ if (instance.buttonStyle != null && (!instance.styleApplied || instance.buttonStyle.IsEnabled != (bool)newValue))
{
- instance.isEnabled = newEnabled;
-
- if (instance.buttonStyle != null)
- {
- instance.buttonStyle.IsEnabled = newEnabled;
- }
-
+ instance.buttonStyle.IsEnabled = (bool)newValue;
instance.UpdateState();
}
}
},
- defaultValueCreator: (bindable) => ((Button)bindable).isEnabled);
+ defaultValueCreator: (bindable) =>
+ {
+ var instance = (Button)bindable;
+ return instance.buttonStyle?.IsEnabled ?? true;
+ });
/// 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 static readonly BindableProperty IsSelectedProperty = BindableProperty.Create(nameof(IsSelected), typeof(bool), typeof(Button), true, propertyChanged: (bindable, oldValue, newValue) =>
var instance = (Button)bindable;
if (newValue != null)
{
- bool newSelected = (bool)newValue;
- if (instance.isSelected != newSelected)
+ if (instance.buttonStyle != null && instance.IsSelectable && (!instance.styleApplied || instance.buttonStyle.IsSelected != (bool)newValue))
{
- instance.isSelected = newSelected;
-
- if (instance.buttonStyle != null)
- {
- instance.buttonStyle.IsSelected = newSelected;
- }
-
- if (instance.isSelectable)
- {
- instance.UpdateState();
- }
+ instance.buttonStyle.IsSelected = (bool)newValue;
+ instance.UpdateState();
}
}
},
defaultValueCreator: (bindable) =>
{
var instance = (Button)bindable;
- return instance.isSelectable && instance.isSelected;
+ return instance.IsSelectable && (instance.buttonStyle.IsSelected ?? false);
});
/// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
[EditorBrowsable(EditorBrowsableState.Never)]
var instance = (Button)bindable;
if (newValue != null)
{
- bool newSelectable = (bool)newValue;
- if (instance.isSelectable != newSelectable)
+ if (instance.buttonStyle != null && (!instance.styleApplied || instance.buttonStyle.IsSelectable != (bool)newValue))
{
- instance.isSelectable = newSelectable;
-
- if (instance.buttonStyle != null)
- {
- instance.buttonStyle.IsSelectable = newSelectable;
- }
-
- instance.UpdateState();
+ instance.buttonStyle.IsSelectable = (bool)newValue;
}
}
},
- defaultValueCreator: (bindable) => ((Button)bindable).isSelectable);
-
+ defaultValueCreator: (bindable) =>
+ {
+ var instance = (Button)bindable;
+ return instance.buttonStyle?.IsSelectable ?? false;
+ });
/// 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 static readonly BindableProperty IconPaddingProperty = BindableProperty.Create(nameof(IconPadding), typeof(Extents), typeof(Button), null, propertyChanged: (bindable, oldValue, newValue) =>
return instance.buttonStyle?.TextPadding;
});
- private bool isSelected = false;
- private bool isSelectable = false;
- private bool isEnabled = true;
-
static Button() { }
/// <summary>
{
buttonIcon = Extension.OnCreateIcon(this, buttonIcon);
}
- if (null != buttonIcon)
- {
- Add(buttonIcon);
- buttonIcon.Relayout += OnIconRelayout;
- }
+ Add(buttonIcon);
+ buttonIcon.Relayout += OnIconRelayout;
}
return buttonIcon;
}
{
overlayImage = Extension.OnCreateOverlayImage(this, overlayImage);
}
- if (null != overlayImage)
- {
- Add(overlayImage);
- }
+ overlayImage.WidthResizePolicy = ResizePolicyType.FillToParent;
+ overlayImage.HeightResizePolicy = ResizePolicyType.FillToParent;
+ Add(overlayImage);
}
return overlayImage;
}
{
buttonText = Extension.OnCreateText(this, buttonText);
}
- if (null != buttonText)
- {
- Add(buttonText);
- }
+ buttonText.HorizontalAlignment = HorizontalAlignment.Center;
+ buttonText.VerticalAlignment = VerticalAlignment.Center;
+ Add(buttonText);
}
return buttonText;
}
[Obsolete("Deprecated in API8; Will be removed in API10")]
public ControlStates CurrentState;
}
+
+ /// <summary>
+ /// Get current text part to the attached ButtonExtension.
+ /// </summary>
+ /// <remarks>
+ /// It returns null if the passed extension is invalid.
+ /// </remarks>
+ /// <param name="extension">The extension instance that is currently attached to this Button.</param>
+ /// <return>The button's text part.</return>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public TextLabel GetCurrentText(ButtonExtension extension)
+ {
+ return (extension == Extension) ? TextLabel : null;
+ }
+
+ /// <summary>
+ /// Get current icon part to the attached ButtonExtension.
+ /// </summary>
+ /// <remarks>
+ /// It returns null if the passed extension is invalid.
+ /// </remarks>
+ /// <param name="extension">The extension instance that is currently attached to this Button.</param>
+ /// <return>The button's icon part.</return>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public ImageView GetCurrentIcon(ButtonExtension extension)
+ {
+ return (extension == Extension) ? Icon : null;
+ }
+
+ /// <summary>
+ /// Get current overlay image part to the attached ButtonExtension.
+ /// </summary>
+ /// <remarks>
+ /// It returns null if the passed extension is invalid.
+ /// </remarks>
+ /// <param name="extension">The extension instance that is currently attached to this Button.</param>
+ /// <return>The button's overlay image part.</return>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public ImageView GetCurrentOverlayImage(ButtonExtension extension)
+ {
+ return (extension == Extension) ? OverlayImage : null;
+ }
}
}
public static readonly BindableProperty CommandParameterProperty = BindableProperty.Create("CommandParameter", typeof(object), typeof(Button), null,
propertyChanged: (bindable, oldvalue, newvalue) => ((Button)bindable).CommandCanExecuteChanged(bindable, EventArgs.Empty));
- private bool onThemeChangedEventOverrideChecker;
-
/// <summary> Control style. </summary>
/// <since_tizen> 6 </since_tizen>
/// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
[EditorBrowsable(EditorBrowsableState.Never)]
public Control() : base()
{
- ViewStyle viewStyle = ThemeManager.GetStyle(GetType());
+ var cur_type = this.GetType();
+ ViewStyle viewStyle = null;
+
+ do
+ {
+ if (cur_type.Equals(typeof(Tizen.NUI.Components.Control))) break;
+ viewStyle = StyleManager.Instance.GetComponentStyle(cur_type);
+ cur_type = cur_type.BaseType;
+ }
+ while (viewStyle == null);
- if (viewStyle != null && ViewStyle?.GetType() == viewStyle.GetType())
+ if (viewStyle != null)
{
ApplyStyle(viewStyle);
}
ApplyStyle(viewStyle);
this.StyleName = styleName;
- ThemeChangeSensitive = true;
Initialize();
}
if (type == DisposeTypes.Explicit)
{
+ StyleManager.Instance.ThemeChangedEvent -= OnThemeChangedEvent;
tapGestureDetector.Detected -= OnTapGestureDetected;
tapGestureDetector.Detach(this);
}
/// <summary>
/// Theme change callback when theme is changed, this callback will be trigger.
- /// Note that it is deprecated API.Please use OnThemeChanged instead.
/// </summary>
/// <param name="sender">The sender</param>
/// <param name="e">The event data</param>
/// <since_tizen> 6 </since_tizen>
/// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
[EditorBrowsable(EditorBrowsableState.Never)]
- protected virtual void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e)
- {
- onThemeChangedEventOverrideChecker = false;
- }
+ protected virtual void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e) { }
/// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
[EditorBrowsable(EditorBrowsableState.Never)]
return new ControlStyle();
}
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- protected override void OnThemeChanged(object sender, ThemeChangedEventArgs e)
- {
- // TODO Remove checker after update Tizen.FH.NUI.
- onThemeChangedEventOverrideChecker = true;
-
- OnThemeChangedEvent(sender, new StyleManager.ThemeChangeEventArgs { CurrentTheme = e.ThemeId });
-
- if (onThemeChangedEventOverrideChecker) return;
-
- // If the OnThemeChangedEvent is not implemented, ApplyStyle()
- if (string.IsNullOrEmpty(StyleName))
- {
- base.OnThemeChanged(sender, e);
- return;
- }
-
- ViewStyle newStyle = ThemeManager.GetStyle(StyleName);
-
- if (newStyle != null)
- {
- ApplyStyle(newStyle);
- }
- }
-
private void Initialize()
{
LeaveRequired = true;
tapGestureDetector.Detected += OnTapGestureDetected;
EnableControlState = true;
+
+ StyleManager.Instance.ThemeChangedEvent += OnThemeChangedEvent;
}
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
public DropDownDataItem()
{
- itemDataStyle = (DropDownItemStyle)ThemeManager.GetStyle(typeof(DropDownDataItem));
+ itemDataStyle = (DropDownItemStyle)StyleManager.Instance.GetComponentStyle(this.GetType());
Initialize();
}
[EditorBrowsable(EditorBrowsableState.Never)]
public override ImageView OnCreateIcon(Button button, ImageView icon)
{
- LottieView.PositionUsesPivotPoint = true;
- LottieView.ParentOrigin = NUI.ParentOrigin.Center;
- LottieView.PivotPoint = NUI.PivotPoint.Center;
-
InitializeLottieView(button, LottieView);
return LottieView;
[EditorBrowsable(EditorBrowsableState.Never)]
public override ImageView OnCreateIcon(Button button, ImageView icon)
{
- LottieView.PositionUsesPivotPoint = true;
- LottieView.ParentOrigin = NUI.ParentOrigin.Center;
- LottieView.PivotPoint = NUI.PivotPoint.Center;
-
LottieButtonExtension.InitializeLottieView(button, LottieView);
return LottieView;
return new ScrollBarStyle();
}
+ /// <summary>
+ /// Theme change callback when theme is changed, this callback will be trigger.
+ /// </summary>
+ /// <param name="sender">The sender</param>
+ /// <param name="e">The event data</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e)
+ {
+ ScrollBarStyle tempStyle = StyleManager.Instance.GetViewStyle(StyleName) as ScrollBarStyle;
+ if (tempStyle != null)
+ {
+ Style.CopyFrom(tempStyle);
+ UpdateValue();
+ }
+ }
+
private void Initialize()
{
this.Focusable = false;
int frameRate = (int)newValue;
if (0 != frameRate) //It will crash if 0
{
- instance.loadingStyle.FrameRate = frameRate;
+ instance.loadingStyle.FrameRate.All = frameRate;
instance.imageVisual.FrameDelay = 1000.0f / frameRate;
}
}
{
if (null == titleText)
{
- titleText = new TextLabel
- {
- PositionUsesPivotPoint = true,
- ParentOrigin = Tizen.NUI.ParentOrigin.TopLeft,
- PivotPoint = Tizen.NUI.PivotPoint.TopLeft,
- HorizontalAlignment = HorizontalAlignment.Begin,
- VerticalAlignment = VerticalAlignment.Bottom
- };
+ titleText = new TextLabel();
Add(titleText);
}
return titleText;
PopupStyle ppStyle = viewStyle as PopupStyle;
if (null != ppStyle)
{
- if (ppStyle.Buttons != null)
- {
- if (ppStyle.Buttons.PositionUsesPivotPoint == null) ppStyle.Buttons.PositionUsesPivotPoint = true;
- if (ppStyle.Buttons.ParentOrigin == null) ppStyle.Buttons.ParentOrigin = Tizen.NUI.ParentOrigin.BottomLeft;
- if (ppStyle.Buttons.PivotPoint == null) ppStyle.Buttons.PivotPoint = Tizen.NUI.PivotPoint.BottomLeft;
- }
Title.ApplyStyle(ppStyle.Title);
Title.RaiseToTop();
}
return new PopupStyle();
}
- /// <inheritdoc/>
+ /// <summary>
+ /// Theme change callback when theme is changed, this callback will be trigger.
+ /// </summary>
+ /// <param name="sender">The sender</param>
+ /// <param name="e">The event data</param>
[EditorBrowsable(EditorBrowsableState.Never)]
- protected override void OnUpdate()
+ protected override void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e)
{
- base.OnUpdate();
- UpdateView();
+ PopupStyle ppStyle = StyleManager.Instance.GetViewStyle(StyleName) as PopupStyle;
+ if (ppStyle != null)
+ {
+ ApplyStyle(ppStyle);
+ UpdateView();
+ }
}
private void Initialize()
private void UpdateView()
{
- if (popupStyle == null) return;
btGroup.UpdateButton(popupStyle.Buttons);
UpdateContentView();
UpdateTitle();
}
/// <summary>
+ /// Theme change callback when theme is changed, this callback will be trigger.
+ /// </summary>
+ /// <param name="sender">The sender</param>
+ /// <param name="e">The event data</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e)
+ {
+ ProgressStyle tempStyle = StyleManager.Instance.GetViewStyle(StyleName) as ProgressStyle;
+ if (null != tempStyle)
+ {
+ progressStyle.CopyFrom(tempStyle);
+ RelayoutRequest();
+ }
+ }
+
+ /// <summary>
/// Change Image status. It can be override.
/// </summary>
/// <since_tizen> 6 </since_tizen>
/// <summary>
/// Create an empty Scrollbar.
/// </summary>
- public Scrollbar() : base(ThemeManager.GetStyle(typeof(Scrollbar)))
+ public Scrollbar() : base(new ScrollbarStyle())
{
}
/// <param name="currentPosition">The current position of the viewport in scrollable content area. This is the viewport's top position if the scroller is vertical, otherwise, left.</param>
/// <param name="isHorizontal">Whether the direction of scrolling is horizontal or not. It is vertical by default.</param>
[EditorBrowsable(EditorBrowsableState.Never)]
- public Scrollbar(float contentLength, float viewportLength, float currentPosition, bool isHorizontal = false) : this()
+ public Scrollbar(float contentLength, float viewportLength, float currentPosition, bool isHorizontal = false) : base(new ScrollbarStyle())
{
Initialize(contentLength, viewportLength, currentPosition, isHorizontal);
}
/// <inheritdoc/>
[EditorBrowsable(EditorBrowsableState.Never)]
- public override void ApplyStyle(ViewStyle viewStyle)
- {
- base.ApplyStyle(viewStyle);
-
- if (viewStyle is ScrollbarStyle scrollbarStyle)
- {
- // Apply essential look.
- if (scrollbarStyle.TrackThickness == null) scrollbarStyle.TrackThickness = 6.0f;
- if (scrollbarStyle.ThumbThickness == null) scrollbarStyle.ThumbThickness = 6.0f;
- if (scrollbarStyle.TrackColor == null) scrollbarStyle.TrackColor = new Color(1.0f, 1.0f, 1.0f, 0.15f);
- if (scrollbarStyle.ThumbColor == null) scrollbarStyle.ThumbColor = new Color(0.6f, 0.6f, 0.6f, 1.0f);
- if (scrollbarStyle.TrackPadding == null) scrollbarStyle.TrackPadding = 4;
- if (scrollbarStyle.WidthResizePolicy == null) scrollbarStyle.WidthResizePolicy = ResizePolicyType.FillToParent;
- if (scrollbarStyle.HeightResizePolicy == null) scrollbarStyle.HeightResizePolicy = ResizePolicyType.FillToParent;
- }
- }
-
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
protected override ViewStyle CreateViewStyle()
{
return new ScrollbarStyle();
public override Size CalculateTrackSize(float thickness, Size containerSize, Extents trackPadding)
{
- return new Size(containerSize.Width - trackPadding?.Start??0 - trackPadding?.End??0, thickness);
+ return new Size(containerSize.Width - trackPadding.Start - trackPadding.End, thickness);
}
public override Vector2 CalculateTrackPosition(Extents trackPadding)
{
- return new Vector2(0, -trackPadding?.Bottom??0);
+ return new Vector2(0, -trackPadding.Bottom);
}
public override Size CalculateThumbSize(float thickness, Size trackSize)
public override Vector2 CalculateThumbPosition(Size trackSize, Size thumbSize, Extents trackPadding)
{
- float padding = ((trackSize.Height - thumbSize.Height) / 2.0f) + trackPadding?.Bottom??0;
+ float padding = ((trackSize.Height - thumbSize.Height) / 2.0f) + trackPadding.Bottom;
float pos = Math.Min(Math.Max(currentPosition, 0.0f), contentLength - visibleLength);
- return new Vector2(trackPadding?.Start??0 + trackSize.Width * pos / contentLength, -padding);
+ return new Vector2(trackPadding.Start + trackSize.Width * pos / contentLength, -padding);
}
public override Vector2 CalculateThumbPaddingPosition(Size trackSize, Size thumbSize, Vector2 thumbCurrentPosition, Extents trackPadding)
{
- float padding = ((trackSize.Height - thumbSize.Height) / 2.0f) + trackPadding?.Bottom??0;
+ float padding = ((trackSize.Height - thumbSize.Height) / 2.0f) + trackPadding.Bottom;
return new Vector2(thumbCurrentPosition.X, -padding);
}
public override Vector2 CalculateThumbScrollPosition(Size trackSize, Vector2 thumbCurrentPosition, Extents trackPadding)
{
float pos = Math.Min(Math.Max(currentPosition, 0.0f), contentLength - visibleLength);
- return new Vector2(trackPadding?.Start??0 + trackSize.Width * pos / contentLength, thumbCurrentPosition.Y);
+ return new Vector2(trackPadding.Start + trackSize.Width * pos / contentLength, thumbCurrentPosition.Y);
}
}
public override Size CalculateTrackSize(float thickness, Size containerSize, Extents trackPadding)
{
- return new Size(thickness, containerSize.Height - trackPadding?.Top??0 - trackPadding?.Bottom??0);
+ return new Size(thickness, containerSize.Height - trackPadding.Top - trackPadding.Bottom);
}
public override Vector2 CalculateTrackPosition(Extents trackPadding)
{
- return new Vector2(-trackPadding?.End??0, 0);
+ return new Vector2(-trackPadding.End, 0);
}
public override Size CalculateThumbSize(float thickness, Size trackSize)
public override Vector2 CalculateThumbPosition(Size trackSize, Size thumbSize, Extents trackPadding)
{
- float padding = ((trackSize.Width - thumbSize.Width) / 2.0f) + trackPadding?.End??0;
+ float padding = ((trackSize.Width - thumbSize.Width) / 2.0f) + trackPadding.End;
float pos = Math.Min(Math.Max(currentPosition, 0.0f), contentLength - visibleLength);
- return new Vector2(-padding, trackPadding?.Top??0 + trackSize.Height * pos / contentLength);
+ return new Vector2(-padding, trackPadding.Top + trackSize.Height * pos / contentLength);
}
public override Vector2 CalculateThumbPaddingPosition(Size trackSize, Size thumbSize, Vector2 thumbCurrentPosition, Extents trackPadding)
{
- float padding = ((trackSize.Width - thumbSize.Width) / 2.0f) + trackPadding?.End??0;
+ float padding = ((trackSize.Width - thumbSize.Width) / 2.0f) + trackPadding.End;
return new Vector2(-padding, thumbCurrentPosition.Y);
}
public override Vector2 CalculateThumbScrollPosition(Size trackSize, Vector2 thumbPosition, Extents trackPadding)
{
float pos = Math.Min(Math.Max(currentPosition, 0.0f), contentLength - visibleLength);
- return new Vector2(thumbPosition.X, trackPadding?.Top??0 + trackSize.Height * pos / contentLength);
+ return new Vector2(thumbPosition.X, trackPadding.Top + trackSize.Height * pos / contentLength);
}
}
UpdateValue();
}
+ /// <summary>
+ /// Theme change callback when theme is changed, this callback will be trigger.
+ /// </summary>
+ /// <param name="sender">The sender</param>
+ /// <param name="e">The event data</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e)
+ {
+ SliderStyle sliderStyle = StyleManager.Instance.GetViewStyle(StyleName) as SliderStyle;
+ if (sliderStyle != null)
+ {
+ ApplyStyle(sliderStyle);
+ RelayoutRequest();
+ }
+ }
+
private void CalculateCurrentValueByGesture(float offset)
{
currentSlidedOffset += offset;
IsSelectable = true;
}
+ /// <summary>
+ /// Theme change callback when theme is changed, this callback will be trigger.
+ /// </summary>
+ /// <param name="sender">The sender</param>
+ /// <param name="e">The event data</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e)
+ {
+ SwitchStyle switchStyle = StyleManager.Instance.GetViewStyle(StyleName) as SwitchStyle;
+ if (null != switchStyle)
+ {
+ ApplyStyle(switchStyle);
+ }
+ }
+
private void OnSelect()
{
((SwitchExtension)Extension)?.OnSelectedChanged(this);
}
/// <summary>
+ /// Theme change callback when theme is changed, this callback will be trigger.
+ /// </summary>
+ /// <param name="sender">The sender</param>
+ /// <param name="e">The event data</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e)
+ {
+ TabStyle tabStyle = StyleManager.Instance.GetViewStyle(StyleName) as TabStyle;
+ if (tabStyle != null)
+ {
+ ApplyStyle(tabStyle);
+ }
+ }
+
+ /// <summary>
/// Layout child in Tab and it can be override by user.
/// </summary>
/// <since_tizen> 6 </since_tizen>
{
if (null == textLabel)
{
- textLabel = new TextLabel()
- {
- PositionUsesPivotPoint = true,
- ParentOrigin = Tizen.NUI.ParentOrigin.Center,
- PivotPoint = Tizen.NUI.PivotPoint.Center,
- WidthResizePolicy = ResizePolicyType.UseNaturalSize,
- HeightResizePolicy = ResizePolicyType.UseNaturalSize,
- HorizontalAlignment = HorizontalAlignment.Center,
- VerticalAlignment = VerticalAlignment.Center,
- };
+ textLabel = new TextLabel();
this.Add(textLabel);
}
textLabel.ApplyStyle(toastStyle.Text);
{
if (null == textLabel)
{
- textLabel = new TextLabel()
- {
- PositionUsesPivotPoint = true,
- ParentOrigin = Tizen.NUI.ParentOrigin.Center,
- PivotPoint = Tizen.NUI.PivotPoint.Center,
- WidthResizePolicy = ResizePolicyType.UseNaturalSize,
- HeightResizePolicy = ResizePolicyType.UseNaturalSize,
- HorizontalAlignment = HorizontalAlignment.Center,
- VerticalAlignment = VerticalAlignment.Center,
- };
+ textLabel = new TextLabel();
this.Add(textLabel);
}
--- /dev/null
+/*
+ * Copyright(c) 2020 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.
+ *
+ */
+using System.ComponentModel;
+using Tizen.NUI.BaseComponents;
+
+namespace Tizen.NUI.Components
+{
+ /// <summary>
+ /// Interface that includes styles for all components for a default theme
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ internal class DefaultTheme : Theme
+ {
+ internal static Theme Instance { get; } = new DefaultTheme();
+
+ protected DefaultTheme() : base()
+ {
+ }
+
+ protected override ButtonStyle GetButtonStyle()
+ {
+ return new ButtonStyle
+ {
+ Size = new Size(100, 45),
+ BackgroundColor = new Selector<Color>
+ {
+ Normal = new Color(0.88f, 0.88f, 0.88f, 1),
+ Pressed = new Color(0.77f, 0.77f, 0.77f, 1),
+ Disabled = new Color(0.88f, 0.88f, 0.88f, 1)
+ },
+ Text = new TextLabelStyle
+ {
+ PointSize = new Selector<float?> { All = StyleManager.PointSizeNormal },
+ WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FillToParent,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center,
+ TextColor = new Selector<Color>
+ {
+ Normal = new Color(0.22f, 0.22f, 0.22f, 1),
+ Pressed = new Color(0.11f, 0.11f, 0.11f, 1),
+ Disabled = new Color(0.66f, 0.66f, 0.66f, 1)
+ },
+ Text = "Button",
+ }
+ };
+ }
+
+ protected override ButtonStyle GetCheckBoxStyle()
+ {
+ return new ButtonStyle
+ {
+ Size = new Size(30, 30),
+ Icon = new ImageViewStyle
+ {
+ WidthResizePolicy = ResizePolicyType.DimensionDependency,
+ HeightResizePolicy = ResizePolicyType.SizeRelativeToParent,
+ SizeModeFactor = new Vector3(1, 1, 1),
+ Opacity = new Selector<float?>
+ {
+ Normal = 1.0f,
+ Selected = 1.0f,
+ Disabled = 0.4f,
+ DisabledSelected = 0.4f
+ },
+ BackgroundImage = new Selector<string>
+ {
+ Normal = StyleManager.GetFrameworkResourcePath("nui_component_default_checkbox_bg_n.png"),
+ Pressed = StyleManager.GetFrameworkResourcePath("nui_component_default_checkbox_bg_p.png"),
+ Selected = StyleManager.GetFrameworkResourcePath("nui_component_default_checkbox_bg_p.png"),
+ Disabled = StyleManager.GetFrameworkResourcePath("nui_component_default_checkbox_bg_n.png"),
+ DisabledSelected = StyleManager.GetFrameworkResourcePath("nui_component_default_checkbox_bg_p.png"),
+ },
+ ResourceUrl = new Selector<string>
+ {
+ Normal = "",
+ Pressed = "",
+ Selected = StyleManager.GetFrameworkResourcePath("nui_component_default_checkbox_s.png"),
+ Disabled = "",
+ DisabledSelected = StyleManager.GetFrameworkResourcePath("nui_component_default_checkbox_s.png"),
+ }
+ },
+ Text = new TextLabelStyle
+ {
+ PointSize = new Selector<float?> { All = StyleManager.PointSizeNormal },
+ WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FillToParent,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center,
+ TextColor = new Selector<Color>
+ {
+ Normal = new Color(0.22f, 0.22f, 0.22f, 1),
+ Pressed = new Color(0.11f, 0.11f, 0.11f, 1),
+ Disabled = new Color(0.66f, 0.66f, 0.66f, 1)
+ }
+ }
+ };
+ }
+
+ protected override DropDownStyle GetDropDownStyle()
+ {
+ return new DropDownStyle
+ {
+ Position = new Position(50, 50),
+ Button = new ButtonStyle
+ {
+ ParentOrigin = ParentOrigin.TopLeft,
+ PivotPoint = PivotPoint.TopLeft,
+ BackgroundImage = new Selector<string>
+ {
+ Normal = StyleManager.GetFrameworkResourcePath("nui_component_default_checkbox_bg_n.png"),
+ Pressed = StyleManager.GetFrameworkResourcePath("nui_component_default_checkbox_bg_p.png")
+ },
+ BackgroundImageBorder = (Rectangle)6,
+ Text = new TextLabelStyle
+ {
+ Text = "Select an item",
+ PointSize = StyleManager.PointSizeNormal,
+ TextColor = Color.Black,
+ },
+ Icon = new ImageViewStyle
+ {
+ Size = new Size(28, 28),
+ ResourceUrl = StyleManager.GetFrameworkResourcePath("nui_component_default_dropdown_button_icon.png"),
+ },
+ IconRelativeOrientation = Button.IconOrientation.Right,
+ IconPadding = 6,
+ },
+ ListBackgroundImage = new ImageViewStyle
+ {
+ ResourceUrl = StyleManager.GetFrameworkResourcePath("nui_component_default_dropdown_list_bg.png"),
+ Border = (Rectangle)6,
+ Size = new Size(280, 360),
+ },
+ SpaceBetweenButtonTextAndIcon = 10,
+ ListPadding = 5,
+ };
+ }
+
+ protected override DropDownItemStyle GetDropDownItemStyle()
+ {
+ return new DropDownItemStyle
+ {
+ Size = new Size(360, 50),
+ BackgroundColor = new Selector<Color>
+ {
+ Pressed = new Color(0.05f, 0.63f, 0.9f, 1),
+ Selected = new Color(0.8f, 0.8f, 0.8f, 1),
+ Normal = new Color(1, 1, 1, 1),
+ },
+ Text = new TextLabelStyle
+ {
+ PointSize = StyleManager.PointSizeNormal,
+ Position = new Position(28, 0),
+ Text = "List item",
+ },
+ };
+ }
+
+ protected override PopupStyle GetPopupStyle()
+ {
+ return new PopupStyle
+ {
+ Size = new Size(500, 280),
+ BackgroundColor = new Color(0.9f, 0.9f, 0.9f, 1),
+ ImageShadow = new ImageShadow
+ {
+ Url = StyleManager.GetFrameworkResourcePath("nui_component_default_popup_shadow.png"),
+ Border = new Rectangle(24, 24, 24, 24),
+ Extents = new Vector2(48, 48),
+ },
+ Title = new TextLabelStyle
+ {
+ PointSize = 16,
+ TextColor = Color.Black,
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.TopLeft,
+ PivotPoint = Tizen.NUI.PivotPoint.TopLeft,
+ HorizontalAlignment = HorizontalAlignment.Begin,
+ VerticalAlignment = VerticalAlignment.Bottom,
+ Padding = 20,
+ Text = "Title",
+ },
+ Buttons = new ButtonStyle
+ {
+ Size = new Size(0, 80),
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.BottomLeft,
+ PivotPoint = Tizen.NUI.PivotPoint.BottomLeft,
+ BackgroundColor = new Selector<Color>
+ {
+ Normal = new Color(1, 1, 1, 1),
+ Pressed = new Color(1, 1, 1, 0.5f),
+ },
+ Overlay = new ImageViewStyle
+ {
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.Center,
+ PivotPoint = Tizen.NUI.PivotPoint.Center,
+ WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FillToParent,
+ BackgroundColor = new Selector<Color>
+ {
+ Normal = new Color(1.0f, 1.0f, 1.0f, 1.0f),
+ Pressed = new Color(0.0f, 0.0f, 0.0f, 0.1f),
+ Selected = new Color(1.0f, 1.0f, 1.0f, 1.0f),
+ }
+ },
+ Text = new TextLabelStyle
+ {
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.Center,
+ PivotPoint = Tizen.NUI.PivotPoint.Center,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center,
+ TextColor = new Color(0.05f, 0.63f, 0.9f, 1)
+ },
+ },
+ };
+ }
+
+ protected override ProgressStyle GetProgressStyle()
+ {
+ return new ProgressStyle
+ {
+ Size = new Size(200, 5),
+ Track = new ImageViewStyle
+ {
+ BackgroundColor = new Color(0, 0, 0, 0.1f),
+ },
+ Buffer = new ImageViewStyle
+ {
+ BackgroundColor = new Color(0.05f, 0.63f, 0.9f, 0.3f)
+ },
+ Progress = new ImageViewStyle
+ {
+ BackgroundColor = new Color(0.05f, 0.63f, 0.9f, 1)
+ },
+ };
+ }
+
+ protected override ButtonStyle GetRadioButtonStyle()
+ {
+ return new ButtonStyle
+ {
+ Size = new Size(30, 30),
+ Icon = new ImageViewStyle
+ {
+ WidthResizePolicy = ResizePolicyType.DimensionDependency,
+ HeightResizePolicy = ResizePolicyType.SizeRelativeToParent,
+ SizeModeFactor = new Vector3(1, 1, 1),
+ Opacity = new Selector<float?>
+ {
+ Normal = 1.0f,
+ Selected = 1.0f,
+ Disabled = 0.4f,
+ DisabledSelected = 0.4f
+ },
+ BackgroundImage = new Selector<string>
+ {
+ Normal = StyleManager.GetFrameworkResourcePath("nui_component_default_radiobutton_n.png"),
+ Pressed = StyleManager.GetFrameworkResourcePath("nui_component_default_radiobutton_p.png"),
+ Selected = StyleManager.GetFrameworkResourcePath("nui_component_default_radiobutton_s.png"),
+ Disabled = StyleManager.GetFrameworkResourcePath("nui_component_default_radiobutton_n.png"),
+ DisabledSelected = StyleManager.GetFrameworkResourcePath("nui_component_default_radiobutton_s.png"),
+ }
+ },
+ Text = new TextLabelStyle
+ {
+ PointSize = new Selector<float?> { All = StyleManager.PointSizeNormal },
+ WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FillToParent,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center,
+ TextColor = new Selector<Color>
+ {
+ Normal = new Color(0.22f, 0.22f, 0.22f, 1),
+ Pressed = new Color(0.11f, 0.11f, 0.11f, 1),
+ Disabled = new Color(0.66f, 0.66f, 0.66f, 1)
+ }
+ }
+ };
+ }
+
+ protected override SliderStyle GetSliderStyle()
+ {
+ return new SliderStyle
+ {
+ Size = new Size(200, 50),
+ TrackThickness = 5,
+ Track = new ImageViewStyle
+ {
+ BackgroundColor = new Color(0, 0, 0, 0.1f),
+ },
+
+ Progress = new ImageViewStyle
+ {
+ BackgroundColor = new Color(0.05f, 0.63f, 0.9f, 1),
+ },
+
+ Thumb = new ImageViewStyle
+ {
+ Size = new Size(50, 50),
+ Color = new Color("0ea1e6"),
+ ResourceUrl = StyleManager.GetFrameworkResourcePath("nui_component_default_slider_thumb_n.png"),
+ BackgroundImage = new Selector<string>
+ {
+ Normal = "",
+ Pressed = StyleManager.GetFrameworkResourcePath("nui_component_default_slider_thumb_bg_p.png"),
+ }
+ },
+
+ };
+ }
+
+ protected override SwitchStyle GetSwitchStyle()
+ {
+ return new SwitchStyle
+ {
+ Size = new Size(96, 60),
+ Track = new ImageViewStyle
+ {
+ Size = new Size(96, 60),
+ WidthResizePolicy = ResizePolicyType.Fixed,
+ HeightResizePolicy = ResizePolicyType.Fixed,
+ ResourceUrl = new Selector<string>
+ {
+ Normal = StyleManager.GetFrameworkResourcePath("nui_component_default_switch_track_n.png"),
+ Selected = StyleManager.GetFrameworkResourcePath("nui_component_default_switch_track_s.png"),
+ Disabled = StyleManager.GetFrameworkResourcePath("nui_component_default_switch_track_d.png"),
+ DisabledSelected = StyleManager.GetFrameworkResourcePath("nui_component_default_switch_track_ds.png"),
+ },
+ Border = new Rectangle(30, 30, 30, 30),
+ },
+ Thumb = new ImageViewStyle
+ {
+ Size = new Size(60, 60),
+ ResourceUrl = new Selector<string>
+ {
+ Normal = StyleManager.GetFrameworkResourcePath("nui_component_default_switch_thumb_n.png"),
+ Selected = StyleManager.GetFrameworkResourcePath("nui_component_default_switch_thumb_n.png"),
+ Disabled = StyleManager.GetFrameworkResourcePath("nui_component_default_switch_thumb_d.png"),
+ DisabledSelected = StyleManager.GetFrameworkResourcePath("nui_component_default_switch_thumb_d.png"),
+ },
+ },
+ Text = new TextLabelStyle
+ {
+ PointSize = new Selector<float?> { All = StyleManager.PointSizeNormal },
+ WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FillToParent,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center,
+ TextColor = new Selector<Color>
+ {
+ Normal = new Color(0.22f, 0.22f, 0.22f, 1),
+ Pressed = new Color(0.11f, 0.11f, 0.11f, 1),
+ Disabled = new Color(0.66f, 0.66f, 0.66f, 1)
+ }
+ },
+ };
+ }
+
+ protected override TabStyle GetTabStyle()
+ {
+ return new TabStyle
+ {
+ BackgroundColor = Color.Yellow,
+ Size = new Size(480, 80),
+ UnderLine = new ViewStyle
+ {
+ Size = new Size(0, 6),
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.BottomLeft,
+ PivotPoint = Tizen.NUI.PivotPoint.BottomLeft,
+ BackgroundColor = new Color(0.05f, 0.63f, 0.9f, 1),
+ },
+ Text = new TextLabelStyle
+ {
+ PointSize = StyleManager.PointSizeTitle,
+ TextColor = new Selector<Color>
+ {
+ Normal = Color.Black,
+ Selected = new Color(0.05f, 0.63f, 0.9f, 1),
+ },
+ },
+ };
+ }
+
+ protected override ToastStyle GetToastStyle()
+ {
+ return new ToastStyle
+ {
+ WidthResizePolicy = ResizePolicyType.FitToChildren,
+ HeightResizePolicy = ResizePolicyType.FitToChildren,
+ BackgroundColor = new Color(0, 0, 0, 0.8f),
+ Text = new TextLabelStyle()
+ {
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.Center,
+ PivotPoint = Tizen.NUI.PivotPoint.Center,
+ WidthResizePolicy = ResizePolicyType.UseNaturalSize,
+ HeightResizePolicy = ResizePolicyType.UseNaturalSize,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center,
+ TextColor = Color.White,
+ Padding = new Extents(12, 12, 8, 8),
+ }
+ };
+ }
+
+ protected override LoadingStyle GetLoadingStyle()
+ {
+ return new LoadingStyle
+ {
+ LoadingSize = new Size(100, 100)
+ };
+ }
+
+ protected override PaginationStyle GetPaginationStyle()
+ {
+ return new PaginationStyle
+ {
+ IndicatorImageUrl = new Selector<string>()
+ {
+ Normal = StyleManager.GetFrameworkResourcePath("nui_component_default_pagination_normal_dot.png"),
+ Selected = StyleManager.GetFrameworkResourcePath("nui_component_default_pagination_focus_dot.png"),
+ },
+ };
+ }
+ }
+}
return;
}
- var overlayImage = button.OverlayImage;
+ var overlayImage = button.GetCurrentOverlayImage(this);
if (overlayImage == null)
{
--- /dev/null
+/*
+ * Copyright(c) 2020 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.
+ *
+ */
+using System.ComponentModel;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components.Extension;
+
+namespace Tizen.NUI.Components
+{
+ /// <summary>
+ /// Interface that includes styles for all components for a wearable theme
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ internal class WearableTheme : DefaultTheme
+ {
+ internal static new Theme Instance { get; } = new WearableTheme();
+
+ private WearableTheme() : base()
+ {
+ }
+
+ protected override ButtonStyle GetButtonStyle()
+ {
+ return new ButtonStyle
+ {
+ Size = new Size(210, 72),
+ CornerRadius = 36,
+ BackgroundColor = new Selector<Color>
+ {
+ Normal = new Color(0, 42f/255f, 77f/255f, 0.85f),
+ Pressed = new Color(0, 70f/255f, 128f/255f, 0.85f),
+ Disabled = new Color(61f/255f, 61f/255f, 61f/255f, 0.85f),
+ },
+ Text = new TextLabelStyle
+ {
+ FontFamily = "SamsungOne 700",
+ PixelSize = 28,
+ TextColor = new Selector<Color>
+ {
+ Normal = new Color(56f/255f, 164f/255f, 252f/255f, 1),
+ Pressed = new Color(56f/255f, 164f/255f, 252f/255f, 1),
+ Disabled = new Color(1, 1, 1, 0.35f),
+ },
+ Padding = new Extents(20, 20, 0, 0),
+ VerticalAlignment = VerticalAlignment.Center,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ },
+ Opacity = new Selector<float?>
+ {
+ Other = 1.0f,
+ Disabled = 0.3f,
+ }
+ };
+ }
+
+ protected override ButtonStyle GetCheckBoxStyle()
+ {
+ return new LottieButtonStyle
+ {
+ LottieUrl = StyleManager.GetFrameworkResourcePath("nui_wearable_checkbox_icon.json"),
+ PlayRange = new Selector<LottieFrameInfo>
+ {
+ Selected = (0, 18),
+ Normal = (19, 36)
+ },
+ Opacity = new Selector<float?>
+ {
+ Other = 1.0f,
+ Pressed = 0.6f,
+ Disabled = 0.3f,
+ },
+ };
+ }
+
+ protected override ButtonStyle GetRadioButtonStyle()
+ {
+ return new LottieButtonStyle
+ {
+ LottieUrl = StyleManager.GetFrameworkResourcePath("nui_wearable_radiobutton_icon.json"),
+ PlayRange = new Selector<LottieFrameInfo>
+ {
+ Selected = (0, 12),
+ Normal = (13, 25)
+ },
+ Opacity = new Selector<float?>
+ {
+ Other = 1.0f,
+ Pressed = 0.6f,
+ Disabled = 0.3f,
+ },
+ };
+ }
+
+ protected override SwitchStyle GetSwitchStyle()
+ {
+ return new LottieSwitchStyle
+ {
+ LottieUrl = StyleManager.GetFrameworkResourcePath("nui_wearable_switch_icon.json"),
+ PlayRange = new Selector<LottieFrameInfo>
+ {
+ Selected = (0, 18),
+ Normal = (19, 36)
+ },
+ Opacity = new Selector<float?>
+ {
+ Other = 1.0f,
+ Pressed = 0.6f,
+ Disabled = 0.3f,
+ },
+ };
+ }
+
+ protected override LoadingStyle GetLoadingStyle()
+ {
+ return new LoadingStyle
+ {
+ LoadingSize = new Size(360, 360)
+ };
+ }
+
+ protected override PaginationStyle GetPaginationStyle()
+ {
+ return new PaginationStyle
+ {
+ IndicatorImageUrl = new Selector<string>()
+ {
+ Normal = StyleManager.GetFrameworkResourcePath("nui_component_default_pagination_normal_dot.png"),
+ Selected = StyleManager.GetFrameworkResourcePath("nui_component_default_pagination_focus_dot.png"),
+ },
+ };
+ }
+ }
+}
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty IconPaddingProperty = BindableProperty.Create(nameof(IconPadding), typeof(Extents), typeof(ButtonStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((ButtonStyle)bindable).iconPadding = null == newValue ? null : new Extents((Extents)newValue);
+ var buttonStyle = (ButtonStyle)bindable;
+ if (null == buttonStyle.iconPadding) buttonStyle.iconPadding = new Extents(buttonStyle.OnIconPaddingChanged, 0, 0, 0, 0);
+ buttonStyle.iconPadding.CopyFrom(null == newValue ? new Extents() : (Extents)newValue);
},
defaultValueCreator: (bindable) =>
{
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty TextPaddingProperty = BindableProperty.Create(nameof(TextPadding), typeof(Extents), typeof(ButtonStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((ButtonStyle)bindable).textPadding = null == newValue ? null : new Extents((Extents)newValue);
+ var buttonStyle = (ButtonStyle)bindable;
+ if (null == buttonStyle.textPadding) buttonStyle.textPadding = new Extents(buttonStyle.OnTextPaddingChanged, 0, 0, 0, 0);
+ buttonStyle.textPadding.CopyFrom(null == newValue ? new Extents() : (Extents)newValue);
},
defaultValueCreator: (bindable) =>
{
private bool? isSelectable;
private bool? isSelected;
private bool? isEnabled;
- private Button.IconOrientation? iconRelativeOrientation = Button.IconOrientation.Left;
+ private Button.IconOrientation? iconRelativeOrientation;
private Extents iconPadding;
private Extents textPadding;
/// <since_tizen> 8 </since_tizen>
public ButtonStyle() : base()
{
+ InitSubStyle();
}
/// <summary>
/// <since_tizen> 8 </since_tizen>
public ButtonStyle(ButtonStyle style) : base(style)
{
- }
+ if(style == null)
+ {
+ return;
+ }
+ InitSubStyle();
+
+ this.CopyFrom(style);
+ }
/// <summary>
/// Overlay image's Style.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public ImageViewStyle Overlay { get; set; } = new ImageViewStyle();
+ public ImageViewStyle Overlay { get; set; }
/// <summary>
/// Text's Style.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public TextLabelStyle Text { get; set; } = new TextLabelStyle();
+ public TextLabelStyle Text { get; set; }
/// <summary>
/// Icon's Style.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public ImageViewStyle Icon { get; set; } = new ImageViewStyle();
+ public ImageViewStyle Icon { get; set; }
/// <summary>
/// Flag to decide Button can be selected or not.
/// <since_tizen> 8 </since_tizen>
public Extents IconPadding
{
- get => ((Extents)GetValue(IconPaddingProperty)) ?? (iconPadding = new Extents());
+ get
+ {
+ Extents padding = (Extents)GetValue(IconPaddingProperty);
+ return (null != padding) ? padding : iconPadding = new Extents(OnIconPaddingChanged, 0, 0, 0, 0);
+ }
set => SetValue(IconPaddingProperty, value);
}
/// <since_tizen> 8 </since_tizen>
public Extents TextPadding
{
- get => ((Extents)GetValue(TextPaddingProperty)) ?? (textPadding = new Extents());
+ get
+ {
+ Extents padding = (Extents)GetValue(TextPaddingProperty);
+ return (null != padding) ? padding : textPadding = new Extents(OnTextPaddingChanged, 0, 0, 0, 0);
+ }
set => SetValue(TextPaddingProperty, value);
}
{
base.CopyFrom(bindableObject);
- if (bindableObject is ButtonStyle buttonStyle)
+ ButtonStyle buttonStyle = bindableObject as ButtonStyle;
+
+ if (null != buttonStyle)
{
- Overlay.CopyFrom(buttonStyle.Overlay);
- Text.CopyFrom(buttonStyle.Text);
- Icon.CopyFrom(buttonStyle.Icon);
+ if (null != buttonStyle.Overlay)
+ {
+ Overlay?.CopyFrom(buttonStyle.Overlay);
+ }
+
+ if (null != buttonStyle.Text)
+ {
+ Text?.CopyFrom(buttonStyle.Text);
+ }
+
+ if (null != buttonStyle.Icon)
+ {
+ Icon?.CopyFrom(buttonStyle.Icon);
+ }
}
}
base.Dispose(type);
}
+
+ private void InitSubStyle()
+ {
+ Overlay = new ImageViewStyle()
+ {
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.Center,
+ PivotPoint = Tizen.NUI.PivotPoint.Center,
+ WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FillToParent
+ };
+
+ Text = new TextLabelStyle()
+ {
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.Center,
+ PivotPoint = Tizen.NUI.PivotPoint.Center,
+ WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FillToParent,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center
+ };
+
+ Icon = new ImageViewStyle()
+ {
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.Center,
+ PivotPoint = Tizen.NUI.PivotPoint.Center,
+ };
+
+ IconRelativeOrientation = Button.IconOrientation.Left;
+ }
+
+ private void OnIconPaddingChanged(ushort start, ushort end, ushort top, ushort bottom)
+ {
+ IconPadding = new Extents(start, end, top, bottom);
+ }
+
+ private void OnTextPaddingChanged(ushort start, ushort end, ushort top, ushort bottom)
+ {
+ TextPadding = new Extents(start, end, top, bottom);
+ }
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
public ControlStyle() : base()
{
+ InitSubstyle();
}
[EditorBrowsable(EditorBrowsableState.Never)]
public ControlStyle(ControlStyle style) : base(style)
{
+ if(null == style) return;
+
+ this.CopyFrom(style);
}
/// <summary>
disposed = true;
}
+ private void InitSubstyle()
+ {
+ }
+
private void SubStyleCalledEvent(object sender, global::System.EventArgs e)
{
OnPropertyChanged();
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty ListMarginProperty = BindableProperty.Create(nameof(ListMargin), typeof(Extents), typeof(DropDownStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((DropDownStyle)bindable).listMargin = newValue == null ? null : new Extents((Extents)newValue);
+ var dropDownStyle = (DropDownStyle)bindable;
+ if (null == dropDownStyle.listMargin) dropDownStyle.listMargin = new Extents(dropDownStyle.OnListMarginChanged, 0, 0, 0, 0);
+ dropDownStyle.listMargin.CopyFrom(null == newValue ? new Extents() : (Extents)newValue);
},
defaultValueCreator: (bindable) =>
{
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty ListPaddingProperty = BindableProperty.Create(nameof(ListPadding), typeof(Extents), typeof(DropDownStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((DropDownStyle)bindable).listPadding = newValue == null ? null : new Extents((Extents)newValue);
+ var dropDownStyle = (DropDownStyle)bindable;
+ if (null != newValue)
+ {
+ if (null == dropDownStyle.listPadding) dropDownStyle.listPadding = new Extents(dropDownStyle.OnListPaddingChanged, 0, 0, 0, 0);
+ dropDownStyle.listPadding.CopyFrom(null == newValue ? new Extents() : (Extents)newValue);
+ }
},
defaultValueCreator: (bindable) =>
{
[EditorBrowsable(EditorBrowsableState.Never)]
public DropDownStyle(DropDownStyle style) : base(style)
{
+ if(null == style) return;
+
+ this.CopyFrom(style);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public Extents ListMargin
{
- get => ((Extents)GetValue(ListMarginProperty)) ?? (listMargin = new Extents(0, 0, 0, 0));
+ get
+ {
+ Extents tmp = (Extents)GetValue(ListMarginProperty);
+ return (null != tmp) ? tmp : listMargin = new Extents(OnListMarginChanged, 0, 0, 0, 0);
+ }
set => SetValue(ListMarginProperty, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
public Extents ListPadding
{
- get => ((Extents)GetValue(ListPaddingProperty)) ?? (listPadding = new Extents(0, 0, 0, 0));
+ get
+ {
+ Extents tmp = (Extents)GetValue(ListPaddingProperty);
+ return (null != tmp) ? tmp : listPadding = new Extents(OnListPaddingChanged, 0, 0, 0, 0);
+ }
set => SetValue(ListPaddingProperty, value);
}
- /// <inheritdoc/>
+ /// 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 override void CopyFrom(BindableObject bindableObject)
{
base.CopyFrom(bindableObject);
- if (bindableObject is DropDownStyle dropDownStyle)
+ DropDownStyle dropDownStyle = bindableObject as DropDownStyle;
+
+ if (null != dropDownStyle)
{
- Button.CopyFrom(dropDownStyle.Button);
- HeaderText.CopyFrom(dropDownStyle.HeaderText);
- ListBackgroundImage.CopyFrom(dropDownStyle.ListBackgroundImage);
+ Button?.CopyFrom(dropDownStyle.Button);
+ HeaderText?.CopyFrom(dropDownStyle.HeaderText);
+ ListBackgroundImage?.CopyFrom(dropDownStyle.ListBackgroundImage);
+ SpaceBetweenButtonTextAndIcon = dropDownStyle.SpaceBetweenButtonTextAndIcon;
+ ListRelativeOrientation = dropDownStyle.ListRelativeOrientation;
+ ListMargin?.CopyFrom(dropDownStyle.ListMargin);
+ SelectedItemIndex = dropDownStyle.SelectedItemIndex;
+ ListPadding?.CopyFrom(dropDownStyle.ListPadding);
}
}
+
+ private void OnListMarginChanged(ushort start, ushort end, ushort top, ushort bottom)
+ {
+ ListMargin = new Extents(start, end, top, bottom);
+ }
+
+ private void OnListPaddingChanged(ushort start, ushort end, ushort top, ushort bottom)
+ {
+ ListPadding = new Extents(start, end, top, bottom);
+ }
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public DropDownItemStyle(DropDownItemStyle style) : base(style)
{
+ if(null == style) return;
+
+ this.CopyFrom(style);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsSelected { get; set; }
- /// <inheritdoc/>
+ /// 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 override void CopyFrom(BindableObject bindableObject)
{
base.CopyFrom(bindableObject);
- if (bindableObject is DropDownItemStyle dropDownItemStyle)
+ DropDownItemStyle dropDownItemStyle = bindableObject as DropDownItemStyle;
+
+ if (null != dropDownItemStyle)
{
- Text.CopyFrom(dropDownItemStyle.Text);
- Icon.CopyFrom(dropDownItemStyle.Icon);
- CheckImage.CopyFrom(dropDownItemStyle.CheckImage);
+ Text?.CopyFrom(dropDownItemStyle.Text);
+ Icon?.CopyFrom(dropDownItemStyle.Icon);
+ CheckImage?.CopyFrom(dropDownItemStyle.CheckImage);
CheckImageGapToBoundary = dropDownItemStyle.CheckImageGapToBoundary;
IsSelected = dropDownItemStyle.IsSelected;
}
/// <since_tizen> 8 </since_tizen>
public class LoadingStyle : ControlStyle
{
- /// <summary>The FrameRateSelector bindable property.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static readonly BindableProperty FrameRateSelectorProperty = BindableProperty.Create("FrameRateSelector", typeof(Selector<int?>), typeof(LoadingStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
- {
- ((LoadingStyle)bindable).frameRate = ((Selector<int?>)newValue)?.Clone();
- },
- defaultValueCreator: (bindable) =>
- {
- return ((LoadingStyle)bindable).frameRate;
- });
-
- /// <summary>The LoadingSize bindable property.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static readonly BindableProperty LoadingSizeProperty = BindableProperty.Create(nameof(LoadingSize), typeof(Size), typeof(LoadingStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
- {
- ((LoadingStyle)bindable).loadingSize = newValue == null ? null : new Size((Size)newValue);
- },
- defaultValueCreator: (bindable) =>
- {
- return ((LoadingStyle)bindable).loadingSize;
- });
-
- /// <summary>The Images bindable property.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static readonly BindableProperty ImagesProperty = BindableProperty.Create(nameof(Images), typeof(string[]), typeof(LoadingStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
- {
- ((LoadingStyle)bindable).images = (string[])((string[])newValue)?.Clone();
- },
- defaultValueCreator: (bindable) =>
- {
- return ((LoadingStyle)bindable).images;
- });
-
- private Selector<int?> frameRate;
- private Size loadingSize;
- private string[] images;
-
static LoadingStyle() { }
/// <summary>
/// <since_tizen> 8 </since_tizen>
public LoadingStyle(LoadingStyle style) : base(style)
{
+ if(null == style)
+ {
+ return;
+ }
+ this.CopyFrom(style);
}
/// <summary>
/// Gets or sets loading image resources.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public string[] Images
- {
- get => (string[])GetValue(ImagesProperty);
- set => SetValue(ImagesProperty, value);
- }
+ public string[] Images { get; set; }
/// <summary>
/// Gets or sets loading image size.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public Size LoadingSize
- {
- get => (Size)GetValue(LoadingSizeProperty);
- set => SetValue(LoadingSizeProperty, value);
- }
+ public Size LoadingSize { get; set; }
/// <summary>
/// Gets or sets loading frame per second.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public Selector<int?> FrameRate
- {
- get => (Selector<int?>)GetValue(FrameRateSelectorProperty);
- set => SetValue(FrameRateSelectorProperty, value);
- }
+ public Selector<int?> FrameRate { get; set; } = new Selector<int?>();
/// <summary>
/// Style's clone function.
public override void CopyFrom(BindableObject bindableObject)
{
base.CopyFrom(bindableObject);
+
+ LoadingStyle loadingStyle = bindableObject as LoadingStyle;
+
+ if (null != loadingStyle)
+ {
+ if (null != loadingStyle.FrameRate)
+ {
+ FrameRate?.Clone(loadingStyle.FrameRate);
+ }
+ if (null != loadingStyle.LoadingSize)
+ {
+ LoadingSize = loadingStyle.LoadingSize;
+ }
+ if (null != loadingStyle.Images)
+ {
+ Images = loadingStyle.Images;
+ }
+ }
}
}
}
/// <since_tizen> 8 </since_tizen>
public class PaginationStyle : ControlStyle
{
- /// <summary>The IndicatorSize bindable property.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static readonly BindableProperty IndicatorSizeProperty = BindableProperty.Create(nameof(IndicatorSize), typeof(Size), typeof(PaginationStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
- {
- ((PaginationStyle)bindable).indicatorSize = newValue == null ? null : new Size((Size)newValue);
- },
- defaultValueCreator: (bindable) =>
- {
- return ((PaginationStyle)bindable).indicatorSize;
- });
-
- /// <summary>The IndicatorImageUrlSelector bindable property.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static readonly BindableProperty IndicatorImageUrlSelectorProperty = BindableProperty.Create("IndicatorImageUrlSelector", typeof(Selector<string>), typeof(PaginationStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
- {
- ((PaginationStyle)bindable).indicatorImageUrl = ((Selector<string>)newValue)?.Clone();
- },
- defaultValueCreator: (bindable) =>
- {
- return ((PaginationStyle)bindable).indicatorImageUrl;
- });
-
- /// <summary>The IndicatorSpacing bindable property.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static readonly BindableProperty IndicatorSpacingProperty = BindableProperty.Create(nameof(IndicatorSpacing), typeof(int?), typeof(PaginationStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
- {
- ((PaginationStyle)bindable).indicatorSpacing = (int?)newValue;
- },
- defaultValueCreator: (bindable) =>
- {
- return ((PaginationStyle)bindable).indicatorSpacing;
- });
-
- private Size indicatorSize;
- private Selector<string> indicatorImageUrl;
- private int? indicatorSpacing;
-
static PaginationStyle() { }
/// <summary>
/// <since_tizen> 8 </since_tizen>
public PaginationStyle(PaginationStyle style) : base(style)
{
+ if (null == style) return;
+
+ this.CopyFrom(style);
}
/// <summary>
/// Gets or sets the size of the indicator.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public Size IndicatorSize
- {
- get => (Size)GetValue(IndicatorSizeProperty);
- set => SetValue(IndicatorSizeProperty, value);
- }
+ public Size IndicatorSize { get; set; }
/// <summary>
/// Gets or sets the resource of indicator.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public Selector<string> IndicatorImageUrl
- {
- get => (Selector<string>)GetValue(IndicatorImageUrlSelectorProperty);
- set => SetValue(IndicatorImageUrlSelectorProperty, value);
- }
+ public Selector<string> IndicatorImageUrl { get; set; } = new Selector<string>();
/// <summary>
/// Gets or sets the space of the indicator.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public int IndicatorSpacing
- {
- get => ((int?)GetValue(IndicatorSpacingProperty)) ?? 0;
- set => SetValue(IndicatorSpacingProperty, value);
- }
+ public int IndicatorSpacing { get; set; }
/// <summary>
/// Retrieves a copy of PaginationStyle.
public override void CopyFrom(BindableObject bindableObject)
{
base.CopyFrom(bindableObject);
+
+ PaginationStyle paginationStyle = bindableObject as PaginationStyle;
+ if (null != paginationStyle)
+ {
+ if (null != paginationStyle.IndicatorSize)
+ {
+ IndicatorSize = new Size(paginationStyle.IndicatorSize.Width, paginationStyle.IndicatorSize.Height);
+ }
+ if (null != paginationStyle.IndicatorImageUrl)
+ {
+ IndicatorImageUrl?.Clone(paginationStyle.IndicatorImageUrl);
+ }
+ IndicatorSpacing = paginationStyle.IndicatorSpacing;
+ }
}
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
public PopupStyle() : base()
{
+ InitSubStyle();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public PopupStyle(PopupStyle style) : base(style)
{
+ Title = new TextLabelStyle();
+ Buttons = new ButtonStyle();
+ this.CopyFrom(style);
}
/// <summary>
/// Title Text's style.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public TextLabelStyle Title { get; set; } = new TextLabelStyle();
+ public TextLabelStyle Title { get; set; }
/// <summary>
/// Popup button's style.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public ButtonStyle Buttons { get; set; } = new ButtonStyle();
+ public ButtonStyle Buttons { get; set; }
- /// <inheritdoc/>
+ /// <summary>
+ /// Style's clone function.
+ /// </summary>
+ /// <param name="bindableObject">The style that need to copy.</param>
[EditorBrowsable(EditorBrowsableState.Never)]
public override void CopyFrom(BindableObject bindableObject)
{
base.CopyFrom(bindableObject);
- if (bindableObject is PopupStyle popupStyle)
+ PopupStyle popupStyle = bindableObject as PopupStyle;
+ if (popupStyle != null)
{
- Title.CopyFrom(popupStyle.Title);
- Buttons.CopyFrom(popupStyle.Buttons);
+ if (popupStyle.Title != null)
+ {
+ Title?.CopyFrom(popupStyle.Title);
+ }
+
+ if (popupStyle.Buttons != null)
+ {
+ Buttons?.CopyFrom(popupStyle.Buttons);
+ }
}
}
+
+ private void InitSubStyle()
+ {
+ // TODO Apply proper shadow as a default for a Popup
+ BoxShadow = new Shadow()
+ {
+ BlurRadius = 5,
+ Offset = new Vector2(5, 5),
+ };
+
+ Title = new TextLabelStyle()
+ {
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.TopLeft,
+ PivotPoint = Tizen.NUI.PivotPoint.TopLeft,
+ HorizontalAlignment = HorizontalAlignment.Begin,
+ VerticalAlignment = VerticalAlignment.Bottom
+ };
+
+ Buttons = new ButtonStyle()
+ {
+ Size = new Size(0, 0),
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.BottomLeft,
+ PivotPoint = Tizen.NUI.PivotPoint.BottomLeft,
+ Overlay = new ImageViewStyle()
+ {
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.Center,
+ PivotPoint = Tizen.NUI.PivotPoint.Center,
+ WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FillToParent
+ },
+
+ Text = new TextLabelStyle()
+ {
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.Center,
+ PivotPoint = Tizen.NUI.PivotPoint.Center,
+ WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FillToParent,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center
+ }
+ };
+ }
}
}
/// <since_tizen> 8 </since_tizen>
public ProgressStyle() : base()
{
+ InitSubStyle();
}
/// <summary>
/// <since_tizen> 8 </since_tizen>
public ProgressStyle(ProgressStyle style) : base(style)
{
+ if (null == style) return;
+
+ InitSubStyle();
+
+ this.CopyFrom(style);
}
/// <summary>
/// Get or set track image.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public ImageViewStyle Track { get; set; } = new ImageViewStyle();
+ public ImageViewStyle Track { get; set; }
/// <summary>
/// Get or set progress image.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public ImageViewStyle Progress { get; set; } = new ImageViewStyle();
+ public ImageViewStyle Progress { get; set; }
/// <summary>
/// Get or set buffer image.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public ImageViewStyle Buffer { get; set; } = new ImageViewStyle();
+ public ImageViewStyle Buffer { get; set; }
/// <summary>
/// Style's clone function.
{
base.CopyFrom(bindableObject);
- if (bindableObject is ProgressStyle progressStyle)
+ ProgressStyle progressStyle = bindableObject as ProgressStyle;
+
+ if (null != progressStyle)
{
- Track.CopyFrom(progressStyle.Track);
- Progress.CopyFrom(progressStyle.Progress);
- Buffer.CopyFrom(progressStyle.Buffer);
+ if (null != progressStyle.Track)
+ {
+ Track?.CopyFrom(progressStyle.Track);
+ }
+
+ if (null != progressStyle.Progress)
+ {
+ Progress?.CopyFrom(progressStyle.Progress);
+ }
+
+ if (null != progressStyle.Buffer)
+ {
+ Buffer?.CopyFrom(progressStyle.Buffer);
+ }
}
}
+
+ private void InitSubStyle()
+ {
+ Track = new ImageViewStyle()
+ {
+ WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FillToParent,
+ PositionUsesPivotPoint = true,
+ ParentOrigin = NUI.ParentOrigin.TopLeft,
+ PivotPoint = NUI.PivotPoint.TopLeft
+ };
+
+ Progress = new ImageViewStyle()
+ {
+ WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FillToParent,
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.TopLeft,
+ PivotPoint = Tizen.NUI.PivotPoint.TopLeft
+ };
+
+ Buffer = new ImageViewStyle()
+ {
+ WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FillToParent,
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.TopLeft,
+ PivotPoint = Tizen.NUI.PivotPoint.TopLeft
+ };
+ }
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty TrackColorProperty = BindableProperty.Create(nameof(TrackColor), typeof(Color), typeof(ScrollbarStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((ScrollbarStyle)bindable).trackColor = new Color((Color)newValue);
+ ((ScrollbarStyle)bindable).trackColor = (Color)newValue;
},
defaultValueCreator: (bindable) =>
{
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty ThumbColorProperty = BindableProperty.Create(nameof(ThumbColor), typeof(Color), typeof(ScrollbarStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((ScrollbarStyle)bindable).thumbColor = new Color((Color)newValue);
+ ((ScrollbarStyle)bindable).thumbColor = (Color)newValue;
},
defaultValueCreator: (bindable) =>
{
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty TrackPaddingProperty = BindableProperty.Create(nameof(TrackPadding), typeof(Extents), typeof(ScrollbarStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((ScrollbarStyle)bindable).trackPadding = new Extents((Extents)newValue);
+ ((ScrollbarStyle)bindable).trackPadding = (Extents)newValue;
},
defaultValueCreator: (bindable) =>
{
[EditorBrowsable(EditorBrowsableState.Never)]
public ScrollbarStyle() : base()
{
+ Initialize();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public ScrollbarStyle(ScrollbarStyle style) : base(style)
{
+ this.CopyFrom(style);
}
/// <summary>
}
#endregion Properties
+
+
+ #region Methods
+
+ /// <inheritdoc/>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public override void CopyFrom(BindableObject bindableObject)
+ {
+ base.CopyFrom(bindableObject);
+
+ var style = bindableObject as ScrollbarStyle;
+
+ if (null != style)
+ {
+ TrackThickness = style.TrackThickness;
+ ThumbThickness = style.ThumbThickness;
+ TrackColor = style.TrackColor;
+ ThumbColor = style.ThumbColor;
+ TrackPadding = style.TrackPadding;
+ }
+ }
+
+ private void Initialize()
+ {
+ TrackThickness = 6.0f;
+ ThumbThickness = 6.0f;
+ TrackColor = new Color(1.0f, 1.0f, 1.0f, 0.15f);
+ ThumbColor = new Color(0.6f, 0.6f, 0.6f, 1.0f);
+ TrackPadding = 4;
+ WidthResizePolicy = ResizePolicyType.FillToParent;
+ HeightResizePolicy = ResizePolicyType.FillToParent;
+ }
+
+ #endregion Methods
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty TrackPaddingProperty = BindableProperty.Create(nameof(TrackPadding), typeof(Extents), typeof(SliderStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((SliderStyle)bindable).trackPadding = newValue == null ? null : new Extents((Extents)newValue);
+ var instance = (SliderStyle)bindable;
+ if (newValue != null)
+ {
+ if (null == instance.trackPadding) instance.trackPadding = new Extents(instance.OnTrackPaddingChanged, 0, 0, 0, 0);
+ instance.trackPadding.CopyFrom(null == newValue ? new Extents() : (Extents)newValue);
+ }
},
defaultValueCreator: (bindable) =>
{
return instance.trackPadding;
});
- private IndicatorType? privateIndicatorType = Slider.IndicatorType.None;
+ private IndicatorType? privateIndicatorType;
private uint? privateTrackThickness;
private uint? privateSpaceBetweenTrackAndIndicator;
private Extents trackPadding;
/// <since_tizen> 8 </since_tizen>
public SliderStyle() : base()
{
+ IndicatorType = Slider.IndicatorType.None;
+ InitSubStyle();
}
/// <summary>
/// <since_tizen> 8 </since_tizen>
public SliderStyle(SliderStyle style) : base(style)
{
+ if(style == null)
+ {
+ return;
+ }
+
+ InitSubStyle();
+
+ this.CopyFrom(style);
+
+ IndicatorType = style.IndicatorType;
}
/// <summary>
/// Get or set background track.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public ImageViewStyle Track { get; set; } = new ImageViewStyle();
+ public ImageViewStyle Track { get; set; }
/// <summary>
/// Get or set slided track.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public ImageViewStyle Progress { get; set; } = new ImageViewStyle();
+ public ImageViewStyle Progress { get; set; }
/// <summary>
/// Get or set thumb.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public ImageViewStyle Thumb { get; set; } = new ImageViewStyle();
+ public ImageViewStyle Thumb { get; set; }
/// <summary>
/// Get or set low indicator image.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public ImageViewStyle LowIndicatorImage { get; set; } = new ImageViewStyle();
+ public ImageViewStyle LowIndicatorImage { get; set; }
/// <summary>
/// Get or set high indicator image.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public ImageViewStyle HighIndicatorImage { get; set; } = new ImageViewStyle();
+ public ImageViewStyle HighIndicatorImage { get; set; }
/// <summary>
/// Get or set low indicator text.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public TextLabelStyle LowIndicator { get; set; } = new TextLabelStyle();
+ public TextLabelStyle LowIndicator { get; set; }
/// <summary>
/// Get or set high indicator text.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public TextLabelStyle HighIndicator { get; set; } = new TextLabelStyle();
+ public TextLabelStyle HighIndicator { get; set; }
/// <summary>
/// Get or set Indicator type
/// <since_tizen> 8 </since_tizen>
public Extents TrackPadding
{
- get => ((Extents)GetValue(TrackPaddingProperty)) ?? (trackPadding = new Extents(0, 0, 0, 0));
+ get
+ {
+ Extents tmp = (Extents)GetValue(TrackPaddingProperty);
+ return (null != tmp) ? tmp : trackPadding = new Extents(OnTrackPaddingChanged, 0, 0, 0, 0);
+ }
set => SetValue(TrackPaddingProperty, value);
}
{
base.CopyFrom(bindableObject);
- if (bindableObject is SliderStyle sliderStyle)
+ SliderStyle sliderStyle = bindableObject as SliderStyle;
+
+ if (null != sliderStyle)
{
- Track.CopyFrom(sliderStyle.Track);
- Progress.CopyFrom(sliderStyle.Progress);
- Thumb.CopyFrom(sliderStyle.Thumb);
- LowIndicatorImage.CopyFrom(sliderStyle.LowIndicatorImage);
- HighIndicatorImage.CopyFrom(sliderStyle.HighIndicatorImage);
- LowIndicator.CopyFrom(sliderStyle.LowIndicator);
- HighIndicator.CopyFrom(sliderStyle.HighIndicator);
+ if (sliderStyle.Track != null)
+ {
+ Track?.CopyFrom(sliderStyle.Track);
+ }
+
+ if (sliderStyle.Progress != null)
+ {
+ Progress?.CopyFrom(sliderStyle.Progress);
+ }
+
+ if (sliderStyle.Thumb != null)
+ {
+ Thumb?.CopyFrom(sliderStyle.Thumb);
+ }
+
+ if (sliderStyle.LowIndicatorImage != null)
+ {
+ LowIndicatorImage?.CopyFrom(sliderStyle.LowIndicatorImage);
+ }
+
+ if (sliderStyle.HighIndicatorImage != null)
+ {
+ HighIndicatorImage?.CopyFrom(sliderStyle.HighIndicatorImage);
+ }
+
+ if (sliderStyle.LowIndicator != null)
+ {
+ LowIndicator?.CopyFrom(sliderStyle.LowIndicator);
+ }
+
+ if (sliderStyle.HighIndicator != null)
+ {
+ HighIndicator?.CopyFrom(sliderStyle.HighIndicator);
+ }
+
+ if (sliderStyle.TrackThickness != null)
+ {
+ TrackThickness = sliderStyle.TrackThickness;
+ }
+
+ if (sliderStyle.TrackPadding != null)
+ {
+ TrackPadding = sliderStyle.TrackPadding;
+ }
}
}
base.Dispose(type);
}
+
+ private void InitSubStyle()
+ {
+ Track = new ImageViewStyle();
+ Progress = new ImageViewStyle();
+ Thumb = new ImageViewStyle();
+ LowIndicatorImage = new ImageViewStyle();
+ HighIndicatorImage = new ImageViewStyle();
+ LowIndicator = new TextLabelStyle();
+ HighIndicator = new TextLabelStyle();
+ }
+
+ private void OnTrackPaddingChanged(ushort start, ushort end, ushort top, ushort bottom)
+ {
+ TrackPadding = new Extents(start, end, top, bottom);
+ }
}
}
/// <since_tizen> 8 </since_tizen>
public SwitchStyle() : base()
{
+ InitSubStyle();
}
/// <summary>
/// <since_tizen> 8 </since_tizen>
public SwitchStyle(SwitchStyle style) : base(style)
{
+ if(null == style)
+ {
+ return;
+ }
+
+ IsSelectable = true;
+ Track = new ImageViewStyle();
+ Thumb = new ImageViewStyle();
+
+ this.CopyFrom(style);
}
/// <summary>
/// Thumb image's style.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public ImageViewStyle Thumb { get; set; } = new ImageViewStyle();
+ public ImageViewStyle Thumb { get; set; }
/// <summary>
/// Track image's style.
/// </summary>
/// <since_tizen> 8 </since_tizen>
- public ImageViewStyle Track { get; set; } = new ImageViewStyle();
+ public ImageViewStyle Track { get; set; }
/// <summary>
/// Style's clone function.
{
base.CopyFrom(bindableObject);
- if (bindableObject is SwitchStyle switchStyle)
+ SwitchStyle switchStyle = bindableObject as SwitchStyle;
+
+ if (null != switchStyle)
{
- Track.CopyFrom(switchStyle.Track);
- Thumb.CopyFrom(switchStyle.Thumb);
+ if (null != switchStyle.Track)
+ {
+ Track?.CopyFrom(switchStyle.Track);
+ }
+
+ if (null != switchStyle.Thumb)
+ {
+ Thumb?.CopyFrom(switchStyle.Thumb);
+ }
}
}
{
return new SlidingSwitchExtension();
}
+
+ private void InitSubStyle()
+ {
+ IsSelectable = true;
+ Track = new ImageViewStyle()
+ {
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.CenterLeft,
+ PivotPoint = Tizen.NUI.PivotPoint.CenterLeft,
+ WidthResizePolicy = ResizePolicyType.FillToParent,
+ HeightResizePolicy = ResizePolicyType.FillToParent
+ };
+
+ Thumb = new ImageViewStyle()
+ {
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.CenterLeft,
+ PivotPoint = Tizen.NUI.PivotPoint.CenterLeft,
+ WidthResizePolicy = ResizePolicyType.Fixed,
+ HeightResizePolicy = ResizePolicyType.Fixed
+ };
+ }
}
}
ItemPadding = new Extents(0, 0, 0, 0);
UseTextNaturalSize = false;
ItemSpace = 0;
+
+ UnderLine = new ViewStyle();
+ Text = new TextLabelStyle();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public TabStyle(TabStyle style) : base(style)
{
+ UnderLine = new ViewStyle();
+ Text = new TextLabelStyle();
+
+ if (null == style)
+ {
+ return;
+ }
+
+ if (style.UnderLine != null)
+ {
+ UnderLine?.CopyFrom(style.UnderLine);
+ }
+
+ if (style.Text != null)
+ {
+ Text?.CopyFrom(style.Text);
+ }
+
+ if (style.ItemPadding != null)
+ {
+ ItemPadding = new Extents(style.ItemPadding.Start, style.ItemPadding.End, style.ItemPadding.Top, style.ItemPadding.Bottom);
+ }
+ else
+ {
+ ItemPadding = new Extents(0, 0, 0, 0);
+ }
+ ItemSpace = style.ItemSpace;
+ UseTextNaturalSize = style.UseTextNaturalSize;
}
/// <summary>
/// UnderLine's style.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public ViewStyle UnderLine { get; set; } = new ViewStyle();
+ public ViewStyle UnderLine { get; set; }
/// <summary>
/// Text's style.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public TextLabelStyle Text { get; set; } = new TextLabelStyle();
+ public TextLabelStyle Text { get; set; }
/// <summary>
/// Flag to decide if item is fill with item text's natural width.
[EditorBrowsable(EditorBrowsableState.Never)]
public Extents ItemPadding { get; set; }
- /// <inheritdoc/>
+ /// <summary>
+ /// Style's clone function.
+ /// </summary>
+ /// <param name="bindableObject">The style that need to copy.</param>
[EditorBrowsable(EditorBrowsableState.Never)]
public override void CopyFrom(BindableObject bindableObject)
{
base.CopyFrom(bindableObject);
+ TabStyle tabStyle = bindableObject as TabStyle;
- if (bindableObject is TabStyle tabStyle)
+ if (null != tabStyle)
{
- UnderLine.CopyFrom(tabStyle.UnderLine);
- Text.CopyFrom(tabStyle.Text);
- ItemPadding = tabStyle.ItemPadding == null ? null : new Extents(tabStyle.ItemPadding);
+ if (null != tabStyle.ItemPadding)
+ {
+ ItemPadding?.CopyFrom(tabStyle.ItemPadding);
+ }
+
ItemSpace = tabStyle.ItemSpace;
UseTextNaturalSize = tabStyle.UseTextNaturalSize;
+
+ if (null != tabStyle.UnderLine)
+ {
+ UnderLine?.CopyFrom(tabStyle.UnderLine);
+ }
+
+ if (null != tabStyle.Text)
+ {
+ Text?.CopyFrom(tabStyle.Text);
+ }
}
}
}
--- /dev/null
+/*
+ * Copyright(c) 2020 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.
+ *
+ */
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using Tizen.NUI.BaseComponents;
+
+namespace Tizen.NUI.Components
+{
+ /// <summary>
+ /// Interface that includes styles for all components for a theme
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ internal abstract class Theme
+ {
+ private Dictionary<Type, ComponentStyleGetter> styleMap;
+
+ protected Theme()
+ {
+ styleMap = new Dictionary<Type, ComponentStyleGetter>();
+ styleMap.Add(typeof(Button), GetButtonStyle);
+ styleMap.Add(typeof(CheckBox), GetCheckBoxStyle);
+ styleMap.Add(typeof(DropDown), GetDropDownStyle);
+ styleMap.Add(typeof(DropDown.DropDownDataItem), GetDropDownItemStyle);
+ styleMap.Add(typeof(Popup), GetPopupStyle);
+ styleMap.Add(typeof(Progress), GetProgressStyle);
+ styleMap.Add(typeof(RadioButton), GetRadioButtonStyle);
+ styleMap.Add(typeof(Slider), GetSliderStyle);
+ styleMap.Add(typeof(Switch), GetSwitchStyle);
+ styleMap.Add(typeof(Tab), GetTabStyle);
+ styleMap.Add(typeof(Toast), GetToastStyle);
+ styleMap.Add(typeof(Loading), GetLoadingStyle);
+ styleMap.Add(typeof(Pagination), GetPaginationStyle);
+ }
+
+ internal delegate ViewStyle ComponentStyleGetter();
+
+ internal ViewStyle GetComponentStyle(Type type)
+ {
+ return styleMap.ContainsKey(type) ? styleMap[type]() : null;
+ }
+
+ internal void OverwriteComponentStyle(Type type, ComponentStyleGetter styleGetter)
+ {
+ styleMap.Add(typeof(Toast), GetToastStyle);
+ }
+
+ protected abstract ButtonStyle GetButtonStyle();
+
+ protected abstract ButtonStyle GetCheckBoxStyle();
+
+ protected abstract DropDownStyle GetDropDownStyle();
+
+ protected abstract DropDownItemStyle GetDropDownItemStyle();
+
+ protected abstract PopupStyle GetPopupStyle();
+
+ protected abstract ProgressStyle GetProgressStyle();
+
+ protected abstract ButtonStyle GetRadioButtonStyle();
+
+ protected abstract SliderStyle GetSliderStyle();
+
+ protected abstract SwitchStyle GetSwitchStyle();
+
+ protected abstract TabStyle GetTabStyle();
+
+ protected abstract ToastStyle GetToastStyle();
+
+ protected abstract LoadingStyle GetLoadingStyle();
+
+ protected abstract PaginationStyle GetPaginationStyle();
+ }
+}
[EditorBrowsable(EditorBrowsableState.Never)]
public class ToastStyle : ControlStyle
{
- /// <summary>The Duration bindable property.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static readonly BindableProperty DurationProperty = BindableProperty.Create(nameof(Duration), typeof(uint?), typeof(ToastStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
- {
- ((ToastStyle)bindable).duration = (uint?)newValue;
- },
- defaultValueCreator: (bindable) =>
- {
- return ((ToastStyle)bindable).duration;
- });
-
- private uint? duration;
-
static ToastStyle() { }
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public ToastStyle() : base()
{
+ InitSubStyle();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public ToastStyle(ToastStyle style) : base(style)
{
+ InitSubStyle();
+ this.CopyFrom(style);
}
/// <summary>
/// Gets or sets toast show duration time.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public uint? Duration
- {
- get => (uint?)GetValue(DurationProperty);
- set => SetValue(DurationProperty, value);
- }
+ public uint? Duration { get; set; }
/// <summary>
/// Text's Style.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public TextLabelStyle Text { get; set; } = new TextLabelStyle();
+ public TextLabelStyle Text { get; set; }
- /// <inheritdoc/>
+ /// <summary>
+ /// Style's clone function.
+ /// </summary>
+ /// <param name="bindableObject">The style that need to copy.</param>
[EditorBrowsable(EditorBrowsableState.Never)]
public override void CopyFrom(BindableObject bindableObject)
{
base.CopyFrom(bindableObject);
-
- if (bindableObject is ToastStyle toastStyle)
+ ToastStyle toastStyle = bindableObject as ToastStyle;
+ if (toastStyle != null)
{
- Text.CopyFrom(toastStyle.Text);
+ if (null != toastStyle.Text)
+ {
+ Text?.CopyFrom(toastStyle.Text);
+ }
+ Duration = toastStyle.Duration;
}
}
+
+ private void InitSubStyle()
+ {
+ Text = new TextLabelStyle()
+ {
+ PositionUsesPivotPoint = true,
+ ParentOrigin = Tizen.NUI.ParentOrigin.Center,
+ PivotPoint = Tizen.NUI.PivotPoint.Center,
+ WidthResizePolicy = ResizePolicyType.UseNaturalSize,
+ HeightResizePolicy = ResizePolicyType.UseNaturalSize,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center,
+ TextColor = Tizen.NUI.Color.White,
+ };
+ }
}
}
</ItemGroup>
<ItemGroup>
- <None Update="res\**">
+ <None Update="res\*.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
[EditorBrowsable(EditorBrowsableState.Never)]
public sealed class StyleManager
{
+ internal const float PointSizeNormal = 12;
+ internal const float PointSizeTitle = 16;
+
+ private const string defaultThemeName = "DEFAULT"; //"default";
+ private const string wearableThemeName = "WEARABLE"; //"wearable";
+
+ private string currentThemeName = defaultThemeName;
+ private Dictionary<string, Dictionary<string, StyleBase>> themeStyleSet = new Dictionary<string, Dictionary<string, StyleBase>>();
+ private Dictionary<string, StyleBase> defaultStyleSet = new Dictionary<string, StyleBase>();
+
+ /// <summary>
+ /// (Theme name, Theme instance)
+ /// </summary>
+ private Dictionary<string, Dictionary<Type, StyleBase>> componentStyleByTheme = new Dictionary<string, Dictionary<Type, StyleBase>>();
+
+ /// <summary>
+ /// (Theme name, Theme instance)
+ /// </summary>
+ private Dictionary<string, Theme> themeMap = new Dictionary<string, Theme>();
+
+ private EventHandler<ThemeChangeEventArgs> themeChangeHandler;
+
+ private Theme currentTheme;
+
/// <summary>
/// StyleManager construct.
/// </summary>
private StyleManager()
{
- ThemeManager.ThemeChanged += OnThemeChanged;
+ SetInitialThemeByDeviceProfile();
}
/// <summary>
/// An event for the theme changed signal which can be used to subscribe or unsubscribe the event handler provided by the user.<br />
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public event EventHandler<ThemeChangeEventArgs> ThemeChangedEvent;
+ public event EventHandler<ThemeChangeEventArgs> ThemeChangedEvent
+ {
+ add
+ {
+ themeChangeHandler += value;
+ }
+ remove
+ {
+ themeChangeHandler -= value;
+ }
+ }
/// <summary>
/// StyleManager static instance.
{
get
{
- return ThemeManager.CurrentTheme?.Id;
+ return currentThemeName;
}
+
set
{
- if (value == null) return;
-
- var key = value.ToUpperInvariant();
-
- if (key == Theme?.ToUpperInvariant()) return;
-
- if (!ThemeMap.ContainsKey(key) || ThemeMap[key] == null)
+ if (value != null && currentThemeName != value)
{
- ThemeMap[key] = new Theme()
- {
- Id = value
- };
- }
+ currentThemeName = value.ToUpperInvariant();
+ themeChangeHandler?.Invoke(null, new ThemeChangeEventArgs { CurrentTheme = currentThemeName });
- ThemeManager.CurrentTheme = ThemeMap[key];
+ UpdateTheme();
+ }
}
}
/// <summary>
- /// (Theme name, Theme instance)
- /// </summary>
- private Dictionary<string, Theme> ThemeMap { get; } = new Dictionary<string, Theme> { ["DEFAULT"] = ThemeManager.DefaultTheme };
-
- /// <summary>
/// Register style in StyleManager.
/// </summary>
/// <param name="style">Style name.</param>
- /// <param name="theme">Theme id.</param>
+ /// <param name="theme">Theme.</param>
/// <param name="styleType">Style type.</param>
/// <param name="bDefault">Flag to decide if it is default style.</param>
[EditorBrowsable(EditorBrowsableState.Never)]
throw new InvalidOperationException($"style can't be null");
}
- if (Activator.CreateInstance(styleType) is StyleBase styleBase)
+ if (theme == null || bDefault == true)
{
- var key = "DEFAULT";
-
- if (theme != null)
+ if (defaultStyleSet.ContainsKey(style))
{
- key = theme.ToUpperInvariant();
+ throw new InvalidOperationException($"{style}] already be used");
}
-
- if (!ThemeMap.ContainsKey(key) || ThemeMap[key] == null)
+ else
{
- ThemeMap[key] = new Theme()
- {
- Id = theme ?? key
- };
+ defaultStyleSet.Add(style, Activator.CreateInstance(styleType) as StyleBase);
}
+ return;
+ }
- if (ThemeMap[key].HasStyle(style))
- {
- throw new InvalidOperationException($"{style} already be used");
- }
+ theme = theme.ToUpperInvariant();
+
+ if (themeStyleSet.ContainsKey(style) && themeStyleSet[style].ContainsKey(theme))
+ {
+ throw new InvalidOperationException($"{style}] already be used");
+ }
- ThemeMap[key][style] = styleBase.GetViewStyle();
+ if (!themeStyleSet.ContainsKey(style))
+ {
+ themeStyleSet.Add(style, new Dictionary<string, StyleBase>());
}
+
+ themeStyleSet[style].Add(theme, Activator.CreateInstance(styleType) as StyleBase);
}
/// <summary>
return null;
}
- return (ThemeManager.CurrentTheme?.GetStyle(style) ?? ThemeManager.DefaultTheme?.GetStyle(style))?.Clone();
+ if (themeStyleSet.ContainsKey(style) && themeStyleSet[style].ContainsKey(Theme))
+ {
+ return (themeStyleSet[style][Theme])?.GetViewStyle();
+ }
+ else if (defaultStyleSet.ContainsKey(style))
+ {
+ return (defaultStyleSet[style])?.GetViewStyle();
+ }
+
+ return null;
}
/// <summary>
throw new ArgumentException("The argument targetTheme must be specified");
}
- var key = targetTheme.ToUpperInvariant();
-
- if (!ThemeMap.ContainsKey(key) || ThemeMap[key] == null)
+ if (!themeMap.ContainsKey(targetTheme))
{
Tizen.Log.Error("NUI", "The theme name should be a known one.");
return;
}
- ThemeMap[key][component.Name] = (Activator.CreateInstance(style) as StyleBase).GetViewStyle();
+ if (!componentStyleByTheme.ContainsKey(targetTheme))
+ {
+ componentStyleByTheme.Add(targetTheme, new Dictionary<Type, StyleBase>());
+ }
+
+ if (componentStyleByTheme[targetTheme].ContainsKey(component))
+ {
+ componentStyleByTheme[targetTheme][component] = Activator.CreateInstance(style) as StyleBase;
+ }
+ else
+ {
+ componentStyleByTheme[targetTheme].Add(component, Activator.CreateInstance(style) as StyleBase);
+ }
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public ViewStyle GetComponentStyle(Type component)
{
- return ThemeManager.GetStyle(component.Name);
- }
+ if (componentStyleByTheme.ContainsKey(currentThemeName) && componentStyleByTheme[currentThemeName].ContainsKey(component))
+ {
+ return componentStyleByTheme[currentThemeName][component].GetViewStyle();
+ }
- private void OnThemeChanged(object target, ThemeChangedEventArgs args)
- {
- ThemeChangedEvent?.Invoke(null, new ThemeChangeEventArgs { CurrentTheme = args.ThemeId });
+ return currentTheme.GetComponentStyle(component);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public string CurrentTheme;
}
+
+ internal static string GetFrameworkResourcePath(string resourceFileName)
+ {
+ return "/usr/share/dotnet.tizen/framework/res/" + resourceFileName;
+ }
+
+ private void SetInitialThemeByDeviceProfile()
+ {
+ Theme wearableTheme = WearableTheme.Instance;
+ Theme defaultTheme = DefaultTheme.Instance;
+ themeMap.Add(wearableThemeName, wearableTheme);
+ themeMap.Add(defaultThemeName, defaultTheme);
+
+ currentThemeName = defaultThemeName;
+ currentTheme = defaultTheme;
+
+ string currentProfile;
+
+ try
+ {
+ System.Information.TryGetValue<string>("tizen.org/feature/profile", out currentProfile);
+ Tizen.Log.Info("NUI", "Profile for initial theme found : " + currentProfile);
+ }
+ catch
+ {
+ Tizen.Log.Error("NUI", "Unknown device profile\n");
+ return;
+ }
+
+ if (string.Equals(currentProfile, wearableThemeName))
+ {
+ currentThemeName = wearableThemeName;
+ currentTheme = wearableTheme;
+ }
+ }
+
+ private void UpdateTheme()
+ {
+ if (themeMap.ContainsKey(currentThemeName))
+ {
+ currentTheme = themeMap[currentThemeName];
+ }
+ else
+ {
+ currentTheme = DefaultTheme.Instance;
+ }
+ }
}
}
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<n:Theme
- xmlns:n="clr-namespace:Tizen.NUI;assembly=Tizen.NUI"
- xmlns:b="clr-namespace:Tizen.NUI.BaseComponents;assembly=Tizen.NUI"
- xmlns:c="clr-namespace:Tizen.NUI.Components;assembly=Tizen.NUI.Components"
- xmlns:nx="clr-namespace:Tizen.NUI.Xaml;assembly=Tizen.NUI"
- xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
- Id="Tizen.NUI.Theme.Common" >
-
- <!--Button-->
- <c:ButtonStyle x:Key="Button" Size="100, 45">
- <c:ButtonStyle.BackgroundColor>
- <b:Selector x:TypeArguments="n:Color" Normal="0.88, 0.88, 0.88, 1" Pressed="0.77, 0.77, 0.77, 1" Disabled="0.88, 0.88, 0.88, 1"/>
- </c:ButtonStyle.BackgroundColor>
- <c:ButtonStyle.Text> <!--Button Text-->
- <b:TextLabelStyle PointSize="12" WidthResizePolicy="FillToParent" HeightResizePolicy="FillToParent" HorizontalAlignment="Center" VerticalAlignment="Center" Text="Button">
- <b:TextLabelStyle.TextColor>
- <b:Selector x:TypeArguments="n:Color" Normal="0.22, 0.22, 0.22, 1" Pressed="0.11, 0.11, 0.11, 1" Disabled="0.66, 0.66, 0.66, 1"/>
- </b:TextLabelStyle.TextColor>
- </b:TextLabelStyle>
- </c:ButtonStyle.Text>
- </c:ButtonStyle>
-
- <!--CheckBox-->
- <c:ButtonStyle x:Key="CheckBox" Size="30, 30">
- <c:ButtonStyle.Icon> <!--CheckBox Icon-->
- <b:ImageViewStyle WidthResizePolicy="DimensionDependency" HeightResizePolicy="SizeRelativeToParent">
- <b:ImageViewStyle.Opacity>
- <b:Selector x:TypeArguments="x:Single?" Normal="1.0" Selected="1.0" Disabled="0.4" DisabledSelected="0.4"/>
- </b:ImageViewStyle.Opacity>
- <b:ImageViewStyle.BackgroundImage>
- <b:Selector x:TypeArguments="x:String" Pressed="{nx:NUIResourcePath nui_component_default_checkbox_bg_p.png}" Selected="{nx:NUIResourcePath nui_component_default_checkbox_bg_p.png}" Other="{nx:NUIResourcePath nui_component_default_checkbox_bg_n.png}"/>
- </b:ImageViewStyle.BackgroundImage>
- <b:ImageViewStyle.ResourceUrl>
- <b:Selector x:TypeArguments="x:String" Selected="{nx:NUIResourcePath nui_component_default_checkbox_s.png}" Other=""/>
- </b:ImageViewStyle.ResourceUrl>
- </b:ImageViewStyle>
- </c:ButtonStyle.Icon>
- <c:ButtonStyle.Text> <!--CheckBox Text-->
- <b:TextLabelStyle PointSize="12" WidthResizePolicy="FillToParent" HeightResizePolicy="FillToParent" HorizontalAlignment="Center" VerticalAlignment="Center">
- <b:TextLabelStyle.TextColor>
- <b:Selector x:TypeArguments="n:Color" Normal="0.22, 0.22, 0.22, 1" Pressed="0.11, 0.11, 0.11, 1" Disabled="0.66, 0.66, 0.66, 1"/>
- </b:TextLabelStyle.TextColor>
- </b:TextLabelStyle>
- </c:ButtonStyle.Text>
- </c:ButtonStyle>
-
- <!--DropDown-->
- <c:DropDownStyle x:Key="DropDown" SpaceBetweenButtonTextAndIcon="10" ListPadding="5">
- <c:DropDownStyle.Button> <!--DropDown Button-->
- <c:ButtonStyle ParentOrigin="TopLeft" PivotPoint="TopLeft" BackgroundImageBorder="6, 6, 6, 6" IconRelativeOrientation="Right" IconPadding="6">
- <c:ButtonStyle.BackgroundImage>
- <b:Selector x:TypeArguments="x:String" Pressed="{nx:NUIResourcePath nui_component_default_checkbox_bg_p.png}" Other="{nx:NUIResourcePath nui_component_default_checkbox_bg_n.png}"/>
- </c:ButtonStyle.BackgroundImage>
- <c:ButtonStyle.Text>
- <b:TextLabelStyle Text="Select an item" PointSize="12" TextColor="Black"/>
- </c:ButtonStyle.Text>
- <c:ButtonStyle.Icon>
- <b:ImageViewStyle Size="28, 28" ResourceUrl="{nx:NUIResourcePath nui_component_default_dropdown_button_icon.png}"/>
- </c:ButtonStyle.Icon>
- </c:ButtonStyle>
- </c:DropDownStyle.Button>
- <c:DropDownStyle.ListBackgroundImage> <!--DropDown ListBackgroundImage-->
- <b:ImageViewStyle ResourceUrl="{nx:NUIResourcePath nui_component_default_dropdown_list_bg.png}" Border="6, 6, 6, 6" Size="280, 360"/>
- </c:DropDownStyle.ListBackgroundImage>
- </c:DropDownStyle>
-
- <!--DropDownDataItem-->
- <c:DropDownItemStyle x:Key="DropDownDataItem" Size="360, 50">
- <c:DropDownItemStyle.BackgroundColor>
- <b:Selector x:TypeArguments="n:Color" Pressed="0.05, 0.63, 0.9, 1" Selected="0.8, 0.8, 0.8, 1" Normal="1, 1, 1, 1"/>
- </c:DropDownItemStyle.BackgroundColor>
- <c:DropDownItemStyle.Text>
- <b:TextLabelStyle PointSize="12" Position="28, 0" Text="List item"/>
- </c:DropDownItemStyle.Text>
- </c:DropDownItemStyle>
-
- <!--Popup-->
- <c:PopupStyle x:Key="Popup" Size="500, 280" BackgroundColor="0.9, 0.9, 0.9, 1">
- <c:PopupStyle.ImageShadow>
- <n:ImageShadow Url="{nx:NUIResourcePath nui_component_default_popup_shadow.png}" Border="24, 24, 24, 24" Extents="48, 48"/>
- </c:PopupStyle.ImageShadow>
- <c:PopupStyle.Title>
- <b:TextLabelStyle PointSize="16" TextColor="Black" PositionUsesPivotPoint="true" ParentOrigin="TopLeft" PivotPoint="TopLeft" HorizontalAlignment="Begin" VerticalAlignment="Bottom" Padding="20" Text="Title" />
- </c:PopupStyle.Title>
- <c:PopupStyle.Buttons>
- <c:ButtonStyle Size="0, 80" PositionUsesPivotPoint="true" ParentOrigin="BottomLeft" PivotPoint="BottomLeft">
- <c:ButtonStyle.BackgroundColor>
- <b:Selector x:TypeArguments="n:Color" Normal="1, 1, 1, 1" Pressed="1, 1, 1, 0.5"/>
- </c:ButtonStyle.BackgroundColor>
- <c:ButtonStyle.Overlay>
- <b:ImageViewStyle PositionUsesPivotPoint="true" ParentOrigin="Center" PivotPoint="Center" WidthResizePolicy="FillToParent" HeightResizePolicy="FillToParent">
- <b:ImageViewStyle.BackgroundColor>
- <b:Selector x:TypeArguments="n:Color" Normal="1, 1, 1, 1" Pressed="0, 0, 0, 0.1" Selected="1, 1, 1, 1"/>
- </b:ImageViewStyle.BackgroundColor>
- </b:ImageViewStyle>
- </c:ButtonStyle.Overlay>
- <c:ButtonStyle.Text>
- <b:TextLabelStyle PositionUsesPivotPoint="true" ParentOrigin="Center" PivotPoint="Center" HorizontalAlignment="Center" VerticalAlignment="Center" TextColor="0.05, 0.63, 0.9, 1" />
- </c:ButtonStyle.Text>
- </c:ButtonStyle>
- </c:PopupStyle.Buttons>
- </c:PopupStyle>
-
- <!--Progress-->
- <c:ProgressStyle x:Key="Progress" Size="200, 5">
- <c:ProgressStyle.Track>
- <b:ImageViewStyle BackgroundColor="0, 0, 0, 0.1" />
- </c:ProgressStyle.Track>
- <c:ProgressStyle.Buffer>
- <b:ImageViewStyle BackgroundColor="0.05, 0.63, 0.9, 0.3" />
- </c:ProgressStyle.Buffer>
- <c:ProgressStyle.Progress>
- <b:ImageViewStyle BackgroundColor="0.05, 0.63, 0.9, 1" />
- </c:ProgressStyle.Progress>
- </c:ProgressStyle>
-
- <!--RadioButton-->
- <c:ButtonStyle x:Key="RadioButton" Size="30, 30">
- <c:ButtonStyle.Icon>
- <b:ImageViewStyle WidthResizePolicy="DimensionDependency" HeightResizePolicy="SizeRelativeToParent" SizeModeFactor="1, 1, 1">
- <b:ImageViewStyle.Opacity>
- <b:Selector x:TypeArguments="x:Single?" Normal="1" Selected="1" Disabled="0.4" DisabledSelected="0.4"/>
- </b:ImageViewStyle.Opacity>
- <b:ImageViewStyle.BackgroundImage>
- <b:Selector x:TypeArguments="x:String" Pressed="{nx:NUIResourcePath nui_component_default_radiobutton_p.png}" Selected="{nx:NUIResourcePath nui_component_default_radiobutton_s.png}" Other="{nx:NUIResourcePath nui_component_default_radiobutton_n.png}" />
- </b:ImageViewStyle.BackgroundImage>
- </b:ImageViewStyle>
- </c:ButtonStyle.Icon>
- <c:ButtonStyle.Text>
- <b:TextLabelStyle WidthResizePolicy="FillToParent" HeightResizePolicy="FillToParent" HorizontalAlignment="Center" VerticalAlignment="Center" PointSize="12">
- <b:TextLabelStyle.TextColor>
- <b:Selector x:TypeArguments="n:Color" Normal="0.22, 0.22, 0.22, 1" Pressed="0.11, 0.11, 0.11, 1" Disabled="0.66, 0.66, 0.66, 1" />
- </b:TextLabelStyle.TextColor>
- </b:TextLabelStyle>
- </c:ButtonStyle.Text>
- </c:ButtonStyle>
-
- <!--Slider-->
- <c:SliderStyle x:Key="Slider" Size="200, 50" TrackThickness="5">
- <c:SliderStyle.Track>
- <b:ImageViewStyle BackgroundColor="0, 0, 0, 0.1" />
- </c:SliderStyle.Track>
- <c:SliderStyle.Progress>
- <b:ImageViewStyle BackgroundColor="0.5, 0.63, 0.9, 1" />
- </c:SliderStyle.Progress>
- <c:SliderStyle.Thumb>
- <b:ImageViewStyle Size="50, 50" ResourceUrl="{nx:NUIResourcePath nui_component_default_slider_thumb_n.png}">
- <b:ImageViewStyle.BackgroundImage>
- <b:Selector x:TypeArguments="x:String" Normal="" Pressed="{nx:NUIResourcePath nui_component_default_slider_thumb_bg_p.png}" />
- </b:ImageViewStyle.BackgroundImage>
- </b:ImageViewStyle>
- </c:SliderStyle.Thumb>
- </c:SliderStyle>
-
- <!--Switch-->
- <c:SwitchStyle x:Key="Switch" Size="96, 60">
- <c:Switch.Track>
- <b:ImageViewStyle Size="96, 60" WidthResizePolicy="Fixed" HeightResizePolicy="Fixed">
- <b:ImageViewStyle.ResourceUrl>
- <b:Selector x:TypeArguments="x:String" Normal="{nx:NUIResourcePath nui_component_default_switch_track_n.png}" Selected="{nx:NUIResourcePath nui_component_default_switch_track_s.png}" Disabled="{nx:NUIResourcePath nui_component_default_switch_track_d.png}" DisabledSelected="{nx:NUIResourcePath nui_component_default_switch_track_ds.png}" />
- </b:ImageViewStyle.ResourceUrl>
- </b:ImageViewStyle>
- </c:Switch.Track>
- <c:Switch.Thumb>
- <b:ImageViewStyle Size="60, 60">
- <b:ImageViewStyle.ResourceUrl>
- <b:Selector x:TypeArguments="x:String" Normal="{nx:NUIResourcePath nui_component_default_switch_thumb_n.png}" Disabled="{nx:NUIResourcePath nui_component_default_switch_thumb_d.png}" Selected="{nx:NUIResourcePath nui_component_default_switch_thumb_n.png}" />
- </b:ImageViewStyle.ResourceUrl>
- </b:ImageViewStyle>
- </c:Switch.Thumb>
- <c:Switch.Text>
- <b:TextLabelStyle PointSize="12" WidthResizePolicy="FillToParent" HeightResizePolicy="FillToParent" HorizontalAlignment="Center" VerticalAlignment="Center">
- <b:TextLabelStyle.TextColor>
- <b:Selector x:TypeArguments="n:Color" Normal="0.22, 0.22, 0.22, 1" Pressed="0.11, 0.11, 0.11, 1" Disabled="0.66, 0.66, 0.66, 1" />
- </b:TextLabelStyle.TextColor>
- </b:TextLabelStyle>
- </c:Switch.Text>
- </c:SwitchStyle>
-
- <!--Tab-->
- <c:TabStyle x:Key="Tab" Size="480, 80" BackgroundColor="Yellow">
- <c:TabStyle.UnderLine>
- <b:ViewStyle Size="0, 6" PositionUsesPivotPoint="true" ParentOrigin="BottomLeft" PivotPoint="BottomLeft" BackgroundColor="0.05, 0.63, 0.9, 1.0" />
- </c:TabStyle.UnderLine>
- <c:TabStyle.Text>
- <b:TextLabelStyle PointSize="16">
- <b:TextLabelStyle.TextColor>
- <b:Selector x:TypeArguments="n:Color" Normal="Black" Selected="0.05, 0.63, 0.9, 1" />
- </b:TextLabelStyle.TextColor>
- </b:TextLabelStyle>
- </c:TabStyle.Text>
- </c:TabStyle>
-
- <!--Toast-->
- <c:ToastStyle x:Key="Toast" WidthResizePolicy="FitToChildren" HeightResizePolicy="FitToChildren" BackgroundColor="0, 0, 0, 0.8">
- <c:ToastStyle.Text>
- <b:TextLabelStyle PositionUsesPivotPoint="true" ParentOrigin="Center" PivotPoint="Center" WidthResizePolicy="UseNaturalSize" HeightResizePolicy="UseNaturalSize" HorizontalAlignment="Center" VerticalAlignment="Center" TextColor="White" Padding="12, 12, 8, 8" />
- </c:ToastStyle.Text>
- </c:ToastStyle>
-
- <!--Loading-->
- <c:LoadingStyle x:Key="Loading" LoadingSize="100, 100" />
-
- <!--Pagination-->
- <c:PaginationStyle x:Key="Pagination">
- <c:PaginationStyle.IndicatorImageUrl>
- <b:Selector x:TypeArguments="x:String" Normal="{nx:NUIResourcePath nui_component_default_pagination_normal_dot.png}" Selected="{nx:NUIResourcePath nui_component_default_pagination_focus_dot.png}" />
- </c:PaginationStyle.IndicatorImageUrl>
- </c:PaginationStyle>
-
- <!--Scrollbar-->
- <c:ScrollbarStyle x:Key="Scrollbar" TrackThickness="6" ThumbThickness="6" TrackColor="1, 1, 1, 0.15" ThumbColor="0.6, 0.6, 0.6, 1.0" TrackPadding="4" />
-
-</n:Theme>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<n:Theme
- xmlns:n="clr-namespace:Tizen.NUI;assembly=Tizen.NUI"
- xmlns:b="clr-namespace:Tizen.NUI.BaseComponents;assembly=Tizen.NUI"
- xmlns:c="clr-namespace:Tizen.NUI.Components;assembly=Tizen.NUI.Components"
- xmlns:nx="clr-namespace:Tizen.NUI.Xaml;assembly=Tizen.NUI"
- xmlns:cx="clr-namespace:Tizen.NUI.Components.Extension;assembly=Tizen.NUI.Components"
- xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
- Id="Tizen.NUI.Theme.Wearable" >
-
- <!--Button-->
- <c:ButtonStyle x:Key="Button" Size="210, 72" CornerRadius="36">
- <c:ButtonStyle.BackgroundColor>
- <b:Selector x:TypeArguments="n:Color" Normal="0, 0.1647, 0.3019, 0.85" Pressed="0, 0.2475, 0.5019, 0.85" Disabled="0.2392, 0.2392, 0.2392, 0.85"/>
- </c:ButtonStyle.BackgroundColor>
- <c:ButtonStyle.Opacity>
- <b:Selector x:TypeArguments="x:Single?" Other="1.0" Disabled="0.3"/>
- </c:ButtonStyle.Opacity>
- <c:ButtonStyle.Text> <!--Button Text-->
- <b:TextLabelStyle FontFamily="SamsungOne 700" PixelSize="28" Padding="20, 20, 0, 0" HorizontalAlignment="Center" VerticalAlignment="Center">
- <b:TextLabelStyle.TextColor>
- <b:Selector x:TypeArguments="n:Color" Normal="0.2196, 0.6131, 0.9882, 1" Disabled="1, 1, 1, 0.35"/>
- </b:TextLabelStyle.TextColor>
- </b:TextLabelStyle>
- </c:ButtonStyle.Text>
- </c:ButtonStyle>
-
- <!--CheckBox-->
- <cx:LottieButtonStyle x:Key="CheckBox" LottieUrl="nx:NUIResourcePath nui_wearable_checkbox_icon.json">
- <cx:LottieButtonStyle.PlayRange>
- <b:Selector x:TypeArguments="b:LottieFrameInfo" Selected="19, 36" Normal="0, 18"/>
- </cx:LottieButtonStyle.PlayRange>
- <cx:LottieButtonStyle.Opacity>
- <b:Selector x:TypeArguments="x:Single?" Other="1" Pressed="0.6" Disabled="0.3"/>
- </cx:LottieButtonStyle.Opacity>
- </cx:LottieButtonStyle>
-
- <!--DropDown-->
- <c:DropDownStyle x:Key="DropDown" SpaceBetweenButtonTextAndIcon="10" ListPadding="5">
- <c:DropDownStyle.Button> <!--DropDown Button-->
- <c:ButtonStyle ParentOrigin="TopLeft" PivotPoint="TopLeft" BackgroundImageBorder="6, 6, 6, 6" IconRelativeOrientation="Right" IconPadding="6">
- <c:ButtonStyle.BackgroundImage>
- <b:Selector x:TypeArguments="x:String" Pressed="{nx:NUIResourcePath nui_component_default_checkbox_bg_p.png}" Other="{nx:NUIResourcePath nui_component_default_checkbox_bg_n.png}"/>
- </c:ButtonStyle.BackgroundImage>
- <c:ButtonStyle.Text>
- <b:TextLabelStyle Text="Select an item" PointSize="12" TextColor="Black"/>
- </c:ButtonStyle.Text>
- <c:ButtonStyle.Icon>
- <b:ImageViewStyle Size="28, 28" ResourceUrl="{nx:NUIResourcePath nui_component_default_dropdown_button_icon.png}"/>
- </c:ButtonStyle.Icon>
- </c:ButtonStyle>
- </c:DropDownStyle.Button>
- <c:DropDownStyle.ListBackgroundImage> <!--DropDown ListBackgroundImage-->
- <b:ImageViewStyle ResourceUrl="{nx:NUIResourcePath nui_component_default_dropdown_list_bg.png}" Border="6, 6, 6, 6" Size="280, 360"/>
- </c:DropDownStyle.ListBackgroundImage>
- </c:DropDownStyle>
-
- <!--DropDownDataItem-->
- <c:DropDownItemStyle x:Key="DropDownDataItem" Size="360, 50">
- <c:DropDownItemStyle.BackgroundColor>
- <b:Selector x:TypeArguments="n:Color" Pressed="0.05, 0.63, 0.9, 1" Selected="0.8, 0.8, 0.8, 1" Normal="1, 1, 1, 1"/>
- </c:DropDownItemStyle.BackgroundColor>
- <c:DropDownItemStyle.Text>
- <b:TextLabelStyle PointSize="12" Position="28, 0" Text="List item"/>
- </c:DropDownItemStyle.Text>
- </c:DropDownItemStyle>
-
- <!--Popup-->
- <c:PopupStyle x:Key="Popup" Size="500, 280" BackgroundColor="0.9, 0.9, 0.9, 1">
- <c:PopupStyle.ImageShadow>
- <n:ImageShadow Url="{nx:NUIResourcePath nui_component_default_popup_shadow.png}" Border="24, 24, 24, 24" Extents="48, 48"/>
- </c:PopupStyle.ImageShadow>
- <c:PopupStyle.Title>
- <b:TextLabelStyle PointSize="16" TextColor="Black" PositionUsesPivotPoint="true" ParentOrigin="TopLeft" PivotPoint="TopLeft" HorizontalAlignment="Begin" VerticalAlignment="Bottom" Padding="20" Text="Title" />
- </c:PopupStyle.Title>
- <c:PopupStyle.Buttons>
- <c:ButtonStyle Size="0, 80" PositionUsesPivotPoint="true" ParentOrigin="BottomLeft" PivotPoint="BottomLeft">
- <c:ButtonStyle.BackgroundColor>
- <b:Selector x:TypeArguments="n:Color" Normal="1, 1, 1, 1" Pressed="1, 1, 1, 0.5"/>
- </c:ButtonStyle.BackgroundColor>
- <c:ButtonStyle.Overlay>
- <b:ImageViewStyle PositionUsesPivotPoint="true" ParentOrigin="Center" PivotPoint="Center" WidthResizePolicy="FillToParent" HeightResizePolicy="FillToParent">
- <b:ImageViewStyle.BackgroundColor>
- <b:Selector x:TypeArguments="n:Color" Normal="1, 1, 1, 1" Pressed="0, 0, 0, 0.1" Selected="1, 1, 1, 1"/>
- </b:ImageViewStyle.BackgroundColor>
- </b:ImageViewStyle>
- </c:ButtonStyle.Overlay>
- <c:ButtonStyle.Text>
- <b:TextLabelStyle PositionUsesPivotPoint="true" ParentOrigin="Center" PivotPoint="Center" HorizontalAlignment="Center" VerticalAlignment="Center" TextColor="0.05, 0.63, 0.9, 1" />
- </c:ButtonStyle.Text>
- </c:ButtonStyle>
- </c:PopupStyle.Buttons>
- </c:PopupStyle>
-
- <!--Progress-->
- <c:ProgressStyle x:Key="Progress" Size="200, 5">
- <c:ProgressStyle.Track>
- <b:ImageViewStyle BackgroundColor="0, 0, 0, 0.1" />
- </c:ProgressStyle.Track>
- <c:ProgressStyle.Buffer>
- <b:ImageViewStyle BackgroundColor="0.05, 0.63, 0.9, 0.3" />
- </c:ProgressStyle.Buffer>
- <c:ProgressStyle.Progress>
- <b:ImageViewStyle BackgroundColor="0.05, 0.63, 0.9, 1" />
- </c:ProgressStyle.Progress>
- </c:ProgressStyle>
-
- <!--RadioButton-->
- <cx:LottieButtonStyle x:Key="RadioButton" LottieUrl="nx:NUIResourcePath nui_wearable_radiobutton_icon.json">
- <cx:LottieButtonStyle.PlayRange>
- <b:Selector x:TypeArguments="b:LottieFrameInfo" Selected="0, 12" Normal="13, 25"/>
- </cx:LottieButtonStyle.PlayRange>
- <cx:LottieButtonStyle.Opacity>
- <b:Selector x:TypeArguments="x:Single?" Other="1" Pressed="0.6" Disabled="0.3"/>
- </cx:LottieButtonStyle.Opacity>
- </cx:LottieButtonStyle>
-
- <!--Slider-->
- <c:SliderStyle x:Key="Slider" Size="200, 50" TrackThickness="5">
- <c:SliderStyle.Track>
- <b:ImageViewStyle BackgroundColor="0, 0, 0, 0.1" />
- </c:SliderStyle.Track>
- <c:SliderStyle.Progress>
- <b:ImageViewStyle BackgroundColor="0.5, 0.63, 0.9, 1" />
- </c:SliderStyle.Progress>
- <c:SliderStyle.Thumb>
- <b:ImageViewStyle Size="50, 50" ResourceUrl="{nx:NUIResourcePath nui_component_default_slider_thumb_n.png}">
- <b:ImageViewStyle.BackgroundImage>
- <b:Selector x:TypeArguments="x:String" Normal="" Pressed="{nx:NUIResourcePath nui_component_default_slider_thumb_bg_p.png}" />
- </b:ImageViewStyle.BackgroundImage>
- </b:ImageViewStyle>
- </c:SliderStyle.Thumb>
- </c:SliderStyle>
-
- <!--Switch-->
- <cx:LottieButtonStyle x:Key="Switch" LottieUrl="nx:NUIResourcePath nui_wearable_switch_icon.json">
- <cx:LottieButtonStyle.PlayRange>
- <b:Selector x:TypeArguments="b:LottieFrameInfo" Selected="0, 18" Normal="19, 36"/>
- </cx:LottieButtonStyle.PlayRange>
- <cx:LottieButtonStyle.Opacity>
- <b:Selector x:TypeArguments="x:Single?" Other="1" Pressed="0.6" Disabled="0.3"/>
- </cx:LottieButtonStyle.Opacity>
- </cx:LottieButtonStyle>
-
- <!--Tab-->
- <c:TabStyle x:Key="Tab" Size="480, 80" BackgroundColor="Yellow">
- <c:TabStyle.UnderLine>
- <b:ViewStyle Size="0, 6" PositionUsesPivotPoint="true" ParentOrigin="BottomLeft" PivotPoint="BottomLeft" BackgroundColor="0.05, 0.63, 0.9, 1.0" />
- </c:TabStyle.UnderLine>
- <c:TabStyle.Text>
- <b:TextLabelStyle PointSize="16">
- <b:TextLabelStyle.TextColor>
- <b:Selector x:TypeArguments="n:Color" Normal="Black" Selected="0.05, 0.63, 0.9, 1" />
- </b:TextLabelStyle.TextColor>
- </b:TextLabelStyle>
- </c:TabStyle.Text>
- </c:TabStyle>
-
- <!--Toast-->
- <c:ToastStyle x:Key="Toast" WidthResizePolicy="FitToChildren" HeightResizePolicy="FitToChildren" BackgroundColor="0, 0, 0, 0.8">
- <c:ToastStyle.Text>
- <b:TextLabelStyle PositionUsesPivotPoint="true" ParentOrigin="Center" PivotPoint="Center" WidthResizePolicy="UseNaturalSize" HeightResizePolicy="UseNaturalSize" HorizontalAlignment="Center" VerticalAlignment="Center" TextColor="White" Padding="12, 12, 8, 8" />
- </c:ToastStyle.Text>
- </c:ToastStyle>
-
- <!--Loading-->
- <c:LoadingStyle x:Key="Loading" LoadingSize="360, 360" />
-
- <!--Pagination-->
- <c:PaginationStyle x:Key="Pagination">
- <c:PaginationStyle.IndicatorImageUrl>
- <b:Selector x:TypeArguments="x:String" Normal="{nx:NUIResourcePath nui_component_default_pagination_normal_dot.png}" Selected="{nx:NUIResourcePath nui_component_default_pagination_focus_dot.png}" />
- </c:PaginationStyle.IndicatorImageUrl>
- </c:PaginationStyle>
-
- <!--Scrollbar-->
- <c:ScrollbarStyle x:Key="Scrollbar" TrackThickness="6" ThumbThickness="6" TrackColor="1, 1, 1, 0.15" ThumbColor="0.6, 0.6, 0.6, 1.0" TrackPadding="4" />
-
-</n:Theme>
\ No newline at end of file
</ItemGroup>
<ItemGroup>
- <None Update="res\**">
+ <None Update="res\*.json">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </None>
+ <None Update="res\*.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<n:Theme
- xmlns:n="clr-namespace:Tizen.NUI;assembly=Tizen.NUI"
- xmlns:b="clr-namespace:Tizen.NUI.BaseComponents;assembly=Tizen.NUI"
- xmlns:c="clr-namespace:Tizen.NUI.Components;assembly=Tizen.NUI.Components"
- xmlns:nx="clr-namespace:Tizen.NUI.Xaml;assembly=Tizen.NUI"
- xmlns:w="clr-namespace:Tizen.NUI.Wearable;assembly=Tizen.NUI.Wearable"
- xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
- Id="Tizen.NUI.Theme.Common" >
-
- <!--CircularPagination-->
- <w:CircularPaginationStyle x:Key="CircularPagination" IndicatorSize="10, 10">
- <w:CircularPaginationStyle.IndicatorImageURL>
- <b:Selector x:TypeArguments="x:String" Normal="{nx:NUIResourcePath nui_component_default_pagination_normal_dot.png}" Selected="{nx:NUIResourcePath nui_component_default_pagination_focus_dot.png}" />
- </w:CircularPaginationStyle.IndicatorImageURL>
- <w:CircularPaginationStyle.CenterIndicatorImageURL>
- <b:Selector x:TypeArguments="x:String" Normal="{nx:NUIResourcePath nui_wearable_circular_pagination_center_normal_dot.png}" Selected="{nx:NUIResourcePath nui_wearable_circular_pagination_center_focus_dot.png}" />
- </w:CircularPaginationStyle.CenterIndicatorImageURL>
- </w:CircularPaginationStyle>
-
- <!--CircularProgress-->
- <w:CircularProgressStyle x:Key="CircularProgress" Thickness="6" MaxValue="100" MinValue="0" CurrentValue="0" TrackColor="0, 0.16, 0.3, 1" ProgressColor="0, 0.55, 1, 1" />
-
- <!--CircularScrollbar-->
- <w:CircularScrollbarStyle x:Key="CircularScrollbar" Thickness="10" TrackSweepAngle="60" TrackColor="1, 1, 1, 0.15" ThumbColor="0.6, 0.6, 0.6, 1" />
-
- <!--CircularSlider-->
- <w:CircularSliderStyle x:Key="CircularSlider" Thickness="6" MaxValue="100" MinValue="0" CurrentValue="0" TrackColor="0, 0.16, 0.3, 1" ProgressColor="0, 0.55, 1, 1" ThumbSize="19, 19" ThumbColor="0, 0.55, 1, 1"/>
-
-</n:Theme>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<n:Theme
- xmlns:n="clr-namespace:Tizen.NUI;assembly=Tizen.NUI"
- xmlns:b="clr-namespace:Tizen.NUI.BaseComponents;assembly=Tizen.NUI"
- xmlns:c="clr-namespace:Tizen.NUI.Components;assembly=Tizen.NUI.Components"
- xmlns:nx="clr-namespace:Tizen.NUI.Xaml;assembly=Tizen.NUI"
- xmlns:w="clr-namespace:Tizen.NUI.Wearable;assembly=Tizen.NUI.Wearable"
- xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
- Id="Tizen.NUI.Theme.Wearable" >
-
- <!--CircularPagination-->
- <w:CircularPaginationStyle x:Key="CircularPagination" IndicatorSize="10, 10">
- <w:CircularPaginationStyle.IndicatorImageURL>
- <b:Selector x:TypeArguments="x:String" Normal="{nx:NUIResourcePath nui_component_default_pagination_normal_dot.png}" Selected="{nx:NUIResourcePath nui_component_default_pagination_focus_dot.png}" />
- </w:CircularPaginationStyle.IndicatorImageURL>
- <w:CircularPaginationStyle.CenterIndicatorImageURL>
- <b:Selector x:TypeArguments="x:String" Normal="{nx:NUIResourcePath nui_wearable_circular_pagination_center_normal_dot.png}" Selected="{nx:NUIResourcePath nui_wearable_circular_pagination_center_focus_dot.png}" />
- </w:CircularPaginationStyle.CenterIndicatorImageURL>
- </w:CircularPaginationStyle>
-
- <!--CircularProgress-->
- <w:CircularProgressStyle x:Key="CircularProgress" Thickness="6" MaxValue="100" MinValue="0" CurrentValue="0" TrackColor="0, 0.16, 0.3, 1" ProgressColor="0, 0.55, 1, 1" />
-
- <!--CircularScrollbar-->
- <w:CircularScrollbarStyle x:Key="CircularScrollbar" Thickness="10" TrackSweepAngle="60" TrackColor="1, 1, 1, 0.15" ThumbColor="0.6, 0.6, 0.6, 1" />
-
- <!--CircularSlider-->
- <w:CircularSliderStyle x:Key="CircularSlider" Thickness="6" MaxValue="100" MinValue="0" CurrentValue="0" TrackColor="0, 0.16, 0.3, 1" ProgressColor="0, 0.55, 1, 1" ThumbSize="19, 19" ThumbColor="0, 0.55, 1, 1"/>
-
-</n:Theme>
\ No newline at end of file
/// User can set its size.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public CircularProgress() : base()
+ public CircularProgress() : base(new CircularProgressStyle())
{
Initialize();
}
/// <summary>
/// Create an empty CircularScrollbar.
/// </summary>
- public CircularScrollbar() : base()
+ public CircularScrollbar() : base(new CircularScrollbarStyle())
{
}
/// <param name="currentPosition">The current position of the viewport in scrollable content area. This is the viewport's top position if the scroller is vertical, otherwise, left.</param>
/// <param name="isHorizontal">Whether the direction of scrolling is horizontal or not. It is vertical by default.</param>
[EditorBrowsable(EditorBrowsableState.Never)]
- public CircularScrollbar(float contentLength, float viewportLength, float currentPosition, bool isHorizontal = false) : base(ThemeManager.GetStyle(typeof(CircularScrollbar)))
+ public CircularScrollbar(float contentLength, float viewportLength, float currentPosition, bool isHorizontal = false) : base(new CircularScrollbarStyle())
{
Initialize(contentLength, viewportLength, currentPosition, isHorizontal);
}
/// <inheritdoc/>
[EditorBrowsable(EditorBrowsableState.Never)]
- public override void ApplyStyle(ViewStyle viewStyle)
- {
- if (viewStyle == null) return;
- if (viewStyle.WidthResizePolicy == null) viewStyle.WidthResizePolicy = ResizePolicyType.FillToParent;
- if (viewStyle.HeightResizePolicy == null) viewStyle.HeightResizePolicy = ResizePolicyType.FillToParent;
-
- base.ApplyStyle(viewStyle);
- }
-
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
protected override ViewStyle CreateViewStyle()
{
return new CircularScrollbarStyle();
/// The constructor of CircularSlider.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public CircularSlider() : base()
+ public CircularSlider() : base(new CircularSliderStyle())
{
Initialize();
}
/// Constructor
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public Popup() : base(ThemeManager.GetStyle("WearablePopup") as ControlStyle)
+ public Popup() : base()
{
initialize();
}
private void initialize()
{
- popupStyle = ViewStyle as PopupStyle;
+ popupStyle = Style as PopupStyle;
if (popupStyle == null)
{
throw new Exception("Popup style is null.");
[EditorBrowsable(EditorBrowsableState.Never)]
public class CircularPaginationStyle : ControlStyle
{
- /// <summary>The IndicatorSize bindable property.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static readonly BindableProperty IndicatorSizeProperty = BindableProperty.Create(nameof(IndicatorSize), typeof(Size), typeof(CircularPaginationStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
- {
- ((CircularPaginationStyle)bindable).indicatorSize = newValue == null ? null : new Size((Size)newValue);
- },
- defaultValueCreator: (bindable) =>
- {
- return ((CircularPaginationStyle)bindable).indicatorSize;
- });
-
- /// <summary>The IndicatorImageUrlSelector bindable property.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static readonly BindableProperty IndicatorImageUrlSelectorProperty = BindableProperty.Create("IndicatorImageUrlSelector", typeof(Selector<string>), typeof(CircularPaginationStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
- {
- ((CircularPaginationStyle)bindable).indicatorImageUrl = ((Selector<string>)newValue)?.Clone();
- },
- defaultValueCreator: (bindable) =>
- {
- return ((CircularPaginationStyle)bindable).indicatorImageUrl;
- });
-
- /// <summary>The CenterIndicatorImageUrlSelector bindable property.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static readonly BindableProperty CenterIndicatorImageUrlSelectorProperty = BindableProperty.Create("CenterIndicatorImageUrlSelector", typeof(Selector<string>), typeof(CircularPaginationStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
- {
- ((CircularPaginationStyle)bindable).centerIndicatorImageUrl = ((Selector<string>)newValue)?.Clone();
- },
- defaultValueCreator: (bindable) =>
- {
- return ((CircularPaginationStyle)bindable).centerIndicatorImageUrl;
- });
-
- private Size indicatorSize;
- private Selector<string> indicatorImageUrl;
- private Selector<string> centerIndicatorImageUrl;
-
static CircularPaginationStyle() { }
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public CircularPaginationStyle(CircularPaginationStyle style) : base(style)
{
+ if (null == style) return;
+
+ this.CopyFrom(style);
}
/// <summary>
/// <since_tizen> 8 </since_tizen>
/// 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 Size IndicatorSize
- {
- get => (Size)GetValue(IndicatorSizeProperty);
- set => SetValue(IndicatorSizeProperty, value);
- }
+ public Size IndicatorSize { get; set; }
/// <summary>
/// Gets or sets the resource of indicator.
/// <since_tizen> 8 </since_tizen>
/// 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 Selector<string> IndicatorImageURL
- {
- get => (Selector<string>)GetValue(IndicatorImageUrlSelectorProperty);
- set => SetValue(IndicatorImageUrlSelectorProperty, value);
- }
+ public Selector<string> IndicatorImageURL { get; set; } = new Selector<string>();
/// <summary>
/// Gets or sets the resource of the center indicator.
/// <since_tizen> 8 </since_tizen>
/// 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 Selector<string> CenterIndicatorImageURL
+ public Selector<string> CenterIndicatorImageURL { get; set; } = new Selector<string>();
+
+ /// <summary>
+ /// Retrieves a copy of CircularPaginationStyle.
+ /// </summary>
+ /// <since_tizen> 8 </since_tizen>
+ /// 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 override void CopyFrom(BindableObject bindableObject)
{
- get => (Selector<string>)GetValue(CenterIndicatorImageUrlSelectorProperty);
- set => SetValue(CenterIndicatorImageUrlSelectorProperty, value);
+ base.CopyFrom(bindableObject);
+
+ CircularPaginationStyle circularPaginationStyle = bindableObject as CircularPaginationStyle;
+ if (null != circularPaginationStyle)
+ {
+ if (null != circularPaginationStyle.IndicatorSize)
+ {
+ IndicatorSize = new Size(circularPaginationStyle.IndicatorSize.Width, circularPaginationStyle.IndicatorSize.Height);
+ }
+ if (null != circularPaginationStyle.IndicatorImageURL)
+ {
+ IndicatorImageURL?.Clone(circularPaginationStyle.IndicatorImageURL);
+ }
+ if (null != circularPaginationStyle.CenterIndicatorImageURL)
+ {
+ CenterIndicatorImageURL?.Clone(circularPaginationStyle.CenterIndicatorImageURL);
+ }
+ }
}
private void Initialize()
IndicatorSize = new Size(10, 10);
IndicatorImageURL = new Selector<string>()
{
- Normal = Tizen.NUI.StyleManager.FrameworkResourcePath + "nui_component_default_pagination_normal_dot.png",
- Selected = Tizen.NUI.StyleManager.FrameworkResourcePath + "nui_component_default_pagination_focus_dot.png",
+ Normal = "/usr/share/dotnet.tizen/framework/res/" + "nui_component_default_pagination_normal_dot.png",
+ Selected = "/usr/share/dotnet.tizen/framework/res/" + "nui_component_default_pagination_focus_dot.png",
};
CenterIndicatorImageURL = new Selector<string>()
{
- Normal = Tizen.NUI.StyleManager.FrameworkResourcePath + "nui_wearable_circular_pagination_center_normal_dot.png",
- Selected = Tizen.NUI.StyleManager.FrameworkResourcePath + "nui_wearable_circular_pagination_center_focus_dot.png",
+ Normal = "/usr/share/dotnet.tizen/framework/res/" + "nui_wearable_circular_pagination_center_normal_dot.png",
+ Selected = "/usr/share/dotnet.tizen/framework/res/" + "nui_wearable_circular_pagination_center_focus_dot.png",
};
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty TrackColorProperty = BindableProperty.Create(nameof(TrackColor), typeof(Color), typeof(CircularProgressStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((CircularProgressStyle)bindable).trackColor = newValue == null ? null : new Color((Color)newValue);
+ ((CircularProgressStyle)bindable).trackColor = (Color)newValue;
},
defaultValueCreator: (bindable) =>
{
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty ProgressColorProperty = BindableProperty.Create(nameof(ProgressColor), typeof(Color), typeof(CircularProgressStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((CircularProgressStyle)bindable).progressColor = newValue == null ? null : new Color((Color)newValue);
+ ((CircularProgressStyle)bindable).progressColor = (Color)newValue;
},
defaultValueCreator: (bindable) =>
{
[EditorBrowsable(EditorBrowsableState.Never)]
public CircularProgressStyle(CircularProgressStyle style) : base(style)
{
+ if (null == style) return;
+ this.CopyFrom(style);
}
/// <summary>
}
/// <summary>
+ /// Style's clone function.
+ /// </summary>
+ /// <param name="bindableObject">The style that need to copy.</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public override void CopyFrom(BindableObject bindableObject)
+ {
+ base.CopyFrom(bindableObject);
+
+ CircularProgressStyle progressStyle = bindableObject as CircularProgressStyle;
+
+ if (null != progressStyle)
+ {
+ isEnabled = progressStyle.isEnabled;
+ thickness = progressStyle.Thickness;
+ maxValue = progressStyle.maxValue;
+ minValue = progressStyle.minValue;
+ currentValue = progressStyle.currentValue;
+ trackColor = progressStyle.trackColor;
+ progressColor = progressStyle.progressColor;
+ }
+ }
+
+ /// <summary>
/// Dispose CircularProgressStyle and all children on it.
/// </summary>
/// <param name="type">Dispose type.</param>
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty TrackColorProperty = BindableProperty.Create(nameof(TrackColor), typeof(Color), typeof(CircularScrollbarStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((CircularScrollbarStyle)bindable).trackColor = newValue == null ? null : new Color((Color)newValue);
+ ((CircularScrollbarStyle)bindable).trackColor = (Color)newValue;
},
defaultValueCreator: (bindable) =>
{
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty ThumbColorProperty = BindableProperty.Create(nameof(ThumbColor), typeof(Color), typeof(CircularScrollbarStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((CircularScrollbarStyle)bindable).thumbColor = newValue == null ? null : new Color((Color)newValue);
+ ((CircularScrollbarStyle)bindable).thumbColor = (Color)newValue;
},
defaultValueCreator: (bindable) =>
{
[EditorBrowsable(EditorBrowsableState.Never)]
public CircularScrollbarStyle() : base()
{
+ Initialize();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public CircularScrollbarStyle(CircularScrollbarStyle style) : base(style)
{
+ this.CopyFrom(style);
}
/// <summary>
}
#endregion Properties
+
+
+ #region Methods
+
+ /// <inheritdoc/>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public override void CopyFrom(BindableObject bindableObject)
+ {
+ base.CopyFrom(bindableObject);
+
+ var style = bindableObject as CircularScrollbarStyle;
+
+ if (null != style)
+ {
+ Thickness = style.Thickness;
+ TrackSweepAngle = style.TrackSweepAngle;
+ TrackColor = style.TrackColor;
+ ThumbColor = style.ThumbColor;
+ }
+ }
+
+ private void Initialize()
+ {
+ Thickness = 10.0f;
+ TrackSweepAngle = 60.0f;
+ TrackColor = new Color(1.0f, 1.0f, 1.0f, 0.15f);
+ ThumbColor = new Color(0.6f, 0.6f, 0.6f, 1.0f);
+ WidthResizePolicy = ResizePolicyType.FillToParent;
+ HeightResizePolicy = ResizePolicyType.FillToParent;
+ }
+
+ #endregion Methods
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty TrackColorProperty = BindableProperty.Create(nameof(TrackColor), typeof(Color), typeof(CircularSliderStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((CircularSliderStyle)bindable).trackColor = newValue == null ? null : new Color((Color)newValue);
+ ((CircularSliderStyle)bindable).trackColor = (Color)newValue;
},
defaultValueCreator: (bindable) =>
{
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty ProgressColorProperty = BindableProperty.Create(nameof(ProgressColor), typeof(Color), typeof(CircularSliderStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((CircularSliderStyle)bindable).progressColor = newValue == null ? null : new Color((Color)newValue);
+ ((CircularSliderStyle)bindable).progressColor = (Color)newValue;
},
defaultValueCreator: (bindable) =>
{
[EditorBrowsable(EditorBrowsableState.Never)]
public static readonly BindableProperty ThumbColorProperty = BindableProperty.Create(nameof(ThumbColor), typeof(Color), typeof(CircularSliderStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
{
- ((CircularSliderStyle)bindable).thumbColor = newValue == null ? null : new Color((Color)newValue);
+ ((CircularSliderStyle)bindable).thumbColor = (Color)newValue;
},
defaultValueCreator: (bindable) =>
{
[EditorBrowsable(EditorBrowsableState.Never)]
public CircularSliderStyle(CircularSliderStyle style) : base(style)
{
+ if (null == style) return;
+ this.CopyFrom(style);
}
/// <summary>
}
}
+ /// <summary>
+ /// Style's clone function.
+ /// </summary>
+ /// <param name="bindableObject">The style that need to copy.</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public override void CopyFrom(BindableObject bindableObject)
+ {
+ base.CopyFrom(bindableObject);
+
+ CircularSliderStyle progressStyle = bindableObject as CircularSliderStyle;
+
+ if (null != progressStyle)
+ {
+ isEnabled = progressStyle.isEnabled;
+ thickness = progressStyle.Thickness;
+ maxValue = progressStyle.maxValue;
+ minValue = progressStyle.minValue;
+ currentValue = progressStyle.currentValue;
+ trackColor = progressStyle.trackColor;
+ progressColor = progressStyle.progressColor;
+ thumbSize = progressStyle.thumbSize;
+ thumbColor = progressStyle.thumbColor;
+ }
+ }
+
private void Initialize()
{
isEnabled = true;
*
*/
using System.ComponentModel;
+using Tizen.NUI.BaseComponents;
using Tizen.NUI.Binding;
using Tizen.NUI.Components;
[EditorBrowsable(EditorBrowsableState.Never)]
public class PopupStyle : ControlStyle
{
- /// <summary>Bindable property of WrapContent</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static readonly BindableProperty WrapContentProperty = BindableProperty.Create(nameof(WrapContent), typeof(bool?), typeof(PopupStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
- {
- ((PopupStyle)bindable).wrapContent = (bool?)newValue;
- },
- defaultValueCreator: (bindable) =>
- {
- return ((PopupStyle)bindable).wrapContent;
- });
-
- private bool? wrapContent;
-
static PopupStyle() { }
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public PopupStyle(PopupStyle style) : base(style)
{
+ if (null == style)
+ {
+ return;
+ }
+ initSubStyle();
+ CopyFrom(style);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool? WrapContent
{
- get => (bool?)GetValue(WrapContentProperty);
- set => SetValue(WrapContentProperty, value);
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// Retrieves a copy of PopupStyle.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public override void CopyFrom(BindableObject bindableObject)
+ {
+ base.CopyFrom(bindableObject);
+
+ PopupStyle popupStyle = bindableObject as PopupStyle;
+ if (null != popupStyle)
+ {
+ if (null != popupStyle.WrapContent)
+ {
+ WrapContent = popupStyle.WrapContent;
+ }
+ }
}
private void initSubStyle()
</ItemGroup>
</Target>
- <ItemGroup>
- <None Update="res\**">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </None>
- </ItemGroup>
-
</Project>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<n:Theme xmlns:n="clr-namespace:Tizen.NUI;assembly=Tizen.NUI" Id="Tizen.NUI.Theme.Common" >
-</n:Theme>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<n:Theme xmlns:n="clr-namespace:Tizen.NUI;assembly=Tizen.NUI" Id="Tizen.NUI.Theme.Wearable" >
-</n:Theme>
\ No newline at end of file
//ResourceDictionary
if (xpe == null && TryAddToResourceDictionary(source as ResourceDictionary, value, xKey, node, out xpe))
return;
-
- // Dictionary with string key
- if (xpe == null && xKey != null)
- {
- var indexer = GetIndexer(source, typeof(string), value.GetType());
- if (indexer != null)
- {
- indexer.SetValue(source, value, new[] { xKey });
- return;
- }
- }
// Collection element, implicit content, or implicit collection element.
if (xpe == null && typeof(IEnumerable).IsAssignableFrom(Context.Types[parentElement]) && Context.Types[parentElement].GetRuntimeMethods().Any(mi => mi.Name == "Add" && mi.GetParameters().Length == 1)) {
SetPropertyValue(source, name, value, Context.RootElement, node, Context, node);
return;
- }
+ }
xpe = xpe ?? new XamlParseException($"Can not set the content of {((IElementNode)parentNode).XmlType.Name} as it doesn't have a ContentPropertyAttribute", node);
if (Context.ExceptionHandler != null)
SetPropertyValue(source, new XmlName("", runTimeName.Name), value, Context.RootElement, node, Context, node);
return true;
}
-
- private PropertyInfo GetIndexer(object source, Type keyType, Type valueType) => source.GetType().GetProperties().FirstOrDefault(p => p.Name == "Item" && p.PropertyType.IsAssignableFrom(valueType) && p.GetIndexParameters().Length != 0 && p.GetIndexParameters()[0].ParameterType == keyType);
}
}
using (var textReader = new StringReader(xaml))
using (var reader = XmlReader.Create(textReader))
{
- Load(view, reader);
- }
- }
-
- public static void Load(object view, XmlReader reader)
- {
- if (reader != null)
- {
while (reader.Read())
{
//Skip until element
using (var textreader = new StringReader(xaml))
using (var reader = XmlReader.Create(textreader))
{
- inflatedView = Create(reader, doNotThrow);
- }
- return inflatedView;
- }
-
- public static object Create(XmlReader reader, bool doNotThrow = false)
- {
- object inflatedView = null;
- if (reader != null)
- {
while (reader.Read())
{
//Skip until element
}
if (type == null)
- {
- var message = $"Type {elementName} not found in xmlns {namespaceURI}\n";
- message += "\n - Make sure the all used assemblies (e.g. Tizen.NUI.Components) are included in the application project.";
- message += "\n - Make sure the type and namespace are correct.\n";
- exception = new XamlParseException($"message", xmlInfo);
- }
+ exception = new XamlParseException($"Type {elementName} not found in xmlns {namespaceURI}", xmlInfo);
return type;
}
ushort.Parse(parts[2].Trim(), CultureInfo.InvariantCulture),
ushort.Parse(parts[3].Trim(), CultureInfo.InvariantCulture));
}
- else if (parts.Length == 1)
- {
- return new Extents(ushort.Parse(parts[0].Trim(), CultureInfo.InvariantCulture));
- }
}
throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(Extents)}");
var imageView = (ImageView)bindable;
if(newValue != null)
{
- imageView._border = new Rectangle((Rectangle)newValue);
+ imageView._border = (Rectangle)newValue;
imageView.UpdateImage(NpatchImageVisualProperty.Border, new PropertyValue(imageView._border));
}
},
internal ImageView(global::System.IntPtr cPtr, bool cMemoryOwn, bool shown = true) : base(Interop.ImageView.ImageView_SWIGUpcast(cPtr), cMemoryOwn)
{
- ApplyStyle(ThemeManager.GetStyle(nameof(ImageView)));
-
if (!shown)
{
SetVisible(false);
/// A class containing frame informations for a LottieAnimationView.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public class LottieFrameInfo : ICloneable
+ public class LottieFrameInfo
{
/// <summary>
/// Creates a new instance with a playing range.
}
/// <summary>
- /// Create a new instance from string.
- /// Possible input : "0, 10", "10"
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static implicit operator LottieFrameInfo(string pair)
- {
- if (pair == null)
- {
- return null;
- }
-
- string[] parts = pair.Split(',');
- if (parts.Length == 1)
- {
- return new LottieFrameInfo(Int32.Parse(parts[0].Trim()));
- }
- else if (parts.Length == 2)
- {
- return new LottieFrameInfo(Int32.Parse(parts[0].Trim()), Int32.Parse(parts[1].Trim()));
- }
-
- throw new InvalidCastException($"Can not convert string {pair} to LottieFrameInfo");
- }
-
- /// <summary>
/// The start frame of the lottie animation.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
}
}
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public object Clone() => new LottieFrameInfo(StartFrame, EndFrame);
-
private bool BeReadyToShow(LottieAnimationView lottieView)
{
// Validate input lottieView
/// Create an empty instance.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public ImageViewStyle() : base()
+ public ImageViewStyle()
{
}
/// <summary>
/// Selector class, which is related by Control State, it is base class for other Selector.
/// </summary>
- /// <typeparam name="T">The property type of the selector. if it's reference type, it should be of type <see cref="ICloneable"/> that implement deep copy in <see cref="ICloneable.Clone"/>.</typeparam>
/// <since_tizen> 6 </since_tizen>
/// 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 class Selector<T> : StateValueCollection<T>
{
- private readonly bool isCloneable = typeof(ICloneable).IsAssignableFrom(typeof(T));
+ private readonly bool cloneable = typeof(T).IsAssignableFrom(typeof(ICloneable));
+
/// <since_tizen> 6 </since_tizen>
/// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
public static implicit operator Selector<T>(T value)
[EditorBrowsable(EditorBrowsableState.Never)]
public Selector(T value) : this()
{
- All = isCloneable ? (T)((ICloneable)value)?.Clone() : value;
+ All = cloneable ? (T)((ICloneable)value)?.Clone() : value;
}
/// Copy constructor
Clone(value);
}
+
/// <summary>
/// All State.
/// </summary>
/// <summary>
/// Clone itself.
- /// If type T implements ISelectorItem, it calls Clone() method to clone values, otherwise use operator=.
+ /// If type T implements ICloneable, it calls Clone() method to clone values, otherwise use operator=.
/// </summary>
/// <since_tizen> 6 </since_tizen>
/// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
{
Clear();
- if (isCloneable)
+ if (cloneable)
{
All = (T)((ICloneable)other.All)?.Clone();
foreach (var item in other.StateValueList)
/// Create an empty instance.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public TextFieldStyle() : base()
+ public TextFieldStyle()
{
}
/// Create an empty instance.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public TextLabelStyle() : base()
+ public TextLabelStyle()
{
}
private Extents margin;
private float? weight;
private bool? enableControlState;
- private bool? themeChangeSensitive;
private Selector<ImageShadow> imageShadow;
private Selector<Shadow> boxShadow;
[EditorBrowsable(EditorBrowsableState.Never)]
public ViewStyle(ViewStyle viewAttributes)
{
- CopyFrom(viewAttributes);
+ if (null != viewAttributes)
+ {
+ this.CopyFrom(viewAttributes);
+ }
}
/// <summary>
}
/// <summary>
- /// The ThemeChangeSensitive value of the View.
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public bool? ThemeChangeSensitive
- {
- get => (bool?)GetValue(ThemeChangeSensitiveProperty);
- set => SetValue(ThemeChangeSensitiveProperty, value);
- }
-
-
- /// <summary>
- /// Allow null properties when merging it into other Theme.
- /// If the value is true, the null properties reset target properties of the other ViewStyle with same key when merge.
- /// It is used in <seealso cref="Theme.Merge(string)"/>, <seealso cref="Theme.Merge(Theme)"/>.
- /// It is also used in <seealso cref="Theme.GetStyle(string)"/> when the Theme has a parent and needs to merge.
- /// Please note that it is false by default.
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public bool SolidNull { get; set; } = false;
-
- /// <summary>
/// Set style's bindable properties from the view.
/// </summary>
/// <param name="view">The view that includes property data.</param>
}
}
- /// <summary>Create a cloned ViewStyle.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public ViewStyle Clone()
+ internal ViewStyle CreateInstance()
{
- var cloned = CreateInstance();
- cloned.CopyFrom(this);
-
- return cloned;
+ return (ViewStyle)Activator.CreateInstance(GetType());
}
- /// <summary>Create a cloned ViewStyle.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public void Merge(ViewStyle other)
+ internal ViewStyle Clone()
{
- AllowNullCopy = other?.SolidNull ?? false;
- CopyFrom(other);
- AllowNullCopy = false;
- }
+ var cloned = CreateInstance();
+ cloned.CopyFrom(this);
- internal ViewStyle CreateInstance()
- {
- return (ViewStyle)Activator.CreateInstance(GetType());
+ return cloned;
}
private void OnPaddingChanged(ushort start, ushort end, ushort top, ushort bottom)
{
if (viewStyle.size == null)
{
- if ((float)newValue == 0) return;
viewStyle.size = new Size();
}
viewStyle.size.Width = (float)newValue;
{
if (viewStyle.size == null)
{
- if ((float)newValue == 0) return;
viewStyle.size = new Size();
}
viewStyle.size.Height = (float)newValue;
{
var viewStyle = (ViewStyle)bindable;
viewStyle.position = (Position)newValue;
- if (viewStyle.position != null && viewStyle.position.X == 0 && viewStyle.position.Y == 0)
- {
- viewStyle.position = null;
- }
},
defaultValueCreator: (bindable) =>
{
{
if (viewStyle.position == null)
{
- if ((float)newValue == 0) return;
viewStyle.position = new Position();
}
viewStyle.position.X = (float)newValue;
{
if (viewStyle.position == null)
{
- if ((float)newValue == 0) return;
viewStyle.position = new Position();
}
viewStyle.position.Y = (float)newValue;
{
if (viewStyle.position == null)
{
- if ((float)newValue == 0) return;
viewStyle.position = new Position();
}
viewStyle.position.Z = (float)newValue;
{
var viewStyle = (ViewStyle)bindable;
viewStyle.scale = (Vector3)newValue;
- if (viewStyle.scale != null && viewStyle.scale.X == 1.0f && viewStyle.scale.Y == 1.0f && viewStyle.scale.Z == 1.0f) return;
},
defaultValueCreator: (bindable) =>
{
{
if (viewStyle.scale == null)
{
- if ((float)newValue == 1.0f) return;
viewStyle.scale = new Vector3();
}
viewStyle.scale.X = (float)newValue;
{
if (viewStyle.scale == null)
{
- if ((float)newValue == 1.0f) return;
viewStyle.scale = new Vector3();
}
viewStyle.scale.Y = (float)newValue;
{
if (viewStyle.scale == null)
{
- if ((float)newValue == 1.0f) return;
viewStyle.scale = new Vector3();
}
viewStyle.scale.Z = (float)newValue;
{
var viewStyle = (ViewStyle)bindable;
viewStyle.size = (Size)newValue;
- if (viewStyle.size != null && viewStyle.size.Width == 0 && viewStyle.size.Height == 0)
- {
- viewStyle.size = null;
- }
},
defaultValueCreator: (bindable) =>
{
var viewStyle = (ViewStyle)bindable;
viewStyle.imageShadow = ((Selector<ImageShadow>)newValue)?.Clone();
-
- if (viewStyle.imageShadow != null)
- {
- viewStyle.boxShadow = null;
- }
+ viewStyle.boxShadow = null;
},
defaultValueCreator: (bindable) =>
{
var viewStyle = (ViewStyle)bindable;
viewStyle.boxShadow = ((Selector<Shadow>)newValue)?.Clone();
-
- if (viewStyle.boxShadow != null)
- {
- viewStyle.imageShadow = null;
- }
+ viewStyle.imageShadow = null;
},
defaultValueCreator: (bindable) =>
{
{
return ((ViewStyle)bindable).enableControlState;
});
-
- /// <summary>
- /// EnableControlState property
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static readonly BindableProperty ThemeChangeSensitiveProperty = BindableProperty.Create("ThemeChangeSensitive", typeof(bool?), typeof(ViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
- {
- ((ViewStyle)bindable).themeChangeSensitive = (bool?)newValue;
- },
- defaultValueCreator: (bindable) =>
- {
- return ((ViewStyle)bindable).themeChangeSensitive;
- });
}
}
internal TextField(global::System.IntPtr cPtr, bool cMemoryOwn, bool shown = true) : base(Interop.TextField.TextField_SWIGUpcast(cPtr), cMemoryOwn)
{
- ApplyStyle(ThemeManager.GetStyle(nameof(TextField)));
-
if (!shown)
{
SetVisible(false);
internal TextLabel(global::System.IntPtr cPtr, bool cMemoryOwn, bool shown = true) : base(Interop.TextLabel.TextLabel_SWIGUpcast(cPtr), cMemoryOwn)
{
- ApplyStyle(ThemeManager.GetStyle(nameof(TextLabel)));
-
if (!shown)
{
SetVisible(false);
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;
/// 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, viewStyle)
+ public View(ViewStyle viewStyle) : this(Interop.View.View_New(), true)
{
+ 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());
+ ApplyStyle((viewStyle == null) ? GetViewStyle() : viewStyle.Clone());
}
internal View(global::System.IntPtr cPtr, bool cMemoryOwn, bool shown = true) : base(Interop.View.View_SWIGUpcast(cPtr), cMemoryOwn)
}
/// <summary>
- /// If the value is true, the View will change its style as the theme changes.
- /// It is false by default, unless it is Control instance created with specified style name.
- /// </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)
- {
- ViewStyle newStyle = ThemeManager.GetStyle(GetType());
-
- if (newStyle != null && viewStyle?.GetType() == newStyle.GetType())
- {
- ApplyStyle(newStyle);
- }
- }
-
/// 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)
return ((View)bindable).enableControlState;
});
- /// <summary>
- /// ThemeChangeSensitive property
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static readonly BindableProperty ThemeChangeSensitiveProperty = BindableProperty.Create(nameof(ThemeChangeSensitive), typeof(bool), typeof(View), false, propertyChanged: (bindable, oldValue, newValue) =>
- {
- var view = (View)bindable;
- view.themeChangeSensitive = (bool)newValue;
-
- if (view.themeChangeSensitive)
- {
- ThemeManager.ThemeChanged += view.OnThemeChanged;
- }
- else
- {
- ThemeManager.ThemeChanged -= view.OnThemeChanged;
- }
- },
- defaultValueCreator: (bindable) =>
- {
- return ((View)bindable).themeChangeSensitive;
- });
-
#region Selectors
internal static readonly BindableProperty BackgroundImageSelectorProperty = BindableProperty.Create("BackgroundImageSelector", typeof(Selector<string>), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
{
//Release your own managed resources here.
//You should release all of your own disposable objects here.
selectorData?.Reset(this);
- if (themeChangeSensitive)
- {
- ThemeManager.ThemeChanged -= OnThemeChanged;
- }
}
//Release your own unmanaged resources here.
/// The Color class.
/// </summary>
[Tizen.NUI.Binding.TypeConverter(typeof(ColorTypeConverter))]
- public class Color : Disposable, ICloneable
+ public class Color : Disposable
{
/// <summary>
/// Gets the black colored Color class.
return ret;
}
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public object Clone() => new Color(this);
-
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Color obj)
{
return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
* limitations under the License.
*
*/
-using System;
using System.ComponentModel;
using Tizen.NUI.Binding;
/// </summary>
/// <since_tizen> 4 </since_tizen>
[Binding.TypeConverter(typeof(ExtentsTypeConverter))]
- public class Extents : Disposable, ICloneable
+ public class Extents : Disposable
{
return ret;
}
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public object Clone() => new Extents(this);
-
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Extents obj)
{
return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
/// </summary>
/// <since_tizen> 3 </since_tizen>
[Tizen.NUI.Binding.TypeConverter(typeof(PositionTypeConverter))]
- public class Position : Disposable, ICloneable
+ public class Position : Disposable
{
/// <summary>
return ret;
}
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public object Clone() => new Position(X, Y, Z);
-
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Position obj)
{
return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
/// </summary>
/// <since_tizen> 3 </since_tizen>
[Tizen.NUI.Binding.TypeConverter(typeof(Position2DTypeConverter))]
- public class Position2D : Disposable, ICloneable
+ public class Position2D : Disposable
{
private Position2DChangedCallback callback = null;
return new Position2D((int)position.X, (int)position.Y);
}
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public object Clone() => new Position2D(this);
-
internal static Position2D GetPosition2DFromPtr(global::System.IntPtr cPtr)
{
Position2D ret = new Position2D(cPtr, false);
* limitations under the License.
*
*/
-using System;
using System.ComponentModel;
using Tizen.NUI.Binding;
/// </summary>
/// <since_tizen> 3 </since_tizen>
[Binding.TypeConverter(typeof(RectangleTypeConverter))]
- public class Rectangle : Disposable, ICloneable
+ public class Rectangle : Disposable
{
/// <summary>
/// The constructor.
return ret;
}
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public object Clone() => new Rectangle(this);
-
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Rectangle obj)
{
return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
/// </summary>
/// <since_tizen> 5 </since_tizen>
[Tizen.NUI.Binding.TypeConverter(typeof(SizeTypeConverter))]
- public class Size : Disposable, ICloneable
+ public class Size : Disposable
{
/// <summary>
return ret;
}
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public object Clone() => new Size(Width, Height, Depth);
-
/// <summary>
/// The type cast operator, Size to Vector3.
/// </summary>
* limitations under the License.
*
*/
-using System;
using System.ComponentModel;
using Tizen.NUI.Binding;
+using System.ComponentModel;
namespace Tizen.NUI
{
/// </summary>
/// <since_tizen> 3 </since_tizen>
[Tizen.NUI.Binding.TypeConverter(typeof(Size2DTypeConverter))]
- public class Size2D : Disposable, ICloneable
+ public class Size2D : Disposable
{
private Size2DChangedCallback callback = null;
return ret;
}
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public object Clone() => new Size2D(Width, Height);
-
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Size2D obj)
{
return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
private StyleChangedCallbackDelegate _styleManagerStyleChangedCallbackDelegate;
/// <summary>
- /// Internal use only. Do not open this API.
- /// This is to get TizenFX resource path. It needs to be fixed to use application framework API in the future.
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public readonly static string FrameworkResourcePath = "/usr/share/dotnet.tizen/framework/res/";
-
- /// <summary>
/// Creates a StyleManager handle.<br />
/// This can be initialized with StyleManager::Get().<br />
/// </summary>
+++ /dev/null
-/*
- * Copyright(c) 2020 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.
- *
- */
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Xml;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Binding;
-using Tizen.NUI.Xaml;
-
-namespace Tizen.NUI
-{
- /// <summary></summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public class Theme : BindableObject
- {
- private readonly Dictionary<string, ViewStyle> map;
- private string baseTheme;
-
- /// <summary>Create an empty theme.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public Theme()
- {
- map = new Dictionary<string, ViewStyle>();
- }
-
- /// <summary>Create a new theme from the xaml file.</summary>
- /// <param name="xamlFile">An absolute path to the xaml file.</param>
- /// <exception cref="ArgumentNullException">Thrown when the given xamlFile is null or empty string.</exception>
- /// <exception cref="global::System.IO.IOException">Thrown when there are file IO problems.</exception>
- /// <exception cref="Exception">Thrown when the content of the xaml file is not valid xaml form.</exception>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public Theme(string xamlFile) : this()
- {
- if (string.IsNullOrEmpty(xamlFile))
- {
- throw new ArgumentNullException("The xaml file path cannot be null or empty string", nameof(xamlFile));
- }
-
- try
- {
- using(var reader = XmlReader.Create(xamlFile))
- {
- XamlLoader.Load(this, reader);
- }
- }
- catch (global::System.IO.IOException e)
- {
- Tizen.Log.Info("NUI", $"Could not load \"{xamlFile}\".\n");
- throw e;
- }
- catch (Exception e)
- {
- Tizen.Log.Info("NUI", $"Could not parse \"{xamlFile}\".\n");
- Tizen.Log.Info("NUI", "Make sure the all used assemblies (e.g. Tizen.NUI.Components) are included in the application project.\n");
- Tizen.Log.Info("NUI", "Make sure the type and namespace are correct.\n");
- throw e;
- }
- }
-
- /// <summary></summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public string Id { get; set; }
-
- /// <summary>
- /// For XAML.
- /// The bulit-in theme id that will be used as base of this.
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public string BasedOn
- {
- get => baseTheme;
- internal set
- {
- baseTheme = value;
-
- if (string.IsNullOrEmpty(baseTheme)) return;
-
- var baseThemeInstance = ThemeManager.GetBuiltinTheme(baseTheme);
-
- if (baseThemeInstance != null)
- {
- foreach (var item in baseThemeInstance)
- {
- var baseStyle = item.Value?.Clone();
- if (map.ContainsKey(item.Key))
- {
- baseStyle.Merge(map[item.Key]);
- }
- map[item.Key] = baseStyle;
- }
- }
- }
- }
-
- /// <summary>Gets the number of steyls contained in the theme.</summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public int Count => map.Count;
-
- /// <summary>
- /// Note that it is not a normal indexer.
- /// Setter will merge the new value with existing item.
- /// </summary>
- public ViewStyle this[string styleName]
- {
- get => map[styleName];
- set
- {
- if (map.TryGetValue(styleName, out ViewStyle style))
- {
- style.Merge(value);
- }
- else
- {
- map[styleName] = value;
- }
- }
- }
-
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public IEnumerator<KeyValuePair<string, ViewStyle>> GetEnumerator() => map.GetEnumerator();
-
- /// <summary>
- /// Removes all styles in the theme.
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public void Clear() => map.Clear();
-
- /// <summary>
- /// Determines whether the theme contains the specified style name.
- /// </summary>
- /// <exception cref="ArgumentNullException">The given style name is null.</exception>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public bool HasStyle(string styleName) => map.ContainsKey(styleName);
-
- /// <summary>
- /// Removes the style with the specified style name.
- /// </summary>
- /// <exception cref="ArgumentNullException">The given style name is null.</exception>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public bool RemoveStyle(string styleName) => map.Remove(styleName);
-
- /// <summary>
- /// Gets a style of given style name.
- /// </summary>
- /// <param name="styleName">The string key to find a ViewStyle.</param>
- /// <returns>Founded style instance.</returns>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public ViewStyle GetStyle(string styleName) => map.ContainsKey(styleName) ? map[styleName] : null;
-
- /// <summary>
- /// Adds the specified style name and value to the theme.
- /// This replace existing value if the theme already has a style with given name.
- /// </summary>
- /// <param name="styleName">The style name to add.</param>
- /// <param name="value">The style instance to add.</param>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public void AddStyle(string styleName, ViewStyle value) => map[styleName] = value;
-
-
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public object Clone()
- {
- var result = new Theme()
- {
- Id = this.Id,
- };
-
- foreach (var item in this)
- {
- result[item.Key] = item.Value?.Clone();
- }
- return result;
- }
-
- /// <summary>Merge other Theme into this.</summary>
- /// <param name="xamlFile">An absolute path to the xaml file of the theme.</param>
- /// <exception cref="ArgumentException">Thrown when the given xamlFile is null or empty string.</exception>
- /// <exception cref="global::System.IO.IOException">Thrown when there are file IO problems.</exception>
- /// <exception cref="XamlParseException">Thrown when the content of the xaml file is not valid xaml form.</exception>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public void Merge(string xamlFile)
- {
- Merge(new Theme(xamlFile));
- }
-
- /// <summary>Merge other Theme into this.</summary>
- /// <param name="theme">The Theme.</param>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public void Merge(Theme theme)
- {
- if (theme == null)
- throw new ArgumentNullException(nameof(theme));
-
- foreach (var item in theme)
- {
- if (item.Value == null)
- {
- map[item.Key] = null;
- }
- else if (map.ContainsKey(item.Key) && !item.Value.SolidNull)
- {
- map[item.Key].Merge(theme.GetStyle(item.Key));
- }
- else
- {
- map[item.Key] = theme.GetStyle(item.Key).Clone();
- }
- }
- }
- }
-}
+++ /dev/null
-/*
- * Copyright(c) 2020 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.
- *
- */
-using System;
-using System.ComponentModel;
-
-namespace Tizen.NUI
-{
- /// <summary>
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public class ThemeChangedEventArgs : EventArgs
- {
- /// <summary>
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public ThemeChangedEventArgs(string themeId)
- {
- ThemeId = themeId;
- }
-
- /// <summary>
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public string ThemeId { get; }
- }
-}
+++ /dev/null
-/*
- * Copyright(c) 2020 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.
- *
- */
-extern alias TizenSystemInformation;
-using TizenSystemInformation.Tizen.System;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using Tizen.NUI.Xaml;
-using Tizen.NUI.BaseComponents;
-
-namespace Tizen.NUI
-{
- /// <summary></summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static class ThemeManager
- {
- private enum Profile
- {
- Common = 0,
- Mobile = 1,
- TV = 2,
- Wearable = 3
- }
-
- private static readonly string[] nuiThemeProjects =
- {
- "Tizen.NUI",
- "Tizen.NUI.Components",
- "Tizen.NUI.Wearable"
- };
-
- /// <summary>
- /// Table that indicates deefault theme id by device profile.
- /// Note that, the fallback of null value is Common value.
- /// </summary>
- private static readonly string[] profileDefaultTheme =
- {
- /* Common */ "Tizen.NUI.Theme.Common",
- /* Mobile */ "Tizen.NUI.Theme.Common",
- /* TV */ null,
- /* Wearable */ "Tizen.NUI.Theme.Wearable",
- };
-
- private static Theme currentTheme;
- private static List<Theme> builtinThemes; // First item is default theme of the current profile.
- private static bool isLoadingDefault = false;
- private static Profile? currentProfile;
-
- /// <summary>
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static event EventHandler<ThemeChangedEventArgs> ThemeChanged;
-
- internal static Theme CurrentTheme
- {
- get
- {
- if (currentTheme == null)
- {
- currentTheme = DefaultTheme;
- }
- return currentTheme;
- }
- set
- {
- currentTheme = value;
- NotifyThemeChanged();
- }
- }
-
- internal static Theme DefaultTheme
- {
- get => BuiltinThemes?[0];
- }
-
- private static List<Theme> BuiltinThemes
- {
- get
- {
- if (builtinThemes == null && !isLoadingDefault)
- {
- isLoadingDefault = true;
-
- // Set the default theme as first item.
- builtinThemes = new List<Theme>
- {
- LoadBuiltinTheme(profileDefaultTheme[(int)CurrentProfile])
- };
-
- isLoadingDefault = false;
- }
- return builtinThemes;
- }
- }
-
- private static Profile CurrentProfile
- {
- get
- {
- if (currentProfile == null)
- {
- currentProfile = Profile.Common;
- string profileString = "";
-
- try
- {
- Information.TryGetValue<string>("tizen.org/feature/profile", out profileString);
- Tizen.Log.Info("NUI", "Profile for initial theme found : " + profileString);
- }
- catch
- {
- Tizen.Log.Info("NUI", "Unknown device profile\n");
- }
- finally
- {
- if (string.Equals(profileString, "mobile"))
- {
- currentProfile = Profile.Mobile;
- }
- else if (string.Equals(profileString, "tv"))
- {
- currentProfile = Profile.TV;
- }
- else if (string.Equals(profileString, "wearable"))
- {
- currentProfile = Profile.Wearable;
- }
- }
- }
- return (Profile)currentProfile;
- }
- }
-
- /// <summary>
- /// Apply them to the NUI.
- /// This changes look of the existing components with property <seealso cref="View.ThemeChangeSensitive"/> on.
- /// This also affects all components created afterwards.
- /// </summary>
- /// <param name="theme">The theme instance to be applied.</param>
- /// <exception cref="ArgumentNullException">The given theme is null.</exception>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static void ApplyTheme(Theme theme)
- {
- var newTheme = (Theme)theme?.Clone() ?? throw new ArgumentNullException($"Invalid theme.");
-
- if (string.IsNullOrEmpty(newTheme.Id))
- {
- newTheme.Id = "NONAME";
- }
-
- CurrentTheme = newTheme;
- }
-
- /// <summary>
- /// Load a style with style name in the current theme.
- /// For components, the style name is a component name (e.g. Button) in normal case.
- /// </summary>
- /// <param name="styleName">The style name</param>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static ViewStyle GetStyle(string styleName)
- {
- if (styleName == null)
- {
- throw new ArgumentNullException(nameof(styleName));
- }
-
- return CurrentTheme?.GetStyle(styleName)?.Clone();
- }
-
- /// <summary>
- /// Load a style for a View in the current theme.
- /// </summary>
- /// <param name="viewType">The type of View</param>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static ViewStyle GetStyle(Type viewType)
- {
- if (viewType == null)
- {
- throw new ArgumentNullException(nameof(viewType));
- }
-
- var currentType = viewType;
- ViewStyle resultStyle = null;
-
- do
- {
- if (currentType.Equals(typeof(Tizen.NUI.BaseComponents.View))) break;
- resultStyle = GetStyle(currentType.Name)?.Clone();
- currentType = currentType.BaseType;
- }
- while (resultStyle == null && currentType != null);
-
- return resultStyle;
- }
-
- /// <summary>
- /// Get a cloned built-in theme.
- /// </summary>
- /// <param name="themeId">The built-in theme id.</param>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static Theme GetBuiltinTheme(string themeId)
- {
- Theme result = null;
- int index = BuiltinThemes.FindIndex(x => string.IsNullOrEmpty(x?.Id) && x.Id.Equals(themeId, StringComparison.OrdinalIgnoreCase));
- if (index > 0)
- {
- result = (Theme)BuiltinThemes[index];
- }
- else
- {
- var theme = LoadBuiltinTheme(themeId);
- BuiltinThemes.Add(theme);
- result = theme;
- }
- return (Theme)result?.Clone();
- }
-
- private static Theme LoadBuiltinTheme(string id)
- {
- var loaded = new Theme()
- {
- Id = id,
- };
-
- if (string.IsNullOrEmpty(id)) return loaded;
-
- foreach (var project in nuiThemeProjects)
- {
- string path = StyleManager.FrameworkResourcePath + "/Theme/" + project + "_" + id + ".xaml";
-
- try
- {
- loaded.Merge(path);
- loaded.Id = id;
- }
- catch (XamlParseException)
- {
- Tizen.Log.Error("NUI", $"Could not find \"{path}\".\n");
- Tizen.Log.Error("NUI", $"The assemblies used in the file may not be included in the project.\n");
- }
- catch (Exception)
- {
- Tizen.Log.Error("NUI", $"Could not load \"{path}\"\n");
- }
- }
-
- return loaded;
- }
-
- private static void NotifyThemeChanged()
- {
- ThemeChanged?.Invoke(null, new ThemeChangedEventArgs(CurrentTheme?.Id));
- }
- }
-}
* limitations under the License.
*
*/
-using System;
using System.ComponentModel;
using Tizen.NUI.Binding;
/// </summary>
/// <since_tizen> 3 </since_tizen>
[Binding.TypeConverter(typeof(Vector2TypeConverter))]
- public class Vector2 : Disposable, ICloneable
+ public class Vector2 : Disposable
{
/// <summary>
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public object Clone() => new Vector2(this);
-
/// <summary>
/// Clamps the vector between minimum and maximum vectors.
/// </summary>
* limitations under the License.
*
*/
-using System;
using System.ComponentModel;
using Tizen.NUI.Binding;
/// </summary>
/// <since_tizen> 3 </since_tizen>
[Binding.TypeConverter(typeof(Vector3TypeConverter))]
- public class Vector3 : Disposable, ICloneable
+ public class Vector3 : Disposable
{
/// <summary>
/// The constructor.
return ret;
}
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public object Clone() => new Vector3(X, Y, Z);
-
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Vector3 obj)
{
return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
* limitations under the License.
*
*/
-using System;
using System.ComponentModel;
using Tizen.NUI.Binding;
/// </summary>
/// <since_tizen> 3 </since_tizen>
[Binding.TypeConverter(typeof(Vector4TypeConverter))]
- public class Vector4 : Disposable, ICloneable
+ public class Vector4 : Disposable
{
/// <summary>
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public object Clone() => new Vector4(X, Y, Z, W);
-
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Vector4 obj)
{
return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
public ImageShadow(string url, Rectangle border, Vector2 offset, Vector2 extents) : base(offset, extents)
{
Url = url;
- Border = border == null ? null : new Rectangle(border);
+ Border = new Rectangle(border);
}
/// <summary>
public Shadow(float blurRadius, Vector2 offset, Color color, Vector2 extents) : base(offset, extents)
{
BlurRadius = blurRadius;
- Color = color == null ? null : new Color(color);
+ Color = new Color(color);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
protected ShadowBase(Vector2 offset, Vector2 extents)
{
- Offset = offset == null ? null : new Vector2(offset);
- Extents = extents == null ? null : new Vector2(extents);
+ Offset = new Vector2(offset);
+ Extents = new Vector2(extents);
}
/// <summary></summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public object Clone()
{
- return new TextShadow((Color)Color?.Clone(), Offset, BlurRadius);
+ return new TextShadow(Color, Offset, BlurRadius);
}
/// <summary>
+++ /dev/null
-using System;
-using System.ComponentModel;
-using Tizen.NUI.Binding;
-
-namespace Tizen.NUI.Xaml
-{
- /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
- [EditorBrowsable(EditorBrowsableState.Never)]
- [ContentProperty(nameof(FilePath))]
- [AcceptEmptyServiceProvider]
- public class ApplicationResourcePathExtension : IMarkupExtension<string>
- {
- /// <summary></summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public ApplicationResourcePathExtension()
- {
- }
-
- /// <summary></summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public string FilePath { get; set; }
-
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public string ProvideValue(IServiceProvider serviceProvider) => Tizen.Applications.Application.Current.DirectoryInfo.Resource + FilePath;
-
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
- {
- return (this as IMarkupExtension<string>).ProvideValue(serviceProvider);
- }
- }
-}
+++ /dev/null
-using System;
-using System.ComponentModel;
-using Tizen.NUI.Binding;
-
-namespace Tizen.NUI.Xaml
-{
- /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
- [EditorBrowsable(EditorBrowsableState.Never)]
- [ContentProperty(nameof(FilePath))]
- [AcceptEmptyServiceProvider]
- public class NUIResourcePathExtension : IMarkupExtension<string>
- {
- /// <summary></summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public NUIResourcePathExtension()
- {
- }
-
- /// <summary></summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public string FilePath { get; set; }
-
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public string ProvideValue(IServiceProvider serviceProvider) => StyleManager.FrameworkResourcePath + FilePath;
-
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
- {
- return (this as IMarkupExtension<string>).ProvideValue(serviceProvider);
- }
- }
-}
[EditorBrowsable(EditorBrowsableState.Never)]
public event PropertyChangedEventHandler PropertyChanged;
- /// <summary>Whether to allow null value when <seealso cref="CopyFrom"/>.</summary>
+ /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
[EditorBrowsable(EditorBrowsableState.Never)]
- protected static bool AllowNullCopy { get; set; } = false;
-
- /// <summary>Copy properties of other ViewStyle to this.</summary>
- /// <param name="other">The other BindableProperty merge to this.</param>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public virtual void CopyFrom(BindableObject other)
+ public virtual void CopyFrom(BindableObject that)
{
- if (null == other) return;
-
- Type type1 = this.GetType();
- BindableProperty.GetBindablePropertysOfType(type1, out var nameToBindableProperty1);
+ if (null != that)
+ {
+ Dictionary<string, BindableProperty> nameToBindableProperty1;
+ Type type1 = this.GetType();
+ BindableProperty.GetBindablePropertysOfType(type1, out nameToBindableProperty1);
- Type type2 = other.GetType();
- BindableProperty.GetBindablePropertysOfType(type2, out var nameToBindableProperty2);
+ Dictionary<string, BindableProperty> nameToBindableProperty2;
+ Type type2 = that.GetType();
+ BindableProperty.GetBindablePropertysOfType(type2, out nameToBindableProperty2);
- if (null != nameToBindableProperty1)
- {
- foreach (KeyValuePair<string, BindableProperty> keyValuePair in nameToBindableProperty1)
+ if (null != nameToBindableProperty1)
{
- nameToBindableProperty2.TryGetValue(keyValuePair.Key, out var bindableProperty);
-
- if (null != bindableProperty)
+ foreach (KeyValuePair<string, BindableProperty> keyValuePair in nameToBindableProperty1)
{
- object value = other.GetValue(bindableProperty);
+ BindableProperty bindableProperty;
+ nameToBindableProperty2.TryGetValue(keyValuePair.Key, out bindableProperty);
- if (AllowNullCopy || null != value)
+ if (null != bindableProperty)
{
- SetValue(keyValuePair.Value, value);
+ object value = that.GetValue(bindableProperty);
+
+ if (null != value)
+ {
+ SetValue(keyValuePair.Value, value);
+ }
}
}
}