| Index: ui/gfx/canvas.cc
|
| diff --git a/ui/gfx/canvas.cc b/ui/gfx/canvas.cc
|
| index 26f2e301a4d1b8affb7cc7bf76614e1761c78b14..1a87c73f06edc9a21a85961aefface0ec93fe6f9 100644
|
| --- a/ui/gfx/canvas.cc
|
| +++ b/ui/gfx/canvas.cc
|
| @@ -22,23 +22,12 @@
|
|
|
| namespace gfx {
|
|
|
| -Canvas::Canvas(const gfx::Size& size, bool is_opaque)
|
| - : owned_canvas_(new skia::PlatformCanvas(size.width(), size.height(),
|
| - is_opaque)),
|
| - canvas_(owned_canvas_.get()) {
|
| -#if defined(OS_WIN) || defined(OS_MACOSX)
|
| - // skia::PlatformCanvas instances are initialized to 0 by Cairo on Linux, but
|
| - // uninitialized on Win and Mac.
|
| - if (!is_opaque)
|
| - owned_canvas_->clear(SkColorSetARGB(0, 0, 0, 0));
|
| -#endif
|
| -
|
| - ApplyScaleFactor(ui::SCALE_FACTOR_100P, false);
|
| -}
|
| -
|
| Canvas::Canvas(const gfx::Size& size,
|
| ui::ScaleFactor scale_factor,
|
| - bool is_opaque) {
|
| + bool is_opaque)
|
| + : scale_factor_(scale_factor),
|
| + owned_canvas_(NULL),
|
| + canvas_(NULL) {
|
| gfx::Size pixel_size = size.Scale(ui::GetScaleFactorScale(scale_factor));
|
| owned_canvas_.reset(new skia::PlatformCanvas(pixel_size.width(),
|
| pixel_size.height(),
|
| @@ -51,50 +40,47 @@ Canvas::Canvas(const gfx::Size& size,
|
| owned_canvas_->clear(SkColorSetARGB(0, 0, 0, 0));
|
| #endif
|
|
|
| - ApplyScaleFactor(scale_factor, true);
|
| + SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor));
|
| + canvas_->scale(scale, scale);
|
| }
|
|
|
| Canvas::Canvas(const gfx::ImageSkiaRep& image_rep, bool is_opaque)
|
| - : owned_canvas_(new skia::PlatformCanvas(image_rep.pixel_width(),
|
| + : scale_factor_(image_rep.scale_factor()),
|
| + owned_canvas_(new skia::PlatformCanvas(image_rep.pixel_width(),
|
| image_rep.pixel_height(),
|
| is_opaque)),
|
| canvas_(owned_canvas_.get()) {
|
| - ApplyScaleFactor(image_rep.scale_factor(), true);
|
| + SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor_));
|
| + canvas_->scale(scale, scale);
|
| DrawImageInt(gfx::ImageSkia(image_rep), 0, 0);
|
| }
|
|
|
| Canvas::Canvas()
|
| - : owned_canvas_(new skia::PlatformCanvas()),
|
| + : scale_factor_(ui::SCALE_FACTOR_100P),
|
| + owned_canvas_(new skia::PlatformCanvas()),
|
| canvas_(owned_canvas_.get()) {
|
| - ApplyScaleFactor(ui::SCALE_FACTOR_100P, false);
|
| }
|
|
|
| -Canvas::Canvas(SkCanvas* canvas,
|
| - ui::ScaleFactor scale_factor,
|
| - bool scale_canvas)
|
| - : owned_canvas_(),
|
| - canvas_(canvas) {
|
| - DCHECK(canvas);
|
| - ApplyScaleFactor(scale_factor, scale_canvas);
|
| +Canvas::~Canvas() {
|
| }
|
|
|
| -Canvas::~Canvas() {
|
| - if (scale_factor_scales_canvas_) {
|
| - SkScalar scale = 1.0f / ui::GetScaleFactorScale(scale_factor_);
|
| - canvas_->scale(scale, scale);
|
| - }
|
| +// static
|
| +Canvas* Canvas::CreateCanvasWithoutScaling(SkCanvas* canvas,
|
| + ui::ScaleFactor scale_factor) {
|
| + return new Canvas(canvas, scale_factor);
|
| }
|
|
|
| void Canvas::RecreateBackingCanvas(const gfx::Size& size,
|
| ui::ScaleFactor scale_factor,
|
| bool is_opaque) {
|
| + scale_factor_ = scale_factor;
|
| gfx::Size pixel_size = size.Scale(ui::GetScaleFactorScale(scale_factor));
|
| owned_canvas_.reset(new skia::PlatformCanvas(pixel_size.width(),
|
| pixel_size.height(),
|
| is_opaque));
|
| canvas_ = owned_canvas_.get();
|
| -
|
| - ApplyScaleFactor(scale_factor, true);
|
| + SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor_));
|
| + canvas_->scale(scale, scale);
|
| }
|
|
|
| // static
|
| @@ -109,7 +95,7 @@ int Canvas::DefaultCanvasTextAlignment() {
|
| return base::i18n::IsRTL() ? TEXT_ALIGN_RIGHT : TEXT_ALIGN_LEFT;
|
| }
|
|
|
| -SkBitmap Canvas::ExtractBitmap() const {
|
| +gfx::ImageSkiaRep Canvas::ExtractImageRep() const {
|
| const SkBitmap& device_bitmap = canvas_->getDevice()->accessBitmap(false);
|
|
|
| // Make a bitmap to return, and a canvas to draw into it. We don't just want
|
| @@ -117,11 +103,8 @@ SkBitmap Canvas::ExtractBitmap() const {
|
| // of the bitmap.
|
| SkBitmap result;
|
| device_bitmap.copyTo(&result, SkBitmap::kARGB_8888_Config);
|
| - return result;
|
| -}
|
|
|
| -gfx::ImageSkiaRep Canvas::ExtractImageSkiaRep() const {
|
| - return gfx::ImageSkiaRep(ExtractBitmap(), scale_factor_);
|
| + return gfx::ImageSkiaRep(result, scale_factor_);
|
| }
|
|
|
| void Canvas::DrawDashedRect(const gfx::Rect& rect, SkColor color) {
|
| @@ -501,6 +484,13 @@ void Canvas::Transform(const ui::Transform& transform) {
|
| canvas_->concat(transform.matrix());
|
| }
|
|
|
| +Canvas::Canvas(SkCanvas* canvas, ui::ScaleFactor scale_factor)
|
| + : scale_factor_(scale_factor),
|
| + owned_canvas_(),
|
| + canvas_(canvas) {
|
| + DCHECK(canvas);
|
| +}
|
| +
|
| bool Canvas::IntersectsClipRectInt(int x, int y, int w, int h) {
|
| SkRect clip;
|
| return canvas_->getClipBounds(&clip) &&
|
| @@ -513,16 +503,6 @@ bool Canvas::IntersectsClipRect(const gfx::Rect& rect) {
|
| rect.width(), rect.height());
|
| }
|
|
|
| -void Canvas::ApplyScaleFactor(ui::ScaleFactor scale_factor,
|
| - bool scale_canvas) {
|
| - scale_factor_scales_canvas_ = scale_canvas;
|
| - scale_factor_ = scale_factor;
|
| - if (scale_canvas) {
|
| - SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor));
|
| - canvas_->scale(scale, scale);
|
| - }
|
| -}
|
| -
|
| const gfx::ImageSkiaRep& Canvas::GetImageRepToPaint(
|
| const gfx::ImageSkia& image) const {
|
| return GetImageRepToPaint(image, 1.0f, 1.0f);
|
|
|