summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/page/mac/FrameMac.mm
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/page/mac/FrameMac.mm')
-rw-r--r--Source/WebCore/page/mac/FrameMac.mm41
1 files changed, 12 insertions, 29 deletions
diff --git a/Source/WebCore/page/mac/FrameMac.mm b/Source/WebCore/page/mac/FrameMac.mm
index d4e4098..b49fffb 100644
--- a/Source/WebCore/page/mac/FrameMac.mm
+++ b/Source/WebCore/page/mac/FrameMac.mm
@@ -255,50 +255,33 @@ NSString* Frame::matchLabelsAgainstElement(NSArray* labels, Element* element)
NSImage* Frame::imageFromRect(NSRect rect) const
{
- NSView* view = m_view->documentView();
- if (!view)
- return nil;
- if (![view respondsToSelector:@selector(drawSingleRect:)])
- return nil;
+ PaintBehavior oldBehavior = m_view->paintBehavior();
+ m_view->setPaintBehavior(oldBehavior | PaintBehaviorFlattenCompositingLayers);
- PaintBehavior oldPaintBehavior = m_view->paintBehavior();
- m_view->setPaintBehavior(oldPaintBehavior | PaintBehaviorFlattenCompositingLayers);
-
BEGIN_BLOCK_OBJC_EXCEPTIONS;
- NSRect bounds = [view bounds];
-
- // Round image rect size in window coordinate space to avoid pixel cracks at HiDPI (4622794)
- rect = [view convertRect:rect toView:nil];
- rect.size.height = roundf(rect.size.height);
- rect.size.width = roundf(rect.size.width);
- rect = [view convertRect:rect fromView:nil];
-
NSImage* resultImage = [[[NSImage alloc] initWithSize:rect.size] autorelease];
-
+
if (rect.size.width != 0 && rect.size.height != 0) {
[resultImage setFlipped:YES];
[resultImage lockFocus];
- CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
- CGContextSaveGState(context);
- CGContextTranslateCTM(context, bounds.origin.x - rect.origin.x, bounds.origin.y - rect.origin.y);
- // Note: Must not call drawRect: here, because drawRect: assumes that it's called from AppKit's
- // display machinery. It calls getRectsBeingDrawn:count:, which can only be called inside
- // when a real AppKit display is underway.
- [view drawSingleRect:rect];
+ GraphicsContext graphicsContext((CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]);
+ graphicsContext.save();
+ graphicsContext.translate(-rect.origin.x, -rect.origin.y);
+ m_view->paintContents(&graphicsContext, IntRect(rect));
+ graphicsContext.restore();
- CGContextRestoreGState(context);
[resultImage unlockFocus];
[resultImage setFlipped:NO];
}
-
- m_view->setPaintBehavior(oldPaintBehavior);
+
+ m_view->setPaintBehavior(oldBehavior);
return resultImage;
-
+
END_BLOCK_OBJC_EXCEPTIONS;
- m_view->setPaintBehavior(oldPaintBehavior);
+ m_view->setPaintBehavior(oldBehavior);
return nil;
}