| Index: ui/gfx/canvas_skia_paint_linux.cc
|
| ===================================================================
|
| --- ui/gfx/canvas_skia_paint_linux.cc (revision 0)
|
| +++ ui/gfx/canvas_skia_paint_linux.cc (revision 0)
|
| @@ -0,0 +1,69 @@
|
| +// Copyright (c) 2011 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.
|
| +
|
| +#include "ui/gfx/canvas_skia_paint_linux.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "ui/gfx/canvas_skia.h"
|
| +#include "ui/gfx/rect.h"
|
| +
|
| +namespace gfx {
|
| +
|
| +CanvasSkiaPaint::CanvasSkiaPaint(GdkEventExpose* event, bool opaque)
|
| + : window_(event->window),
|
| + region_(gdk_region_copy(event->region)) {
|
| + CHECK(InitCanvas());
|
| +}
|
| +
|
| +CanvasSkiaPaint::~CanvasSkiaPaint() {
|
| + canvas_->skia_canvas()->restoreToCount(1);
|
| +
|
| + if (!IsValid()) {
|
| + // Blit the dirty rect to the window.
|
| + CHECK(window_);
|
| + cairo_t* dst_context = gdk_cairo_create(window_);
|
| + CHECK(dst_context);
|
| + cairo_surface_t* src_surface = cairo_get_target(
|
| + canvas_->BeginPlatformPaint());
|
| + CHECK(src_surface);
|
| + // Flush cairo's cache of the surface.
|
| + cairo_surface_mark_dirty(src_surface);
|
| + gfx::Rect rect = GetInvalidRect();
|
| + cairo_set_source_surface(dst_context, src_surface, rect.x(), rect.y());
|
| + gdk_cairo_region(dst_context, region_);
|
| + cairo_fill(dst_context);
|
| + cairo_destroy(dst_context);
|
| + canvas_->EndPlatformPaint();
|
| + }
|
| +
|
| + gdk_region_destroy(region_);
|
| +}
|
| +
|
| +bool CanvasSkiaPaint::IsValid() const {
|
| + return gdk_region_empty(region_);
|
| +}
|
| +
|
| +gfx::Rect CanvasSkiaPaint::GetInvalidRect() const {
|
| + GdkRectangle invalid_rect;
|
| + gdk_region_get_clipbox(region_, &invalid_rect);
|
| + return gfx::Rect(invalid_rect);
|
| +}
|
| +
|
| +Canvas* CanvasSkiaPaint::AsCanvas() {
|
| + return canvas_.get();
|
| +}
|
| +
|
| +bool CanvasSkiaPaint::InitCanvas() {
|
| + gfx::Rect rect = GetInvalidRect();
|
| + canvas_.reset(new CanvasSkia);
|
| + if (!canvas_->Init(rect.width(), rect.height(), true))
|
| + return false;
|
| +
|
| + // Translate so that the dirty region appears at the origin.
|
| + canvas_->skia_canvas()->translate(-SkIntToScalar(rect.x()),
|
| + -SkIntToScalar(rect.y()));
|
| + return true;
|
| +}
|
| +
|
| +} // namespace gfx
|
|
|
| Property changes on: ui\gfx\canvas_skia_paint_linux.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|