| // Copyright (c) 2012 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 CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_H_ |
| #define CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_H_ |
| |
| #include <vector> |
| |
| #include "base/basictypes.h" |
| #include "base/callback_forward.h" |
| #include "content/common/content_export.h" |
| #include "ui/gfx/size.h" |
| #include "ui/gfx/vector2d.h" |
| #include "ui/surface/transport_dib.h" |
| |
| class RenderProcessHost; |
| |
| namespace gfx { |
| class Rect; |
| } |
| |
| namespace skia { |
| class PlatformBitmap; |
| } |
| |
| namespace content { |
| class RenderProcessHost; |
| class RenderWidgetHost; |
| |
| // Represents a backing store for the pixels in a RenderWidgetHost. |
| class CONTENT_EXPORT BackingStore { |
| public: |
| virtual ~BackingStore(); |
| |
| RenderWidgetHost* render_widget_host() const { |
| return render_widget_host_; |
| } |
| const gfx::Size& size() { return size_; } |
| |
| // The number of bytes that this backing store consumes. The default |
| // implementation just assumes there's 32 bits per pixel over the current |
| // size of the screen. Implementations may override this if they have more |
| // information about the color depth. |
| virtual size_t MemorySize(); |
| |
| // Paints the bitmap from the renderer onto the backing store. bitmap_rect |
| // gives the location of bitmap, and copy_rects specifies the subregion(s) of |
| // the backingstore to be painted from the bitmap. All coordinates are in |
| // DIPs. |scale_factor| contains the expected device scale factor of the |
| // backing store. |
| // |
| // PaintToBackingStore does not need to guarantee that this has happened by |
| // the time it returns, in which case it will set |scheduled_callback| to |
| // true and will call |callback| when completed. |
| virtual void PaintToBackingStore( |
| RenderProcessHost* process, |
| TransportDIB::Id bitmap, |
| const gfx::Rect& bitmap_rect, |
| const std::vector<gfx::Rect>& copy_rects, |
| float scale_factor, |
| const base::Closure& completion_callback, |
| bool* scheduled_completion_callback) = 0; |
| |
| // Extracts the gives subset of the backing store and copies it to the given |
| // PlatformCanvas. The PlatformCanvas should not be initialized. This function |
| // will call initialize() with the correct size. The return value indicates |
| // success. |
| virtual bool CopyFromBackingStore(const gfx::Rect& rect, |
| skia::PlatformBitmap* output) = 0; |
| |
| // Scrolls the contents of clip_rect in the backing store by |delta| (but |
| // |delta|.x() and |delta|.y() cannot both be non-zero). |
| virtual void ScrollBackingStore(const gfx::Vector2d& delta, |
| const gfx::Rect& clip_rect, |
| const gfx::Size& view_size) = 0; |
| protected: |
| // Can only be constructed via subclasses. |
| BackingStore(RenderWidgetHost* widget, const gfx::Size& size); |
| |
| private: |
| // The owner of this backing store. |
| RenderWidgetHost* render_widget_host_; |
| |
| // The size of the backing store. |
| gfx::Size size_; |
| |
| DISALLOW_COPY_AND_ASSIGN(BackingStore); |
| }; |
| |
| } // namespace content |
| |
| #endif // CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_H_ |