Esempio n. 1
0
 private void Button_OnMouseDown(object sender, MouseButtonEventArgs args) {
     if (!clicking && !Disabled) {
         clicking = true;
         pressed = true;
         ConsoleApplication.Instance.BeginCaptureInput(this);
         this.Invalidate();
         args.Handled = true;
     }
 }
Esempio n. 2
0
 private void OnMouseDown(object sender, MouseButtonEventArgs args) {
     Point point = args.GetPosition(this);
     if (point.X > 0 && point.X - 1 < getSize(  )) {
         int x = point.X - 1;
         if (!String.IsNullOrEmpty(text)) {
             if (x <= text.Length)
                 cursorPosition = x;
             else {
                 cursorPosition = text.Length;
             }
             CursorPosition = new Point(cursorPosition + 1, 0);
         }
         args.Handled = true;
     }
 }
        private bool processRoutedEvent(RoutedEvent routedEvent, RoutedEventArgs args) {
            //
            List<RoutedEventTargetInfo> subscribedTargets = getTargetsSubscribedTo(routedEvent);

            Control capturingControl = inputCaptureStack.Count != 0 ? inputCaptureStack.Peek() : null;
            //
            if (routedEvent.RoutingStrategy == RoutingStrategy.Direct) {
                if (null == subscribedTargets)
                    return false;
                //
                RoutedEventTargetInfo targetInfo =
                    subscribedTargets.FirstOrDefault(info => info.target == args.Source);
                if (null == targetInfo)
                    return false;

                // если имеется контрол, захватывающий события, события получает только он сам
                // и его дочерние контролы
                if ( capturingControl != null ) {
                    if ( !(args.Source is Control) ) return false;
                    if ( !isControlAllowedToReceiveEvents( ( Control ) args.Source, capturingControl ) )
                        return false;
                }

                // copy handlersList to local list to avoid modifications when enumerating
                foreach (DelegateInfo delegateInfo in new List< DelegateInfo >(targetInfo.handlersList)) {
                    if (!args.Handled || delegateInfo.handledEventsToo) {
                        if (delegateInfo.@delegate is RoutedEventHandler) {
                            ((RoutedEventHandler) delegateInfo.@delegate).Invoke(targetInfo.target, args);
                        } else {
                            [email protected](targetInfo.target, args);
                        }
                    }
                }
            }

            Control source = (Control) args.Source;
            // path to source from root element down to Source
            List<Control> path = new List<Control>();
            Control current = source;
            while (null != current) {
                // та же логика с контролом, захватившим обработку сообщений
                // если имеется контрол, захватывающий события, события получает только он сам
                // и его дочерние контролы
                if ( capturingControl == null || isControlAllowedToReceiveEvents( current, capturingControl ) ) {
                    path.Insert( 0, current );
                    current = current.Parent;
                } else {
                    break;
                }
            }

            if (routedEvent.RoutingStrategy == RoutingStrategy.Tunnel) {
                if (subscribedTargets != null) {
                    foreach (Control potentialTarget in path) {
                        Control target = potentialTarget;
                        RoutedEventTargetInfo targetInfo =
                            subscribedTargets.FirstOrDefault(info => info.target == target);
                        if (null != targetInfo) {
                            foreach (DelegateInfo delegateInfo in new List< DelegateInfo >(targetInfo.handlersList)) {
                                if (!args.Handled || delegateInfo.handledEventsToo) {
                                    if (delegateInfo.@delegate is RoutedEventHandler) {
                                        ((RoutedEventHandler) delegateInfo.@delegate).Invoke(target, args);
                                    } else {
                                        [email protected](target, args);
                                    }
                                }
                            }
                        }
                    }
                }
                // для парных Preview-событий запускаем соответствующие настоящие события,
                // сохраняя при этом Handled (если Preview событие помечено как Handled=true,
                // то и настоящее событие будет маршрутизировано с Handled=true)
                if (routedEvent == Control.PreviewMouseDownEvent) {
                    MouseButtonEventArgs mouseArgs = ( ( MouseButtonEventArgs ) args );
                    MouseButtonEventArgs argsNew = new MouseButtonEventArgs(
                        args.Source, Control.MouseDownEvent, mouseArgs.RawPosition,
                        mouseArgs.LeftButton, mouseArgs.MiddleButton, mouseArgs.RightButton,
                        mouseArgs.ChangedButton
                    );
                    argsNew.Handled = args.Handled;
                    eventsQueue.Enqueue(argsNew);
                }
                if (routedEvent == Control.PreviewMouseUpEvent) {
                    MouseButtonEventArgs mouseArgs = ( ( MouseButtonEventArgs ) args );
                    MouseButtonEventArgs argsNew = new MouseButtonEventArgs(
                        args.Source, Control.MouseUpEvent, mouseArgs.RawPosition,
                        mouseArgs.LeftButton, mouseArgs.MiddleButton, mouseArgs.RightButton,
                        mouseArgs.ChangedButton
                    );
                    argsNew.Handled = args.Handled;
                    eventsQueue.Enqueue(argsNew);
                }
                if (routedEvent == Control.PreviewMouseMoveEvent) {
                    MouseEventArgs mouseArgs = ( ( MouseEventArgs ) args );
                    MouseEventArgs argsNew = new MouseEventArgs(
                        args.Source, Control.MouseMoveEvent, mouseArgs.RawPosition,
                        mouseArgs.LeftButton, mouseArgs.MiddleButton, mouseArgs.RightButton
                    );
                    argsNew.Handled = args.Handled;
                    eventsQueue.Enqueue(argsNew);
                }
                if ( routedEvent == Control.PreviewMouseWheelEvent ) {
                    MouseWheelEventArgs oldArgs = ((MouseWheelEventArgs)args);
                    MouseEventArgs argsNew = new MouseWheelEventArgs(
                        args.Source, Control.MouseWheelEvent, oldArgs.RawPosition,
                        oldArgs.LeftButton, oldArgs.MiddleButton, oldArgs.RightButton,
                        oldArgs.Delta
                    );
                    argsNew.Handled = args.Handled;
                    eventsQueue.Enqueue(argsNew);
                }

                if (routedEvent == Control.PreviewKeyDownEvent) {
                    KeyEventArgs argsNew = new KeyEventArgs(args.Source, Control.KeyDownEvent);
                    KeyEventArgs keyEventArgs = ( ( KeyEventArgs ) args );
                    argsNew.UnicodeChar = keyEventArgs.UnicodeChar;
                    argsNew.bKeyDown = keyEventArgs.bKeyDown;
                    argsNew.dwControlKeyState = keyEventArgs.dwControlKeyState;
                    argsNew.wRepeatCount = keyEventArgs.wRepeatCount;
                    argsNew.wVirtualKeyCode = keyEventArgs.wVirtualKeyCode;
                    argsNew.wVirtualScanCode = keyEventArgs.wVirtualScanCode;
                    argsNew.Handled = args.Handled;
                    eventsQueue.Enqueue(argsNew);
                }
                if (routedEvent == Control.PreviewKeyUpEvent) {
                    KeyEventArgs argsNew = new KeyEventArgs(args.Source, Control.KeyUpEvent);
                    KeyEventArgs keyEventArgs = ( ( KeyEventArgs ) args );
                    argsNew.UnicodeChar = keyEventArgs.UnicodeChar;
                    argsNew.bKeyDown = keyEventArgs.bKeyDown;
                    argsNew.dwControlKeyState = keyEventArgs.dwControlKeyState;
                    argsNew.wRepeatCount = keyEventArgs.wRepeatCount;
                    argsNew.wVirtualKeyCode = keyEventArgs.wVirtualKeyCode;
                    argsNew.wVirtualScanCode = keyEventArgs.wVirtualScanCode;
                    argsNew.Handled = args.Handled;
                    eventsQueue.Enqueue(argsNew);
                }
            }

            if (routedEvent.RoutingStrategy == RoutingStrategy.Bubble) {
                if (subscribedTargets != null) {
                    for (int i = path.Count - 1; i >= 0; i--) {
                        Control target = path[i];
                        RoutedEventTargetInfo targetInfo =
                            subscribedTargets.FirstOrDefault(info => info.target == target);
                        if (null != targetInfo) {
                            //
                            foreach (DelegateInfo delegateInfo in new List< DelegateInfo >(targetInfo.handlersList)) {
                                if (!args.Handled || delegateInfo.handledEventsToo) {
                                    if (delegateInfo.@delegate is RoutedEventHandler) {
                                        ((RoutedEventHandler) delegateInfo.@delegate).Invoke(target, args);
                                    } else {
                                        [email protected](target, args);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return args.Handled;
        }
        public void ParseInputEvent(INPUT_RECORD inputRecord, Control rootElement) {
            if (inputRecord.EventType == EventType.MOUSE_EVENT) {
                MOUSE_EVENT_RECORD mouseEvent = inputRecord.MouseEvent;

                if (mouseEvent.dwEventFlags != MouseEventFlags.PRESSED_OR_RELEASED &&
                    mouseEvent.dwEventFlags != MouseEventFlags.MOUSE_MOVED &&
                    mouseEvent.dwEventFlags != MouseEventFlags.DOUBLE_CLICK &&
                    mouseEvent.dwEventFlags != MouseEventFlags.MOUSE_WHEELED &&
                    mouseEvent.dwEventFlags != MouseEventFlags.MOUSE_HWHEELED) {
                    //
                    throw new InvalidOperationException("Flags combination in mouse event was not expected.");
                }
                Point rawPosition;
                if (mouseEvent.dwEventFlags == MouseEventFlags.MOUSE_MOVED ||
                    mouseEvent.dwEventFlags == MouseEventFlags.PRESSED_OR_RELEASED) {
                    rawPosition = new Point(mouseEvent.dwMousePosition.X, mouseEvent.dwMousePosition.Y);
                    lastMousePosition = rawPosition;
                } else {
                    // При событии MOUSE_WHEELED в Windows некорректно устанавливается mouseEvent.dwMousePosition
                    // Поэтому для определения элемента, над которым производится прокручивание колёсика, мы
                    // вынуждены сохранять координаты, полученные при предыдущем событии мыши
                    rawPosition = lastMousePosition;
                }
                Control topMost = findSource(rawPosition, rootElement);

                // если мышь захвачена контролом, то события перемещения мыши доставляются только ему,
                // события, связанные с нажатием мыши - тоже доставляются только ему, вместо того
                // контрола, над которым событие было зарегистрировано. Такой механизм необходим,
                // например, для корректной обработки перемещений окон (вверх или в стороны)
                Control source = (inputCaptureStack.Count != 0) ? inputCaptureStack.Peek() : topMost;
                
                if (mouseEvent.dwEventFlags == MouseEventFlags.MOUSE_MOVED) {
                    MouseButtonState leftMouseButtonState = getLeftButtonState(mouseEvent.dwButtonState);
                    MouseButtonState middleMouseButtonState = getMiddleButtonState(mouseEvent.dwButtonState);
                    MouseButtonState rightMouseButtonState = getRightButtonState(mouseEvent.dwButtonState);
                    //
                    MouseEventArgs mouseEventArgs = new MouseEventArgs(source, Control.PreviewMouseMoveEvent,
                                                                       rawPosition,
                                                                       leftMouseButtonState,
                                                                       middleMouseButtonState,
                                                                       rightMouseButtonState
                        );
                    eventsQueue.Enqueue(mouseEventArgs);
                    //
                    lastLeftMouseButtonState = leftMouseButtonState;
                    lastMiddleMouseButtonState = middleMouseButtonState;
                    lastRightMouseButtonState = rightMouseButtonState;

                    // detect mouse enter / mouse leave events

                    // path to source from root element down
                    List<Control> mouseOverStack = new List<Control>();
                    Control current = topMost;
                    while (null != current) {
                        mouseOverStack.Insert(0, current);
                        current = current.Parent;
                    }

                    int index;
                    for (index = 0; index < Math.Min(mouseOverStack.Count, prevMouseOverStack.Count); index++) {
                        if (mouseOverStack[index] != prevMouseOverStack[index])
                            break;
                    }

                    for (int i = prevMouseOverStack.Count - 1; i >= index; i-- ) {
                        Control control = prevMouseOverStack[i];
                        MouseEventArgs args = new MouseEventArgs(control, Control.MouseLeaveEvent,
                                                                    rawPosition,
                                                                    leftMouseButtonState,
                                                                    middleMouseButtonState,
                                                                    rightMouseButtonState
                            );
                        eventsQueue.Enqueue(args);
                    }

                    for (int i = index; i < mouseOverStack.Count; i++ ) {
                        // enqueue MouseEnter event
                        Control control = mouseOverStack[i];
                        MouseEventArgs args = new MouseEventArgs(control, Control.MouseEnterEvent,
                                                                    rawPosition,
                                                                    leftMouseButtonState,
                                                                    middleMouseButtonState,
                                                                    rightMouseButtonState
                            );
                        eventsQueue.Enqueue(args);
                    }

                    prevMouseOverStack.Clear();
                    prevMouseOverStack.AddRange(mouseOverStack);
                }
                if (mouseEvent.dwEventFlags == MouseEventFlags.PRESSED_OR_RELEASED) {
                    //
                    MouseButtonState leftMouseButtonState = getLeftButtonState(mouseEvent.dwButtonState);
                    MouseButtonState middleMouseButtonState = getMiddleButtonState(mouseEvent.dwButtonState);
                    MouseButtonState rightMouseButtonState = getRightButtonState(mouseEvent.dwButtonState);
                    //
                    if (leftMouseButtonState != lastLeftMouseButtonState) {
                        MouseButtonEventArgs eventArgs = new MouseButtonEventArgs(source,
                            leftMouseButtonState == MouseButtonState.Pressed ? Control.PreviewMouseDownEvent : Control.PreviewMouseUpEvent,
                            rawPosition,
                            leftMouseButtonState,
                            lastMiddleMouseButtonState,
                            lastRightMouseButtonState,
                            MouseButton.Left
                            );
                        eventsQueue.Enqueue(eventArgs);
                    }
                    if (middleMouseButtonState != lastMiddleMouseButtonState) {
                        MouseButtonEventArgs eventArgs = new MouseButtonEventArgs(source,
                            middleMouseButtonState == MouseButtonState.Pressed ? Control.PreviewMouseDownEvent : Control.PreviewMouseUpEvent,
                            rawPosition,
                            lastLeftMouseButtonState,
                            middleMouseButtonState,
                            lastRightMouseButtonState,
                            MouseButton.Middle
                            );
                        eventsQueue.Enqueue(eventArgs);
                    }
                    if (rightMouseButtonState != lastRightMouseButtonState) {
                        MouseButtonEventArgs eventArgs = new MouseButtonEventArgs(source,
                            rightMouseButtonState == MouseButtonState.Pressed ? Control.PreviewMouseDownEvent : Control.PreviewMouseUpEvent,
                            rawPosition,
                            lastLeftMouseButtonState,
                            lastMiddleMouseButtonState,
                            rightMouseButtonState,
                            MouseButton.Right
                            );
                        eventsQueue.Enqueue(eventArgs);
                    }
                    //
                    lastLeftMouseButtonState = leftMouseButtonState;
                    lastMiddleMouseButtonState = middleMouseButtonState;
                    lastRightMouseButtonState = rightMouseButtonState;
                }

                if (mouseEvent.dwEventFlags == MouseEventFlags.MOUSE_WHEELED) {
                    MouseWheelEventArgs args = new MouseWheelEventArgs(
                        topMost,
                        Control.PreviewMouseWheelEvent,
                        rawPosition,
                        lastLeftMouseButtonState, lastMiddleMouseButtonState, 
                        lastRightMouseButtonState,
                        mouseEvent.dwButtonState > 0 ? 1 : -1
                    );
                    eventsQueue.Enqueue( args );
                }
            }
            if (inputRecord.EventType == EventType.KEY_EVENT) {
                KEY_EVENT_RECORD keyEvent = inputRecord.KeyEvent;
                KeyEventArgs eventArgs = new KeyEventArgs(
                    ConsoleApplication.Instance.FocusManager.FocusedElement,
                    keyEvent.bKeyDown ? Control.PreviewKeyDownEvent : Control.PreviewKeyUpEvent);
                eventArgs.UnicodeChar = keyEvent.UnicodeChar;
                eventArgs.bKeyDown = keyEvent.bKeyDown;
                eventArgs.dwControlKeyState = keyEvent.dwControlKeyState;
                eventArgs.wRepeatCount = keyEvent.wRepeatCount;
                eventArgs.wVirtualKeyCode = keyEvent.wVirtualKeyCode;
                eventArgs.wVirtualScanCode = keyEvent.wVirtualScanCode;
                eventsQueue.Enqueue(eventArgs);
            }
        }
Esempio n. 5
0
 private void OnMouseDown( object sender, MouseButtonEventArgs args ) {
     Point pos = args.GetPosition( this );
     if ( horizontalScrollVisible ) {
         Point leftArrowPos = new Point( 0, ActualHeight - 1 );
         Point rightArrowPos = new Point( ActualWidth - ( 1 + ( verticalScrollVisible ? 1 : 0 ) ),
                                          ActualHeight - 1 );
         if ( leftArrowPos == pos ) {
             if (deltaX > 0) {
                 deltaX--;
                 Invalidate();
             }
         } else if ( rightArrowPos == pos ) {
             // сколько места сейчас оставлено дочернему контролу
             int remainingWidth = ActualWidth - ( verticalScrollVisible ? 1 : 0 );
             if ( deltaX < Content.RenderSize.Width - remainingWidth ) {
                 deltaX++;
                 Invalidate( );
             }
         } else if ( pos.Y == ActualHeight - 1 ) {
             // Clicked somewhere in scrollbar
             Point? horizontalScrollerPos = HorizontalScrollerPos;
             if ( horizontalScrollerPos.HasValue ) {
                 int remainingWidth = ActualWidth - ( verticalScrollVisible ? 1 : 0 );
                 int itemsPerScrollerPos = Content.RenderSize.Width/remainingWidth;
                 if ( pos.X < horizontalScrollerPos.Value.X ) {
                     deltaX = Math.Max( 0, deltaX - itemsPerScrollerPos );
                     Invalidate(  );
                 } else if ( pos.X > horizontalScrollerPos.Value.X ) {
                     deltaX = Math.Min(Content.RenderSize.Width - remainingWidth,
                         deltaX + itemsPerScrollerPos);
                     Invalidate();
                 } else {
                     // Click on scroller
                     // todo : make scroller draggable
                 }
             }
         }
     }
     if ( verticalScrollVisible ) {
         Point upArrowPos = new Point( ActualWidth - 1, 0 );
         Point downArrowPos = new Point( ActualWidth - 1,
                                         ActualHeight - ( 1 + ( horizontalScrollVisible ? 1 : 0 ) ) );
         if ( pos == upArrowPos ) {
             if (deltaY > 0) {
                 deltaY--;
                 Invalidate();
             }
         } else if ( pos == downArrowPos ) {
             // сколько места сейчас оставлено дочернему контролу
             int remainingHeight = ActualHeight - ( horizontalScrollVisible ? 1 : 0 );
             if ( deltaY < Content.RenderSize.Height - remainingHeight ) {
                 deltaY++;
                 Invalidate( );
             }
         } else if ( pos.X == ActualWidth - 1 ) {
             // Clicked somewhere in scrollbar
             Point? verticalScrollerPos = VerticalScrollerPos;
             if ( verticalScrollerPos.HasValue ) {
                 int remainingHeight = ActualHeight - ( horizontalScrollVisible ? 1 : 0 );
                 int itemsPerScrollerPos = Content.RenderSize.Height/remainingHeight;
                 if ( pos.Y < verticalScrollerPos.Value.Y ) {
                     deltaY = Math.Max( 0, deltaY - itemsPerScrollerPos );
                     Invalidate(  );
                 } else if ( pos.Y > verticalScrollerPos.Value.Y ) {
                     deltaY = Math.Min(Content.RenderSize.Height - remainingHeight,
                                         deltaY + itemsPerScrollerPos);
                     Invalidate();
                 } else {
                     // Click on scroller
                     // todo : make scroller draggable
                 }
             }
         }
     }
     args.Handled = true;
 }
Esempio n. 6
0
 /// <summary>
 /// По клику мышки ищет конечный Focusable контрол, который размещён 
 /// на месте нажатия и устанавливает на нём фокус.
 /// </summary>
 private void Window_OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
 {
     PassFocusToChildUnderPoint( e );
 }
Esempio n. 7
0
 public void Window_OnMouseUp(object sender, MouseButtonEventArgs args) {
     if (closing) {
         Point point = args.GetPosition(this);
         if (point.x == 3 && point.y == 0) {
             getWindowsHost().CloseWindow(this);
         }
         closing = false;
         showClosingGlyph = false;
         ConsoleApplication.Instance.EndCaptureInput(this);
         Invalidate();
         args.Handled = true;
     }
     if (moving) {
         moving = false;
         ConsoleApplication.Instance.EndCaptureInput(this);
         Invalidate();
         args.Handled = true;
     }
     if (resizing) {
         resizing = false;
         ConsoleApplication.Instance.EndCaptureInput(this);
         Invalidate();
         args.Handled = true;
     }
 }
Esempio n. 8
0
 public void Window_OnMouseDown(object sender, MouseButtonEventArgs args) {
     // перемещение можно начинать только когда окно не ресайзится и наоборот
     if (!moving && !resizing && !closing) {
         Point point = args.GetPosition(this);
         Point parentPoint = args.GetPosition(getWindowsHost());
         if (point.y == 0 && point.x == 3) {
             closing = true;
             showClosingGlyph = true;
             ConsoleApplication.Instance.BeginCaptureInput(this);
             // closing is started, we should redraw the border
             Invalidate();
             args.Handled = true;
         } else if (point.y == 0) {
             moving = true;
             movingStartPoint = parentPoint;
             movingStartX = RenderSlotRect.TopLeft.X;
             movingStartY = RenderSlotRect.TopLeft.Y;
             ConsoleApplication.Instance.BeginCaptureInput(this);
             // moving is started, we should redraw the border
             Invalidate();
             args.Handled = true;
         } else if (point.x == ActualWidth - 3 && point.y == ActualHeight - 2)
         {
             resizing = true;
             resizingStartPoint = parentPoint;
             resizingStartWidth = ActualWidth;
             resizingStartHeight = ActualHeight;
             ConsoleApplication.Instance.BeginCaptureInput(this);
             // resizing is started, we should redraw the border
             Invalidate();
             args.Handled = true;
         }
     }
 }
Esempio n. 9
0
 private void OnMouseDown( object sender, MouseButtonEventArgs args )
 {
     int index = args.GetPosition( this ).Y;
     if ( !disabledItemsIndexes.Contains(index) && SelectedItemIndex != index) {
         SelectedItemIndex = index;
         Invalidate(  );
     }
     if (disabledItemsIndexes.Contains( index ))
         args.Handled = true;
 }
Esempio n. 10
0
 private void OnMouseDown( object sender, MouseButtonEventArgs mouseButtonEventArgs )
 {
     if ( !opened )
         openPopup(  );
 }
Esempio n. 11
0
 private void OnMouseDown( object sender, MouseButtonEventArgs args ) {
     Point pos = args.GetPosition( this );
     if ( horizontalScrollVisible ) {
         if ( pos == new Point( 0, ActualHeight - 1 ) ) {
             // left arrow clicked
             if (deltaX > 0)
             {
                 deltaX--;
                 Invalidate();
             }
             
         } else {
             if ( pos ==
                  new Point( ActualWidth - ( 1 + ( verticalScrollVisible ? 1 : 0 ) ), ActualHeight - 1 ) ) {
                 // right arrow clicked
                 
                 // сколько места сейчас оставлено дочернему контролу
                 int remainingWidth = ActualWidth - (verticalScrollVisible ? 1 : 0);
                 if (deltaX < Content.RenderSize.Width - remainingWidth)
                 {
                     deltaX++;
                     Invalidate();
                 }
             }
         }
     }
     if ( verticalScrollVisible ) {
         if ( pos == new Point( ActualWidth - 1, 0 ) ) {
             // up arrow clicked
             if (deltaY > 0)
             {
                 deltaY--;
                 Invalidate();
             }
         } else {
             if ( pos ==
                  new Point( ActualWidth - 1, ActualHeight - ( 1 + ( horizontalScrollVisible ? 1 : 0 ) ) ) ) {
                 // down arrow clicked
                 
                 // сколько места сейчас оставлено дочернему контролу
                 int remainingHeight = ActualHeight - (horizontalScrollVisible ? 1 : 0);
                 if (deltaY < Content.RenderSize.Height - remainingHeight)
                 {
                     deltaY++;
                     Invalidate();
                 }
             }
         }
     }
     args.Handled = true;
 }
Esempio n. 12
0
 private void Button_OnMouseUp(object sender, MouseButtonEventArgs args) {
     if (clicking && !Disabled) {
         clicking = false;
         if (pressed) {
             pressed = false;
             this.Invalidate();
         }
         if (HitTest(args.RawPosition)) {
             RaiseEvent(ClickEvent, new RoutedEventArgs(this, ClickEvent));
             if (command != null && command.CanExecute(CommandParameter)) {
                 command.Execute(CommandParameter);
             }
         }
         ConsoleApplication.Instance.EndCaptureInput(this);
         args.Handled = true;
     }
 }
Esempio n. 13
0
 private void stopAutoRepeatTimer( ) {
     timer.Dispose( );
     timer = null;
     autoRepeatTimerRunning = false;
     lastMousePressEventArgs = null;
 }
Esempio n. 14
0
 private void startAutoRepeatTimer( MouseButtonEventArgs eventArgs ) {
     lastMousePressEventArgs = eventArgs;
     timer = new Timer( state => {
         ConsoleApplication.Instance.RunOnUiThread( ( ) => {
             if (autoRepeatTimerRunning) {
                 eventsQueue.Enqueue( new MouseButtonEventArgs(
                     lastMousePressEventArgs.Source,
                     Control.MouseDownEvent,
                     lastMousePosition,
                     lastMousePressEventArgs.LeftButton,
                     lastMousePressEventArgs.MiddleButton,
                     lastMousePressEventArgs.RightButton,
                     MouseButton.Left,
                     1,
                     true
                 ) );
             }
         } );
         // todo : make this constants configurable
     }, null, TimeSpan.FromMilliseconds( 300 ), TimeSpan.FromMilliseconds(100) );
     autoRepeatTimerRunning = true;
 }
Esempio n. 15
0
        private void mouseDown( object sender, MouseButtonEventArgs args )
        {
            Point pos = args.GetPosition( this );
            if ( pos.y > 2 ) return;

            int x = 0;
            for ( int i = 0; i < tabDefinitions.Count; i++ ) {
                TabDefinition tabDefinition = tabDefinitions[ i ];
                if ( pos.X > x && pos.X <= x + tabDefinition.Title.Length + 2 ) {
                    activeTabIndex = i;
                    Invalidate(  );
                    break;
                }
                x += tabDefinition.Title.Length + 2 + 1; // Two spaces around + one vertical border
            }
            args.Handled = true;
        }