#include "config.h"
#include "Clipboard.h"
#include "CachedImage.h"
#include "ClipboardUtilitiesWin.h"
#include "Document.h"
#include "Element.h"
#include "Frame.h"
#include "HTMLNames.h"
#include "HTMLParserIdioms.h"
#include "NotImplemented.h"
#include "Pasteboard.h"
#include "markup.h"
namespace WebCore {
DragImageRef Clipboard::createDragImage(IntPoint& dragLocation) const
{
HBITMAP result = 0;
if (m_dragImage) {
#if USE(CAIRO) || USE(CG)
result = createDragImageFromImage(m_dragImage->image());
dragLocation = m_dragLoc;
#else
notImplemented();
#endif
} else if (m_dragImageElement) {
Node* node = m_dragImageElement.get();
result = node->document()->frame()->nodeImage(node);
dragLocation = m_dragLoc;
}
return result;
}
#if ENABLE(DRAG_SUPPORT)
void Clipboard::declareAndWriteDragImage(Element* element, const KURL& url, const String& title, Frame* frame)
{
if (!m_pasteboard->writableDataObject())
return;
m_pasteboard->writeURLToWritableDataObject(url, title);
m_pasteboard->writeImageToDataObject(element, url);
AtomicString imageURL = element->getAttribute(HTMLNames::srcAttr);
if (imageURL.isEmpty())
return;
KURL fullURL = frame->document()->completeURL(stripLeadingAndTrailingHTMLSpaces(imageURL));
if (fullURL.isEmpty())
return;
STGMEDIUM medium = {0};
medium.tymed = TYMED_HGLOBAL;
Vector<char> data;
markupToCFHTML(createMarkup(element, IncludeNode, 0, ResolveAllURLs), "", data);
medium.hGlobal = createGlobalData(data);
if (medium.hGlobal && FAILED(m_pasteboard->writableDataObject()->SetData(htmlFormat(), &medium, TRUE)))
::GlobalFree(medium.hGlobal);
}
#endif
}