⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webdragclient.mm

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 MM
字号:
/* * Copyright (C) 2007, 2008 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.  */#import "WebDragClient.h"#import "WebArchive.h"#import "WebDOMOperations.h"#import "WebFrame.h"#import "WebFrameInternal.h"#import "WebHTMLViewInternal.h"#import "WebHTMLViewPrivate.h"#import "WebKitLogging.h"#import "WebNSPasteboardExtras.h"#import "WebNSURLExtras.h"#import "WebUIDelegate.h"#import "WebUIDelegatePrivate.h"#import "WebViewInternal.h"#import <WebCore/ClipboardMac.h>#import <WebCore/DragData.h>#import <WebCore/EventHandler.h>#import <WebCore/Frame.h>#import <WebCore/FrameView.h>#import <WebCore/Image.h>#import <WebCore/Page.h>using namespace WebCore;WebDragClient::WebDragClient(WebView* webView)    : m_webView(webView) {}static WebHTMLView *getTopHTMLView(Frame* frame){    ASSERT(frame);    ASSERT(frame->page());    return (WebHTMLView*)[[kit(frame->page()->mainFrame()) frameView] documentView];}WebCore::DragDestinationAction WebDragClient::actionMaskForDrag(WebCore::DragData* dragData){    return (WebCore::DragDestinationAction)[[m_webView _UIDelegateForwarder] webView:m_webView dragDestinationActionMaskForDraggingInfo:dragData->platformData()];}void WebDragClient::willPerformDragDestinationAction(WebCore::DragDestinationAction action, WebCore::DragData* dragData){    [[m_webView _UIDelegateForwarder] webView:m_webView willPerformDragDestinationAction:(WebDragDestinationAction)action forDraggingInfo:dragData->platformData()];}WebCore::DragSourceAction WebDragClient::dragSourceActionMaskForPoint(const IntPoint& windowPoint){    NSPoint viewPoint = [m_webView convertPoint:windowPoint fromView:nil];    return (DragSourceAction)[[m_webView _UIDelegateForwarder] webView:m_webView dragSourceActionMaskForPoint:viewPoint];}void WebDragClient::willPerformDragSourceAction(WebCore::DragSourceAction action, const WebCore::IntPoint& mouseDownPoint, WebCore::Clipboard* clipboard){    ASSERT(clipboard);    [[m_webView _UIDelegateForwarder] webView:m_webView willPerformDragSourceAction:(WebDragSourceAction)action fromPoint:mouseDownPoint withPasteboard:static_cast<WebCore::ClipboardMac*>(clipboard)->pasteboard()];}void WebDragClient::startDrag(DragImageRef dragImage, const IntPoint& at, const IntPoint& eventPos, Clipboard* clipboard, Frame* frame, bool linkDrag){    if (!frame)        return;    ASSERT(clipboard);    RetainPtr<WebHTMLView> htmlView = (WebHTMLView*)[[kit(frame) frameView] documentView];    if (![htmlView.get() isKindOfClass:[WebHTMLView class]])        return;        NSEvent *event = linkDrag ? frame->eventHandler()->currentNSEvent() : [htmlView.get() _mouseDownEvent];    WebHTMLView* topHTMLView = getTopHTMLView(frame);    RetainPtr<WebHTMLView> topViewProtector = topHTMLView;        [topHTMLView _stopAutoscrollTimer];    NSPasteboard *pasteboard = static_cast<ClipboardMac*>(clipboard)->pasteboard();    NSImage *dragNSImage = dragImage.get();    WebHTMLView *sourceHTMLView = htmlView.get();    id delegate = [m_webView UIDelegate];    SEL selector = @selector(webView:dragImage:at:offset:event:pasteboard:source:slideBack:forView:);    if ([delegate respondsToSelector:selector]) {        if ([m_webView _catchesDelegateExceptions]) {            @try {                [delegate webView:m_webView dragImage:dragNSImage at:at offset:NSZeroSize event:event pasteboard:pasteboard source:sourceHTMLView slideBack:YES forView:topHTMLView];            } @catch (id exception) {                ReportDiscardedDelegateException(selector, exception);            }        } else            [delegate webView:m_webView dragImage:dragNSImage at:at offset:NSZeroSize event:event pasteboard:pasteboard source:sourceHTMLView slideBack:YES forView:topHTMLView];    } else        [topHTMLView dragImage:dragNSImage at:at offset:NSZeroSize event:event pasteboard:pasteboard source:sourceHTMLView slideBack:YES];}DragImageRef WebDragClient::createDragImageForLink(KURL& url, const String& title, Frame* frame){    if (!frame)        return nil;    WebHTMLView *htmlView = (WebHTMLView *)[[kit(frame) frameView] documentView];    NSString *label = 0;    if (!title.isEmpty())        label = title;    NSURL *cocoaURL = url;    return [htmlView _dragImageForURL:[cocoaURL _web_userVisibleString] withLabel:label];}void WebDragClient::declareAndWriteDragImage(NSPasteboard* pasteboard, DOMElement* element, NSURL* URL, NSString* title, WebCore::Frame* frame) {    ASSERT(pasteboard);    ASSERT(element);    WebHTMLView *source = getTopHTMLView(frame);          WebArchive *archive = [element webArchive];        [pasteboard _web_declareAndWriteDragImageForElement:element URL:URL title:title archive:archive source:source];}void WebDragClient::dragControllerDestroyed() {    delete this;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -