private bool ProcessMouseButtonDownMessage(MouseButtonMessage buttonMessage) { this.CaptureMouseWheelHandler = null; //don't allow multiple buttons, it's just cleaner and easier to manage behaviour. if (_activeButton != 0) { _contextMenuEnabled = false; return(true); } _activeButton = buttonMessage.Shortcut.MouseButton; _clickCount = buttonMessage.ClickCount; if (StartCaptureHandler(buttonMessage)) { return(true); } _tile.Select(); _contextMenuEnabled = (buttonMessage.Shortcut.MouseButton == XMouseButtons.Right); _startMousePoint = buttonMessage.Location; if (_tile.PresentationImage == null || !_tile.Enabled) { return(true); } //give unfocused graphics a chance to focus (in the case of going straight from context menu to a graphic). FindHandlingGraphic(TrackHandler); return(StartNewHandler(buttonMessage)); }
private bool ProcessKeyboardMessage(KeyboardButtonMessage keyboardMessage) { //keyboard up messages are just consumed. if (keyboardMessage.ButtonAction == KeyboardButtonMessage.ButtonActions.Up) { _key = new KeyboardButtonMessage(XKeys.None, KeyboardButtonMessage.ButtonActions.Up); return(true); } _key = keyboardMessage; ReleaseCapture(true); this.CaptureMouseWheelHandler = null; IClickAction action = _shortcutManager.GetKeyboardAction(keyboardMessage.Shortcut); Trace.WriteLine(String.Format("Finding shortcut for: {0}", keyboardMessage.Shortcut)); if (action != null) { action.Click(); return(true); } return(false); }
public void SetCaptureHandler(IMouseWheelHandler captureMouseWheelHandler) { if (_captureMouseWheelHandler == captureMouseWheelHandler) { return; } if (_captureMouseWheelHandler != null) { _captureMouseWheelHandler.StopWheel(); } _captureMouseWheelHandler = captureMouseWheelHandler; if (_captureMouseWheelHandler == null) { _stopTimer = true; return; } _captureMouseWheelHandler.StartWheel(); _stopTimer = false; SynchronizationContext context = SynchronizationContext.Current; WaitCallback del = delegate { while (!_stopTimer) { Thread.Sleep(10); context.Post(delegate { if (_captureMouseWheelHandler == null) { return; } TimeSpan elapsed = Platform.Time.Subtract(_timeOfLastWheel); if (elapsed.Milliseconds >= WheelStopDelayMilliseconds) { SetCaptureHandler(null); } } , null); } }; ThreadPool.QueueUserWorkItem(del); }
public void SetCaptureHandler(TileController tileController, IMouseWheelHandler captureMouseWheelHandler) { if (_captureTileController == tileController && _captureMouseWheelHandler == captureMouseWheelHandler) { return; } if (_captureMouseWheelHandler != null) { if (_delayedStop != null) { _delayedStop.Dispose(); _delayedStop = null; } EventsHelper.Fire(tileController._wheelCaptureChangingEvent, tileController, new ItemEventArgs <IMouseWheelHandler>(null)); _captureMouseWheelHandler.StopWheel(); _captureTileController._tile.ImageViewer.EventBroker.OnMouseWheelCaptureChanged(new MouseWheelCaptureChangedEventArgs(_captureTileController._tile, false)); } _captureTileController = tileController; _captureMouseWheelHandler = captureMouseWheelHandler; if (_captureMouseWheelHandler == null) { //This is only needed when the capture mouse wheel handler is not null. _captureTileController = null; if (_delayedStop != null) { _delayedStop.Dispose(); _delayedStop = null; } return; } _delayedStop = new DelayedEventPublisher((s, e) => SetCaptureHandler(tileController, null), WheelStopDelayMilliseconds); EventsHelper.Fire(tileController._wheelCaptureChangingEvent, tileController, new ItemEventArgs <IMouseWheelHandler>(_captureMouseWheelHandler)); _captureMouseWheelHandler.StartWheel(); _captureTileController._tile.ImageViewer.EventBroker.OnMouseWheelCaptureChanged(new MouseWheelCaptureChangedEventArgs(_captureTileController._tile, true)); _delayedStop.Publish(this, EventArgs.Empty); }
private bool ProcessMouseButtonDownMessage(MouseButtonMessage buttonMessage) { this.CaptureMouseWheelHandler = null; _lastMouseDownProcessedTicks = Environment.TickCount; //don't allow multiple buttons, it's just cleaner and easier to manage behaviour. if (_activeButton != 0) { _contextMenuEnabled = false; return(true); } _activeButton = buttonMessage.Shortcut.MouseButton; _clickCount = buttonMessage.ClickCount; if (StartCaptureHandler(buttonMessage)) { return(true); } _tile.Select(); _contextMenuEnabled = _clickCount == 1 && _buttonForContextMenu == buttonMessage.Shortcut.MouseButton; if (_contextMenuEnabled && _buttonActionForContextMenu == MouseButtonMessage.ButtonActions.Down) { _delayedContextMenuRequestPublisher.TimeoutMilliseconds = _mouseHoldDownForContextMenuInMilliseconds; _delayedContextMenuRequestPublisher.Publish(this, new ItemEventArgs <Point>(buttonMessage.Location)); } _startMousePoint = buttonMessage.Location; if (_tile.PresentationImage == null || !_tile.Enabled) { return(true); } //give unfocused graphics a chance to focus (in the case of going straight from context menu to a graphic). FindHandlingGraphic(TrackHandler); return(StartNewHandler(buttonMessage)); }
private bool ProcessMouseWheelMessage(MouseWheelMessage wheelMessage) { if (!_tile.Enabled) { return(true); } ReleaseCapture(true); IMouseWheelHandler handler = _shortcutManager.GetMouseWheelHandler(wheelMessage.Shortcut); if (handler != null) { this.CaptureMouseWheelHandler = handler; handler.Wheel(wheelMessage.WheelDelta); MouseWheelManager.Instance.OnMouseWheel(); return(true); } return(false); }
private bool ProcessMouseWheelMessage(MouseWheelMessage wheelMessage) { if (!_tile.Enabled) { return(true); } if (wheelMessage.WheelDelta == 0) { if (CaptureMouseWheelHandler != null) { //NOTE: hack for Webstation; we can't totally discard mouse wheel messages because //they need to reset the timer that releases "wheel capture". So, if we see a wheel delta //of zero, we just don't process the message through the handler, which could cause an unwanted draw. MouseWheelManager.Instance.OnMouseWheel(); return(true); } //Invalid message; do nothing. return(false); } ReleaseCapture(true); IMouseWheelHandler handler = _shortcutManager.GetMouseWheelHandler(wheelMessage.Shortcut); if (handler != null) { this.CaptureMouseWheelHandler = handler; handler.Wheel(wheelMessage.WheelDelta); MouseWheelManager.Instance.OnMouseWheel(); return(true); } return(false); }
private bool ProcessMouseButtonDownMessage(MouseButtonMessage buttonMessage) { this.CaptureMouseWheelHandler = null; //don't allow multiple buttons, it's just cleaner and easier to manage behaviour. if (_activeButton != 0) { _contextMenuEnabled = false; return true; } _activeButton = buttonMessage.Shortcut.MouseButton; _clickCount = buttonMessage.ClickCount; if (StartCaptureHandler(buttonMessage)) return true; _tile.Select(); _contextMenuEnabled = (buttonMessage.Shortcut.MouseButton == XMouseButtons.Right); _startMousePoint = buttonMessage.Location; if (_tile.PresentationImage == null || !_tile.Enabled) return true; //give unfocused graphics a chance to focus (in the case of going straight from context menu to a graphic). FindHandlingGraphic(TrackHandler); return StartNewHandler(buttonMessage); }
private bool ProcessMouseWheelMessage(MouseWheelMessage wheelMessage) { if (!_tile.Enabled) return true; ReleaseCapture(true); IMouseWheelHandler handler = _shortcutManager.GetMouseWheelHandler(wheelMessage.Shortcut); if (handler != null) { this.CaptureMouseWheelHandler = handler; handler.Wheel(wheelMessage.WheelDelta); MouseWheelManager.Instance.UpdateLastWheelTime(); return true; } return false; }
private bool ProcessKeyboardMessage(KeyboardButtonMessage keyboardMessage) { //keyboard up messages are just consumed. if (keyboardMessage.ButtonAction == KeyboardButtonMessage.ButtonActions.Up) return true; ReleaseCapture(true); this.CaptureMouseWheelHandler = null; IClickAction action = _shortcutManager.GetKeyboardAction(keyboardMessage.Shortcut); Trace.WriteLine(String.Format("Finding shortcut for: {0}", keyboardMessage.Shortcut)); if (action != null) { action.Click(); return true; } return false; }
public void SetCaptureHandler(IMouseWheelHandler captureMouseWheelHandler) { if (_captureMouseWheelHandler == captureMouseWheelHandler) return; if (_captureMouseWheelHandler != null) _captureMouseWheelHandler.StopWheel(); _captureMouseWheelHandler = captureMouseWheelHandler; if (_captureMouseWheelHandler == null) { _stopTimer = true; return; } _captureMouseWheelHandler.StartWheel(); _stopTimer = false; SynchronizationContext context = SynchronizationContext.Current; WaitCallback del = delegate { while (!_stopTimer) { Thread.Sleep(10); context.Post(delegate { if (_captureMouseWheelHandler == null) return; TimeSpan elapsed = Platform.Time.Subtract(_timeOfLastWheel); if (elapsed.Milliseconds >= WheelStopDelayMilliseconds) SetCaptureHandler(null); } , null); } }; ThreadPool.QueueUserWorkItem(del); }
private MouseWheelManager() { _captureMouseWheelHandler = null; _stopTimer = true; }
public void SetCaptureHandler(TileController tileController, IMouseWheelHandler captureMouseWheelHandler) { if (_captureTileController == tileController && _captureMouseWheelHandler == captureMouseWheelHandler) return; if (_captureMouseWheelHandler != null) { if (_delayedStop != null) { _delayedStop.Dispose(); _delayedStop = null; } EventsHelper.Fire(tileController._wheelCaptureChangingEvent, tileController, new ItemEventArgs<IMouseWheelHandler>(null)); _captureMouseWheelHandler.StopWheel(); _captureTileController._tile.ImageViewer.EventBroker.OnMouseWheelCaptureChanged(new MouseWheelCaptureChangedEventArgs(_captureTileController._tile, false)); } _captureTileController = tileController; _captureMouseWheelHandler = captureMouseWheelHandler; if (_captureMouseWheelHandler == null) { if (_delayedStop != null) { _delayedStop.Dispose(); _delayedStop = null; } return; } _delayedStop = new DelayedEventPublisher((s, e) => SetCaptureHandler(tileController, null), WheelStopDelayMilliseconds); EventsHelper.Fire(tileController._wheelCaptureChangingEvent, tileController, new ItemEventArgs<IMouseWheelHandler>(_captureMouseWheelHandler)); _captureMouseWheelHandler.StartWheel(); _captureTileController._tile.ImageViewer.EventBroker.OnMouseWheelCaptureChanged(new MouseWheelCaptureChangedEventArgs(_captureTileController._tile, true)); _delayedStop.Publish(this, EventArgs.Empty); }
private bool ProcessMouseWheelMessage(MouseWheelMessage wheelMessage) { if (!_tile.Enabled) return true; if (wheelMessage.WheelDelta == 0) { if (CaptureMouseWheelHandler != null) { //NOTE: hack for Webstation; we can't totally discard mouse wheel messages because //they need to reset the timer that releases "wheel capture". So, if we see a wheel delta //of zero, we just don't process the message through the handler, which could cause an unwanted draw. MouseWheelManager.Instance.OnMouseWheel(); return true; } //Invalid message; do nothing. return false; } ReleaseCapture(true); IMouseWheelHandler handler = _shortcutManager.GetMouseWheelHandler(wheelMessage.Shortcut); if (handler != null) { this.CaptureMouseWheelHandler = handler; handler.Wheel(wheelMessage.WheelDelta); MouseWheelManager.Instance.OnMouseWheel(); return true; } return false; }
private bool ProcessMouseButtonDownMessage(MouseButtonMessage buttonMessage) { this.CaptureMouseWheelHandler = null; _lastMouseDownProcessedTicks = Environment.TickCount; //don't allow multiple buttons, it's just cleaner and easier to manage behaviour. if (_activeButton != 0) { _contextMenuEnabled = false; return true; } _activeButton = buttonMessage.Shortcut.MouseButton; _clickCount = buttonMessage.ClickCount; if (StartCaptureHandler(buttonMessage)) return true; _tile.Select(); _contextMenuEnabled = _clickCount == 1 && _buttonForContextMenu == buttonMessage.Shortcut.MouseButton; if (_contextMenuEnabled && _buttonActionForContextMenu == MouseButtonMessage.ButtonActions.Down) { _delayedContextMenuRequestPublisher.TimeoutMilliseconds = _mouseHoldDownForContextMenuInMilliseconds; _delayedContextMenuRequestPublisher.Publish(this, new ItemEventArgs<Point>(buttonMessage.Location)); } _startMousePoint = buttonMessage.Location; if (_tile.PresentationImage == null || !_tile.Enabled) return true; //give unfocused graphics a chance to focus (in the case of going straight from context menu to a graphic). FindHandlingGraphic(TrackHandler); return StartNewHandler(buttonMessage); }