/*
- * Copyright(c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright(c) 2022 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.
private EventHandler<StateChangedEventArgs> stateChangeHandler;
private bool isPressed = false;
- private bool styleApplied = false;
+ internal int styleApplying = 0;
/// <summary>
- /// Get accessibility name.
+ /// Gets accessibility name.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
protected override string AccessibilityGetName()
}
/// <summary>
- /// Prevents from showing child widgets in AT-SPI tree.
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- protected override bool AccessibilityShouldReportZeroChildren()
- {
- return true;
- }
-
- /// <summary>
/// The ButtonExtension instance that is injected by ButtonStyle.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
{
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
- AccessibilityHighlightable = false,
+ AccessibilityHidden = true,
};
}
{
return new ImageView()
{
- AccessibilityHighlightable = false
+ AccessibilityHidden = true,
};
}
PivotPoint = NUI.PivotPoint.Center,
WidthResizePolicy = ResizePolicyType.FillToParent,
HeightResizePolicy = ResizePolicyType.FillToParent,
- AccessibilityHighlightable = false
+ AccessibilityHidden = true,
};
}
}
ClickedEventArgs eventArgs = new ClickedEventArgs();
- OnClickedInternal(eventArgs);
+ OnClickedInternal(eventArgs, touch);
return true;
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected void UpdateState()
{
- if (!styleApplied) return;
+ if (styleApplying > 0) return;
ControlState sourceState = ControlState;
ControlState targetState;
public override void OnInitialize()
{
base.OnInitialize();
- SetAccessibilityConstructor(Role.PushButton);
+ AccessibilityRole = Role.PushButton;
AccessibilityHighlightable = true;
EnableControlStatePropagation = true;
buttonIcon = CreateIcon();
LayoutItems();
-#if PROFILE_MOBILE
Feedback = true;
-#endif
}
/// <inheritdoc/>
{
isPressed = statePressed;
}
+
+ if (IsSelectable)
+ {
+ var stateSelected = controlStateChangedInfo.CurrentState.Contains(ControlState.Selected);
+
+ if (IsSelected != stateSelected)
+ {
+ IsSelected = stateSelected;
+ }
+ }
}
/// <summary>
Layout = new LinearLayout()
{
LinearOrientation = LinearLayout.Orientation.Horizontal,
- LinearAlignment = itemAlignment,
+ HorizontalAlignment = itemHorizontalAlignment,
+ VerticalAlignment = itemVerticalAlignment,
CellPadding = cellPadding
};
Layout = new LinearLayout()
{
LinearOrientation = LinearLayout.Orientation.Horizontal,
- LinearAlignment = itemAlignment,
+ HorizontalAlignment = itemHorizontalAlignment,
+ VerticalAlignment = itemVerticalAlignment,
CellPadding = cellPadding
};
Layout = new LinearLayout()
{
LinearOrientation = LinearLayout.Orientation.Vertical,
- LinearAlignment = itemAlignment,
+ HorizontalAlignment = itemHorizontalAlignment,
+ VerticalAlignment = itemVerticalAlignment,
CellPadding = cellPadding
};
Layout = new LinearLayout()
{
LinearOrientation = LinearLayout.Orientation.Vertical,
- LinearAlignment = itemAlignment,
+ HorizontalAlignment = itemHorizontalAlignment,
+ VerticalAlignment = itemVerticalAlignment,
CellPadding = cellPadding
};
if (iconRelativeOrientation == IconOrientation.Left || iconRelativeOrientation == IconOrientation.Right)
{
- lengthWithoutText += (itemSpacing?.Width ?? 0) + iconMargin.Start + iconMargin.End + textMargin.Start + textMargin.End;
+ lengthWithoutText += (itemSpacing?.Width ?? 0) + iconMargin.Start + iconMargin.End + textMargin.Start + textMargin.End + Padding.Start + Padding.End;
}
else
{
- lengthWithoutText += (itemSpacing?.Height ?? 0) + iconMargin.Top + iconMargin.Bottom + textMargin.Top + textMargin.Bottom;
+ lengthWithoutText += (itemSpacing?.Height ?? 0) + iconMargin.Top + iconMargin.Bottom + textMargin.Top + textMargin.Bottom + Padding.Top + Padding.Bottom;
}
}
}
}
}
+ private void OnClickedInternal(ClickedEventArgs eventArgs, Touch touch)
+ {
+ // If GrabTouchAfterLeave is true, Up will result in Finished rather than Interrupted even if it is out of the button area.
+ // So, it is necessary to check whether it is Up in the button area.
+ if (GrabTouchAfterLeave == true)
+ {
+ Vector2 localPosition = touch.GetLocalPosition(0);
+ if ((localPosition != null && Size != null &&
+ 0 <= localPosition.X && localPosition.X <= Size.Width &&
+ 0 <= localPosition.Y && localPosition.Y <= Size.Height) == false)
+ {
+ return;
+ }
+ }
+ OnClickedInternal(eventArgs);
+ }
+
private void OnClickedInternal(ClickedEventArgs eventArgs)
{
Command?.Execute(CommandParameter);