Changeset 159487 in webkit
- Timestamp:
- Nov 18, 2013 11:53:37 PM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 1 added
- 2 deleted
- 23 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/CMakeLists.txt
r159455 r159487 1727 1727 page/Frame.cpp 1728 1728 page/FrameDestructionObserver.cpp 1729 page/FrameSnapshotting.cpp1730 1729 page/FrameTree.cpp 1731 1730 page/FrameView.cpp -
trunk/Source/WebCore/ChangeLog
r159485 r159487 1 2013-11-18 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r159455. 4 http://trac.webkit.org/changeset/159455 5 https://bugs.webkit.org/show_bug.cgi?id=124568 6 7 broke two api tests (see bug 124564) (Requested by thorton on 8 #webkit). 9 10 * CMakeLists.txt: 11 * GNUmakefile.list.am: 12 * WebCore.exp.in: 13 * WebCore.vcxproj/WebCore.vcxproj: 14 * WebCore.vcxproj/WebCore.vcxproj.filters: 15 * WebCore.xcodeproj/project.pbxproj: 16 * bindings/objc/DOM.mm: 17 (-[DOMNode renderedImage]): 18 (-[DOMRange renderedImageForcingBlackText:]): 19 * dom/Clipboard.cpp: 20 (WebCore::Clipboard::createDragImage): 21 * dom/ClipboardMac.mm: 22 (WebCore::Clipboard::createDragImage): 23 * page/DragController.cpp: 24 (WebCore::DragController::startDrag): 25 * page/Frame.cpp: 26 (WebCore::ScopedFramePaintingState::ScopedFramePaintingState): 27 (WebCore::ScopedFramePaintingState::~ScopedFramePaintingState): 28 (WebCore::Frame::nodeImage): 29 (WebCore::Frame::dragImageForSelection): 30 * page/Frame.h: 31 * page/FrameSnapshotting.cpp: Removed. 32 * page/FrameSnapshotting.h: Removed. 33 * page/mac/FrameMac.mm: Copied from Source/WebCore/page/win/FrameWin.h. 34 (WebCore::Frame::nodeImage): 35 (WebCore::Frame::dragImageForSelection): 36 * page/mac/FrameSnapshottingMac.h: Copied from Source/WebCore/page/win/FrameWin.h. 37 * page/mac/FrameSnapshottingMac.mm: Added. 38 (WebCore::imageFromRect): 39 (WebCore::selectionImage): 40 (WebCore::rangeImage): 41 (WebCore::snapshotDragImage): 42 * page/win/FrameWin.cpp: 43 (WebCore::Frame::dragImageForSelection): 44 (WebCore::Frame::nodeImage): 45 * page/win/FrameWin.h: 46 * platform/DragImage.cpp: 47 (WebCore::fitDragImageToMaxSize): 48 (WebCore::createDragImageForLink): 49 * platform/DragImage.h: 50 1 51 2013-11-18 Mark Rowe <mrowe@apple.com> 2 52 -
trunk/Source/WebCore/GNUmakefile.list.am
r159455 r159487 4119 4119 Source/WebCore/page/FrameDestructionObserver.cpp \ 4120 4120 Source/WebCore/page/FrameDestructionObserver.h \ 4121 Source/WebCore/page/FrameSnapshotting.cpp \4122 Source/WebCore/page/FrameSnapshotting.h \4123 4121 Source/WebCore/page/FrameTree.cpp \ 4124 4122 Source/WebCore/page/FrameTree.h \ -
trunk/Source/WebCore/WebCore.exp.in
r159455 r159487 428 428 __ZN7WebCore14encodeHostNameEP8NSString 429 429 __ZN7WebCore14endOfParagraphERKNS_15VisiblePositionENS_27EditingBoundaryCrossingRuleE 430 __ZN7WebCore14selectionImageEPNS_5FrameEb 430 431 __ZN7WebCore14setMetadataURLERN3WTF6StringERKS1_S4_ 431 432 __ZN7WebCore15AffineTransform5flipYEv … … 887 888 __ZN7WebCore27DeviceOrientationClientMock14setOrientationEN3WTF10PassRefPtrINS_21DeviceOrientationDataEEE 888 889 __ZN7WebCore27DeviceOrientationClientMockC1Ev 889 __ZN7WebCore27createDragImageForSelectionERNS_5FrameEb890 890 __ZN7WebCore27protocolHostAndPortAreEqualERKNS_3URLES2_ 891 891 __ZN7WebCore27startObservingCookieChangesEPFvvE … … 2033 2033 __ZN7WebCore42contextMenuItemTagCheckSpellingWhileTypingEv 2034 2034 __ZN7WebCore46contextMenuItemTagCorrectSpellingAutomaticallyEv 2035 __ZN7WebCore5Frame9nodeImageEPNS_4NodeE 2035 2036 __ZN7WebCore6Cursor8fromTypeENS0_4TypeE 2036 2037 __ZN7WebCore6CursorC1EPNS_5ImageERKNS_8IntPointE -
trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj
r159455 r159487 6984 6984 <ClCompile Include="..\page\Frame.cpp" /> 6985 6985 <ClCompile Include="..\page\FrameDestructionObserver.cpp" /> 6986 <ClCompile Include="..\page\FrameSnapshotting.cpp" />6987 6986 <ClCompile Include="..\page\FrameTree.cpp" /> 6988 6987 <ClCompile Include="..\page\FrameView.cpp" /> … … 18826 18825 <ClInclude Include="..\page\Frame.h" /> 18827 18826 <ClInclude Include="..\page\FrameDestructionObserver.h" /> 18828 <ClInclude Include="..\page\FrameSnapshotting.h" />18829 18827 <ClInclude Include="..\page\FrameTree.h" /> 18830 18828 <ClInclude Include="..\page\FrameView.h" /> -
trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters
r159455 r159487 718 718 <Filter>page</Filter> 719 719 </ClCompile> 720 <ClCompile Include="..\page\FrameSnapshotting.cpp">721 <Filter>page</Filter>722 </ClCompile>723 720 <ClCompile Include="..\page\FrameTree.cpp"> 724 721 <Filter>page</Filter> … … 7625 7622 </ClInclude> 7626 7623 <ClInclude Include="..\page\FrameDestructionObserver.h"> 7627 <Filter>page</Filter>7628 </ClInclude>7629 <ClInclude Include="..\page\FrameSnapshotting.h">7630 7624 <Filter>page</Filter> 7631 7625 </ClInclude> -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r159485 r159487 2006 2006 65BF022E0974816300C43196 /* Frame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65BF02290974816300C43196 /* Frame.cpp */; }; 2007 2007 65BF022F0974816300C43196 /* Frame.h in Headers */ = {isa = PBXBuildFile; fileRef = 65BF022A0974816300C43196 /* Frame.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2008 65BF02450974819000C43196 /* FrameMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 65BF023C0974819000C43196 /* FrameMac.mm */; }; 2008 2009 65C97AF308EA908800ACD273 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 65C97AF208EA908800ACD273 /* config.h */; }; 2009 2010 65CBFEF90974F607001DAC25 /* FrameView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65CBFEF70974F607001DAC25 /* FrameView.cpp */; }; … … 2206 2207 7C5343FD17B74B63004232F0 /* JSMediaQueryListListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C5343FB17B74B63004232F0 /* JSMediaQueryListListener.h */; }; 2207 2208 7CC7E3D717208C0F003C5277 /* IDNScriptWhiteList.txt in Resources */ = {isa = PBXBuildFile; fileRef = 7CC7E3D617208C0F003C5277 /* IDNScriptWhiteList.txt */; }; 2209 7CE30DA9171B63D200EC33E1 /* FrameSnapshottingMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7CE30DA7171B63D200EC33E1 /* FrameSnapshottingMac.mm */; }; 2210 7CE30DAA171B63D200EC33E1 /* FrameSnapshottingMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE30DA8171B63D200EC33E1 /* FrameSnapshottingMac.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2208 2211 7D741BDA177226AA00859170 /* CSSValueKeywords.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 6565814809D13043000E61D7 /* CSSValueKeywords.h */; }; 2209 2212 7E12E90F15FA5D3A005E4126 /* CustomFilterMeshGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E12E90D15FA5D3A005E4126 /* CustomFilterMeshGenerator.h */; }; … … 5242 5245 C3CF17A615B0063F00276D39 /* IdTargetObserverRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3CF17A215B0063F00276D39 /* IdTargetObserverRegistry.cpp */; }; 5243 5246 C3CF17A715B0063F00276D39 /* IdTargetObserverRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CF17A315B0063F00276D39 /* IdTargetObserverRegistry.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5244 C4CD629A18383766007EBAF1 /* FrameSnapshotting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C4CD629818383766007EBAF1 /* FrameSnapshotting.cpp */; };5245 C4CD629B18383766007EBAF1 /* FrameSnapshotting.h in Headers */ = {isa = PBXBuildFile; fileRef = C4CD629918383766007EBAF1 /* FrameSnapshotting.h */; settings = {ATTRIBUTES = (Private, ); }; };5246 5247 C50B561612119D23008B46E0 /* GroupSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C50B561412119D23008B46E0 /* GroupSettings.cpp */; }; 5247 5248 C50B561712119D23008B46E0 /* GroupSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = C50B561512119D23008B46E0 /* GroupSettings.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 8741 8742 65BF02290974816300C43196 /* Frame.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Frame.cpp; sourceTree = "<group>"; }; 8742 8743 65BF022A0974816300C43196 /* Frame.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Frame.h; sourceTree = "<group>"; }; 8744 65BF023C0974819000C43196 /* FrameMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = FrameMac.mm; sourceTree = "<group>"; }; 8743 8745 65C97AF208EA908800ACD273 /* config.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; }; 8744 8746 65CBFEF70974F607001DAC25 /* FrameView.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FrameView.cpp; sourceTree = "<group>"; }; … … 8968 8970 7C6136F91710C35200FF4A57 /* StaticString.pm */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; name = StaticString.pm; path = scripts/StaticString.pm; sourceTree = "<group>"; }; 8969 8971 7CC7E3D617208C0F003C5277 /* IDNScriptWhiteList.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDNScriptWhiteList.txt; sourceTree = "<group>"; }; 8972 7CE30DA7171B63D200EC33E1 /* FrameSnapshottingMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FrameSnapshottingMac.mm; sourceTree = "<group>"; }; 8973 7CE30DA8171B63D200EC33E1 /* FrameSnapshottingMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FrameSnapshottingMac.h; sourceTree = "<group>"; }; 8970 8974 7E12E90D15FA5D3A005E4126 /* CustomFilterMeshGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomFilterMeshGenerator.h; path = filters/CustomFilterMeshGenerator.h; sourceTree = "<group>"; }; 8971 8975 7E12E90E15FA5D3A005E4126 /* CustomFilterMeshGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CustomFilterMeshGenerator.cpp; path = filters/CustomFilterMeshGenerator.cpp; sourceTree = "<group>"; }; … … 12271 12275 C3CF17A215B0063F00276D39 /* IdTargetObserverRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IdTargetObserverRegistry.cpp; sourceTree = "<group>"; }; 12272 12276 C3CF17A315B0063F00276D39 /* IdTargetObserverRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IdTargetObserverRegistry.h; sourceTree = "<group>"; }; 12273 C4CD629818383766007EBAF1 /* FrameSnapshotting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FrameSnapshotting.cpp; sourceTree = "<group>"; };12274 C4CD629918383766007EBAF1 /* FrameSnapshotting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FrameSnapshotting.h; sourceTree = "<group>"; };12275 12277 C50B561412119D23008B46E0 /* GroupSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GroupSettings.cpp; sourceTree = "<group>"; }; 12276 12278 C50B561512119D23008B46E0 /* GroupSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GroupSettings.h; sourceTree = "<group>"; }; … … 15606 15608 974A862014B7ADBB003FDC76 /* FrameDestructionObserver.cpp */, 15607 15609 974A862114B7ADBB003FDC76 /* FrameDestructionObserver.h */, 15608 C4CD629818383766007EBAF1 /* FrameSnapshotting.cpp */,15609 C4CD629918383766007EBAF1 /* FrameSnapshotting.h */,15610 15610 65A21482097A3F5300B9050A /* FrameTree.cpp */, 15611 15611 65A21483097A3F5300B9050A /* FrameTree.h */, … … 16522 16522 A718788F0B2D04AC00A16ECE /* DragControllerMac.mm */, 16523 16523 93C09A7E0B064EEF005ABD4D /* EventHandlerMac.mm */, 16524 65BF023C0974819000C43196 /* FrameMac.mm */, 16525 7CE30DA8171B63D200EC33E1 /* FrameSnapshottingMac.h */, 16526 7CE30DA7171B63D200EC33E1 /* FrameSnapshottingMac.mm */, 16524 16527 1C26497B0D7E24EC00BD10F2 /* PageMac.cpp */, 16525 16528 E1C2F2481533A2120083F974 /* SettingsMac.mm */, … … 22120 22123 1A569CFA0D7E2B82007C3983 /* c_instance.h in Headers */, 22121 22124 1A569CFC0D7E2B82007C3983 /* c_runtime.h in Headers */, 22122 C4CD629B18383766007EBAF1 /* FrameSnapshotting.h in Headers */,22123 22125 1A569CFE0D7E2B82007C3983 /* c_utility.h in Headers */, 22124 22126 BCB16C1A0979C3BD00467741 /* CachedCSSStyleSheet.h in Headers */, … … 22980 22982 E172AF70180F289500FBADB9 /* CryptoKeyUsage.h in Headers */, 22981 22983 93309E0E099E64920056E581 /* FrameSelection.h in Headers */, 22984 7CE30DAA171B63D200EC33E1 /* FrameSnapshottingMac.h in Headers */, 22982 22985 65A21485097A3F5300B9050A /* FrameTree.h in Headers */, 22983 22986 65CBFEFA0974F607001DAC25 /* FrameView.h in Headers */, … … 26259 26262 D000EBA211BDAFD400C47726 /* FrameLoaderStateMachine.cpp in Sources */, 26260 26263 86BA766E166427A8005BE5D1 /* FrameLoadRequest.cpp in Sources */, 26264 65BF02450974819000C43196 /* FrameMac.mm in Sources */, 26261 26265 93309E0D099E64920056E581 /* FrameSelection.cpp in Sources */, 26262 26266 4A8C96EB0BE69032004EEFF0 /* FrameSelectionMac.mm in Sources */, 26267 7CE30DA9171B63D200EC33E1 /* FrameSnapshottingMac.mm in Sources */, 26263 26268 07969DAD17D14151007FF842 /* JSRTCDataChannelEvent.cpp in Sources */, 26264 26269 65A21484097A3F5300B9050A /* FrameTree.cpp in Sources */, … … 27766 27771 07277E5217D018CC0015534D /* JSMediaStreamTrack.cpp in Sources */, 27767 27772 C50D0E820FF4272900AC2644 /* StorageNamespace.cpp in Sources */, 27768 C4CD629A18383766007EBAF1 /* FrameSnapshotting.cpp in Sources */,27769 27773 C55E38C010040D5D00A56BDB /* StorageNamespaceImpl.cpp in Sources */, 27770 27774 1AB09DB416AF5F6C008538E7 /* StorageStrategy.cpp in Sources */, -
trunk/Source/WebCore/bindings/objc/DOM.mm
r159455 r159487 37 37 #import "DOMPrivate.h" 38 38 #import "DOMRangeInternal.h" 39 #import "DragImage.h"40 39 #import "Font.h" 41 40 #import "Frame.h" 41 #import "FrameSnapshottingMac.h" 42 42 #import "HTMLElement.h" 43 43 #import "HTMLNames.h" … … 288 288 WebCore::Node* node = core(self); 289 289 WebCore::Frame* frame = node->document().frame(); 290 if (!frame || !node)291 return nil; 292 return [[createDragImageForNode(*frame, *node) retain] autorelease];290 if (!frame) 291 return nil; 292 return frame->nodeImage(node).get(); 293 293 } 294 294 … … 333 333 WebCore::Range* range = core(self); 334 334 WebCore::Frame* frame = range->ownerDocument().frame(); 335 if (!frame || !range)336 return nil; 337 338 return [[createDragImageForRange(*frame, *range, forceBlackText) retain] autorelease];335 if (!frame) 336 return nil; 337 338 return WebCore::rangeImage(frame, range, forceBlackText); 339 339 } 340 340 -
trunk/Source/WebCore/dom/Clipboard.cpp
r159455 r159487 278 278 if (m_dragImageElement) { 279 279 if (Frame* frame = m_dragImageElement->document().frame()) 280 return createDragImageForNode(*frame, *m_dragImageElement);280 return frame->nodeImage(m_dragImageElement.get()); 281 281 } 282 282 283 // We do not have enough information to create a drag image, use the default icon. 284 return nullptr; 283 return 0; // We do not have enough information to create a drag image, use the default icon. 285 284 } 286 285 -
trunk/Source/WebCore/dom/ClipboardMac.mm
r159455 r159487 29 29 #import "CachedImage.h" 30 30 #import "Element.h" 31 #import " DragImage.h"31 #import "FrameSnapshottingMac.h" 32 32 33 33 namespace WebCore { … … 38 38 DragImageRef Clipboard::createDragImage(IntPoint& location) const 39 39 { 40 DragImageRefresult = nil;40 NSImage *result = nil; 41 41 if (m_dragImageElement) { 42 42 if (Frame* frame = m_dragImageElement->document().frame()) { 43 IntRect imageRect;44 IntRect elementRect;45 result = createDragImageForImage(*frame, *m_dragImageElement, imageRect,elementRect);43 NSRect imageRect; 44 NSRect elementRect; 45 result = snapshotDragImage(frame, m_dragImageElement.get(), &imageRect, &elementRect); 46 46 // Client specifies point relative to element, not the whole image, which may include child 47 47 // layers spread out all over the place. 48 location.setX(elementRect. x() - imageRect.x()+ m_dragLocation.x());49 location.setY(imageRect. height() - (elementRect.y() - imageRect.y()+ m_dragLocation.y()));48 location.setX(elementRect.origin.x - imageRect.origin.x + m_dragLocation.x()); 49 location.setY(imageRect.size.height - (elementRect.origin.y - imageRect.origin.y + m_dragLocation.y())); 50 50 } 51 51 } else if (m_dragImage) { -
trunk/Source/WebCore/page/DragController.cpp
r159455 r159487 38 38 #include "DragClient.h" 39 39 #include "DragData.h" 40 #include "DragImage.h"41 40 #include "DragSession.h" 42 41 #include "DragState.h" … … 782 781 m_client.willPerformDragSourceAction(DragSourceActionSelection, dragOrigin, clipboard); 783 782 if (!dragImage) { 784 dragImage = dissolveDragImageToFraction( createDragImageForSelection(src), DragImageAlpha);783 dragImage = dissolveDragImageToFraction(src.dragImageForSelection(), DragImageAlpha); 785 784 dragLoc = dragLocForSelectionDrag(src); 786 785 m_dragOffset = IntPoint(dragOrigin.x() - dragLoc.x(), dragOrigin.y() - dragLoc.y()); -
trunk/Source/WebCore/page/Frame.cpp
r159455 r159487 967 967 } 968 968 969 #if !PLATFORM(MAC) && !PLATFORM(WIN) 970 struct ScopedFramePaintingState { 971 ScopedFramePaintingState(Frame* frame, Node* node) 972 : frame(frame) 973 , node(node) 974 , paintBehavior(frame->view()->paintBehavior()) 975 , backgroundColor(frame->view()->baseBackgroundColor()) 976 { 977 ASSERT(!node || node->renderer()); 978 if (node) 979 node->renderer()->updateDragState(true); 980 } 981 982 ~ScopedFramePaintingState() 983 { 984 if (node && node->renderer()) 985 node->renderer()->updateDragState(false); 986 frame->view()->setPaintBehavior(paintBehavior); 987 frame->view()->setBaseBackgroundColor(backgroundColor); 988 frame->view()->setNodeToDraw(0); 989 } 990 991 Frame* frame; 992 Node* node; 993 PaintBehavior paintBehavior; 994 Color backgroundColor; 995 }; 996 997 DragImageRef Frame::nodeImage(Node* node) 998 { 999 if (!node->renderer()) 1000 return nullptr; 1001 1002 const ScopedFramePaintingState state(this, node); 1003 1004 m_view->setPaintBehavior(state.paintBehavior | PaintBehaviorFlattenCompositingLayers); 1005 1006 // When generating the drag image for an element, ignore the document background. 1007 m_view->setBaseBackgroundColor(Color::transparent); 1008 m_doc->updateLayout(); 1009 m_view->setNodeToDraw(node); // Enable special sub-tree drawing mode. 1010 1011 // Document::updateLayout may have blown away the original renderer. 1012 auto renderer = node->renderer(); 1013 if (!renderer) 1014 return nullptr; 1015 1016 LayoutRect topLevelRect; 1017 IntRect paintingRect = pixelSnappedIntRect(renderer->paintingRootRect(topLevelRect)); 1018 1019 float deviceScaleFactor = 1; 1020 if (m_page) 1021 deviceScaleFactor = m_page->deviceScaleFactor(); 1022 paintingRect.setWidth(paintingRect.width() * deviceScaleFactor); 1023 paintingRect.setHeight(paintingRect.height() * deviceScaleFactor); 1024 1025 OwnPtr<ImageBuffer> buffer(ImageBuffer::create(paintingRect.size(), deviceScaleFactor, ColorSpaceDeviceRGB)); 1026 if (!buffer) 1027 return nullptr; 1028 buffer->context()->translate(-paintingRect.x(), -paintingRect.y()); 1029 buffer->context()->clip(FloatRect(0, 0, paintingRect.maxX(), paintingRect.maxY())); 1030 1031 m_view->paintContents(buffer->context(), paintingRect); 1032 1033 RefPtr<Image> image = buffer->copyImage(); 1034 1035 ImageOrientationDescription orientationDescription(renderer->shouldRespectImageOrientation()); 1036 #if ENABLE(CSS_IMAGE_ORIENTATION) 1037 orientationDescription.setImageOrientationEnum(renderer->style().imageOrientation()); 1038 #endif 1039 return createDragImageFromImage(image.get(), orientationDescription); 1040 } 1041 1042 DragImageRef Frame::dragImageForSelection() 1043 { 1044 if (!selection().isRange()) 1045 return 0; 1046 1047 const ScopedFramePaintingState state(this, 0); 1048 m_view->setPaintBehavior(PaintBehaviorSelectionOnly); 1049 m_doc->updateLayout(); 1050 1051 IntRect paintingRect = enclosingIntRect(selection().bounds()); 1052 1053 float deviceScaleFactor = 1; 1054 if (m_page) 1055 deviceScaleFactor = m_page->deviceScaleFactor(); 1056 paintingRect.setWidth(paintingRect.width() * deviceScaleFactor); 1057 paintingRect.setHeight(paintingRect.height() * deviceScaleFactor); 1058 1059 OwnPtr<ImageBuffer> buffer(ImageBuffer::create(paintingRect.size(), deviceScaleFactor, ColorSpaceDeviceRGB)); 1060 if (!buffer) 1061 return 0; 1062 buffer->context()->translate(-paintingRect.x(), -paintingRect.y()); 1063 buffer->context()->clip(FloatRect(0, 0, paintingRect.maxX(), paintingRect.maxY())); 1064 1065 m_view->paintContents(buffer->context(), paintingRect); 1066 1067 RefPtr<Image> image = buffer->copyImage(); 1068 return createDragImageFromImage(image.get(), ImageOrientationDescription()); 1069 } 1070 1071 #endif 1072 969 1073 } // namespace WebCore -
trunk/Source/WebCore/page/Frame.h
r159455 r159487 30 30 31 31 #include "AdjustViewSizeOrNot.h" 32 #include "DragImage.h" 32 33 #include "FrameLoader.h" 33 34 #include "FrameTree.h" … … 58 59 class Element; 59 60 class EventHandler; 60 class FloatSize;61 61 class FrameDestructionObserver; 62 62 class FrameSelection; … … 64 64 class HTMLFrameOwnerElement; 65 65 class HTMLTableCellElement; 66 class ImageBuffer;67 66 class IntRect; 68 67 class MainFrame; … … 179 178 String displayStringModifiedByEncoding(const String&) const; 180 179 180 DragImageRef nodeImage(Node*); 181 DragImageRef dragImageForSelection(); 182 181 183 VisiblePosition visiblePositionForPoint(const IntPoint& framePoint); 182 184 Document* documentAtPoint(const IntPoint& windowPoint); -
trunk/Source/WebCore/page/mac/FrameMac.mm
r159486 r159487 1 1 /* 2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) 4 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 3 5 * 4 6 * Redistribution and use in source and binary forms, with or without … … 24 26 */ 25 27 26 #i fndef FrameWin_h27 # define FrameWin_h28 #import "config.h" 29 #import "Frame.h" 28 30 29 #include <wtf/Vector.h> 30 #include <wtf/win/GDIObject.h> 31 #import "Document.h" 32 #import "FrameLoaderClient.h" 33 #import "FrameSelection.h" 34 #import "FrameSnapshottingMac.h" 35 #import "FrameView.h" 36 #import "RenderObject.h" 31 37 32 38 namespace WebCore { 33 39 34 class Frame; 35 class IntRect; 40 DragImageRef Frame::nodeImage(Node* node) 41 { 42 m_doc->updateLayout(); // forces style recalc 36 43 37 GDIObject<HBITMAP> imageFromRect(const Frame*, IntRect&); 38 GDIObject<HBITMAP> imageFromSelection(Frame*, bool forceBlackText); 39 void computePageRectsForFrame(Frame*, const IntRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, Vector<IntRect>& outPages, int& outPageHeight); 44 RenderObject* renderer = node->renderer(); 45 if (!renderer) 46 return nil; 47 LayoutRect topLevelRect; 48 NSRect paintingRect = pixelSnappedIntRect(renderer->paintingRootRect(topLevelRect)); 49 50 m_view->setNodeToDraw(node); // invoke special sub-tree drawing mode 51 NSImage* result = imageFromRect(this, paintingRect); 52 m_view->setNodeToDraw(0); 53 54 return result; 55 } 56 57 DragImageRef Frame::dragImageForSelection() 58 { 59 if (!selection().isRange()) 60 return nil; 61 return selectionImage(this); 62 } 40 63 41 64 } // namespace WebCore 42 43 #endif // FrameWin_h -
trunk/Source/WebCore/page/mac/FrameSnapshottingMac.h
r159486 r159487 1 1 /* 2 * Copyright (C) 20 06, 2007Apple Inc. All rights reserved.2 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 21 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 24 */ 25 25 26 #ifndef Frame Win_h27 #define Frame Win_h26 #ifndef FrameSnapshottingMac_h 27 #define FrameSnapshottingMac_h 28 28 29 #include <wtf/Vector.h> 30 #include <wtf/win/GDIObject.h> 29 OBJC_CLASS NSImage; 31 30 32 31 namespace WebCore { 33 32 34 33 class Frame; 35 class IntRect; 34 class Range; 35 class Node; 36 36 37 GDIObject<HBITMAP> imageFromRect(const Frame*, IntRect&); 38 GDIObject<HBITMAP> imageFromSelection(Frame*, bool forceBlackText); 39 void computePageRectsForFrame(Frame*, const IntRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, Vector<IntRect>& outPages, int& outPageHeight); 37 NSImage* selectionImage(Frame*, bool forceBlackText = false); 38 NSImage* rangeImage(Frame*, Range*, bool forceBlackText = false); 39 NSImage* snapshotDragImage(Frame*, Node*, NSRect* imageRect, NSRect* elementRect); 40 NSImage* imageFromRect(Frame*, NSRect); 40 41 41 } // namespace WebCore42 } 42 43 43 #endif // Frame Win_h44 #endif // FrameSnapshottingMac_h -
trunk/Source/WebCore/page/win/FrameWin.cpp
r159455 r159487 58 58 } 59 59 60 DragImageRef Frame::dragImageForSelection() 61 { 62 if (selection().isRange()) 63 return imageFromSelection(this, false).leak(); 64 65 return 0; 66 } 67 68 DragImageRef Frame::nodeImage(Node* node) 69 { 70 document()->updateLayout(); 71 72 RenderObject* renderer = node->renderer(); 73 if (!renderer) 74 return 0; 75 76 LayoutRect topLevelRect; 77 IntRect paintingRect = pixelSnappedIntRect(renderer->paintingRootRect(topLevelRect)); 78 79 m_view->setNodeToDraw(node); // invoke special sub-tree drawing mode 80 GDIObject<HBITMAP> result = imageFromRect(this, paintingRect); 81 m_view->setNodeToDraw(0); 82 83 return result.leak(); 84 } 85 60 86 } // namespace WebCore -
trunk/Source/WebCore/page/win/FrameWin.h
r159455 r159487 36 36 37 37 GDIObject<HBITMAP> imageFromRect(const Frame*, IntRect&); 38 GDIObject<HBITMAP> imageFromSelection(Frame*, bool force BlackText);38 GDIObject<HBITMAP> imageFromSelection(Frame*, bool forceWhiteText); 39 39 void computePageRectsForFrame(Frame*, const IntRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, Vector<IntRect>& outPages, int& outPageHeight); 40 40 -
trunk/Source/WebCore/platform/DragImage.cpp
r159455 r159487 21 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 24 */ 25 25 … … 29 29 #if ENABLE(DRAG_SUPPORT) 30 30 31 #include "Frame.h"32 #include "FrameSnapshotting.h"33 #include "FrameView.h"34 #include "ImageBuffer.h"35 #include "Range.h"36 #include "RenderObject.h"37 #include "RenderView.h"38 39 31 namespace WebCore { 40 32 41 33 DragImageRef fitDragImageToMaxSize(DragImageRef image, const IntSize& srcSize, const IntSize& size) 42 34 { … … 45 37 float resizeRatio = -1.0f; 46 38 IntSize originalSize = dragImageSize(image); 47 39 48 40 if (srcSize.width() > size.width()) { 49 41 widthResizeRatio = size.width() / (float)srcSize.width(); 50 42 resizeRatio = widthResizeRatio; 51 43 } 52 44 53 45 if (srcSize.height() > size.height()) { 54 46 heightResizeRatio = size.height() / (float)srcSize.height(); … … 56 48 resizeRatio = heightResizeRatio; 57 49 } 58 50 59 51 if (srcSize == originalSize) 60 52 return resizeRatio > 0.0f ? scaleDragImage(image, FloatSize(resizeRatio, resizeRatio)) : image; 61 53 62 54 // The image was scaled in the webpage so at minimum we must account for that scaling 63 55 float scalex = srcSize.width() / (float)originalSize.width(); … … 67 59 scaley *= resizeRatio; 68 60 } 69 61 70 62 return scaleDragImage(image, FloatSize(scalex, scaley)); 71 }72 73 struct ScopedNodeDragState {74 ScopedNodeDragState(Frame& frame, Node& node)75 : frame(frame)76 , node(node)77 {78 ASSERT(node.renderer());79 node.renderer()->updateDragState(true);80 frame.document()->updateLayout();81 }82 83 ~ScopedNodeDragState()84 {85 if (node.renderer()) {86 node.renderer()->updateDragState(false);87 frame.document()->updateLayout();88 }89 }90 91 Frame& frame;92 Node& node;93 };94 95 static DragImageRef createDragImageFromSnapshot(std::unique_ptr<ImageBuffer> snapshot, Node* node)96 {97 if (!snapshot)98 return nullptr;99 100 ImageOrientationDescription orientation;101 #if ENABLE(CSS_IMAGE_ORIENTATION)102 if (node) {103 RenderObject* renderer = node->renderer();104 if (!renderer)105 return nullptr;106 107 orientation.setRespectImageOrientation(renderer->shouldRespectImageOrientation());108 orientation.setImageOrientationEnum(renderer->style().imageOrientation());109 }110 #else111 UNUSED_PARAM(node);112 #endif113 RefPtr<Image> image = snapshot->copyImage(ImageBuffer::fastCopyImageMode());114 if (!image)115 return nullptr;116 return createDragImageFromImage(image.get(), orientation);117 }118 119 DragImageRef createDragImageForNode(Frame& frame, Node& node)120 {121 ScopedNodeDragState enableDrag(frame, node);122 std::unique_ptr<ImageBuffer> snapshot = snapshotNode(frame, node);123 return createDragImageFromSnapshot(std::move(snapshot), &node);124 }125 126 DragImageRef createDragImageForSelection(Frame& frame, bool forceBlackText)127 {128 SnapshotOptions options = forceBlackText ? SnapshotOptionsForceBlackText : SnapshotOptionsNone;129 std::unique_ptr<ImageBuffer> snapshot = snapshotSelection(frame, options);130 return createDragImageFromSnapshot(std::move(snapshot), nullptr);131 }132 133 struct ScopedFrameSelectionState {134 ScopedFrameSelectionState(Frame& frame)135 : frame(frame)136 {137 if (RenderView* root = frame.contentRenderer())138 root->getSelection(startRenderer, startOffset, endRenderer, endOffset);139 }140 141 ~ScopedFrameSelectionState()142 {143 if (RenderView* root = frame.contentRenderer())144 root->setSelection(startRenderer, startOffset, endRenderer, endOffset, RenderView::RepaintNothing);145 }146 147 Frame& frame;148 RenderObject* startRenderer;149 RenderObject* endRenderer;150 int startOffset;151 int endOffset;152 };153 154 DragImageRef createDragImageForRange(Frame& frame, Range& range, bool forceBlackText)155 {156 frame.document()->updateLayout();157 RenderView* view = frame.contentRenderer();158 if (!view)159 return nullptr;160 161 // To snapshot the range, temporarily select it and take selection snapshot.162 Position start = range.startPosition();163 Position candidate = start.downstream();164 if (candidate.deprecatedNode() && candidate.deprecatedNode()->renderer())165 start = candidate;166 167 Position end = range.endPosition();168 candidate = end.upstream();169 if (candidate.deprecatedNode() && candidate.deprecatedNode()->renderer())170 end = candidate;171 172 if (start.isNull() || end.isNull() || start == end)173 return nullptr;174 175 const ScopedFrameSelectionState selectionState(frame);176 177 RenderObject* startRenderer = start.deprecatedNode()->renderer();178 RenderObject* endRenderer = end.deprecatedNode()->renderer();179 if (!startRenderer || !endRenderer)180 return nullptr;181 182 SnapshotOptions options = forceBlackText ? SnapshotOptionsForceBlackText : SnapshotOptionsNone;183 view->setSelection(startRenderer, start.deprecatedEditingOffset(), endRenderer, end.deprecatedEditingOffset(), RenderView::RepaintNothing);184 std::unique_ptr<ImageBuffer> snapshot = snapshotSelection(frame, options);185 return createDragImageFromSnapshot(std::move(snapshot), nullptr);186 }187 188 DragImageRef createDragImageForImage(Frame& frame, Node& node, IntRect& imageRect, IntRect& elementRect)189 {190 ScopedNodeDragState enableDrag(frame, node);191 192 RenderObject* renderer = node.renderer();193 if (!renderer)194 return nullptr;195 196 // Calculate image and element metrics for the client, then create drag image.197 LayoutRect topLevelRect;198 IntRect paintingRect = pixelSnappedIntRect(renderer->paintingRootRect(topLevelRect));199 200 if (paintingRect.isEmpty())201 return nullptr;202 203 elementRect = pixelSnappedIntRect(topLevelRect);204 imageRect = paintingRect;205 206 std::unique_ptr<ImageBuffer> snapshot = snapshotNode(frame, node);207 return createDragImageFromSnapshot(std::move(snapshot), &node);208 63 } 209 64 … … 211 66 DragImageRef createDragImageForLink(URL&, const String&, FontRenderingMode) 212 67 { 213 return nullptr;68 return 0; 214 69 } 215 70 #endif -
trunk/Source/WebCore/platform/DragImage.h
r159455 r159487 27 27 #define DragImage_h 28 28 29 #include "FloatSize.h"30 29 #include "FontRenderingMode.h" 31 #include "FrameSnapshotting.h"32 30 #include "ImageOrientation.h" 33 31 #include "IntSize.h" 32 #include "FloatSize.h" 34 33 #include <wtf/Forward.h> 35 34 … … 43 42 #endif 44 43 45 // 44 //We need to #define YOffset as it needs to be shared with WebKit 46 45 #define DragLabelBorderYOffset 2 47 46 48 47 namespace WebCore { 49 48 50 class Frame; 51 class Image; 52 class IntRect; 53 class Node; 54 class Range; 55 class URL; 49 class Image; 50 class URL; 56 51 57 52 #if PLATFORM(MAC) 58 typedef RetainPtr<NSImage> DragImageRef;53 typedef RetainPtr<NSImage> DragImageRef; 59 54 #elif PLATFORM(WIN) 60 typedef HBITMAP DragImageRef;55 typedef HBITMAP DragImageRef; 61 56 #elif PLATFORM(GTK) || PLATFORM(NIX) 62 typedef cairo_surface_t* DragImageRef;57 typedef cairo_surface_t* DragImageRef; 63 58 #elif PLATFORM(EFL) || PLATFORM(BLACKBERRY) 64 typedef void* DragImageRef;59 typedef void* DragImageRef; 65 60 #endif 66 67 IntSize dragImageSize(DragImageRef); 68 69 // These functions should be memory neutral, eg. if they return a newly allocated image, 70 // they should release the input image. As a corollary these methods don't guarantee 71 // the input image ref will still be valid after they have been called. 72 DragImageRef fitDragImageToMaxSize(DragImageRef, const IntSize& srcSize, const IntSize& dstSize); 73 DragImageRef scaleDragImage(DragImageRef, FloatSize scale); 74 DragImageRef dissolveDragImageToFraction(DragImageRef, float delta); 75 76 DragImageRef createDragImageFromImage(Image*, ImageOrientationDescription); 77 DragImageRef createDragImageIconForCachedImageFilename(const String&); 78 79 DragImageRef createDragImageForNode(Frame&, Node&); 80 DragImageRef createDragImageForSelection(Frame&, bool forceBlackText = false); 81 DragImageRef createDragImageForRange(Frame&, Range&, bool forceBlackText = false); 82 DragImageRef createDragImageForImage(Frame&, Node&, IntRect& imageRect, IntRect& elementRect); 83 DragImageRef createDragImageForLink(URL&, const String& label, FontRenderingMode); 84 void deleteDragImage(DragImageRef); 61 62 IntSize dragImageSize(DragImageRef); 63 64 //These functions should be memory neutral, eg. if they return a newly allocated image, 65 //they should release the input image. As a corollary these methods don't guarantee 66 //the input image ref will still be valid after they have been called 67 DragImageRef fitDragImageToMaxSize(DragImageRef image, const IntSize& srcSize, const IntSize& size); 68 DragImageRef scaleDragImage(DragImageRef, FloatSize scale); 69 DragImageRef dissolveDragImageToFraction(DragImageRef image, float delta); 70 71 DragImageRef createDragImageFromImage(Image*, ImageOrientationDescription); 72 DragImageRef createDragImageIconForCachedImageFilename(const String&); 73 DragImageRef createDragImageForLink(URL&, const String& label, FontRenderingMode); 74 void deleteDragImage(DragImageRef); 85 75 } 86 76 87 #endif // DragImage_h 77 78 #endif //!DragImage_h -
trunk/Source/WebKit/ios/ChangeLog
r159455 r159487 1 2013-11-18 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r159455. 4 http://trac.webkit.org/changeset/159455 5 https://bugs.webkit.org/show_bug.cgi?id=124568 6 7 broke two api tests (see bug 124564) (Requested by thorton on 8 #webkit). 9 10 * WebCoreSupport/WebFrameIOS.mm: 11 1 12 2013-11-18 Brian J. Burg <burg@cs.washington.edu> 2 13 -
trunk/Source/WebKit/ios/WebCoreSupport/WebFrameIOS.mm
r159455 r159487 34 34 #import <WebCore/Frame.h> 35 35 #import <WebCore/FrameSelection.h> 36 #import <WebCore/FrameSnapshotting .h>36 #import <WebCore/FrameSnapshottingMac.h> 37 37 #import <WebCore/FrameView.h> 38 38 #import <WebCore/HitTestResult.h> -
trunk/Source/WebKit/mac/ChangeLog
r159480 r159487 1 2013-11-18 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r159455. 4 http://trac.webkit.org/changeset/159455 5 https://bugs.webkit.org/show_bug.cgi?id=124568 6 7 broke two api tests (see bug 124564) (Requested by thorton on 8 #webkit). 9 10 * WebView/WebHTMLView.mm: 11 (-[WebHTMLView _selectionDraggingImage]): 12 (-[WebHTMLView selectionImageForcingBlackText:]): 13 1 14 2013-11-18 Mark Rowe <mrowe@apple.com> 2 15 -
trunk/Source/WebKit/mac/WebView/WebHTMLView.mm
r159455 r159487 86 86 #import <WebCore/DocumentMarkerController.h> 87 87 #import <WebCore/DragController.h> 88 #import <WebCore/DragImage.h>89 88 #import <WebCore/Editor.h> 90 89 #import <WebCore/EditorDeleteAction.h> … … 97 96 #import <WebCore/FrameLoader.h> 98 97 #import <WebCore/FrameSelection.h> 98 #import <WebCore/FrameSnapshottingMac.h> 99 99 #import <WebCore/FrameView.h> 100 100 #import <WebCore/HTMLConverter.h> … … 1821 1821 if (![self _hasSelection]) 1822 1822 return nil; 1823 1824 Frame* coreFrame = core([self _frame]); 1825 if (!coreFrame) 1826 return nil; 1827 1828 NSImage *dragImage = [[createDragImageForSelection(*coreFrame) retain] autorelease]; 1823 NSImage *dragImage = selectionImage(core([self _frame])); 1829 1824 [dragImage _web_dissolveToFraction:WebDragImageAlpha]; 1830 1825 return dragImage; … … 5971 5966 if (![self _hasSelection]) 5972 5967 return nil; 5973 5974 Frame* coreFrame = core([self _frame]); 5975 if (!coreFrame) 5976 return nil; 5977 return [[createDragImageForSelection(*coreFrame, forceBlackText) retain] autorelease]; 5968 return selectionImage(core([self _frame]), forceBlackText); 5978 5969 } 5979 5970 -
trunk/Source/WebKit/win/ChangeLog
r159473 r159487 1 2013-11-18 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r159455. 4 http://trac.webkit.org/changeset/159455 5 https://bugs.webkit.org/show_bug.cgi?id=124568 6 7 broke two api tests (see bug 124564) (Requested by thorton on 8 #webkit). 9 10 * DOMCoreClasses.cpp: 11 (DOMElement::renderedImage): 12 1 13 2013-11-18 Commit Queue <commit-queue@webkit.org> 2 14 -
trunk/Source/WebKit/win/DOMCoreClasses.cpp
r159455 r159487 37 37 #include <WebCore/DOMWindow.h> 38 38 #include <WebCore/Document.h> 39 #include <WebCore/DragImage.h>40 39 #include <WebCore/Element.h> 41 40 #include <WebCore/Font.h> 42 41 #include <WebCore/Frame.h> 42 #include <WebCore/SimpleFontData.h> 43 43 #include <WebCore/HTMLFormElement.h> 44 44 #include <WebCore/HTMLInputElement.h> … … 50 50 #include <WebCore/RenderElement.h> 51 51 #include <WebCore/RenderTreeAsText.h> 52 #include <WebCore/SimpleFontData.h>53 52 54 53 #include <initguid.h> … … 1281 1280 return E_FAIL; 1282 1281 1283 *image = createDragImageForNode(*frame, *m_element);1282 *image = frame->nodeImage(m_element); 1284 1283 if (!*image) 1285 1284 return E_FAIL;
Note: See TracChangeset
for help on using the changeset viewer.