예제 #1
0
        internal static void DoDragDrop(object data, DragDropEffects effect, DragDropRenderHandler render = null)
        {
            IsDragging = true;

            DraggingData       = data;
            dragControlEffects = effect;
            dragRender         = render;
        }
예제 #2
0
        public void ProccessMouse(float mouseX, float mouseY)
        {
            if (scaleX != 1f || scaleY != 1f)
            {
                mouseX /= scaleX;
                mouseY /= scaleY;
            }

            mouseEvent  = MouseEvents.None;
            mouseButton = MouseButtons.None;

            mousePositionChanged = mousePositionX != mouseX || mousePositionY != mouseY;
            if (mousePositionChanged)
            {
                updateHoveredControl = true;
            }

            mousePositionX = mouseX;
            mousePositionY = mouseY;

            #region Set events.

            int       eventButton = -1;
            int       eventClicks = 0;
            float     eventDelta  = 0;
            EventType eventType   = EventType.Ignore;

            if (userMouseArgs != null)
            {
                switch (userMouseArgs.Button)
                {
                case MouseButtons.Left: eventButton = 0; break;

                case MouseButtons.Right: eventButton = 1; break;

                case MouseButtons.Middle: eventButton = 2; break;
                }
                eventClicks = userMouseArgs.Clicks;
                eventDelta  = userMouseArgs.Delta;
                switch (userMouseEvent)
                {
                case MouseEvents.Down: eventType = EventType.MouseDown; break;

                case MouseEvents.Up: eventType = EventType.MouseUp; break;

                case MouseEvents.Wheel: eventType = EventType.ScrollWheel; break;
                }
                userMouseArgs = null;
            }
            else
            {
                eventButton = Event.current.button;
                eventClicks = Event.current.clickCount;
                eventDelta  = Event.current.delta.y;
                eventType   = Event.current.type;
            }

            switch (eventType)
            {
            case EventType.MouseDown:
                switch (eventButton)
                {
                case 0:
                    mouseButton = MouseButtons.Left;
                    mouseEvent  = MouseEvents.Down;
                    if (eventClicks > 1)
                    {
                        mouseEvent = MouseEvents.DoubleClick;
                    }
                    break;

                case 1:
                    mouseButton = MouseButtons.Right;
                    mouseEvent  = MouseEvents.Down;
                    break;

                case 2:
                    mouseButton = MouseButtons.Middle;
                    mouseEvent  = MouseEvents.Down;
                    break;
                }
                break;

            case EventType.MouseUp:
                switch (eventButton)
                {
                case 0:
                    mouseButton = MouseButtons.Left;
                    mouseEvent  = MouseEvents.Up;
                    break;

                case 1:
                    mouseButton = MouseButtons.Right;
                    mouseEvent  = MouseEvents.Up;
                    break;

                case 2:
                    mouseButton = MouseButtons.Middle;
                    mouseEvent  = MouseEvents.Up;
                    break;
                }
                break;

            case EventType.ScrollWheel:
                mouseEvent      = MouseEvents.Wheel;
                mouseWheelDelta = eventDelta;
                break;
            }

            #endregion

            //if (_mouseLastClickControl != null && _mouseEvent == MouseEvents.None && _mouseMovePosition != mousePosition)
            //    _ProcessControl(mousePosition, _mouseLastClickControl, true);

            if (mouseEvent == MouseEvents.None && !mousePositionChanged)
            {
                return;
            }

            // Dispose context first.
            for (int i = Contexts.Count - 1; i >= 0; i--) // We want to dispose child context first.
            {
                var contextControl = Contexts[i];
                if (!contextControl.uwfContext)
                {
                    continue;
                }

                if (Contains(contextControl, hoveredControl))
                {
                    continue;
                }
                if (mouseEvent != MouseEvents.Down)
                {
                    continue;
                }

                contextControl.Dispose();
            }

            if (hoveredControl == null && mouseEvent == MouseEvents.Up)
            {
                dragndrop  = false;
                dragData   = null;
                dragRender = null;
            }

            if (hoveredControl != null)
            {
                _ProcessControl(new PointF(mouseX, mouseY), hoveredControl, false);
            }

            if (mouseEvent == MouseEvents.Down)
            {
                var downArgs = new MouseEventArgs(mouseButton, 1, (int)mouseX, (int)mouseY, 0);
                MouseHook.RaiseMouseDown(hoveredControl, downArgs);
            }

            if (mouseEvent == MouseEvents.Up)
            {
                var upArgs = new MouseEventArgs(mouseButton, 1, (int)mouseX, (int)mouseY, 0);
                MouseHook.RaiseMouseUp(hoveredControl, upArgs);
            }
        }
예제 #3
0
        public void ProccessMouse(MouseEvents mE, float mX, float mY, MouseButtons mButton, int clicks, int delta)
        {
            if (scaleX != 1f || scaleY != 1f)
            {
                mX /= scaleX;
                mY /= scaleY;
            }

            mouseEvent      = mE;
            mouseButton     = mButton;
            mouseWheelDelta = delta;

            mousePositionChanged = mousePositionX != mX || mousePositionY != mY;
            if (mousePositionChanged)
            {
                updateHoveredControl = true;
            }

            mousePositionX = mX;
            mousePositionY = mY;

            //if (_mouseLastClickControl != null && _mouseEvent == MouseEvents.None && _mouseMovePosition != mousePosition)
            //    _ProcessControl(mousePosition, _mouseLastClickControl, true);

            if (mE == MouseEvents.None && !mousePositionChanged)
            {
                return;
            }

            // Dispose context first.
            for (int i = Contexts.Count - 1; i >= 0; i--) // We want to dispose child context first.
            {
                var contextControl = Contexts[i];
                if (!contextControl.uwfContext)
                {
                    continue;
                }

                if (Contains(contextControl, hoveredControl))
                {
                    continue;
                }
                if (mE != MouseEvents.Down)
                {
                    continue;
                }

                contextControl.Dispose();
            }

            if (hoveredControl == null && mE == MouseEvents.Up)
            {
                dragndrop  = false;
                dragData   = null;
                dragRender = null;
            }

            if (hoveredControl != null)
            {
                _ProcessControl(new PointF(mX, mY), hoveredControl, false);
            }

            if (mE == MouseEvents.Down)
            {
                var downArgs = new MouseEventArgs(mouseButton, clicks, (int)mX, (int)mY, delta);
                MouseHook.RaiseMouseDown(hoveredControl, downArgs);
            }

            if (mE == MouseEvents.Up)
            {
                var upArgs = new MouseEventArgs(mouseButton, clicks, (int)mX, (int)mY, delta);
                MouseHook.RaiseMouseUp(hoveredControl, upArgs);
            }
        }
예제 #4
0
 internal static void StopDragDrop()
 {
     IsDragging   = false;
     DraggingData = null;
     dragRender   = null;
 }
예제 #5
0
 internal DragDropEffects DoDragDrop(object data, DragDropEffects allowedEffects, DragDropRenderHandler render)
 {
     Application.DoDragDrop(data, allowedEffects, render);
     return(allowedEffects); // TODO: ?
 }
예제 #6
0
 public DragDropEffects DoDragDrop(object data, DragDropEffects allowedEffects, DragDropRenderHandler render)
 {
     Application.DoDragDrop(data, allowedEffects, render);
     return(DragDropEffects.None); // TODO: ?
 }
예제 #7
0
 internal static void DoDragDrop(object data, DragDropEffects effect, DragDropRenderHandler render)
 {
     _dragData           = data;
     _dragControlEffects = effect;
     _dragRender         = render;
 }
예제 #8
0
 internal static void DoDragDrop(object data, DragDropEffects effect, DragDropRenderHandler render)
 {
     _dragData = data;
     _dragControlEffects = effect;
     _dragRender = render;
 }
예제 #9
0
        public void ProcessMouse(MouseEvents mE, float mX, float mY, MouseButtons mButton, int clicks, int delta)
        {
            if (scaleX != 1f || scaleY != 1f)
            {
                mX /= scaleX;
                mY /= scaleY;
            }

            mouseEvent      = mE;
            mouseButton     = mButton;
            mouseWheelDelta = delta;

            mousePositionChanged = mousePositionX != mX || mousePositionY != mY;
            if (mousePositionChanged)
            {
                updateHoveredControl = true;
            }

            mousePositionX = mX;
            mousePositionY = mY;

            switch (mouseEvent)
            {
            case MouseEvents.None:
                if (!mousePositionChanged)
                {
                    return;
                }
                break;

            case MouseEvents.Down:
                mouseButtonLastPressed = mButton;
                break;

            case MouseEvents.Up:
                if (mouseButtonLastPressed == mButton)
                {
                    mouseButtonLastPressed = MouseButtons.None;
                }
                break;
            }


            // Dispose context first.
            for (int i = Contexts.Count - 1; i >= 0; i--) // We want to dispose child context first.
            {
                var contextControl = Contexts[i];
                if (!contextControl.uwfContext)
                {
                    continue;
                }

                if (Contains(contextControl, hoveredControl))
                {
                    continue;
                }
                if (mouseEvent != MouseEvents.Down)
                {
                    continue;
                }

                contextControl.Dispose();
            }

            if (hoveredControl == null && mouseEvent == MouseEvents.Up)
            {
                IsDragging   = false;
                DraggingData = null;
                dragRender   = null;
            }

            if (hoveredControl != null)
            {
                RaiseMouseEvents(new PointF(mX, mY), hoveredControl, false);
            }

            if (mouseEvent == MouseEvents.Down)
            {
                var downArgs = new MouseEventArgs(mouseButton, clicks, (int)mX, (int)mY, delta);
                MouseHook.RaiseMouseDown(hoveredControl, downArgs);
            }

            if (mouseEvent == MouseEvents.Up)
            {
                var upArgs = new MouseEventArgs(mouseButton, clicks, (int)mX, (int)mY, delta);
                MouseHook.RaiseMouseUp(hoveredControl, upArgs);
            }
        }