blob: ba36920401c19d52b954c270d7788a3f21a4628f [file] [log] [blame]
// 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_