diff options
| author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-06-01 10:36:58 +0200 |
|---|---|---|
| committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-06-01 10:36:58 +0200 |
| commit | b1e9e47fa11f608ae16bc07f97a2acf95bf80272 (patch) | |
| tree | c88c45e80c9c44506e7cdf9a3bb39ebf82a8cd5b /Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm | |
| parent | be01689f43cf6882cf670d33df49ead1f570c53a (diff) | |
| download | qtwebkit-b1e9e47fa11f608ae16bc07f97a2acf95bf80272.tar.gz | |
Imported WebKit commit 499c84c99aa98e9870fa7eaa57db476c6d160d46 (http://svn.webkit.org/repository/webkit/trunk@119200)
Weekly update :). Particularly relevant changes for Qt are the use of the WebCore image decoders and direct usage
of libpng/libjpeg if available in the system.
Diffstat (limited to 'Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm')
| -rw-r--r-- | Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm b/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm index 649176215..68e2cd314 100644 --- a/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm +++ b/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm @@ -183,6 +183,28 @@ static const NSTimeInterval DefaultWatchdogTimerInterval = 1; #pragma mark - #pragma mark Exposed Interface +static RetainPtr<CGDataProviderRef> createImageProviderWithCopiedData(CGDataProviderRef sourceProvider) +{ + RetainPtr<CFDataRef> data = adoptCF(CGDataProviderCopyData(sourceProvider)); + return adoptCF(CGDataProviderCreateWithCFData(data.get())); +} + +static RetainPtr<CGImageRef> createImageWithCopiedData(CGImageRef sourceImage) +{ + size_t width = CGImageGetWidth(sourceImage); + size_t height = CGImageGetHeight(sourceImage); + size_t bitsPerComponent = CGImageGetBitsPerComponent(sourceImage); + size_t bitsPerPixel = CGImageGetBitsPerPixel(sourceImage); + size_t bytesPerRow = CGImageGetBytesPerRow(sourceImage); + CGColorSpaceRef colorSpace = CGImageGetColorSpace(sourceImage); + CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(sourceImage); + RetainPtr<CGDataProviderRef> provider = createImageProviderWithCopiedData(CGImageGetDataProvider(sourceImage)); + bool shouldInterpolate = CGImageGetShouldInterpolate(sourceImage); + CGColorRenderingIntent intent = CGImageGetRenderingIntent(sourceImage); + + return adoptCF(CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, bitmapInfo, provider.get(), 0, shouldInterpolate, intent)); +} + - (void)enterFullScreen:(NSScreen *)screen { if (_isFullScreen) @@ -204,6 +226,11 @@ static const NSTimeInterval DefaultWatchdogTimerInterval = 1; CGWindowID windowID = [[_webView window] windowNumber]; RetainPtr<CGImageRef> webViewContents(AdoptCF, CGWindowListCreateImage(NSRectToCGRect(webViewFrame), kCGWindowListOptionIncludingWindow, windowID, kCGWindowImageShouldBeOpaque)); + // Using the returned CGImage directly would result in calls to the WindowServer every time + // the image was painted. Instead, copy the image data into our own process to eliminate that + // future overhead. + webViewContents = createImageWithCopiedData(webViewContents.get()); + // Screen updates to be re-enabled in beganEnterFullScreenWithInitialFrame:finalFrame: NSDisableScreenUpdates(); [[self window] setAutodisplay:NO]; |
