| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/gfx/canvas.h" | 5 #include "ui/gfx/canvas.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/i18n/rtl.h" | 9 #include "base/i18n/rtl.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "third_party/skia/include/core/SkBitmap.h" | 11 #include "third_party/skia/include/core/SkBitmap.h" |
| 12 #include "third_party/skia/include/effects/SkGradientShader.h" | 12 #include "third_party/skia/include/effects/SkGradientShader.h" |
| 13 #include "ui/base/win/dpi.h" |
| 13 #include "ui/gfx/canvas.h" | 14 #include "ui/gfx/canvas.h" |
| 14 #include "ui/gfx/font.h" | 15 #include "ui/gfx/font.h" |
| 15 #include "ui/gfx/rect.h" | 16 #include "ui/gfx/rect.h" |
| 16 #include "ui/gfx/size_conversions.h" | 17 #include "ui/gfx/size_conversions.h" |
| 17 #include "ui/gfx/skia_util.h" | 18 #include "ui/gfx/skia_util.h" |
| 18 #include "ui/gfx/transform.h" | 19 #include "ui/gfx/transform.h" |
| 19 | 20 |
| 20 #if defined(OS_WIN) | 21 #if defined(OS_WIN) |
| 21 #include "ui/gfx/canvas_skia_paint.h" | 22 #include "ui/gfx/canvas_skia_paint.h" |
| 22 #endif | 23 #endif |
| (...skipping 27 matching lines...) Expand all Loading... |
| 50 owned_canvas_(skia::AdoptRef( | 51 owned_canvas_(skia::AdoptRef( |
| 51 skia::CreatePlatformCanvas(image_rep.pixel_width(), | 52 skia::CreatePlatformCanvas(image_rep.pixel_width(), |
| 52 image_rep.pixel_height(), | 53 image_rep.pixel_height(), |
| 53 is_opaque))), | 54 is_opaque))), |
| 54 canvas_(owned_canvas_.get()) { | 55 canvas_(owned_canvas_.get()) { |
| 55 SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor_)); | 56 SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor_)); |
| 56 canvas_->scale(scale, scale); | 57 canvas_->scale(scale, scale); |
| 57 DrawImageInt(gfx::ImageSkia(image_rep), 0, 0); | 58 DrawImageInt(gfx::ImageSkia(image_rep), 0, 0); |
| 58 } | 59 } |
| 59 | 60 |
| 61 ui::ScaleFactor GetScaleFactor() { |
| 62 #if defined(ENABLE_HIDPI) |
| 63 float scale = ui::GetDPIScale(); |
| 64 if (scale > 1.6) |
| 65 return ui::SCALE_FACTOR_180P; |
| 66 else if (scale > 1.2) |
| 67 return ui::SCALE_FACTOR_140P; |
| 68 #endif |
| 69 return ui::SCALE_FACTOR_100P; |
| 70 } |
| 71 |
| 60 Canvas::Canvas() | 72 Canvas::Canvas() |
| 61 : scale_factor_(ui::SCALE_FACTOR_100P), | 73 : scale_factor_(GetScaleFactor()), |
| 62 owned_canvas_(skia::AdoptRef(skia::CreatePlatformCanvas(0, 0, false))), | 74 owned_canvas_(skia::AdoptRef(skia::CreatePlatformCanvas(0, 0, false))), |
| 63 canvas_(owned_canvas_.get()) { | 75 canvas_(owned_canvas_.get()) { |
| 64 } | 76 } |
| 65 | 77 |
| 66 Canvas::~Canvas() { | 78 Canvas::~Canvas() { |
| 67 } | 79 } |
| 68 | 80 |
| 69 // static | 81 // static |
| 70 Canvas* Canvas::CreateCanvasWithoutScaling(SkCanvas* canvas, | 82 Canvas* Canvas::CreateCanvasWithoutScaling(SkCanvas* canvas, |
| 71 ui::ScaleFactor scale_factor) { | 83 ui::ScaleFactor scale_factor) { |
| 72 return new Canvas(canvas, scale_factor); | 84 return new Canvas(canvas, scale_factor); |
| 73 } | 85 } |
| 74 | 86 |
| 75 void Canvas::RecreateBackingCanvas(const gfx::Size& size, | 87 void Canvas::RecreateBackingCanvas(const gfx::Size& size, |
| 76 ui::ScaleFactor scale_factor, | 88 ui::ScaleFactor scale_factor, |
| 77 bool is_opaque) { | 89 bool is_opaque) { |
| 78 scale_factor_ = scale_factor; | 90 scale_factor_ = scale_factor; |
| 79 gfx::Size pixel_size = gfx::ToFlooredSize( | 91 gfx::Size pixel_size = gfx::ToFlooredSize( |
| 80 gfx::ScaleSize(size, ui::GetScaleFactorScale(scale_factor))); | 92 gfx::ScaleSize(size, ui::GetScaleFactorScale(scale_factor))); |
| 81 owned_canvas_ = skia::AdoptRef(skia::CreatePlatformCanvas(pixel_size.width(), | 93 owned_canvas_ = skia::AdoptRef(skia::CreatePlatformCanvas(pixel_size.width(), |
| 82 pixel_size.height(), | 94 pixel_size.height(), |
| 83 is_opaque)); | 95 is_opaque)); |
| 84 canvas_ = owned_canvas_.get(); | 96 canvas_ = owned_canvas_.get(); |
| 85 SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor_)); | 97 SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor_)); |
| 98 scale = 1; |
| 86 canvas_->scale(scale, scale); | 99 canvas_->scale(scale, scale); |
| 87 } | 100 } |
| 88 | 101 |
| 89 // static | 102 // static |
| 90 int Canvas::GetStringWidth(const string16& text, const gfx::Font& font) { | 103 int Canvas::GetStringWidth(const string16& text, const gfx::Font& font) { |
| 91 int width = 0, height = 0; | 104 int width = 0, height = 0; |
| 92 Canvas::SizeStringInt(text, font, &width, &height, NO_ELLIPSIS); | 105 Canvas::SizeStringInt(text, font, &width, &height, NO_ELLIPSIS); |
| 93 return width; | 106 return width; |
| 94 } | 107 } |
| 95 | 108 |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 SkRect out; | 200 SkRect out; |
| 188 bool has_non_empty_clip = canvas_->getClipBounds(&out); | 201 bool has_non_empty_clip = canvas_->getClipBounds(&out); |
| 189 bounds->SetRect(out.left(), out.top(), out.width(), out.height()); | 202 bounds->SetRect(out.left(), out.top(), out.width(), out.height()); |
| 190 return has_non_empty_clip; | 203 return has_non_empty_clip; |
| 191 } | 204 } |
| 192 | 205 |
| 193 void Canvas::Translate(const gfx::Vector2d& offset) { | 206 void Canvas::Translate(const gfx::Vector2d& offset) { |
| 194 canvas_->translate(SkIntToScalar(offset.x()), SkIntToScalar(offset.y())); | 207 canvas_->translate(SkIntToScalar(offset.x()), SkIntToScalar(offset.y())); |
| 195 } | 208 } |
| 196 | 209 |
| 210 #include "/gtools.h" |
| 211 #if defined(ENABLE_HIDPI) |
| 212 void Canvas::Scale(double x_scale, double y_scale) { |
| 213 canvas_->scale(x_scale, y_scale); |
| 214 // Debug(L"Scaling %p to %f", this, x_scale); |
| 215 } |
| 216 #else |
| 197 void Canvas::Scale(int x_scale, int y_scale) { | 217 void Canvas::Scale(int x_scale, int y_scale) { |
| 198 canvas_->scale(SkIntToScalar(x_scale), SkIntToScalar(y_scale)); | 218 canvas_->scale(SkIntToScalar(x_scale), SkIntToScalar(y_scale)); |
| 199 } | 219 } |
| 220 #endif |
| 200 | 221 |
| 201 void Canvas::DrawColor(SkColor color) { | 222 void Canvas::DrawColor(SkColor color) { |
| 202 DrawColor(color, SkXfermode::kSrcOver_Mode); | 223 DrawColor(color, SkXfermode::kSrcOver_Mode); |
| 203 } | 224 } |
| 204 | 225 |
| 205 void Canvas::DrawColor(SkColor color, SkXfermode::Mode mode) { | 226 void Canvas::DrawColor(SkColor color, SkXfermode::Mode mode) { |
| 206 canvas_->drawColor(color, mode); | 227 canvas_->drawColor(color, mode); |
| 207 } | 228 } |
| 208 | 229 |
| 209 void Canvas::FillRect(const gfx::Rect& rect, SkColor color) { | 230 void Canvas::FillRect(const gfx::Rect& rect, SkColor color) { |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 void Canvas::DrawImageInt(const gfx::ImageSkia& image, | 320 void Canvas::DrawImageInt(const gfx::ImageSkia& image, |
| 300 int x, int y, | 321 int x, int y, |
| 301 const SkPaint& paint) { | 322 const SkPaint& paint) { |
| 302 const gfx::ImageSkiaRep& image_rep = GetImageRepToPaint(image); | 323 const gfx::ImageSkiaRep& image_rep = GetImageRepToPaint(image); |
| 303 if (image_rep.is_null()) | 324 if (image_rep.is_null()) |
| 304 return; | 325 return; |
| 305 const SkBitmap& bitmap = image_rep.sk_bitmap(); | 326 const SkBitmap& bitmap = image_rep.sk_bitmap(); |
| 306 float bitmap_scale = image_rep.GetScale(); | 327 float bitmap_scale = image_rep.GetScale(); |
| 307 | 328 |
| 308 canvas_->save(); | 329 canvas_->save(); |
| 309 canvas_->scale(SkFloatToScalar(1.0f / bitmap_scale), | 330 // canvas_->scale(SkFloatToScalar(1.0f / bitmap_scale), |
| 310 SkFloatToScalar(1.0f / bitmap_scale)); | 331 // SkFloatToScalar(1.0f / bitmap_scale)); |
| 311 canvas_->drawBitmap(bitmap, | 332 canvas_->drawBitmap(bitmap, |
| 312 SkFloatToScalar(x * bitmap_scale), | 333 SkFloatToScalar(x),// * bitmap_scale), |
| 313 SkFloatToScalar(y * bitmap_scale), | 334 SkFloatToScalar(y),// * bitmap_scale), |
| 314 &paint); | 335 &paint); |
| 315 canvas_->restore(); | 336 canvas_->restore(); |
| 316 } | 337 } |
| 317 | 338 |
| 318 void Canvas::DrawImageInt(const gfx::ImageSkia& image, | 339 void Canvas::DrawImageInt(const gfx::ImageSkia& image, |
| 319 int src_x, int src_y, int src_w, int src_h, | 340 int src_x, int src_y, int src_w, int src_h, |
| 320 int dest_x, int dest_y, int dest_w, int dest_h, | 341 int dest_x, int dest_y, int dest_w, int dest_h, |
| 321 bool filter) { | 342 bool filter) { |
| 322 SkPaint p; | 343 SkPaint p; |
| 323 DrawImageInt(image, src_x, src_y, src_w, src_h, dest_x, dest_y, | 344 DrawImageInt(image, src_x, src_y, src_w, src_h, dest_x, dest_y, |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 | 554 |
| 534 float bitmap_scale = image_rep.GetScale(); | 555 float bitmap_scale = image_rep.GetScale(); |
| 535 if (scale_x < bitmap_scale || scale_y < bitmap_scale) | 556 if (scale_x < bitmap_scale || scale_y < bitmap_scale) |
| 536 const_cast<SkBitmap&>(image_rep.sk_bitmap()).buildMipMap(); | 557 const_cast<SkBitmap&>(image_rep.sk_bitmap()).buildMipMap(); |
| 537 } | 558 } |
| 538 | 559 |
| 539 return image_rep; | 560 return image_rep; |
| 540 } | 561 } |
| 541 | 562 |
| 542 } // namespace gfx | 563 } // namespace gfx |
| OLD | NEW |