// This code is distributed under MIT license. // Copyright (c) 2015 George Mamaladze // See license.txt or http://opensource.org/licenses/mit-license.php using System; using System.Windows.Forms; namespace xClient.Core.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 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 MouseEventHandler MouseDoubleClick { add { GetMouseListener().MouseDoubleClick += value; } remove { GetMouseListener().MouseDoubleClick -= 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(); } }