WebDragClientQt.cpp [plain text]
#include "config.h"
#include "WebDragClient.h"
#include "Clipboard.h"
#include "DragData.h"
#include "GraphicsContext.h"
#include "Pasteboard.h"
#include "ShareableBitmap.h"
#include "WebCoreArgumentCoders.h"
#include "WebPage.h"
#include "WebPageProxyMessages.h"
using namespace WebCore;
namespace WebKit {
static PassRefPtr<ShareableBitmap> convertQPixmapToShareableBitmap(QPixmap* pixmap)
{
if (!pixmap)
return 0;
RefPtr<ShareableBitmap> bitmap = ShareableBitmap::createShareable(IntSize(pixmap->size()), ShareableBitmap::SupportsAlpha);
OwnPtr<GraphicsContext> graphicsContext = bitmap->createGraphicsContext();
graphicsContext->platformContext()->drawPixmap(0, 0, *pixmap);
return bitmap.release();
}
void WebDragClient::startDrag(DragImageRef dragImage, const IntPoint& clientPosition, const IntPoint& globalPosition, Clipboard* clipboard, Frame*, bool)
{
QMimeData* clipboardData = clipboard->pasteboard().clipboardData();
DragOperation dragOperationMask = clipboard->sourceOperation();
clipboard->pasteboard().invalidateWritableData();
DragData dragData(clipboardData, clientPosition, globalPosition, dragOperationMask);
RefPtr<ShareableBitmap> bitmap = convertQPixmapToShareableBitmap(dragImage);
ShareableBitmap::Handle handle;
if (bitmap && !bitmap->createHandle(handle))
return;
m_page->send(Messages::WebPageProxy::StartDrag(dragData, handle));
}
}