private void UpdateStatusAndState(TouchEff sender, TouchStatus status, TouchState state) { if (sender.State != state || status != TouchStatus.Canceled) { sender.State = state; sender.RaiseStateChanged(); } sender.Status = status; sender.RaiseStatusChanged(); }
internal void HandleTouch(TouchEff sender, TouchStatus status) { if (sender.IsDisabled) { return; } var canExecuteAction = sender.CanExecute; if (status != TouchStatus.Started || canExecuteAction) { if (!canExecuteAction) { status = TouchStatus.Canceled; } var state = status == TouchStatus.Started ? TouchState.Pressed : TouchState.Regular; if (status == TouchStatus.Started) { _animationProgress = 0; _animationState = state; } var isToggled = sender.IsToggled; if (isToggled.HasValue) { if (status != TouchStatus.Started) { _durationMultiplier = (_animationState == TouchState.Pressed && !isToggled.Value) || (_animationState == TouchState.Regular && isToggled.Value) ? 1 - _animationProgress : _animationProgress; sender.Status = status; sender.RaiseStatusChanged(); if (status == TouchStatus.Canceled) { sender.ForceUpdateState(false); return; } OnTapped(sender); sender.IsToggled = !isToggled; return; } state = isToggled.Value ? TouchState.Regular : TouchState.Pressed; if (status == TouchStatus.Canceled) { state = state == TouchState.Pressed ? TouchState.Regular : TouchState.Pressed; } } if (sender.State != state || status != TouchStatus.Canceled) { sender.State = state; sender.RaiseStateChanged(); } sender.Status = status; sender.RaiseStatusChanged(); } if (status == TouchStatus.Completed) { OnTapped(sender); } }