diff -r 000000000000 -r 4f2f89ce4247 WebCore/page/DragController.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebCore/page/DragController.h Fri Sep 17 09:02:29 2010 +0300 @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2007, 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef DragController_h +#define DragController_h + +#include "DragActions.h" +#include "DragImage.h" +#include "IntPoint.h" +#include "KURL.h" + +namespace WebCore { + + class Clipboard; + class Document; + class DragClient; + class DragData; + class Element; + class Frame; + class Image; + class IntRect; + class Node; + class Page; + class PlatformMouseEvent; + class Range; + class SelectionController; + + class DragController : public Noncopyable { + public: + DragController(Page*, DragClient*); + ~DragController(); + DragClient* client() const { return m_client; } + + DragOperation dragEntered(DragData*); + void dragExited(DragData*); + DragOperation dragUpdated(DragData*); + bool performDrag(DragData*); + + // FIXME: It should be possible to remove a number of these accessors once all + // drag logic is in WebCore. + void setDidInitiateDrag(bool initiated) { m_didInitiateDrag = initiated; } + bool didInitiateDrag() const { return m_didInitiateDrag; } + void setIsHandlingDrag(bool handling) { m_isHandlingDrag = handling; } + bool isHandlingDrag() const { return m_isHandlingDrag; } + DragOperation sourceDragOperation() const { return m_sourceDragOperation; } + void setDraggingImageURL(const KURL& url) { m_draggingImageURL = url; } + const KURL& draggingImageURL() const { return m_draggingImageURL; } + void setDragOffset(const IntPoint& offset) { m_dragOffset = offset; } + const IntPoint& dragOffset() const { return m_dragOffset; } + DragSourceAction dragSourceAction() const { return m_dragSourceAction; } + + Document* documentUnderMouse() const { return m_documentUnderMouse.get(); } + DragDestinationAction dragDestinationAction() const { return m_dragDestinationAction; } + DragSourceAction delegateDragSourceAction(const IntPoint& pagePoint); + + bool mayStartDragAtEventLocation(const Frame*, const IntPoint& framePos, Node*); + void dragEnded(); + + void placeDragCaret(const IntPoint&); + + bool startDrag(Frame* src, Clipboard*, DragOperation srcOp, const PlatformMouseEvent& dragEvent, const IntPoint& dragOrigin, bool isDHTMLDrag); + static const IntSize& maxDragImageSize(); + + static const int LinkDragBorderInset; + static const int MaxOriginalImageArea; + static const int DragIconRightInset; + static const int DragIconBottomInset; + static const float DragImageAlpha; + + private: + bool canProcessDrag(DragData*); + bool concludeEditDrag(DragData*); + DragOperation dragEnteredOrUpdated(DragData*); + DragOperation operationForLoad(DragData*); + bool tryDocumentDrag(DragData*, DragDestinationAction, DragOperation&); + bool tryDHTMLDrag(DragData*, DragOperation&); + DragOperation dragOperation(DragData*); + void cancelDrag(); + bool dragIsMove(SelectionController*); + bool isCopyKeyDown(); + + void mouseMovedIntoDocument(Document*); + + IntRect selectionDraggingRect(Frame*); + bool doDrag(Frame* src, Clipboard* clipboard, DragImageRef dragImage, const KURL& linkURL, const KURL& imageURL, Node* node, IntPoint& dragLoc, IntPoint& dragImageOffset); + void doImageDrag(Element*, const IntPoint&, const IntRect&, Clipboard*, Frame*, IntPoint&); + void doSystemDrag(DragImageRef, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool forLink); + void cleanupAfterSystemDrag(); + + Page* m_page; + DragClient* m_client; + + RefPtr m_documentUnderMouse; // The document the mouse was last dragged over. + RefPtr m_dragInitiator; // The Document (if any) that initiated the drag. + + DragDestinationAction m_dragDestinationAction; + DragSourceAction m_dragSourceAction; + bool m_didInitiateDrag; + bool m_isHandlingDrag; + DragOperation m_sourceDragOperation; // Set in startDrag when a drag starts from a mouse down within WebKit + IntPoint m_dragOffset; + KURL m_draggingImageURL; + }; + +} + +#endif