Beispiel #1
0
        protected internal override void OnMouseIsDown(BasicMouseEventArgs e)
        {
            ScrollBarState newState = ScrollBarState.Neutral;
            bool           ctrl     = e.ControlPressed;

            if (e.Y < CompoundScrollableControl.scrollBarWidth - 1)
            {
                if (ctrl)
                {
                    newState = ScrollBarState.PressFirstBox;
                    MoveUp(main.DeltaUpToSelection());
                }
                else
                {
                    newState = ScrollBarState.PressFirstBox;
                    MoveUp(main.DeltaY);
                    upThread = new Thread(() => WalkUp(main.DeltaY));
                    upThread.Start();
                }
            }
            else if (e.Y > e.Height - CompoundScrollableControl.scrollBarWidth)
            {
                if (ctrl)
                {
                    newState = ScrollBarState.PressSecondBox;
                    MoveDown(main.DeltaDownToSelection());
                }
                else
                {
                    newState = ScrollBarState.PressSecondBox;
                    MoveDown(main.DeltaY);
                    downThread = new Thread(() => WalkDown(main.DeltaY));
                    downThread.Start();
                }
            }
            else if (HasBar)
            {
                int s = CalcBarStart(e.Height);
                int l = CalcBarSize(e.Height);
                if (e.Y >= s && e.Y <= s + l)
                {
                    newState         = ScrollBarState.PressBar;
                    dragStart        = e.Y;
                    visibleDragStart = main.VisibleY;
                }
                else if (e.Y < s)
                {
                    MoveUp(main.VisibleHeight);
                    upThread = new Thread(() => WalkUp(main.VisibleHeight));
                    upThread.Start();
                }
                else
                {
                    MoveDown(main.VisibleHeight);
                    downThread = new Thread(() => WalkDown(main.VisibleHeight));
                    downThread.Start();
                }
            }
            if (newState != state)
            {
                state = newState;
                Invalidate();
            }
        }