OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. |
3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
61 #include "core/events/ClipboardEvent.h" | 61 #include "core/events/ClipboardEvent.h" |
62 #include "core/events/KeyboardEvent.h" | 62 #include "core/events/KeyboardEvent.h" |
63 #include "core/events/ScopedEventQueue.h" | 63 #include "core/events/ScopedEventQueue.h" |
64 #include "core/events/TextEvent.h" | 64 #include "core/events/TextEvent.h" |
65 #include "core/fetch/ImageResource.h" | 65 #include "core/fetch/ImageResource.h" |
66 #include "core/fetch/ResourceFetcher.h" | 66 #include "core/fetch/ResourceFetcher.h" |
67 #include "core/frame/FrameView.h" | 67 #include "core/frame/FrameView.h" |
68 #include "core/frame/LocalFrame.h" | 68 #include "core/frame/LocalFrame.h" |
69 #include "core/frame/Settings.h" | 69 #include "core/frame/Settings.h" |
70 #include "core/frame/UseCounter.h" | 70 #include "core/frame/UseCounter.h" |
71 #include "core/html/HTMLCanvasElement.h" | |
71 #include "core/html/HTMLImageElement.h" | 72 #include "core/html/HTMLImageElement.h" |
72 #include "core/html/HTMLInputElement.h" | 73 #include "core/html/HTMLInputElement.h" |
73 #include "core/html/HTMLTextAreaElement.h" | 74 #include "core/html/HTMLTextAreaElement.h" |
74 #include "core/html/parser/HTMLParserIdioms.h" | 75 #include "core/html/parser/HTMLParserIdioms.h" |
75 #include "core/loader/EmptyClients.h" | 76 #include "core/loader/EmptyClients.h" |
76 #include "core/page/EditorClient.h" | 77 #include "core/page/EditorClient.h" |
77 #include "core/page/EventHandler.h" | 78 #include "core/page/EventHandler.h" |
78 #include "core/page/FocusController.h" | 79 #include "core/page/FocusController.h" |
79 #include "core/page/Page.h" | 80 #include "core/page/Page.h" |
80 #include "core/rendering/HitTestResult.h" | 81 #include "core/rendering/HitTestResult.h" |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
413 pasteAsFragment(fragment, canSmartReplaceWithPasteboard(pasteboard), cho sePlainText); | 414 pasteAsFragment(fragment, canSmartReplaceWithPasteboard(pasteboard), cho sePlainText); |
414 } | 415 } |
415 | 416 |
416 void Editor::writeSelectionToPasteboard(Pasteboard* pasteboard, Range* selectedR ange, const String& plainText) | 417 void Editor::writeSelectionToPasteboard(Pasteboard* pasteboard, Range* selectedR ange, const String& plainText) |
417 { | 418 { |
418 String html = createMarkup(selectedRange, 0, AnnotateForInterchange, false, ResolveNonLocalURLs); | 419 String html = createMarkup(selectedRange, 0, AnnotateForInterchange, false, ResolveNonLocalURLs); |
419 KURL url = selectedRange->startContainer()->document().url(); | 420 KURL url = selectedRange->startContainer()->document().url(); |
420 pasteboard->writeHTML(html, url, plainText, canSmartCopyOrDelete()); | 421 pasteboard->writeHTML(html, url, plainText, canSmartCopyOrDelete()); |
421 } | 422 } |
422 | 423 |
424 static Image* imageFromNode(const Node* node) | |
tkent
2014/06/30 22:59:46
The argument type should be |const Node&| because
zino
2014/07/01 10:12:11
Done.
| |
425 { | |
426 node->document().updateLayoutIgnorePendingStylesheets(); | |
427 RenderObject* renderer = node->renderer(); | |
428 if (!renderer) | |
429 return nullptr; | |
430 | |
431 if (renderer->isCanvas()) | |
432 return toHTMLCanvasElement(node)->copiedImage(); | |
433 | |
434 if (renderer->isImage()) { | |
435 RenderImage* renderImage = toRenderImage(renderer); | |
436 if (!renderImage) | |
437 return nullptr; | |
438 | |
439 ImageResource* cachedImage = renderImage->cachedImage(); | |
440 if (!cachedImage || cachedImage->errorOccurred()) | |
441 return nullptr; | |
442 return cachedImage->imageForRenderer(renderImage); | |
443 } | |
444 | |
445 return nullptr; | |
446 } | |
447 | |
423 static void writeImageNodeToPasteboard(Pasteboard* pasteboard, Node* node, const String& title) | 448 static void writeImageNodeToPasteboard(Pasteboard* pasteboard, Node* node, const String& title) |
424 { | 449 { |
425 ASSERT(pasteboard); | 450 ASSERT(pasteboard); |
426 ASSERT(node); | 451 ASSERT(node); |
427 | 452 |
428 if (!(node->renderer() && node->renderer()->isImage())) | 453 Image* image = imageFromNode(node); |
454 if (!image) | |
429 return; | 455 return; |
430 | 456 |
431 RenderImage* renderer = toRenderImage(node->renderer()); | |
432 ImageResource* cachedImage = renderer->cachedImage(); | |
433 if (!cachedImage || cachedImage->errorOccurred()) | |
434 return; | |
435 Image* image = cachedImage->imageForRenderer(renderer); | |
436 ASSERT(image); | |
437 | |
438 // FIXME: This should probably be reconciled with HitTestResult::absoluteIma geURL. | 457 // FIXME: This should probably be reconciled with HitTestResult::absoluteIma geURL. |
439 AtomicString urlString; | 458 AtomicString urlString; |
440 if (isHTMLImageElement(*node) || isHTMLInputElement(*node)) | 459 if (isHTMLImageElement(*node) || isHTMLInputElement(*node)) |
441 urlString = toElement(node)->getAttribute(srcAttr); | 460 urlString = toElement(node)->getAttribute(srcAttr); |
442 else if (isSVGImageElement(*node)) | 461 else if (isSVGImageElement(*node)) |
443 urlString = toElement(node)->getAttribute(XLinkNames::hrefAttr); | 462 urlString = toElement(node)->getAttribute(XLinkNames::hrefAttr); |
444 else if (isHTMLEmbedElement(*node) || isHTMLObjectElement(*node)) | 463 else if (isHTMLEmbedElement(*node) || isHTMLObjectElement(*node) || isHTMLCa nvasElement(*node)) |
445 urlString = toElement(node)->imageSourceURL(); | 464 urlString = toElement(node)->imageSourceURL(); |
446 KURL url = urlString.isEmpty() ? KURL() : node->document().completeURL(strip LeadingAndTrailingHTMLSpaces(urlString)); | 465 KURL url = urlString.isEmpty() ? KURL() : node->document().completeURL(strip LeadingAndTrailingHTMLSpaces(urlString)); |
447 | 466 |
448 pasteboard->writeImage(image, url, title); | 467 pasteboard->writeImage(image, url, title); |
449 } | 468 } |
450 | 469 |
451 // Returns whether caller should continue with "the default processing", which i s the same as | 470 // Returns whether caller should continue with "the default processing", which i s the same as |
452 // the event handler NOT setting the return value to false | 471 // the event handler NOT setting the return value to false |
453 bool Editor::dispatchCPPEvent(const AtomicString &eventType, DataTransferAccessP olicy policy, PasteMode pasteMode) | 472 bool Editor::dispatchCPPEvent(const AtomicString &eventType, DataTransferAccessP olicy policy, PasteMode pasteMode) |
454 { | 473 { |
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1259 frame().selection().setShouldShowBlockCursor(m_overwriteModeEnabled); | 1278 frame().selection().setShouldShowBlockCursor(m_overwriteModeEnabled); |
1260 } | 1279 } |
1261 | 1280 |
1262 void Editor::trace(Visitor* visitor) | 1281 void Editor::trace(Visitor* visitor) |
1263 { | 1282 { |
1264 visitor->trace(m_lastEditCommand); | 1283 visitor->trace(m_lastEditCommand); |
1265 visitor->trace(m_mark); | 1284 visitor->trace(m_mark); |
1266 } | 1285 } |
1267 | 1286 |
1268 } // namespace WebCore | 1287 } // namespace WebCore |
OLD | NEW |