Changeset 65904 in webkit
- Timestamp:
- Aug 24, 2010 9:06:36 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r65902 r65904 1 2010-08-24 Daniel Cheng <dcheng@chromium.org> 2 3 Reviewed by Eric Seidel. 4 5 [chromium] Generate drag images for HTML elements and selections. 6 https://bugs.webkit.org/show_bug.cgi?id=43449 7 8 We weren't properly generating drag images if an HTML element was set 9 as the drag feedback image. I also implemented dragImageForSelection 10 while I was working on this part of the code. 11 12 No new tests. 13 14 * WebCore.exp.in: 15 * bindings/objc/DOM.mm: 16 (-[DOMNode renderedImage]): 17 * page/Frame.h: 18 * page/brew/FrameBrew.cpp: 19 (WebCore::Frame::nodeImage): 20 * page/chromium/FrameChromium.cpp: 21 (WebCore::): 22 (WebCore::Frame::nodeImage): 23 (WebCore::Frame::dragImageForSelection): 24 * page/efl/FrameEfl.cpp: 25 (WebCore::Frame::nodeImage): 26 * page/gtk/FrameGtk.cpp: 27 (WebCore::Frame::nodeImage): 28 * page/haiku/FrameHaiku.cpp: 29 (WebCore::Frame::nodeImage): 30 * page/mac/FrameMac.mm: 31 (WebCore::Frame::nodeImage): 32 (WebCore::Frame::dragImageForSelection): 33 * page/qt/FrameQt.cpp: 34 (WebCore::Frame::nodeImage): 35 (WebCore::Frame::dragImageForSelection): 36 * page/win/FrameCGWin.cpp: 37 (WebCore::Frame::nodeImage): 38 * page/win/FrameCairoWin.cpp: 39 (WebCore::Frame::nodeImage): 40 * page/wince/FrameWince.cpp: 41 (WebCore::Frame::nodeImage): 42 * page/wx/FrameWx.cpp: 43 (WebCore::Frame::nodeImage): 44 * platform/chromium/ClipboardChromium.cpp: 45 (WebCore::ClipboardChromium::createDragImage): 46 * rendering/RenderObject.cpp: 47 (WebCore::RenderObject::selectionForegroundColor): 48 1 49 2010-08-24 Jeremy Orlow <jorlow@chromium.org> 2 50 -
trunk/WebCore/WebCore.exp.in
r65797 r65904 591 591 __ZN7WebCore5Frame6createEPNS_4PageEPNS_21HTMLFrameOwnerElementEPNS_17FrameLoaderClientE 592 592 __ZN7WebCore5Frame7setViewEN3WTF10PassRefPtrINS_9FrameViewEEE 593 __ZN7WebCore5Frame9nodeImageEPNS_4NodeE 593 594 __ZN7WebCore5FrameD1Ev 594 595 __ZN7WebCore5Image12supportsTypeERKN3WTF6StringE … … 996 997 __ZNK7WebCore5Frame8settingsEv 997 998 __ZNK7WebCore5Frame9domWindowEv 998 __ZNK7WebCore5Frame9nodeImageEPNS_4NodeE999 999 __ZNK7WebCore5Range11startOffsetERi 1000 1000 __ZNK7WebCore5Range12endContainerERi -
trunk/WebCore/bindings/objc/DOM.mm
r62092 r65904 378 378 if (!frame) 379 379 return nil; 380 return frame->nodeImage(node) ;380 return frame->nodeImage(node).get(); 381 381 } 382 382 -
trunk/WebCore/page/Frame.h
r64409 r65904 222 222 void textDidChangeInTextArea(Element*); 223 223 224 DragImageRef nodeImage(Node*); 224 225 DragImageRef dragImageForSelection(); 225 226 … … 286 287 NSImage* selectionImage(bool forceBlackText = false) const; 287 288 NSImage* snapshotDragImage(Node*, NSRect* imageRect, NSRect* elementRect) const; 288 NSImage* nodeImage(Node*) const;289 289 290 290 private: … … 296 296 NSDictionary* fontAttributesForSelectionStart() const; 297 297 NSWritingDirection baseWritingDirectionForSelectionStart() const; 298 299 #endif300 301 #if PLATFORM(WIN)302 303 public:304 // FIXME - We should have a single version of nodeImage instead of using platform types.305 HBITMAP nodeImage(Node*) const;306 298 307 299 #endif -
trunk/WebCore/page/brew/FrameBrew.cpp
r54632 r65904 30 30 namespace WebCore { 31 31 32 DragImageRef Frame::nodeImage(Node*) 33 { 34 notImplemented(); 35 return 0; 36 } 37 32 38 DragImageRef Frame::dragImageForSelection() 33 39 { -
trunk/WebCore/page/chromium/FrameChromium.cpp
r53527 r65904 29 29 #include "Document.h" 30 30 #include "FloatRect.h" 31 #include "ImageBuffer.h" 31 32 #include "RenderView.h" 32 33 #include "Settings.h" 33 34 34 using std::min;35 36 35 namespace WebCore { 37 36 37 namespace { 38 39 struct ScopedState { 40 ScopedState(Frame* theFrame, RenderObject* theRenderer) 41 : frame(theFrame) 42 , renderer(theRenderer) 43 , paintBehavior(frame->view()->paintBehavior()) 44 , backgroundColor(frame->view()->baseBackgroundColor()) 45 { 46 } 47 48 ~ScopedState() 49 { 50 if (renderer) 51 renderer->updateDragState(false); 52 frame->view()->setPaintBehavior(paintBehavior); 53 frame->view()->setBaseBackgroundColor(backgroundColor); 54 frame->view()->setNodeToDraw(0); 55 } 56 57 Frame* frame; 58 RenderObject* renderer; 59 PaintBehavior paintBehavior; 60 Color backgroundColor; 61 }; 62 63 } // namespace 64 65 DragImageRef Frame::nodeImage(Node* node) 66 { 67 RenderObject* renderer = node->renderer(); 68 if (!renderer) 69 return 0; 70 71 const ScopedState state(this, renderer); 72 73 renderer->updateDragState(true); 74 m_view->setPaintBehavior(state.paintBehavior | PaintBehaviorFlattenCompositingLayers); 75 // When generating the drag image for an element, ignore the document background. 76 m_view->setBaseBackgroundColor(colorWithOverrideAlpha(Color::white, 1.0)); 77 m_doc->updateLayout(); 78 m_view->setNodeToDraw(node); // Enable special sub-tree drawing mode. 79 80 IntRect topLevelRect; 81 IntRect paintingRect = renderer->paintingRootRect(topLevelRect); 82 83 OwnPtr<ImageBuffer> buffer(ImageBuffer::create(paintingRect.size())); 84 if (!buffer) 85 return 0; 86 buffer->context()->translate(-paintingRect.x(), -paintingRect.y()); 87 buffer->context()->clip(FloatRect(0, 0, paintingRect.right(), paintingRect.bottom())); 88 89 m_view->paint(buffer->context(), paintingRect); 90 91 RefPtr<Image> image = buffer->copyImage(); 92 return createDragImageFromImage(image.get()); 93 } 94 38 95 DragImageRef Frame::dragImageForSelection() 39 { 40 if ( selection()->isRange())41 return 0; // FIXME: implement me!96 { 97 if (!selection()->isRange()) 98 return 0; 42 99 43 return 0; 100 const ScopedState state(this, 0); 101 m_view->setPaintBehavior(PaintBehaviorSelectionOnly); 102 m_doc->updateLayout(); 103 104 IntRect paintingRect = enclosingIntRect(selectionBounds()); 105 106 OwnPtr<ImageBuffer> buffer(ImageBuffer::create(paintingRect.size())); 107 if (!buffer) 108 return 0; 109 buffer->context()->translate(-paintingRect.x(), -paintingRect.y()); 110 buffer->context()->clip(FloatRect(0, 0, paintingRect.right(), paintingRect.bottom())); 111 112 m_view->paint(buffer->context(), paintingRect); 113 114 RefPtr<Image> image = buffer->copyImage(); 115 return createDragImageFromImage(image.get()); 44 116 } 45 117 -
trunk/WebCore/page/efl/FrameEfl.cpp
r55343 r65904 33 33 namespace WebCore { 34 34 35 DragImageRef Frame::nodeImage(Node* node) 36 { 37 notImplemented(); 38 return 0; 39 } 40 35 41 DragImageRef Frame::dragImageForSelection() 36 42 { -
trunk/WebCore/page/gtk/FrameGtk.cpp
r35590 r65904 29 29 namespace WebCore { 30 30 31 DragImageRef Frame::nodeImage(Node*) 32 { 33 notImplemented(); 34 return 0; 35 } 36 31 37 DragImageRef Frame::dragImageForSelection() 32 38 { -
trunk/WebCore/page/haiku/FrameHaiku.cpp
r46011 r65904 34 34 namespace WebCore { 35 35 36 DragImageRef Frame::nodeImage(Node*) 37 { 38 notImplemented(); 39 return 0; 40 } 41 36 42 DragImageRef Frame::dragImageForSelection() 37 43 { … … 41 47 42 48 } // namespace WebCore 43 -
trunk/WebCore/page/mac/FrameMac.mm
r59956 r65904 381 381 } 382 382 383 NSImage* Frame::nodeImage(Node* node) const 383 DragImageRef Frame::nodeImage(Node* node) 384 384 { 385 385 RenderObject* renderer = node->renderer(); … … 536 536 #endif 537 537 538 DragImageRef Frame::dragImageForSelection() 538 DragImageRef Frame::dragImageForSelection() 539 539 { 540 540 if (!selection()->isRange()) -
trunk/WebCore/page/qt/FrameQt.cpp
r48082 r65904 25 25 #include "Frame.h" 26 26 27 #include "NotImplemented.h" 28 27 29 namespace WebCore { 28 30 29 DragImageRef Frame:: dragImageForSelection()31 DragImageRef Frame::nodeImage(Node*) 30 32 { 33 notImplemented(); 34 return 0; 35 } 36 37 DragImageRef Frame::dragImageForSelection() 38 { 39 notImplemented(); 31 40 return 0; 32 41 } -
trunk/WebCore/page/win/FrameCGWin.cpp
r54505 r65904 96 96 } 97 97 98 HBITMAP Frame::nodeImage(Node* node) const 98 DragImageRef Frame::nodeImage(Node* node) 99 99 { 100 100 RenderObject* renderer = node->renderer(); -
trunk/WebCore/page/win/FrameCairoWin.cpp
r52369 r65904 41 41 } 42 42 43 HBITMAP Frame::nodeImage(Node*) const 43 DragImageRef Frame::nodeImage(Node*) 44 44 { 45 45 notImplemented(); -
trunk/WebCore/page/wince/FrameWince.cpp
r62963 r65904 36 36 #include "HTMLTableCellElement.h" 37 37 #include "KeyboardEvent.h" 38 #include "NotImplemented.h" 38 39 #include "Page.h" 39 40 #include "RenderFrame.h" … … 148 149 } 149 150 151 DragImageRef Frame::nodeImage(Node*) 152 { 153 notImplemented(); 154 return 0; 155 } 156 150 157 DragImageRef Frame::dragImageForSelection() 151 158 { -
trunk/WebCore/page/wx/FrameWx.cpp
r48352 r65904 30 30 namespace WebCore { 31 31 32 DragImageRef Frame::nodeImage(Node*) 33 { 34 notImplemented(); 35 return 0; 36 } 37 32 38 DragImageRef Frame::dragImageForSelection() 33 39 { -
trunk/WebCore/platform/chromium/ClipboardChromium.cpp
r64152 r65904 401 401 { 402 402 DragImageRef result = 0; 403 if (m_dragImage) { 403 if (m_dragImageElement) { 404 if (m_frame) { 405 result = m_frame->nodeImage(m_dragImageElement.get()); 406 loc = m_dragLoc; 407 } 408 } else if (m_dragImage) { 404 409 result = createDragImageFromImage(m_dragImage->image()); 405 410 loc = m_dragLoc; -
trunk/WebCore/rendering/RenderObject.cpp
r63419 r65904 1592 1592 { 1593 1593 Color color; 1594 if (style()->userSelect() == SELECT_NONE) 1594 // If the element is unselectable, or we are only painting the selection, 1595 // don't override the foreground color with the selection foreground color. 1596 if (style()->userSelect() == SELECT_NONE 1597 || (frame()->view()->paintBehavior() & PaintBehaviorSelectionOnly)) 1595 1598 return color; 1596 1599 -
trunk/WebKit/mac/ChangeLog
r65820 r65904 1 2010-08-24 Daniel Cheng <dcheng@chromium.org> 2 3 Reviewed by Eric Seidel. 4 5 [chromium] Generate drag images for HTML elements and selections. 6 https://bugs.webkit.org/show_bug.cgi?id=43449 7 8 Fix up calls to Frame::nodeImage, which has a new signature. 9 10 * Plugins/WebBaseNetscapePluginView.mm: 11 (-[WebBaseNetscapePluginView halt]): 12 1 13 2010-08-23 Mike Thole <mthole@apple.com> 2 14 -
trunk/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm
r63638 r65904 511 511 Element *element = [self element]; 512 512 #if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 513 CGImageRef cgImage = CGImageRetain([core([self webFrame])->nodeImage(element) CGImageForProposedRect:nil context:nil hints:nil]);513 CGImageRef cgImage = CGImageRetain([core([self webFrame])->nodeImage(element).get() CGImageForProposedRect:nil context:nil hints:nil]); 514 514 #else 515 RetainPtr<CGImageSourceRef> imageRef(AdoptCF, CGImageSourceCreateWithData((CFDataRef)[core([self webFrame])->nodeImage(element) TIFFRepresentation], 0));515 RetainPtr<CGImageSourceRef> imageRef(AdoptCF, CGImageSourceCreateWithData((CFDataRef)[core([self webFrame])->nodeImage(element).get() TIFFRepresentation], 0)); 516 516 CGImageRef cgImage = CGImageSourceCreateImageAtIndex(imageRef.get(), 0, 0); 517 517 #endif
Note: See TracChangeset
for help on using the changeset viewer.