Index: android_webview/browser/browser_view_renderer_impl.h |
diff --git a/android_webview/browser/browser_view_renderer_impl.h b/android_webview/browser/browser_view_renderer_impl.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..323ddcbd31bd3cc9e309f2100b306fb75e609b99 |
--- /dev/null |
+++ b/android_webview/browser/browser_view_renderer_impl.h |
@@ -0,0 +1,115 @@ |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef ANDROID_WEBVIEW_BROWSER_BROWSER_VIEW_RENDERER_IMPL_H_ |
+#define ANDROID_WEBVIEW_BROWSER_BROWSER_VIEW_RENDERER_IMPL_H_ |
+ |
+#include "android_webview/browser/browser_view_renderer.h" |
+#include "android_webview/browser/renderer_host/view_renderer_host.h" |
+#include "content/public/browser/android/compositor.h" |
+#include "content/public/browser/web_contents_observer.h" |
+#include "skia/ext/refptr.h" |
+#include "ui/gfx/point.h" |
+#include "ui/gfx/size.h" |
+ |
+typedef void* EGLContext; |
+struct AwDrawSWFunctionTable; |
+struct AwDrawGLInfo; |
+class SkCanvas; |
+class SkPicture; |
+ |
+namespace content { |
+class WebContents; |
+} |
+ |
+namespace android_webview { |
+ |
+class BrowserViewRendererImpl |
+ : public BrowserViewRenderer, |
+ public ViewRendererHost::Client, |
+ public content::Compositor::Client { |
+ public: |
+ static BrowserViewRendererImpl* Create(BrowserViewRenderer::Client* client, |
+ JavaHelper* java_helper); |
+ virtual ~BrowserViewRendererImpl(); |
+ |
+ // Platform methods. |
+ static void SetAwDrawSWFunctionTable(AwDrawSWFunctionTable* table); |
+ |
+ // BrowserViewRenderer implementation. |
+ virtual void SetContents( |
+ content::ContentViewCore* content_view_core) OVERRIDE; |
+ virtual void DrawGL(AwDrawGLInfo* draw_info) OVERRIDE; |
+ virtual void SetScrollForHWFrame(int x, int y) OVERRIDE; |
+ virtual bool DrawSW(jobject java_canvas, const gfx::Rect& clip) OVERRIDE; |
+ virtual base::android::ScopedJavaLocalRef<jobject> CapturePicture() OVERRIDE; |
+ virtual void EnableOnNewPicture(OnNewPictureMode mode) OVERRIDE; |
+ virtual void OnVisibilityChanged( |
+ bool view_visible, bool window_visible) OVERRIDE; |
+ virtual void OnSizeChanged(int width, int height) OVERRIDE; |
+ virtual void OnAttachedToWindow(int width, int height) OVERRIDE; |
+ virtual void OnDetachedFromWindow() OVERRIDE; |
+ |
+ // content::Compositor::Client implementation. |
+ virtual void ScheduleComposite() OVERRIDE; |
+ |
+ // ViewRendererHost::Client implementation. |
+ virtual void OnPictureUpdated(int process_id, int render_view_id) OVERRIDE; |
+ |
+ protected: |
+ BrowserViewRendererImpl(BrowserViewRenderer::Client* client, |
+ JavaHelper* java_helper); |
+ |
+ private: |
+ // Returns the latest locally available picture if any. |
+ // If none is available will synchronously request the latest one |
+ // and block until the result is received. |
+ skia::RefPtr<SkPicture> GetLastCapturedPicture(); |
+ void OnPictureUpdated(); |
+ |
+ void SetCompositorVisibility(bool visible); |
+ void ResetCompositor(); |
+ void Invalidate(); |
+ bool RenderSW(SkCanvas* canvas); |
+ bool RenderPicture(SkCanvas* canvas); |
+ |
+ BrowserViewRenderer::Client* client_; |
+ BrowserViewRenderer::JavaHelper* java_helper_; |
+ |
+ scoped_ptr<ViewRendererHost> view_renderer_host_; |
+ scoped_ptr<content::Compositor> compositor_; |
+ |
+ // Ensures content keeps clipped within the view during transformations. |
+ scoped_refptr<cc::Layer> view_clip_layer_; |
+ |
+ // Applies the transformation matrix. |
+ scoped_refptr<cc::Layer> transform_layer_; |
+ |
+ // Ensures content is drawn within the scissor clip rect provided by the |
+ // Android framework. |
+ scoped_refptr<cc::Layer> scissor_clip_layer_; |
+ |
+ // Last View scroll before hardware rendering is triggered. |
+ gfx::Point hw_rendering_scroll_; |
+ |
+ bool view_visible_; |
+ bool compositor_visible_; |
+ bool is_composite_pending_; |
+ float dpi_scale_; |
+ gfx::Size view_size_; |
+ OnNewPictureMode on_new_picture_mode_; |
+ |
+ // Used only for detecting Android View System context changes. |
+ // Not to be used between draw calls. |
+ EGLContext last_frame_context_; |
+ |
+ // Set via SetContents. Used to recognize updates to the local WebView. |
+ content::WebContents* web_contents_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BrowserViewRendererImpl); |
+}; |
+ |
+} // namespace android_webview |
+ |
+#endif // ANDROID_WEBVIEW_BROWSER_BROWSER_VIEW_RENDERER_IMPL_H_ |