Exemplo n.º 1
0
            /// <summary>
            /// Release resources.
            /// </summary>
            public void Dispose()
            {
                _hintToTarget.Clear();
                _hintToTarget = null;

                if (_indicators != null)
                {
                    IDisposable dispose = _indicators as IDisposable;
                    dispose.Dispose();
                    _indicators = null;
                }
            }
Exemplo n.º 2
0
            /// <summary>
            /// Update visual feedback based on the current screen position of the mouse.
            /// </summary>
            /// <param name="screenPt">Latest mouse screen position.</param>
            /// <param name="dragFeedback">Type of drag feedback required.</param>
            public DragTarget Feedback(Point screenPt, PaletteDragFeedback dragFeedback)
            {
                if (ScreenRect.Contains(screenPt))
                {
                    // Create the docking indicators the first time needed
                    if (_indicators == null)
                    {
                        switch (dragFeedback)
                        {
                        case PaletteDragFeedback.Rounded:
                            _indicators = new DropDockingIndicatorsRounded(_paletteDragDrop, _renderer,
                                                                           _hintToTarget.ContainsKey(DragTargetHint.EdgeLeft),
                                                                           _hintToTarget.ContainsKey(DragTargetHint.EdgeRight),
                                                                           _hintToTarget.ContainsKey(DragTargetHint.EdgeTop),
                                                                           _hintToTarget.ContainsKey(DragTargetHint.EdgeBottom),
                                                                           _hintToTarget.ContainsKey(DragTargetHint.Transfer));
                            break;

                        case PaletteDragFeedback.Square:
                        default:
                            _indicators = new DropDockingIndicatorsSquare(_paletteDragDrop, _renderer,
                                                                          _hintToTarget.ContainsKey(DragTargetHint.EdgeLeft),
                                                                          _hintToTarget.ContainsKey(DragTargetHint.EdgeRight),
                                                                          _hintToTarget.ContainsKey(DragTargetHint.EdgeTop),
                                                                          _hintToTarget.ContainsKey(DragTargetHint.EdgeBottom),
                                                                          _hintToTarget.ContainsKey(DragTargetHint.Transfer));
                            break;
                        }
                    }

                    // Ensure window is displayed in correct location
                    _indicators.ShowRelative(ScreenRect);

                    // Hit test against indicators and update display
                    switch (_indicators.ScreenMouseMove(screenPt))
                    {
                    case 0x0040:
                        return(_hintToTarget[DragTargetHint.EdgeLeft]);

                    case 0x0080:
                        return(_hintToTarget[DragTargetHint.EdgeRight]);

                    case 0x0100:
                        return(_hintToTarget[DragTargetHint.EdgeTop]);

                    case 0x0200:
                        return(_hintToTarget[DragTargetHint.EdgeBottom]);

                    case 0x0400:
                        return(_hintToTarget[DragTargetHint.Transfer]);

                    default:
                        // Mouse is not over any of the targets
                        return(null);
                    }
                }
                else
                {
                    if (_indicators != null)
                    {
                        _indicators.MouseReset();
                        _indicators.Hide();
                    }

                    // Mouse is not over any of the targets
                    return(null);
                }
            }