Changeset 148413 in webkit
- Timestamp:
- Apr 14, 2013 4:32:18 PM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 2 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r148411 r148413 1 2013-04-14 Sam Weinig <sam@webkit.org> 2 3 Move Mac specific snapshotting code into its own file 4 https://bugs.webkit.org/show_bug.cgi?id=114597 5 6 Reviewed by Andreas Kling. 7 8 * WebCore.exp.in: 9 * WebCore.xcodeproj/project.pbxproj: 10 * bindings/objc/DOM.mm: 11 (-[DOMRange renderedImageForcingBlackText:]): 12 * page/Frame.h: 13 * page/mac/FrameMac.mm: 14 (WebCore::Frame::nodeImage): 15 (WebCore::Frame::dragImageForSelection): 16 * page/mac/FrameSnapshottingMac.h: Added. 17 * page/mac/FrameSnapshottingMac.mm: Added. 18 (WebCore::imageFromRect): 19 (WebCore::selectionImage): 20 (WebCore::rangeImage): 21 (WebCore::snapshotDragImage): 22 * platform/mac/ClipboardMac.mm: 23 (WebCore::ClipboardMac::dragNSImage): 24 Move the four Mac specific snapshotting functions in Frame.h into FrameSnapshottingMac.h/mm and turn 25 them into free standing functions. 26 1 27 2013-04-14 Andreas Kling <akling@apple.com> 2 28 -
trunk/Source/WebCore/WebCore.exp.in
r148411 r148413 294 294 __ZN7WebCore14ResourceLoader32didCancelAuthenticationChallengeERKNS_23AuthenticationChallengeE 295 295 __ZN7WebCore14cookiesEnabledERKNS_21NetworkStorageSessionERKNS_4KURLES5_ 296 __ZN7WebCore14selectionImageEPNS_5FrameEb 296 297 __ZN7WebCore16ScriptController17javaScriptContextEv 297 298 __ZN7WebCore17setCookiesFromDOMERKNS_21NetworkStorageSessionERKNS_4KURLES5_RKN3WTF6StringE … … 1490 1491 __ZNK7WebCore5Color10serializedEv 1491 1492 __ZNK7WebCore5Frame13ownerRendererEv 1492 __ZNK7WebCore5Frame14selectionImageEb1493 1493 __ZNK7WebCore5Frame15contentRendererEv 1494 1494 __ZNK7WebCore5Frame15layerTreeAsTextEj -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r148368 r148413 1996 1996 7AFD4FF4113277B60035B883 /* ScriptDebugListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AFD4FF3113277B60035B883 /* ScriptDebugListener.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1997 1997 7C522D4B15B477E8009B7C95 /* InspectorOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C522D4915B477E8009B7C95 /* InspectorOverlay.cpp */; }; 1998 7CE30DA9171B63D200EC33E1 /* FrameSnapshottingMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7CE30DA7171B63D200EC33E1 /* FrameSnapshottingMac.mm */; }; 1999 7CE30DAA171B63D200EC33E1 /* FrameSnapshottingMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE30DA8171B63D200EC33E1 /* FrameSnapshottingMac.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1998 2000 7E12E90F15FA5D3A005E4126 /* CustomFilterMeshGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E12E90D15FA5D3A005E4126 /* CustomFilterMeshGenerator.h */; }; 1999 2001 7E12E91015FA5D3A005E4126 /* CustomFilterMeshGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E12E90E15FA5D3A005E4126 /* CustomFilterMeshGenerator.cpp */; }; … … 8429 8431 7C6136F81710C35200FF4A57 /* InFilesParser.pm */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; name = InFilesParser.pm; path = scripts/InFilesParser.pm; sourceTree = "<group>"; }; 8430 8432 7C6136F91710C35200FF4A57 /* StaticString.pm */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; name = StaticString.pm; path = scripts/StaticString.pm; sourceTree = "<group>"; }; 8433 7CE30DA7171B63D200EC33E1 /* FrameSnapshottingMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FrameSnapshottingMac.mm; sourceTree = "<group>"; }; 8434 7CE30DA8171B63D200EC33E1 /* FrameSnapshottingMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FrameSnapshottingMac.h; sourceTree = "<group>"; }; 8431 8435 7E12E90D15FA5D3A005E4126 /* CustomFilterMeshGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomFilterMeshGenerator.h; path = filters/CustomFilterMeshGenerator.h; sourceTree = "<group>"; }; 8432 8436 7E12E90E15FA5D3A005E4126 /* CustomFilterMeshGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CustomFilterMeshGenerator.cpp; path = filters/CustomFilterMeshGenerator.cpp; sourceTree = "<group>"; }; … … 15718 15722 93C09A7E0B064EEF005ABD4D /* EventHandlerMac.mm */, 15719 15723 65BF023C0974819000C43196 /* FrameMac.mm */, 15724 7CE30DA8171B63D200EC33E1 /* FrameSnapshottingMac.h */, 15725 7CE30DA7171B63D200EC33E1 /* FrameSnapshottingMac.mm */, 15720 15726 1C26497B0D7E24EC00BD10F2 /* PageMac.cpp */, 15721 15727 E1C2F2481533A2120083F974 /* SettingsMac.mm */, … … 23307 23313 49E911CB0EF86D47009D0CAF /* ScaleTransformOperation.h in Headers */, 23308 23314 5DFE8F570D16477C0076E937 /* ScheduledAction.h in Headers */, 23315 7CE30DAA171B63D200EC33E1 /* FrameSnapshottingMac.h in Headers */, 23309 23316 5162C7F511F77EFB00612EFE /* SchemeRegistry.h in Headers */, 23310 23317 9BD0BF9312A42BF50072FD43 /* ScopedEventQueue.h in Headers */, … … 26336 26343 1E50084816516AD800B7E098 /* RenderThemeMacShared.mm in Sources */, 26337 26344 93F19AD508245E59001E9ABC /* RenderTreeAsText.cpp in Sources */, 26345 7CE30DA9171B63D200EC33E1 /* FrameSnapshottingMac.mm in Sources */, 26338 26346 E44614510CD68A3500FADA75 /* RenderVideo.cpp in Sources */, 26339 26347 BCEA4867097D93020094C9E4 /* RenderView.cpp in Sources */, -
trunk/Source/WebCore/bindings/objc/DOM.mm
r148373 r148413 39 39 #import "Font.h" 40 40 #import "Frame.h" 41 #import "FrameSnapshottingMac.h" 41 42 #import "HTMLElement.h" 42 43 #import "HTMLNames.h" … … 329 330 return nil; 330 331 331 return frame->rangeImage(range, forceBlackText);332 return WebCore::rangeImage(frame, range, forceBlackText); 332 333 } 333 334 -
trunk/Source/WebCore/page/Frame.h
r148373 r148413 191 191 String matchLabelsAgainstElement(const Vector<String>& labels, Element*); 192 192 193 #if PLATFORM(MAC)194 NSImage* selectionImage(bool forceBlackText = false) const;195 NSImage* rangeImage(Range*, bool forceBlackText = false) const;196 NSImage* snapshotDragImage(Node*, NSRect* imageRect, NSRect* elementRect) const;197 NSImage* imageFromRect(NSRect) const;198 #endif199 193 void suspendActiveDOMObjectsAndAnimations(); 200 194 void resumeActiveDOMObjectsAndAnimations(); -
trunk/Source/WebCore/page/mac/FrameMac.mm
r144911 r148413 29 29 #import "Frame.h" 30 30 31 #import "BlockExceptions.h" 32 #import "ColorMac.h" 33 #import "Cursor.h" 34 #import "DOMInternal.h" 35 #import "Event.h" 31 #import "Document.h" 36 32 #import "FrameLoaderClient.h" 33 #import "FrameSelection.h" 34 #import "FrameSnapshottingMac.h" 37 35 #import "FrameView.h" 38 #import "GraphicsContext.h" 39 #import "HTMLNames.h" 40 #import "HTMLTableCellElement.h" 41 #import "HitTestRequest.h" 42 #import "HitTestResult.h" 43 #import "KeyboardEvent.h" 44 #import "Logging.h" 45 #import "MouseEventWithHitTestResults.h" 46 #import "Page.h" 47 #import "PlatformKeyboardEvent.h" 48 #import "PlatformWheelEvent.h" 49 #import "RegularExpression.h" 50 #import "RenderTableCell.h" 51 #import "RenderView.h" 52 #import "Scrollbar.h" 53 #import "SimpleFontData.h" 54 #import "VisibleUnits.h" 55 #import <wtf/StdLibExtras.h> 56 57 @interface NSView (WebCoreHTMLDocumentView) 58 - (void)drawSingleRect:(NSRect)rect; 59 @end 60 61 using namespace std; 36 #import "RenderObject.h" 62 37 63 38 namespace WebCore { 64 65 using namespace HTMLNames;66 67 NSImage* Frame::imageFromRect(NSRect rect) const68 {69 PaintBehavior oldBehavior = m_view->paintBehavior();70 m_view->setPaintBehavior(oldBehavior | PaintBehaviorFlattenCompositingLayers);71 72 BEGIN_BLOCK_OBJC_EXCEPTIONS;73 74 NSImage* resultImage = [[[NSImage alloc] initWithSize:rect.size] autorelease];75 76 if (rect.size.width != 0 && rect.size.height != 0) {77 [resultImage setFlipped:YES];78 [resultImage lockFocus];79 80 GraphicsContext graphicsContext((CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]);81 graphicsContext.save();82 graphicsContext.translate(-rect.origin.x, -rect.origin.y);83 m_view->paintContents(&graphicsContext, IntRect(rect));84 graphicsContext.restore();85 86 [resultImage unlockFocus];87 [resultImage setFlipped:NO];88 }89 90 m_view->setPaintBehavior(oldBehavior);91 return resultImage;92 93 END_BLOCK_OBJC_EXCEPTIONS;94 95 m_view->setPaintBehavior(oldBehavior);96 return nil;97 }98 99 NSImage* Frame::selectionImage(bool forceBlackText) const100 {101 m_view->setPaintBehavior(PaintBehaviorSelectionOnly | (forceBlackText ? PaintBehaviorForceBlackText : 0));102 m_doc->updateLayout();103 NSImage* result = imageFromRect(selection()->bounds());104 m_view->setPaintBehavior(PaintBehaviorNormal);105 return result;106 }107 108 NSImage *Frame::rangeImage(Range* range, bool forceBlackText) const109 {110 m_view->setPaintBehavior(PaintBehaviorSelectionOnly | (forceBlackText ? PaintBehaviorForceBlackText : 0));111 m_doc->updateLayout();112 RenderView* view = contentRenderer();113 if (!view)114 return nil;115 116 Position start = range->startPosition();117 Position candidate = start.downstream();118 if (candidate.deprecatedNode() && candidate.deprecatedNode()->renderer())119 start = candidate;120 121 Position end = range->endPosition();122 candidate = end.upstream();123 if (candidate.deprecatedNode() && candidate.deprecatedNode()->renderer())124 end = candidate;125 126 if (start.isNull() || end.isNull() || start == end)127 return nil;128 129 RenderObject* savedStartRenderer;130 int savedStartOffset;131 RenderObject* savedEndRenderer;132 int savedEndOffset;133 view->getSelection(savedStartRenderer, savedStartOffset, savedEndRenderer, savedEndOffset);134 135 RenderObject* startRenderer = start.deprecatedNode()->renderer();136 if (!startRenderer)137 return nil;138 139 RenderObject* endRenderer = end.deprecatedNode()->renderer();140 if (!endRenderer)141 return nil;142 143 view->setSelection(startRenderer, start.deprecatedEditingOffset(), endRenderer, end.deprecatedEditingOffset(), RenderView::RepaintNothing);144 NSImage* result = imageFromRect(view->selectionBounds());145 view->setSelection(savedStartRenderer, savedStartOffset, savedEndRenderer, savedEndOffset, RenderView::RepaintNothing);146 147 m_view->setPaintBehavior(PaintBehaviorNormal);148 return result;149 }150 151 NSImage* Frame::snapshotDragImage(Node* node, NSRect* imageRect, NSRect* elementRect) const152 {153 RenderObject* renderer = node->renderer();154 if (!renderer)155 return nil;156 157 renderer->updateDragState(true); // mark dragged nodes (so they pick up the right CSS)158 m_doc->updateLayout(); // forces style recalc - needed since changing the drag state might159 // imply new styles, plus JS could have changed other things160 161 162 // Document::updateLayout may have blown away the original RenderObject.163 renderer = node->renderer();164 if (!renderer)165 return nil;166 167 LayoutRect topLevelRect;168 NSRect paintingRect = pixelSnappedIntRect(renderer->paintingRootRect(topLevelRect));169 170 m_view->setNodeToDraw(node); // invoke special sub-tree drawing mode171 NSImage* result = imageFromRect(paintingRect);172 renderer->updateDragState(false);173 m_doc->updateLayout();174 m_view->setNodeToDraw(0);175 176 if (elementRect)177 *elementRect = pixelSnappedIntRect(topLevelRect);178 if (imageRect)179 *imageRect = paintingRect;180 return result;181 }182 39 183 40 DragImageRef Frame::nodeImage(Node* node) … … 192 49 193 50 m_view->setNodeToDraw(node); // invoke special sub-tree drawing mode 194 NSImage* result = imageFromRect( paintingRect);51 NSImage* result = imageFromRect(this, paintingRect); 195 52 m_view->setNodeToDraw(0); 196 53 … … 202 59 if (!selection()->isRange()) 203 60 return nil; 204 return selectionImage( );61 return selectionImage(this); 205 62 } 206 63 -
trunk/Source/WebCore/platform/mac/ClipboardMac.mm
r146835 r148413 36 36 #import "FileList.h" 37 37 #import "Frame.h" 38 #import "FrameSnapshottingMac.h" 38 39 #import "Image.h" 39 40 #import "Page.h" … … 45 46 #import "SecurityOrigin.h" 46 47 #import "WebCoreSystemInterface.h" 47 48 48 49 49 namespace WebCore { … … 419 419 NSRect imageRect; 420 420 NSRect elementRect; 421 result = m_frame->snapshotDragImage(m_dragImageElement.get(), &imageRect, &elementRect);421 result = snapshotDragImage(m_frame, m_dragImageElement.get(), &imageRect, &elementRect); 422 422 // Client specifies point relative to element, not the whole image, which may include child 423 423 // layers spread out all over the place. -
trunk/Source/WebKit/mac/ChangeLog
r148396 r148413 1 2013-04-14 Sam Weinig <sam@webkit.org> 2 3 Move Mac specific snapshotting code into its own file 4 https://bugs.webkit.org/show_bug.cgi?id=114597 5 6 Reviewed by Andreas Kling. 7 8 * WebView/WebHTMLView.mm: 9 (-[WebHTMLView _selectionDraggingImage]): 10 (-[WebHTMLView selectionImageForcingBlackText:]): 11 1 12 2013-04-14 Andreas Kling <akling@apple.com> 2 13 -
trunk/Source/WebKit/mac/WebView/WebHTMLView.mm
r148365 r148413 74 74 #import <AppKit/NSAccessibility.h> 75 75 #import <ApplicationServices/ApplicationServices.h> 76 #import <WebCore/CSSStyleDeclaration.h> 76 77 #import <WebCore/CachedImage.h> 77 78 #import <WebCore/CachedResourceClient.h> … … 81 82 #import <WebCore/ContextMenu.h> 82 83 #import <WebCore/ContextMenuController.h> 83 #import <WebCore/CSSStyleDeclaration.h>84 84 #import <WebCore/Document.h> 85 85 #import <WebCore/DocumentFragment.h> … … 96 96 #import <WebCore/FrameLoader.h> 97 97 #import <WebCore/FrameSelection.h> 98 #import <WebCore/FrameSnapshottingMac.h> 98 99 #import <WebCore/FrameView.h> 99 100 #import <WebCore/HTMLConverter.h> … … 107 108 #import <WebCore/PlatformEventFactoryMac.h> 108 109 #import <WebCore/Range.h> 110 #import <WebCore/RenderView.h> 109 111 #import <WebCore/RenderWidget.h> 110 #import <WebCore/RenderView.h>111 112 #import <WebCore/ResourceBuffer.h> 112 113 #import <WebCore/RunLoop.h> … … 1810 1811 if (![self _hasSelection]) 1811 1812 return nil; 1812 NSImage *dragImage = core([self _frame])->selectionImage();1813 NSImage *dragImage = selectionImage(core([self _frame])); 1813 1814 [dragImage _web_dissolveToFraction:WebDragImageAlpha]; 1814 1815 return dragImage; … … 5926 5927 if (![self _hasSelection]) 5927 5928 return nil; 5928 return core([self _frame])->selectionImage(forceBlackText);5929 return selectionImage(core([self _frame]), forceBlackText); 5929 5930 } 5930 5931
Note: See TracChangeset
for help on using the changeset viewer.