diff options
author | weinig@apple.com <weinig@apple.com@bbb929c8-8fbe-4397-9dbb-9b2b20218538> | 2010-12-28 00:01:08 +0000 |
---|---|---|
committer | weinig@apple.com <weinig@apple.com@bbb929c8-8fbe-4397-9dbb-9b2b20218538> | 2010-12-28 00:01:08 +0000 |
commit | d00ba4ae4293e9559ef88bb51e83a239bd3cd6d4 (patch) | |
tree | 8a2dbae41927f9d28eb1e89776249edb12fd3b82 /third_party/WebKit/WebKit2/WebProcess/WebPage/WebPage.cpp | |
parent | abe50609d07dc5a55bc345a6e565c257ca2cad92 (diff) | |
download | chromium_src-d00ba4ae4293e9559ef88bb51e83a239bd3cd6d4.zip chromium_src-d00ba4ae4293e9559ef88bb51e83a239bd3cd6d4.tar.gz chromium_src-d00ba4ae4293e9559ef88bb51e83a239bd3cd6d4.tar.bz2 |
WebKit2: Add API for getting snapshots
https://bugs.webkit.org/show_bug.cgi?id=51656
Reviewed by Anders Carlsson.
* Shared/API/c/WKBase.h:
* Shared/API/c/WKImage.cpp: Added.
(WKImageGetTypeID):
(WKImageCreate):
(WKImageGetSize):
* Shared/API/c/WKImage.h: Added.
* Shared/WebImage.cpp: Added.
(WebKit::WebImage::create):
(WebKit::WebImage::size):
* Shared/WebImage.h: Added.
(WebKit::WebImage::backingStore):
(WebKit::WebImage::WebImage):
(WebKit::WebImage::type):
Add a general purpose API image class.
* Shared/API/c/cg: Added.
* Shared/API/c/cg/WKImageCG.cpp: Added.
(WKImageCreateCGImage):
* Shared/API/c/cg/WKImageCG.h: Added.
Add function to convert a WKImageRef to a CGImageRef for platforms that use CG.
* Shared/API/c/WKSharedAPICast.h:
(WebKit::toFloatRect):
(WebKit::toIntSize):
(WebKit::toIntPoint):
(WebKit::toIntRect):
(WebKit::toImageOptions):
Make conversion functions that are ambiguous more explicit.
* Shared/APIObject.h:
* Shared/BackingStore.h:
(WebKit::BackingStore::isBackedBySharedMemory):
* Shared/ImageOptions.h: Added.
* Shared/UserMessageCoders.h:
(WebKit::UserMessageEncoder::baseEncode):
(WebKit::UserMessageDecoder::baseDecode):
Allow a WKImageRef to be passed in user messages. Right now, it only
works if the image is sharable.
* UIProcess/API/C/WKPage.cpp:
(WKPageScaleWebView):
* UIProcess/WebUIClient.cpp:
(WebKit::WebUIClient::windowFrame):
Use the more explicit conversion function name.
* WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
(WKBundlePageCreateSnapshotInViewCoordinates):
(WKBundlePageCreateSnapshotInDocumentCoordinates):
* WebProcess/InjectedBundle/API/c/WKBundlePage.h:
* WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
(WKBundlePageOverlaySetNeedsDisplay):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::snapshotInViewCoordinates):
(WebKit::WebPage::snapshotInDocumentCoordinates):
Add function to take the snapshot.
* WebProcess/WebPage/WebPage.h:
* WebKit2.pro:
* WebKit2.xcodeproj/project.pbxproj:
* win/WebKit2.vcproj:
Add new files.
git-svn-id: svn://svn.chromium.org/blink/trunk@74698 bbb929c8-8fbe-4397-9dbb-9b2b20218538
Diffstat (limited to 'third_party/WebKit/WebKit2/WebProcess/WebPage/WebPage.cpp')
-rw-r--r-- | third_party/WebKit/WebKit2/WebProcess/WebPage/WebPage.cpp | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/third_party/WebKit/WebKit2/WebProcess/WebPage/WebPage.cpp b/third_party/WebKit/WebKit2/WebProcess/WebPage/WebPage.cpp index 4df97f1..571321c 100644 --- a/third_party/WebKit/WebKit2/WebProcess/WebPage/WebPage.cpp +++ b/third_party/WebKit/WebKit2/WebProcess/WebPage/WebPage.cpp @@ -41,14 +41,15 @@ #include "WebContextMenuClient.h" #include "WebContextMessages.h" #include "WebCoreArgumentCoders.h" -#include "WebOpenPanelResultListener.h" #include "WebDragClient.h" #include "WebEditorClient.h" #include "WebEvent.h" #include "WebEventConversion.h" #include "WebFrame.h" +#include "WebImage.h" #include "WebInspector.h" #include "WebInspectorClient.h" +#include "WebOpenPanelResultListener.h" #include "WebPageCreationParameters.h" #include "WebPageGroupProxy.h" #include "WebPageProxyMessages.h" @@ -587,6 +588,44 @@ void WebPage::uninstallPageOverlay(PageOverlay* pageOverlay) m_drawingArea->setNeedsDisplay(IntRect(IntPoint(0, 0), m_viewSize)); } +PassRefPtr<WebImage> WebPage::snapshotInViewCoordinates(const IntRect& rect, ImageOptions options) +{ + FrameView* frameView = m_mainFrame->coreFrame()->view(); + if (!frameView) + return 0; + + frameView->updateLayoutAndStyleIfNeededRecursive(); + + RefPtr<WebImage> snapshot = WebImage::create(rect.size(), options); + OwnPtr<WebCore::GraphicsContext> graphicsContext = snapshot->backingStore()->createGraphicsContext(); + + graphicsContext->save(); + graphicsContext->translate(-rect.x(), -rect.y()); + frameView->paint(graphicsContext.get(), rect); + graphicsContext->restore(); + + return snapshot.release(); +} + +PassRefPtr<WebImage> WebPage::snapshotInDocumentCoordinates(const IntRect& rect, ImageOptions options) +{ + FrameView* frameView = m_mainFrame->coreFrame()->view(); + if (!frameView) + return 0; + + frameView->updateLayoutAndStyleIfNeededRecursive(); + + RefPtr<WebImage> snapshot = WebImage::create(rect.size(), options); + OwnPtr<WebCore::GraphicsContext> graphicsContext = snapshot->backingStore()->createGraphicsContext(); + + graphicsContext->save(); + graphicsContext->translate(-rect.x(), -rect.y()); + frameView->paintContents(graphicsContext.get(), rect); + graphicsContext->restore(); + + return snapshot.release(); +} + void WebPage::pageDidScroll() { // Hide the find indicator. |