summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/render_widget.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/renderer/render_widget.cc')
-rw-r--r--chrome/renderer/render_widget.cc26
1 files changed, 26 insertions, 0 deletions
diff --git a/chrome/renderer/render_widget.cc b/chrome/renderer/render_widget.cc
index 4cd54c1..23f27da 100644
--- a/chrome/renderer/render_widget.cc
+++ b/chrome/renderer/render_widget.cc
@@ -14,6 +14,7 @@
#include "chrome/common/transport_dib.h"
#include "chrome/renderer/render_process.h"
#include "skia/ext/platform_canvas.h"
+#include "skia/include/SkShader.h"
#include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
#include "third_party/WebKit/WebKit/chromium/public/WebScreenInfo.h"
#include "third_party/WebKit/WebKit/chromium/public/WebSize.h"
@@ -308,6 +309,25 @@ void RenderWidget::ClearFocus() {
void RenderWidget::PaintRect(const gfx::Rect& rect,
skia::PlatformCanvas* canvas) {
+
+ // If there is a custom background, tile it.
+ if (!background_.empty()) {
+ canvas->save();
+
+ SkIRect clipRect = { rect.x(), rect.y(), rect.right(), rect.bottom() };
+ canvas->setClipRegion(SkRegion(clipRect));
+
+ SkPaint paint;
+ SkShader* shader = SkShader::CreateBitmapShader(background_,
+ SkShader::kRepeat_TileMode,
+ SkShader::kRepeat_TileMode);
+ paint.setShader(shader)->unref();
+ paint.setPorterDuffXfermode(SkPorterDuff::kSrcOver_Mode);
+ canvas->drawPaint(paint);
+
+ canvas->restore();
+ }
+
// Bring the canvas into the coordinate system of the paint rect
canvas->translate(static_cast<SkScalar>(-rect.x()),
static_cast<SkScalar>(-rect.y()));
@@ -675,6 +695,12 @@ void RenderWidget::OnSetTextDirection(int direction) {
}
}
+void RenderWidget::SetBackground(const SkBitmap& background) {
+ background_ = background;
+ // Generate a full repaint.
+ DidInvalidateRect(webwidget_, gfx::Rect(size_.width(), size_.height()));
+}
+
bool RenderWidget::next_paint_is_resize_ack() const {
return ViewHostMsg_PaintRect_Flags::is_resize_ack(next_paint_flags_);
}