Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1926)

Unified Diff: ui/gfx/canvas.cc

Issue 10790128: Revert 147915 - Cleanup gfx::Canvas now that 10562027 has landed (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gfx/canvas.h ('k') | ui/gfx/canvas_linux.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/canvas.cc
===================================================================
--- ui/gfx/canvas.cc (revision 147935)
+++ ui/gfx/canvas.cc (working copy)
@@ -22,12 +22,23 @@
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)
- : scale_factor_(scale_factor),
- owned_canvas_(NULL),
- canvas_(NULL) {
+ bool is_opaque) {
gfx::Size pixel_size = size.Scale(ui::GetScaleFactorScale(scale_factor));
owned_canvas_.reset(new skia::PlatformCanvas(pixel_size.width(),
pixel_size.height(),
@@ -40,47 +51,50 @@
owned_canvas_->clear(SkColorSetARGB(0, 0, 0, 0));
#endif
- SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor));
- canvas_->scale(scale, scale);
+ ApplyScaleFactor(scale_factor, true);
}
Canvas::Canvas(const gfx::ImageSkiaRep& image_rep, bool is_opaque)
- : scale_factor_(image_rep.scale_factor()),
- owned_canvas_(new skia::PlatformCanvas(image_rep.pixel_width(),
+ : owned_canvas_(new skia::PlatformCanvas(image_rep.pixel_width(),
image_rep.pixel_height(),
is_opaque)),
canvas_(owned_canvas_.get()) {
- SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor_));
- canvas_->scale(scale, scale);
+ ApplyScaleFactor(image_rep.scale_factor(), true);
DrawImageInt(gfx::ImageSkia(image_rep), 0, 0);
}
Canvas::Canvas()
- : scale_factor_(ui::SCALE_FACTOR_100P),
- owned_canvas_(new skia::PlatformCanvas()),
+ : owned_canvas_(new skia::PlatformCanvas()),
canvas_(owned_canvas_.get()) {
+ ApplyScaleFactor(ui::SCALE_FACTOR_100P, false);
}
-Canvas::~Canvas() {
+Canvas::Canvas(SkCanvas* canvas,
+ ui::ScaleFactor scale_factor,
+ bool scale_canvas)
+ : owned_canvas_(),
+ canvas_(canvas) {
+ DCHECK(canvas);
+ ApplyScaleFactor(scale_factor, scale_canvas);
}
-// static
-Canvas* Canvas::CreateCanvasWithoutScaling(SkCanvas* canvas,
- ui::ScaleFactor scale_factor) {
- return new Canvas(canvas, scale_factor);
+Canvas::~Canvas() {
+ if (scale_factor_scales_canvas_) {
+ SkScalar scale = 1.0f / ui::GetScaleFactorScale(scale_factor_);
+ canvas_->scale(scale, scale);
+ }
}
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();
- SkScalar scale = SkFloatToScalar(ui::GetScaleFactorScale(scale_factor_));
- canvas_->scale(scale, scale);
+
+ ApplyScaleFactor(scale_factor, true);
}
// static
@@ -95,7 +109,7 @@
return base::i18n::IsRTL() ? TEXT_ALIGN_RIGHT : TEXT_ALIGN_LEFT;
}
-gfx::ImageSkiaRep Canvas::ExtractImageRep() const {
+SkBitmap Canvas::ExtractBitmap() 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
@@ -103,8 +117,11 @@
// of the bitmap.
SkBitmap result;
device_bitmap.copyTo(&result, SkBitmap::kARGB_8888_Config);
+ return result;
+}
- return gfx::ImageSkiaRep(result, scale_factor_);
+gfx::ImageSkiaRep Canvas::ExtractImageSkiaRep() const {
+ return gfx::ImageSkiaRep(ExtractBitmap(), scale_factor_);
}
void Canvas::DrawDashedRect(const gfx::Rect& rect, SkColor color) {
@@ -484,13 +501,6 @@
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) &&
@@ -503,6 +513,16 @@
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);
« no previous file with comments | « ui/gfx/canvas.h ('k') | ui/gfx/canvas_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698