Changeset 148413 in webkit


Ignore:
Timestamp:
Apr 14, 2013 4:32:18 PM (11 years ago)
Author:
weinig@apple.com
Message:

Move Mac specific snapshotting code into its own file
https://bugs.webkit.org/show_bug.cgi?id=114597

Reviewed by Andreas Kling.

Source/WebCore:

  • WebCore.exp.in:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/objc/DOM.mm:

(-[DOMRange renderedImageForcingBlackText:]):

  • page/Frame.h:
  • page/mac/FrameMac.mm:

(WebCore::Frame::nodeImage):
(WebCore::Frame::dragImageForSelection):

  • page/mac/FrameSnapshottingMac.h: Added.
  • page/mac/FrameSnapshottingMac.mm: Added.

(WebCore::imageFromRect):
(WebCore::selectionImage):
(WebCore::rangeImage):
(WebCore::snapshotDragImage):

  • platform/mac/ClipboardMac.mm:

(WebCore::ClipboardMac::dragNSImage):
Move the four Mac specific snapshotting functions in Frame.h into FrameSnapshottingMac.h/mm and turn
them into free standing functions.

Source/WebKit/mac:

  • WebView/WebHTMLView.mm:

(-[WebHTMLView _selectionDraggingImage]):
(-[WebHTMLView selectionImageForcingBlackText:]):

Location:
trunk/Source
Files:
2 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r148411 r148413  
     12013-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
    1272013-04-14  Andreas Kling  <akling@apple.com>
    228
  • trunk/Source/WebCore/WebCore.exp.in

    r148411 r148413  
    294294__ZN7WebCore14ResourceLoader32didCancelAuthenticationChallengeERKNS_23AuthenticationChallengeE
    295295__ZN7WebCore14cookiesEnabledERKNS_21NetworkStorageSessionERKNS_4KURLES5_
     296__ZN7WebCore14selectionImageEPNS_5FrameEb
    296297__ZN7WebCore16ScriptController17javaScriptContextEv
    297298__ZN7WebCore17setCookiesFromDOMERKNS_21NetworkStorageSessionERKNS_4KURLES5_RKN3WTF6StringE
     
    14901491__ZNK7WebCore5Color10serializedEv
    14911492__ZNK7WebCore5Frame13ownerRendererEv
    1492 __ZNK7WebCore5Frame14selectionImageEb
    14931493__ZNK7WebCore5Frame15contentRendererEv
    14941494__ZNK7WebCore5Frame15layerTreeAsTextEj
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r148368 r148413  
    19961996                7AFD4FF4113277B60035B883 /* ScriptDebugListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AFD4FF3113277B60035B883 /* ScriptDebugListener.h */; settings = {ATTRIBUTES = (Private, ); }; };
    19971997                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, ); }; };
    19982000                7E12E90F15FA5D3A005E4126 /* CustomFilterMeshGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E12E90D15FA5D3A005E4126 /* CustomFilterMeshGenerator.h */; };
    19992001                7E12E91015FA5D3A005E4126 /* CustomFilterMeshGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E12E90E15FA5D3A005E4126 /* CustomFilterMeshGenerator.cpp */; };
     
    84298431                7C6136F81710C35200FF4A57 /* InFilesParser.pm */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; name = InFilesParser.pm; path = scripts/InFilesParser.pm; sourceTree = "<group>"; };
    84308432                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>"; };
    84318435                7E12E90D15FA5D3A005E4126 /* CustomFilterMeshGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomFilterMeshGenerator.h; path = filters/CustomFilterMeshGenerator.h; sourceTree = "<group>"; };
    84328436                7E12E90E15FA5D3A005E4126 /* CustomFilterMeshGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CustomFilterMeshGenerator.cpp; path = filters/CustomFilterMeshGenerator.cpp; sourceTree = "<group>"; };
     
    1571815722                                93C09A7E0B064EEF005ABD4D /* EventHandlerMac.mm */,
    1571915723                                65BF023C0974819000C43196 /* FrameMac.mm */,
     15724                                7CE30DA8171B63D200EC33E1 /* FrameSnapshottingMac.h */,
     15725                                7CE30DA7171B63D200EC33E1 /* FrameSnapshottingMac.mm */,
    1572015726                                1C26497B0D7E24EC00BD10F2 /* PageMac.cpp */,
    1572115727                                E1C2F2481533A2120083F974 /* SettingsMac.mm */,
     
    2330723313                                49E911CB0EF86D47009D0CAF /* ScaleTransformOperation.h in Headers */,
    2330823314                                5DFE8F570D16477C0076E937 /* ScheduledAction.h in Headers */,
     23315                                7CE30DAA171B63D200EC33E1 /* FrameSnapshottingMac.h in Headers */,
    2330923316                                5162C7F511F77EFB00612EFE /* SchemeRegistry.h in Headers */,
    2331023317                                9BD0BF9312A42BF50072FD43 /* ScopedEventQueue.h in Headers */,
     
    2633626343                                1E50084816516AD800B7E098 /* RenderThemeMacShared.mm in Sources */,
    2633726344                                93F19AD508245E59001E9ABC /* RenderTreeAsText.cpp in Sources */,
     26345                                7CE30DA9171B63D200EC33E1 /* FrameSnapshottingMac.mm in Sources */,
    2633826346                                E44614510CD68A3500FADA75 /* RenderVideo.cpp in Sources */,
    2633926347                                BCEA4867097D93020094C9E4 /* RenderView.cpp in Sources */,
  • trunk/Source/WebCore/bindings/objc/DOM.mm

    r148373 r148413  
    3939#import "Font.h"
    4040#import "Frame.h"
     41#import "FrameSnapshottingMac.h"
    4142#import "HTMLElement.h"
    4243#import "HTMLNames.h"
     
    329330        return nil;
    330331
    331     return frame->rangeImage(range, forceBlackText);
     332    return WebCore::rangeImage(frame, range, forceBlackText);
    332333}
    333334
  • trunk/Source/WebCore/page/Frame.h

    r148373 r148413  
    191191        String matchLabelsAgainstElement(const Vector<String>& labels, Element*);
    192192
    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 #endif
    199193        void suspendActiveDOMObjectsAndAnimations();
    200194        void resumeActiveDOMObjectsAndAnimations();
  • trunk/Source/WebCore/page/mac/FrameMac.mm

    r144911 r148413  
    2929#import "Frame.h"
    3030
    31 #import "BlockExceptions.h"
    32 #import "ColorMac.h"
    33 #import "Cursor.h"
    34 #import "DOMInternal.h"
    35 #import "Event.h"
     31#import "Document.h"
    3632#import "FrameLoaderClient.h"
     33#import "FrameSelection.h"
     34#import "FrameSnapshottingMac.h"
    3735#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"
    6237
    6338namespace WebCore {
    64 
    65 using namespace HTMLNames;
    66 
    67 NSImage* Frame::imageFromRect(NSRect rect) const
    68 {
    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) const
    100 {
    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) const
    109 {
    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) const
    152 {
    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 might
    159                                         // imply new styles, plus JS could have changed other things
    160 
    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 mode
    171     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 }
    18239
    18340DragImageRef Frame::nodeImage(Node* node)
     
    19249
    19350    m_view->setNodeToDraw(node); // invoke special sub-tree drawing mode
    194     NSImage* result = imageFromRect(paintingRect);
     51    NSImage* result = imageFromRect(this, paintingRect);
    19552    m_view->setNodeToDraw(0);
    19653
     
    20259    if (!selection()->isRange())
    20360        return nil;
    204     return selectionImage();
     61    return selectionImage(this);
    20562}
    20663
  • trunk/Source/WebCore/platform/mac/ClipboardMac.mm

    r146835 r148413  
    3636#import "FileList.h"
    3737#import "Frame.h"
     38#import "FrameSnapshottingMac.h"
    3839#import "Image.h"
    3940#import "Page.h"
     
    4546#import "SecurityOrigin.h"
    4647#import "WebCoreSystemInterface.h"
    47 
    4848
    4949namespace WebCore {
     
    419419            NSRect imageRect;
    420420            NSRect elementRect;
    421             result = m_frame->snapshotDragImage(m_dragImageElement.get(), &imageRect, &elementRect);
     421            result = snapshotDragImage(m_frame, m_dragImageElement.get(), &imageRect, &elementRect);
    422422            // Client specifies point relative to element, not the whole image, which may include child
    423423            // layers spread out all over the place.
  • trunk/Source/WebKit/mac/ChangeLog

    r148396 r148413  
     12013-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
    1122013-04-14  Andreas Kling  <akling@apple.com>
    213
  • trunk/Source/WebKit/mac/WebView/WebHTMLView.mm

    r148365 r148413  
    7474#import <AppKit/NSAccessibility.h>
    7575#import <ApplicationServices/ApplicationServices.h>
     76#import <WebCore/CSSStyleDeclaration.h>
    7677#import <WebCore/CachedImage.h>
    7778#import <WebCore/CachedResourceClient.h>
     
    8182#import <WebCore/ContextMenu.h>
    8283#import <WebCore/ContextMenuController.h>
    83 #import <WebCore/CSSStyleDeclaration.h>
    8484#import <WebCore/Document.h>
    8585#import <WebCore/DocumentFragment.h>
     
    9696#import <WebCore/FrameLoader.h>
    9797#import <WebCore/FrameSelection.h>
     98#import <WebCore/FrameSnapshottingMac.h>
    9899#import <WebCore/FrameView.h>
    99100#import <WebCore/HTMLConverter.h>
     
    107108#import <WebCore/PlatformEventFactoryMac.h>
    108109#import <WebCore/Range.h>
     110#import <WebCore/RenderView.h>
    109111#import <WebCore/RenderWidget.h>
    110 #import <WebCore/RenderView.h>
    111112#import <WebCore/ResourceBuffer.h>
    112113#import <WebCore/RunLoop.h>
     
    18101811    if (![self _hasSelection])
    18111812        return nil;
    1812     NSImage *dragImage = core([self _frame])->selectionImage();
     1813    NSImage *dragImage = selectionImage(core([self _frame]));
    18131814    [dragImage _web_dissolveToFraction:WebDragImageAlpha];
    18141815    return dragImage;
     
    59265927    if (![self _hasSelection])
    59275928        return nil;
    5928     return core([self _frame])->selectionImage(forceBlackText);
     5929    return selectionImage(core([self _frame]), forceBlackText);
    59295930}
    59305931
Note: See TracChangeset for help on using the changeset viewer.