{
isSelected = value;
- UpdateState(SelectionChangedByTouch);
-
- SelectionChangedByTouch = null;
+ UpdateState();
}
}
{
case PointStateType.Down:
isPressed = true;
- UpdateState(touch);
+ Extension?.SetTouchInfo(touch);
+ UpdateState();
return true;
case PointStateType.Interrupted:
isPressed = false;
if (Style.IsSelectable != null && Style.IsSelectable == true)
{
- SelectionChangedByTouch = touch;
+ Extension?.SetTouchInfo(touch);
IsSelected = !IsSelected;
}
else
{
- UpdateState(touch);
+ Extension?.SetTouchInfo(touch);
+ UpdateState();
}
if (clicked)
/// <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 void UpdateState(Touch touchInfo = null)
+ protected void UpdateState()
{
ControlStates sourceState = ControlState;
ControlStates targetState;
targetState |= (IsSelected ? ControlStates.Selected : (IsFocused ? ControlStates.Focused : 0));
}
- if (SetControlState(targetState, ControlStateChangedInfo.InputMethodType.Touch, touchInfo))
+ if (sourceState != targetState)
{
+ ControlState = targetState;
+
OnUpdate();
StateChangedEventArgs e = new StateChangedEventArgs
};
stateChangeHander?.Invoke(this, e);
- Extension?.OnControlStateChanged(this, sourceState, touchInfo);
+ Extension?.OnControlStateChanged(this, new ControlStateChangedEventArgs(sourceState, targetState));
}
}
public abstract class ButtonExtension
{
/// <summary>
+ /// The Touch info to get current touch position.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected Touch TouchInfo { get; private set; }
+
+ /// <summary>
/// Called immediately after the Button creates the text part.
/// </summary>
/// <param name="button">The Button instance that the extension currently applied to.</param>
/// Describes actions on Button's ControlStates changed.
/// </summary>
/// <param name="button">The Button instance that the extension currently applied to.</param>
- /// <param name="previousState">The previous contol state of the Button.</param>
- /// <param name="touchInfo">The touch information in case the state has changed by touching.</param>
+ /// <param name="args">The control state changed information.</param>
[EditorBrowsable(EditorBrowsableState.Never)]
- public virtual void OnControlStateChanged(Button button, ControlStates previousState, Touch touchInfo)
+ public virtual void OnControlStateChanged(Button button, View.ControlStateChangedEventArgs args)
{
}
public virtual void OnDispose(Button button)
{
}
- }
+
+ /// <summary>
+ /// Set the Touch Info.
+ /// </summary>
+ /// <param name="touch">The Touch Info.</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public void SetTouchInfo(Touch touch) => TouchInfo = touch;
+ }
}
/// <inheritdoc/>
[EditorBrowsable(EditorBrowsableState.Never)]
- public override void OnControlStateChanged(Button button, ControlStates previousState, Touch touchInfo)
+ public override void OnControlStateChanged(Button button, View.ControlStateChangedEventArgs args)
{
- UpdateLottieView(button, previousState, touchInfo, LottieView);
+ UpdateLottieView(button, args.PreviousState, LottieView);
}
internal static void InitializeLottieView(Button button, LottieAnimationView lottieView)
lottieStyle.PlayRange?.GetValue(ControlStates.Normal)?.Show(lottieView, true);
}
- internal static void UpdateLottieView(Button button, ControlStates previousState, Touch touchInfo, LottieAnimationView lottieView)
+ internal static void UpdateLottieView(Button button, ControlStates previousState, LottieAnimationView lottieView)
{
((ILottieButtonStyle)button.Style).PlayRange?.GetValue(button.ControlState)?.Show(lottieView, ((int)previousState & (int)ControlStates.Pressed) == 0);
}
/// <inheritdoc/>
[EditorBrowsable(EditorBrowsableState.Never)]
- public override void OnControlStateChanged(Button button, ControlStates previousState, Touch touchInfo)
+ public override void OnControlStateChanged(Button button, View.ControlStateChangedEventArgs args)
{
- LottieButtonExtension.UpdateLottieView(button, previousState, touchInfo, LottieView);
+ LottieButtonExtension.UpdateLottieView(button, args.PreviousState, LottieView);
}
}
}
/// <inheritdoc/>
[EditorBrowsable(EditorBrowsableState.Never)]
- public override void OnControlStateChanged(Button button, ControlStates previousState, Touch touchInfo)
+ public override void OnControlStateChanged(Button button, View.ControlStateChangedEventArgs args)
{
if (button.ControlState != ControlStates.Pressed)
{
}
}
- private void OnViewControlState(View obj, View.ControlStateChangedInfo controlStateChangedInfo)
+ private void OnViewControlState(object obj, View.ControlStateChangedEventArgs controlStateChangedInfo)
{
- if (null != obj && null != GetValue(controlStateChangedInfo.CurrentState))
+ View view = obj as View;
+ if (null != view && null != GetValue(controlStateChangedInfo.CurrentState))
{
- obj.SetValue(targetBindableProperty, GetValue(controlStateChangedInfo.CurrentState));
+ view.SetValue(targetBindableProperty, GetValue(controlStateChangedInfo.CurrentState));
}
}
{
protected Selector<T> selector;
protected View view;
- protected View.ControlStateChangesDelegate controlStateChanged;
+ protected EventHandler<View.ControlStateChangedEventArgs> controlStateChanged;
- internal ViewSelector(View view, View.ControlStateChangesDelegate controlStateChanged)
+ internal ViewSelector(View view, EventHandler<View.ControlStateChangedEventArgs> controlStateChanged)
{
if (view == null || controlStateChanged == null)
{
/// </summary>
internal class CloneableViewSelector<T> : ViewSelector<T> where T : Tizen.NUI.Internal.ICloneable
{
- internal CloneableViewSelector(View view, View.ControlStateChangesDelegate controlStateChanged) : base(view, controlStateChanged)
+ internal CloneableViewSelector(View view, EventHandler<View.ControlStateChangedEventArgs> controlStateChanged) : base(view, controlStateChanged)
{
}
TextShadow = instance;
}
- private void OnControlStateChangedForShadow(View obj, ControlStateChangedInfo controlStateChangedInfo)
+ private void OnControlStateChangedForShadow(object obj, ControlStateChangedEventArgs controlStateChangedInfo)
{
UpdateTextShadowVisual();
}
}
/// <summary>
- /// The delegate for ControlState changed event.
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public delegate void ControlStateChangesDelegate(View obj, ControlStateChangedInfo controlStateChangedInfo);
-
- /// <summary>
/// The event that is triggered when the View's ControlState is changed.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public event ControlStateChangesDelegate ControlStateChangeEvent;
+ public event EventHandler<ControlStateChangedEventArgs> ControlStateChangedEvent;
- internal event ControlStateChangesDelegate ControlStateChangeEventInternal;
+ internal event EventHandler<ControlStateChangedEventArgs> ControlStateChangeEventInternal;
private ControlStates controlStates;
/// <summary>
}
set
{
- SetControlState(value, ControlStateChangedInfo.InputMethodType.None, null);
+ if (controlStates == value)
+ {
+ return;
+ }
+
+ var prevState = controlStates;
+
+ controlStates = value;
+
+ var changeInfo = new ControlStateChangedEventArgs(prevState, value);
+
+ ControlStateChangeEventInternal?.Invoke(this, changeInfo);
+
+ OnControlStateChanged(changeInfo);
+
+ if (controlStatePropagation)
+ {
+ foreach (View child in Children)
+ {
+ child.ControlState = value;
+ }
+ }
+
+ ControlStateChangedEvent?.Invoke(this, changeInfo);
}
}
}
/// <summary>
- /// Set ControlState with specified inpu environment
- /// </summary>
- /// <param name="state">New state value</param>
- /// <param name="inputMethod">Indicates the input method that triggered this change.</param>
- /// <param name="inputData">The input method data that depends on the inputMethod.</param>
- /// <return>True, if the state changed successfully.</return>
- [EditorBrowsable(EditorBrowsableState.Never)]
- protected bool SetControlState(ControlStates state, ControlStateChangedInfo.InputMethodType inputMethod, object inputData)
- {
- if (controlStates == state)
- {
- return false;
- }
-
- var prevState = controlStates;
-
- controlStates = state;
-
- var changeInfo = new ControlStateChangedInfo(prevState, state, inputMethod, inputData);
-
- ControlStateChangeEventInternal?.Invoke(this, changeInfo);
-
- OnControlStateChanged(changeInfo);
-
- if (controlStatePropagation)
- {
- foreach (View child in Children)
- {
- child.SetControlState(state, inputMethod, inputData);
- }
- }
-
- ControlStateChangeEvent?.Invoke(this, changeInfo);
-
- return true;
- }
-
- /// <summary>
/// Called after the View's ControlStates changed.
/// </summary>
/// <param name="controlStateChangedInfo">The information including state changed variables.</param>
[EditorBrowsable(EditorBrowsableState.Never)]
- protected virtual void OnControlStateChanged(ControlStateChangedInfo controlStateChangedInfo)
+ protected virtual void OnControlStateChanged(ControlStateChangedEventArgs controlStateChangedInfo)
{
}
/// The class represents the information of the situation where the View's control state changes.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public class ControlStateChangedInfo
+ public class ControlStateChangedEventArgs : EventArgs
{
/// <summary>
/// Create an instance with mandatory fields.
/// </summary>
/// <param name="previousState">The previous control state.</param>
/// <param name="currentState">The current control state.</param>
- /// <param name="inputMethod">Indicates the input method that triggered this change.</param>
- /// <param name="inputData">The input method data that depends on the inputMethod.</param>
[EditorBrowsable(EditorBrowsableState.Never)]
- public ControlStateChangedInfo(ControlStates previousState, ControlStates currentState, InputMethodType inputMethod, object inputData)
+ public ControlStateChangedEventArgs(ControlStates previousState, ControlStates currentState)
{
PreviousState = previousState;
CurrentState = currentState;
- InputMethod = inputMethod;
- InputData = inputData;
}
/// <summary>
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public ControlStates CurrentState { get; }
-
- /// <summary>
- /// Indicates the input method that triggered this change.
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public InputMethodType InputMethod { get; }
-
- /// <summary>
- /// The input method data in detail.
- ///
- /// The type of data depends on the InputMethod,
- /// ---------------------------------------
- /// InputMethod | Typep of InputData
- /// ---------------------------------------
- /// None | (null)
- /// Touch | Tizen.NUI.Touch
- /// Key | Tizen.NUI.Key
- /// ---------------------------------------
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public object InputData { get; }
-
- /// <summary>
- /// List of input method that can trigger ControlStates change.
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public enum InputMethodType
- {
- /// <summary>
- /// ControlState has changed without user input.
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- None,
-
- /// <summary>
- /// ControlState has changed by a touch.
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- Touch,
-
- /// <summary>
- /// ControlState has changed by key input.
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- Key,
- }
}
private EventHandlerWithReturnType<object, WheelEventArgs, bool> WindowWheelEventHandler;
SizeModeFactor = new Vector3(x, y, z);
}
- private void OnControlStateChangedForShadow(View obj, ControlStateChangedInfo controlStateChangedInfo)
+ private void OnControlStateChangedForShadow(object obj, ControlStateChangedEventArgs controlStateChangedInfo)
{
var boxShadowSelector = (Selector<Shadow>)GetValue(BoxShadowSelectorProperty);
}
}
- private void OnControlStateChangedForCornerRadius(View obj, ControlStateChangedInfo controlStateChangedInfo)
+ private void OnControlStateChangedForCornerRadius(object obj, ControlStateChangedEventArgs controlStateChangedInfo)
{
var selector = (Selector<float?>)GetValue(CornerRadiusSelectorProperty);