{
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,
AccessibilityHighlightable = false
{
return new ImageView
{
- PositionUsesPivotPoint = true,
- ParentOrigin = NUI.ParentOrigin.Center,
- PivotPoint = NUI.PivotPoint.Center,
AccessibilityHighlightable = false
};
}
protected override void OnUpdate()
{
base.OnUpdate();
- UpdateUIContent();
-
Extension?.OnRelayout(this);
}
}
/// <summary>
- /// Measure text, it can be override.
- /// </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)]
- protected virtual void MeasureText()
- {
- if (buttonIcon == null || buttonText == null)
- {
- return;
- }
- buttonText.WidthResizePolicy = ResizePolicyType.Fixed;
- buttonText.HeightResizePolicy = ResizePolicyType.Fixed;
-
- var textPadding = TextPadding;
- int textPaddingStart = textPadding.Start;
- int textPaddingEnd = textPadding.End;
- int textPaddingTop = textPadding.Top;
- int textPaddingBottom = textPadding.Bottom;
-
- var iconPadding = IconPadding;
- int iconPaddingStart = iconPadding.Start;
- int iconPaddingEnd = iconPadding.End;
- int iconPaddingTop = iconPadding.Top;
- int iconPaddingBottom = iconPadding.Bottom;
-
- if (IconRelativeOrientation == IconOrientation.Top || IconRelativeOrientation == IconOrientation.Bottom)
- {
- buttonText.SizeWidth = SizeWidth - textPaddingStart - textPaddingEnd;
- buttonText.SizeHeight = SizeHeight - textPaddingTop - textPaddingBottom - iconPaddingTop - iconPaddingBottom - buttonIcon.SizeHeight;
- }
- else
- {
- buttonText.SizeWidth = SizeWidth - textPaddingStart - textPaddingEnd - iconPaddingStart - iconPaddingEnd - buttonIcon.SizeWidth;
- buttonText.SizeHeight = SizeHeight - textPaddingTop - textPaddingBottom;
- }
- }
-
- /// <summary>
- /// Layout child, it can be override.
- /// </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)]
- protected virtual void LayoutChild()
- {
- if (buttonIcon == null || buttonText == null)
- {
- return;
- }
-
- var textPadding = TextPadding;
- int textPaddingStart = textPadding.Start;
- int textPaddingEnd = textPadding.End;
- int textPaddingTop = textPadding.Top;
- int textPaddingBottom = textPadding.Bottom;
-
- var iconPadding = IconPadding;
- int iconPaddingStart = iconPadding.Start;
- int iconPaddingEnd = iconPadding.End;
- int iconPaddingTop = iconPadding.Top;
- int iconPaddingBottom = iconPadding.Bottom;
-
- switch (IconRelativeOrientation)
- {
- case IconOrientation.Top:
- buttonIcon.PositionUsesPivotPoint = true;
- buttonIcon.ParentOrigin = NUI.ParentOrigin.TopCenter;
- buttonIcon.PivotPoint = NUI.PivotPoint.TopCenter;
- buttonIcon.Position2D = new Position2D(0, iconPaddingTop);
-
- buttonText.PositionUsesPivotPoint = true;
- buttonText.ParentOrigin = NUI.ParentOrigin.BottomCenter;
- buttonText.PivotPoint = NUI.PivotPoint.BottomCenter;
- buttonText.Position2D = new Position2D(0, -textPaddingBottom);
- break;
- case IconOrientation.Bottom:
- buttonIcon.PositionUsesPivotPoint = true;
- buttonIcon.ParentOrigin = NUI.ParentOrigin.BottomCenter;
- buttonIcon.PivotPoint = NUI.PivotPoint.BottomCenter;
- buttonIcon.Position2D = new Position2D(0, -iconPaddingBottom);
-
- buttonText.PositionUsesPivotPoint = true;
- buttonText.ParentOrigin = NUI.ParentOrigin.TopCenter;
- buttonText.PivotPoint = NUI.PivotPoint.TopCenter;
- buttonText.Position2D = new Position2D(0, textPaddingTop);
- break;
- case IconOrientation.Left:
- if (LayoutDirection == ViewLayoutDirectionType.LTR)
- {
- buttonIcon.PositionUsesPivotPoint = true;
- buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterLeft;
- buttonIcon.PivotPoint = NUI.PivotPoint.CenterLeft;
- buttonIcon.Position2D = new Position2D(iconPaddingStart, 0);
-
- buttonText.PositionUsesPivotPoint = true;
- buttonText.ParentOrigin = NUI.ParentOrigin.CenterRight;
- buttonText.PivotPoint = NUI.PivotPoint.CenterRight;
- buttonText.Position2D = new Position2D(-textPaddingEnd, 0);
- }
- else
- {
- buttonIcon.PositionUsesPivotPoint = true;
- buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterRight;
- buttonIcon.PivotPoint = NUI.PivotPoint.CenterRight;
- buttonIcon.Position2D = new Position2D(-iconPaddingStart, 0);
-
- buttonText.PositionUsesPivotPoint = true;
- buttonText.ParentOrigin = NUI.ParentOrigin.CenterLeft;
- buttonText.PivotPoint = NUI.PivotPoint.CenterLeft;
- buttonText.Position2D = new Position2D(textPaddingEnd, 0);
- }
-
- break;
- case IconOrientation.Right:
- if (LayoutDirection == ViewLayoutDirectionType.RTL)
- {
- buttonIcon.PositionUsesPivotPoint = true;
- buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterLeft;
- buttonIcon.PivotPoint = NUI.PivotPoint.CenterLeft;
- buttonIcon.Position2D = new Position2D(iconPaddingEnd, 0);
-
- buttonText.PositionUsesPivotPoint = true;
- buttonText.ParentOrigin = NUI.ParentOrigin.CenterRight;
- buttonText.PivotPoint = NUI.PivotPoint.CenterRight;
- buttonText.Position2D = new Position2D(-textPaddingStart, 0);
- }
- else
- {
- buttonIcon.PositionUsesPivotPoint = true;
- buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterRight;
- buttonIcon.PivotPoint = NUI.PivotPoint.CenterRight;
- buttonIcon.Position2D = new Position2D(-iconPaddingEnd, 0);
-
- buttonText.PositionUsesPivotPoint = true;
- buttonText.ParentOrigin = NUI.ParentOrigin.CenterLeft;
- buttonText.PivotPoint = NUI.PivotPoint.CenterLeft;
- buttonText.Position2D = new Position2D(textPaddingStart, 0);
- }
- break;
- default:
- break;
- }
- if (string.IsNullOrEmpty(buttonText.Text))
- {
- buttonIcon.ParentOrigin = NUI.ParentOrigin.Center;
- buttonIcon.PivotPoint = NUI.PivotPoint.Center;
- }
- }
-
- /// <summary>
/// Dispose Button and all children on it.
/// </summary>
/// <param name="type">Dispose type.</param>
AccessibilityHighlightable = true;
EnableControlStatePropagation = true;
- LayoutDirectionChanged += OnLayoutDirectionChanged;
AccessibilityManager.Instance.SetAccessibilityAttribute(this, AccessibilityManager.AccessibilityAttribute.Trait, "Button");
+ buttonText = CreateText();
+ buttonIcon = CreateIcon();
+ LayoutItems();
+
#if PROFILE_MOBILE
Feedback = true;
#endif
}
}
- private void UpdateUIContent()
+ /// <summary>
+ /// Put sub items (e.g. buttonText, buttonIcon) to the right place.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected virtual void LayoutItems()
{
- MeasureText();
- LayoutChild();
+ if (buttonIcon == null || buttonText == null)
+ {
+ return;
+ }
- Sensitive = IsEnabled;
- }
+ buttonIcon.Unparent();
+ buttonText.Unparent();
+ overlayImage?.Unparent();
- private void OnLayoutDirectionChanged(object sender, LayoutDirectionChangedEventArgs e)
- {
- MeasureText();
- LayoutChild();
+ if (IconRelativeOrientation == IconOrientation.Left)
+ {
+ Layout = new LinearLayout()
+ {
+ LinearOrientation = LinearLayout.Orientation.Horizontal,
+ LinearAlignment = LinearLayout.Alignment.Center,
+ };
+
+ Add(buttonIcon);
+ Add(buttonText);
+ }
+ else if (IconRelativeOrientation == IconOrientation.Right)
+ {
+ Layout = new LinearLayout()
+ {
+ LinearOrientation = LinearLayout.Orientation.Horizontal,
+ LinearAlignment = LinearLayout.Alignment.Center,
+ };
+
+ Add(buttonText);
+ Add(buttonIcon);
+ }
+ else if (IconRelativeOrientation == IconOrientation.Top)
+ {
+ Layout = new LinearLayout()
+ {
+ LinearOrientation = LinearLayout.Orientation.Vertical,
+ LinearAlignment = LinearLayout.Alignment.Center,
+ };
+
+ Add(buttonIcon);
+ Add(buttonText);
+ }
+ else if (IconRelativeOrientation == IconOrientation.Bottom)
+ {
+ Layout = new LinearLayout()
+ {
+ LinearOrientation = LinearLayout.Orientation.Vertical,
+ LinearAlignment = LinearLayout.Alignment.Center,
+ };
+
+ Add(buttonText);
+ Add(buttonIcon);
+ }
+
+ if (overlayImage != null)
+ {
+ overlayImage.ExcludeLayouting = true;
+ Add(overlayImage);
+ }
}
private void OnClickedInternal(ClickedEventArgs eventArgs)
Clicked?.Invoke(this, eventArgs);
}
- private void OnIconRelayout(object sender, EventArgs e)
- {
- MeasureText();
- LayoutChild();
- }
-
internal override bool OnAccessibilityActivated()
{
using (var key = new Key())
*/
using System;
using System.ComponentModel;
+using System.Diagnostics;
using Tizen.NUI.BaseComponents;
using Tizen.NUI.Binding;
using Tizen.NUI.Accessibility;
if (instance.iconRelativeOrientation != newIconOrientation)
{
instance.iconRelativeOrientation = newIconOrientation;
- instance.UpdateUIContent();
+ instance.LayoutItems();
}
},
defaultValueCreator: (bindable) => ((Button)bindable).iconRelativeOrientation
if (instance.isEnabled != newEnabled)
{
instance.isEnabled = newEnabled;
+ instance.Sensitive = newEnabled;
instance.UpdateState();
}
}
{
var instance = (Button)bindable;
instance.iconPadding = (Extents)((Extents)newValue).Clone();
- instance.UpdateUIContent();
+ if (instance.buttonIcon != null)
+ {
+ instance.buttonIcon.Margin = instance.iconPadding;
+ }
},
defaultValueCreator: (bindable) => ((Button)bindable).iconPadding);
{
var instance = (Button)bindable;
instance.textPadding = (Extents)((Extents)newValue).Clone();
- instance.UpdateUIContent();
+ if (instance.buttonText != null)
+ {
+ instance.buttonText.Margin = instance.textPadding;
+ }
},
defaultValueCreator: (bindable) => ((Button)bindable).textPadding);
- private IconOrientation? iconRelativeOrientation;
+ private IconOrientation? iconRelativeOrientation = IconOrientation.Left;
private bool isSelected = false;
private bool isSelectable = false;
private bool isEnabled = true;
/// <since_tizen> 8 </since_tizen>
public ImageView Icon
{
- get
- {
- if (null == buttonIcon)
- {
- buttonIcon = CreateIcon();
- if (null != Extension)
- {
- buttonIcon = Extension.OnCreateIcon(this, buttonIcon);
- }
- if (null != buttonIcon)
- {
- Add(buttonIcon);
- buttonIcon.Relayout += OnIconRelayout;
- }
- }
- return buttonIcon;
- }
+ get => buttonIcon;
internal set
{
buttonIcon = value;
}
if (null != overlayImage)
{
+ overlayImage.ExcludeLayouting = true;
Add(overlayImage);
}
}
/// <since_tizen> 8 </since_tizen>
public TextLabel TextLabel
{
- get
- {
- if (null == buttonText)
- {
- buttonText = CreateText();
- if (null != Extension)
- {
- buttonText = Extension.OnCreateText(this, buttonText);
- }
- if (null != buttonText)
- {
- Add(buttonText);
- }
- }
- return buttonText;
- }
+ get => buttonText;
internal set
{
buttonText = value;
/// <since_tizen> 8 </since_tizen>
public override void ApplyStyle(ViewStyle viewStyle)
{
+ Debug.Assert(buttonIcon != null && buttonText != null);
+
styleApplied = false;
base.ApplyStyle(viewStyle);
if (viewStyle is ButtonStyle buttonStyle)
{
Extension = buttonStyle.CreateExtension();
+
if (buttonStyle.Overlay != null)
- {
+ {
OverlayImage?.ApplyStyle(buttonStyle.Overlay);
}
+ if (Extension != null)
+ {
+ buttonIcon.Unparent();
+ buttonText.Unparent();
+ buttonIcon = Extension.OnCreateIcon(this, buttonIcon);
+ buttonText = Extension.OnCreateText(this, buttonText);
+ LayoutItems();
+ }
+
if (buttonStyle.Text != null)
{
- TextLabel?.ApplyStyle(buttonStyle.Text);
+ buttonText.ApplyStyle(buttonStyle.Text);
}
if (buttonStyle.Icon != null)
{
- Icon?.ApplyStyle(buttonStyle.Icon);
+ buttonIcon.ApplyStyle(buttonStyle.Icon);
}
}
base.OnInitialize();
SetAccessibilityConstructor(Role.CheckBox);
+ WidthSpecification = LayoutParamPolicies.WrapContent;
+ HeightSpecification = LayoutParamPolicies.WrapContent;
}
/// <summary>
base.ItemGroup = value;
}
}
-
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- protected override ImageView CreateIcon()
- {
- return new ImageView
- {
- PositionUsesPivotPoint = true,
- ParentOrigin = NUI.ParentOrigin.Center,
- PivotPoint = NUI.PivotPoint.Center,
- WidthResizePolicy = ResizePolicyType.DimensionDependency,
- HeightResizePolicy = ResizePolicyType.SizeRelativeToParent,
- SizeModeFactor = new Vector3(1, 1, 1),
- };
- }
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
public override ImageView OnCreateIcon(Button button, ImageView icon)
{
- if (button == null)
- {
- throw new ArgumentNullException("button");
- }
-
- 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;
/// <inheritdoc/>
[EditorBrowsable(EditorBrowsableState.Never)]
- protected override ImageView CreateIcon()
- {
- return new ImageView
- {
- PositionUsesPivotPoint = true,
- ParentOrigin = NUI.ParentOrigin.Center,
- PivotPoint = NUI.PivotPoint.Center,
- WidthResizePolicy = ResizePolicyType.DimensionDependency,
- HeightResizePolicy = ResizePolicyType.SizeRelativeToParent,
- SizeModeFactor = new Vector3(1, 1, 1),
- };
- }
-
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
public override bool OnKey(Key key)
{
if ((IsEnabled == false) || (key == null))
[EditorBrowsable(EditorBrowsableState.Never)]
public override void OnInitialize()
{
+ track = new ImageView();
+ thumb = new ImageView();
+ track.Add(thumb);
+
base.OnInitialize();
SetAccessibilityConstructor(Role.ToggleButton);
+
IsSelectable = true;
#if PROFILE_MOBILE
Feedback = true;
[EditorBrowsable(EditorBrowsableState.Never)]
public override void ApplyStyle(ViewStyle viewStyle)
{
- SwitchStyle swStyle = viewStyle as SwitchStyle;
-
- if (null != swStyle)
+ if (viewStyle is SwitchStyle switchStyle)
{
- if (swStyle.Track != null)
+ if (Extension is SwitchExtension extension)
+ {
+ track.Unparent();
+ thumb.Unparent();
+ track = extension.OnCreateTrack(this, track);
+ thumb = extension.OnCreateThumb(this, thumb);
+ track.Add(thumb);
+ }
+
+ if (switchStyle.Track != null)
{
- Track.ApplyStyle(swStyle.Track);
+ Track.ApplyStyle(switchStyle.Track);
}
- if (swStyle.Thumb != null)
+ if (switchStyle.Thumb != null)
{
- Thumb.ApplyStyle(swStyle.Thumb);
+ Thumb.ApplyStyle(switchStyle.Thumb);
}
}
/// <since_tizen> 8 </since_tizen>
public ImageView Track
{
- get
- {
- if (track == null)
- {
- track = new ImageView()
- {
- PositionUsesPivotPoint = true,
- ParentOrigin = Tizen.NUI.ParentOrigin.CenterLeft,
- PivotPoint = Tizen.NUI.PivotPoint.CenterLeft,
- WidthResizePolicy = ResizePolicyType.FillToParent,
- HeightResizePolicy = ResizePolicyType.FillToParent
- };
-
- var extension = (SwitchExtension)Extension;
- if (extension != null)
- {
- track = extension.OnCreateTrack(this, track);
- }
- Add(track);
- }
- return track;
- }
+ get => track;
internal set
{
track = value;
/// <since_tizen> 8 </since_tizen>
public ImageView Thumb
{
- get
- {
- if (thumb == null)
- {
- thumb = new ImageView()
- {
- PositionUsesPivotPoint = true,
- ParentOrigin = Tizen.NUI.ParentOrigin.CenterLeft,
- PivotPoint = Tizen.NUI.PivotPoint.CenterLeft,
- WidthResizePolicy = ResizePolicyType.Fixed,
- HeightResizePolicy = ResizePolicyType.Fixed
- };
-
- var extension = (SwitchExtension)Extension;
- if (extension != null)
- {
- thumb = extension.OnCreateThumb(this, thumb);
- }
- Add(thumb);
- }
- return thumb;
- }
+ get => thumb;
internal set
{
thumb = value;
}
}
+ /// <inheritdoc/>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override void LayoutItems()
+ {
+ base.LayoutItems();
+ track.Unparent();
+ Add(track);
+ track.LowerToBottom();
+ }
+
private void OnSelect()
{
if (IsHighlighted)
theme.AddStyleWithoutClone("Tizen.NUI.Components.CheckBox", new ButtonStyle()
{
- Size = new Size(30, 30),
+ IconPadding = 5,
Icon = new ImageViewStyle()
{
+ Size = new Size(30, 30),
Opacity = new Selector<float?>()
{
Normal = 1.0f,
{
BackgroundColor = new Selector<Color>()
{
- Normal = new Color(1, 1, 1, 1),
Pressed = new Color(0, 0, 0, 0.1f),
- Other = new Color(1, 1, 1, 1),
+ Other = new Color(1, 1, 1, 0.1f),
},
},
Text = new TextLabelStyle()
theme.AddStyleWithoutClone("Tizen.NUI.Components.RadioButton", new ButtonStyle()
{
- Size = new Size(30, 30),
+ IconPadding = 5,
Icon = new ImageViewStyle()
{
+ Size = new Size(30, 30),
Opacity = new Selector<float?>()
{
Normal = 1.0f,
theme.AddStyleWithoutClone("Tizen.NUI.Components.Switch", new SwitchStyle()
{
- Size = new Size(96, 60),
+ IconPadding = 5,
Track = new ImageViewStyle()
{
Size = new Size(96, 60),
childTop = new LayoutLength(Padding.Top + childMargin.Top);
break;
}
- childLeft += childMargin.Start;
+ childLeft += (isLayoutRtl ? childMargin.End : childMargin.Start);
childLayout.Layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight);
- childLeft += childWidth + childMargin.End + ((i < count - 1) ? CellPadding.Width : 0);
+ childLeft += childWidth + (isLayoutRtl ? childMargin.Start : childMargin.End) + ((i < count - 1) ? CellPadding.Width : 0);
}
} // LayoutHorizontally