mirror of
https://github.com/ZuneDev/Xune.git
synced 2026-07-27 13:13:10 -07:00
337 lines
11 KiB
C#
337 lines
11 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: Microsoft.Iris.UI.InputHandler
|
|
// Assembly: UIX, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
|
|
// MVID: A56C6C9D-B7F6-46A9-8BDE-B3D9B8D60B11
|
|
// Assembly location: C:\Program Files\Zune\UIX.dll
|
|
|
|
using Microsoft.Iris.Input;
|
|
using Microsoft.Iris.Library;
|
|
using Microsoft.Iris.Markup;
|
|
using Microsoft.Iris.Session;
|
|
using System;
|
|
|
|
namespace Microsoft.Iris.UI
|
|
{
|
|
internal abstract class InputHandler : DisposableNotifyObjectBase
|
|
{
|
|
private InputHandlerStage _handlerStage;
|
|
private UIClass _ui;
|
|
private bool _disabled;
|
|
private string _name;
|
|
|
|
public InputHandler() => _handlerStage = InputHandlerStage.Direct;
|
|
|
|
public InputHandlerStage HandlerStage
|
|
{
|
|
get => _handlerStage;
|
|
set
|
|
{
|
|
if (_handlerStage == value)
|
|
return;
|
|
_handlerStage = value;
|
|
FireNotification(NotificationID.HandlerStage);
|
|
}
|
|
}
|
|
|
|
protected bool HandleDirect => (HandlerStage & InputHandlerStage.Direct) == InputHandlerStage.Direct;
|
|
|
|
protected bool HandleRouted => (HandlerStage & InputHandlerStage.Routed) == InputHandlerStage.Routed;
|
|
|
|
protected bool HandleBubbled => (HandlerStage & InputHandlerStage.Bubbled) == InputHandlerStage.Bubbled;
|
|
|
|
private bool ShouldHandleStage(EventRouteStages stage)
|
|
{
|
|
switch (stage)
|
|
{
|
|
case EventRouteStages.Direct:
|
|
return HandleDirect;
|
|
case EventRouteStages.Bubbled:
|
|
return HandleBubbled;
|
|
case EventRouteStages.Routed:
|
|
return HandleRouted;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
protected override void OnDispose()
|
|
{
|
|
base.OnDispose();
|
|
_ui = null;
|
|
}
|
|
|
|
protected override void OnOwnerDeclared(object owner)
|
|
{
|
|
base.OnOwnerDeclared(owner);
|
|
_ui = (UIClass)owner;
|
|
}
|
|
|
|
public void NotifyUIInitialized() => ConfigureInteractivity();
|
|
|
|
protected virtual void ConfigureInteractivity()
|
|
{
|
|
}
|
|
|
|
public virtual void OnZoneAttached()
|
|
{
|
|
}
|
|
|
|
public virtual void OnZoneDetached()
|
|
{
|
|
}
|
|
|
|
public bool Enabled
|
|
{
|
|
get => !_disabled;
|
|
set
|
|
{
|
|
if (Enabled == value)
|
|
return;
|
|
_disabled = !value;
|
|
FireNotification(NotificationID.Enabled);
|
|
_ui.UpdateCursor();
|
|
}
|
|
}
|
|
|
|
public string Name
|
|
{
|
|
get => _name;
|
|
set => _name = NotifyService.CanonicalizeString(value);
|
|
}
|
|
|
|
public void DeliverInput(UIClass ui, InputInfo info, EventRouteStages stage)
|
|
{
|
|
if (!Enabled || !ShouldHandleStage(stage))
|
|
return;
|
|
switch (info.EventType)
|
|
{
|
|
case InputEventType.CommandDown:
|
|
OnCommandDown(ui, (KeyCommandInfo)info);
|
|
break;
|
|
case InputEventType.CommandUp:
|
|
OnCommandUp(ui, (KeyCommandInfo)info);
|
|
break;
|
|
case InputEventType.GainKeyFocus:
|
|
OnGainKeyFocus(ui, (KeyFocusInfo)info);
|
|
break;
|
|
case InputEventType.LoseKeyFocus:
|
|
OnLoseKeyFocus(ui, (KeyFocusInfo)info);
|
|
break;
|
|
case InputEventType.KeyDown:
|
|
OnKeyDown(ui, (KeyStateInfo)info);
|
|
break;
|
|
case InputEventType.KeyUp:
|
|
OnKeyUp(ui, (KeyStateInfo)info);
|
|
break;
|
|
case InputEventType.KeyCharacter:
|
|
OnKeyCharacter(ui, (KeyCharacterInfo)info);
|
|
break;
|
|
case InputEventType.MouseMove:
|
|
OnMouseMove(ui, (MouseMoveInfo)info);
|
|
break;
|
|
case InputEventType.GainMouseFocus:
|
|
OnGainMouseFocus(ui, (MouseFocusInfo)info);
|
|
break;
|
|
case InputEventType.LoseMouseFocus:
|
|
OnLoseMouseFocus(ui, (MouseFocusInfo)info);
|
|
break;
|
|
case InputEventType.MousePrimaryDown:
|
|
OnMousePrimaryDown(ui, (MouseButtonInfo)info);
|
|
break;
|
|
case InputEventType.MouseSecondaryDown:
|
|
OnMouseSecondaryDown(ui, (MouseButtonInfo)info);
|
|
break;
|
|
case InputEventType.MousePrimaryUp:
|
|
OnMousePrimaryUp(ui, (MouseButtonInfo)info);
|
|
break;
|
|
case InputEventType.MouseSecondaryUp:
|
|
OnMouseSecondaryUp(ui, (MouseButtonInfo)info);
|
|
break;
|
|
case InputEventType.MouseDoubleClick:
|
|
OnMouseDoubleClick(ui, (MouseButtonInfo)info);
|
|
break;
|
|
case InputEventType.MouseWheel:
|
|
OnMouseWheel(ui, (MouseWheelInfo)info);
|
|
break;
|
|
case InputEventType.DragEnter:
|
|
OnDragEnter(ui, (DragDropInfo)info);
|
|
break;
|
|
case InputEventType.DragOver:
|
|
OnDragOver(ui, (DragDropInfo)info);
|
|
break;
|
|
case InputEventType.DragLeave:
|
|
OnDragLeave(ui, (DragDropInfo)info);
|
|
break;
|
|
case InputEventType.DragDropped:
|
|
OnDropped(ui, (DragDropInfo)info);
|
|
break;
|
|
case InputEventType.DragComplete:
|
|
OnDragComplete(ui, (DragDropInfo)info);
|
|
break;
|
|
}
|
|
}
|
|
|
|
protected virtual void OnMousePrimaryDown(UIClass ui, MouseButtonInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnMouseSecondaryDown(UIClass ui, MouseButtonInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnMousePrimaryUp(UIClass ui, MouseButtonInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnMouseSecondaryUp(UIClass ui, MouseButtonInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnMouseDoubleClick(UIClass ui, MouseButtonInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnMouseMove(UIClass ui, MouseMoveInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnLoseMouseFocus(UIClass ui, MouseFocusInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnGainMouseFocus(UIClass ui, MouseFocusInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnMouseWheel(UIClass ui, MouseWheelInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnDragEnter(UIClass ui, DragDropInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnDragOver(UIClass ui, DragDropInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnDragLeave(UIClass ui, DragDropInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnDropped(UIClass ui, DragDropInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnDragComplete(UIClass ui, DragDropInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnKeyDown(UIClass ui, KeyStateInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnKeyUp(UIClass ui, KeyStateInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnKeyCharacter(UIClass ui, KeyCharacterInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnLoseKeyFocus(UIClass ui, KeyFocusInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnGainKeyFocus(UIClass ui, KeyFocusInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnLoseDeepKeyFocus()
|
|
{
|
|
}
|
|
|
|
protected virtual void OnGainDeepKeyFocus()
|
|
{
|
|
}
|
|
|
|
protected virtual void OnCommandDown(UIClass ui, KeyCommandInfo info)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnCommandUp(UIClass ui, KeyCommandInfo info)
|
|
{
|
|
}
|
|
|
|
internal void NotifyLoseDeepKeyFocus() => OnLoseDeepKeyFocus();
|
|
|
|
internal void NotifyGainDeepKeyFocus() => OnGainDeepKeyFocus();
|
|
|
|
internal virtual CursorID GetCursor() => CursorID.NotSpecified;
|
|
|
|
protected void UpdateCursor()
|
|
{
|
|
if (_ui == null)
|
|
return;
|
|
_ui.UpdateCursor();
|
|
}
|
|
|
|
public static InputHandlerModifiers GetModifiers(
|
|
InputModifiers rawModifiers)
|
|
{
|
|
InputHandlerModifiers handlerModifiers = InputHandlerModifiers.None;
|
|
if ((rawModifiers & InputModifiers.ControlKey) != InputModifiers.None)
|
|
handlerModifiers |= InputHandlerModifiers.Ctrl;
|
|
if ((rawModifiers & InputModifiers.ShiftKey) != InputModifiers.None)
|
|
handlerModifiers |= InputHandlerModifiers.Shift;
|
|
if ((rawModifiers & InputModifiers.AltKey) != InputModifiers.None)
|
|
handlerModifiers |= InputHandlerModifiers.Alt;
|
|
if ((rawModifiers & InputModifiers.WindowsKey) != InputModifiers.None)
|
|
handlerModifiers |= InputHandlerModifiers.Windows;
|
|
return handlerModifiers;
|
|
}
|
|
|
|
protected void SetEventContext(
|
|
ICookedInputSite source,
|
|
ref WeakReference context,
|
|
string contextName)
|
|
{
|
|
object obj = context != null ? context.Target : null;
|
|
object eventContext = GetEventContext(source);
|
|
if (eventContext == obj)
|
|
return;
|
|
context = new WeakReference(eventContext);
|
|
FireNotification(contextName);
|
|
}
|
|
|
|
protected object CheckEventContext(ref WeakReference context)
|
|
{
|
|
object obj = null;
|
|
if (context != null)
|
|
{
|
|
obj = context.Target;
|
|
if (obj is IDisposableObject disposableObject && disposableObject.IsDisposed)
|
|
{
|
|
context = null;
|
|
obj = null;
|
|
}
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
protected object GetEventContext(ICookedInputSite clickTarget)
|
|
{
|
|
if (!(clickTarget is UIClass uiClass) || !uiClass.IsValid)
|
|
return null;
|
|
object eventContext;
|
|
for (eventContext = uiClass.GetEventContext(); eventContext == null && uiClass != UI; eventContext = uiClass.GetEventContext())
|
|
uiClass = uiClass.Parent;
|
|
return eventContext;
|
|
}
|
|
|
|
public override string ToString() => GetType().Name;
|
|
|
|
protected UIClass UI => _ui;
|
|
}
|
|
}
|