// This code is distributed under MIT license. // Copyright (c) 2015 George Mamaladze // See license.txt or https://mit-license.org/ using System; using System.Windows.Forms; namespace Gma.System.MouseKeyHook.Implementation { internal abstract class EventFacade : IKeyboardMouseEvents { private KeyListener m_KeyListenerCache; private MouseListener m_MouseListenerCache; public event KeyEventHandler KeyDown { add { GetKeyListener().KeyDown += value; } remove { GetKeyListener().KeyDown -= value; } } public event KeyPressEventHandler KeyPress { add { GetKeyListener().KeyPress += value; } remove { GetKeyListener().KeyPress -= value; } } public event EventHandler KeyDownTxt { add { GetKeyListener().KeyDownTxt += value; } remove { GetKeyListener().KeyDownTxt -= value; } } public event KeyEventHandler KeyUp { add { GetKeyListener().KeyUp += value; } remove { GetKeyListener().KeyUp -= value; } } public event MouseEventHandler MouseMove { add { GetMouseListener().MouseMove += value; } remove { GetMouseListener().MouseMove -= value; } } public event EventHandler MouseMoveExt { add { GetMouseListener().MouseMoveExt += value; } remove { GetMouseListener().MouseMoveExt -= value; } } public event MouseEventHandler MouseClick { add { GetMouseListener().MouseClick += value; } remove { GetMouseListener().MouseClick -= value; } } public event MouseEventHandler MouseDown { add { GetMouseListener().MouseDown += value; } remove { GetMouseListener().MouseDown -= value; } } public event EventHandler MouseDownExt { add { GetMouseListener().MouseDownExt += value; } remove { GetMouseListener().MouseDownExt -= value; } } public event MouseEventHandler MouseUp { add { GetMouseListener().MouseUp += value; } remove { GetMouseListener().MouseUp -= value; } } public event EventHandler MouseUpExt { add { GetMouseListener().MouseUpExt += value; } remove { GetMouseListener().MouseUpExt -= value; } } public event MouseEventHandler MouseWheel { add { GetMouseListener().MouseWheel += value; } remove { GetMouseListener().MouseWheel -= value; } } public event EventHandler MouseWheelExt { add { GetMouseListener().MouseWheelExt += value; } remove { GetMouseListener().MouseWheelExt -= value; } } public event MouseEventHandler MouseHWheel { add { GetMouseListener().MouseHWheel += value; } remove { GetMouseListener().MouseHWheel -= value; } } public event EventHandler MouseHWheelExt { add { GetMouseListener().MouseHWheelExt += value; } remove { GetMouseListener().MouseHWheelExt -= value; } } public event MouseEventHandler MouseDoubleClick { add { GetMouseListener().MouseDoubleClick += value; } remove { GetMouseListener().MouseDoubleClick -= value; } } public event MouseEventHandler MouseDragStarted { add { GetMouseListener().MouseDragStarted += value; } remove { GetMouseListener().MouseDragStarted -= value; } } public event EventHandler MouseDragStartedExt { add { GetMouseListener().MouseDragStartedExt += value; } remove { GetMouseListener().MouseDragStartedExt -= value; } } public event MouseEventHandler MouseDragFinished { add { GetMouseListener().MouseDragFinished += value; } remove { GetMouseListener().MouseDragFinished -= value; } } public event EventHandler MouseDragFinishedExt { add { GetMouseListener().MouseDragFinishedExt += value; } remove { GetMouseListener().MouseDragFinishedExt -= value; } } public void Dispose() { if (m_MouseListenerCache != null) m_MouseListenerCache.Dispose(); if (m_KeyListenerCache != null) m_KeyListenerCache.Dispose(); } private KeyListener GetKeyListener() { var target = m_KeyListenerCache; if (target != null) return target; target = CreateKeyListener(); m_KeyListenerCache = target; return target; } private MouseListener GetMouseListener() { var target = m_MouseListenerCache; if (target != null) return target; target = CreateMouseListener(); m_MouseListenerCache = target; return target; } protected abstract MouseListener CreateMouseListener(); protected abstract KeyListener CreateKeyListener(); } }