Index: ui/gfx/canvas.cc |
diff --git a/ui/gfx/canvas.cc b/ui/gfx/canvas.cc |
index b228cd880bb35c3a1dbef1130bff7ec55584198a..2465cfae1bc9d775eb0fabe5d4f09097422e39a2 100644 |
--- a/ui/gfx/canvas.cc |
+++ b/ui/gfx/canvas.cc |
@@ -54,10 +54,9 @@ Canvas::Canvas(const ImageSkiaRep& image_rep, bool is_opaque) |
} |
Canvas::Canvas() |
- : image_scale_(1.0), |
+ : image_scale_(1.f), |
owned_canvas_(skia::AdoptRef(skia::CreatePlatformCanvas(0, 0, false))), |
- canvas_(owned_canvas_.get()) { |
-} |
+ canvas_(owned_canvas_.get()) {} |
Canvas::Canvas(SkCanvas* canvas, float image_scale) |
: image_scale_(image_scale), owned_canvas_(), canvas_(canvas) { |
@@ -385,63 +384,26 @@ void Canvas::DrawImageInt(const ImageSkia& image, |
int dest_h, |
bool filter, |
const SkPaint& paint) { |
- DrawImageIntHelper(image, src_x, src_y, src_w, src_h, dest_x, dest_y, dest_w, |
- dest_h, filter, paint, image_scale_, false); |
+ const ImageSkiaRep& image_rep = image.GetRepresentation(image_scale_); |
+ if (image_rep.is_null()) |
+ return; |
+ DrawImageIntHelper(image_rep, src_x, src_y, src_w, src_h, dest_x, dest_y, |
+ dest_w, dest_h, filter, paint, false); |
} |
-void Canvas::DrawImageIntInPixel(const ImageSkia& image, |
- int src_x, |
- int src_y, |
- int src_w, |
- int src_h, |
+void Canvas::DrawImageIntInPixel(const ImageSkiaRep& image_rep, |
int dest_x, |
int dest_y, |
int dest_w, |
int dest_h, |
bool filter, |
const SkPaint& paint) { |
- // All values passed into this function are in pixels, i.e. no scaling needs |
- // be done. |
- // Logic as below:- |
- // 1. Get the matrix transform from the canvas. |
- // 2. Set the scale in the matrix to 1.0 while honoring the direction of the |
- // the scale (x/y). Example RTL layouts. |
- // 3. Round off the X and Y translation components in the matrix. This is to |
- // reduce floating point errors during rect transformation. This is needed |
- // for fractional scale factors like 1.25/1.5, etc. |
- // 4. Save the current state of the canvas and restore the state when going |
- // out of scope with ScopedCanvas. |
- // 5. Set the modified matrix in the canvas. This ensures that no scaling |
- // will be done for draw operations on the canvas. |
- // 6. Draw the image. |
- SkMatrix matrix = canvas_->getTotalMatrix(); |
- |
- // Ensure that the direction of the x and y scales is preserved. This is |
- // important for RTL layouts. |
- matrix.setScaleX(matrix.getScaleX() > 0 ? 1.0f : -1.0f); |
- matrix.setScaleY(matrix.getScaleY() > 0 ? 1.0f : -1.0f); |
- |
- // Floor so that we get consistent rounding. |
- matrix.setTranslateX(SkScalarFloorToScalar(matrix.getTranslateX())); |
- matrix.setTranslateY(SkScalarFloorToScalar(matrix.getTranslateY())); |
- |
- ScopedCanvas scoper(this); |
- |
- canvas_->setMatrix(matrix); |
- |
- DrawImageIntHelper(image, |
- src_x, |
- src_y, |
- src_w, |
- src_h, |
- dest_x, |
- dest_y, |
- dest_w, |
- dest_h, |
- filter, |
- paint, |
- image_scale_, |
- true); |
+ int src_x = 0; |
+ int src_y = 0; |
+ int src_w = image_rep.pixel_width(); |
+ int src_h = image_rep.pixel_height(); |
+ DrawImageIntHelper(image_rep, src_x, src_y, src_w, src_h, dest_x, dest_y, |
+ dest_w, dest_h, filter, paint, true); |
} |
void Canvas::DrawImageInPath(const ImageSkia& image, |
@@ -554,7 +516,7 @@ bool Canvas::IntersectsClipRect(const Rect& rect) { |
rect.width(), rect.height()); |
} |
-void Canvas::DrawImageIntHelper(const ImageSkia& image, |
+void Canvas::DrawImageIntHelper(const ImageSkiaRep& image_rep, |
int src_x, |
int src_y, |
int src_w, |
@@ -565,7 +527,6 @@ void Canvas::DrawImageIntHelper(const ImageSkia& image, |
int dest_h, |
bool filter, |
const SkPaint& paint, |
- float image_scale, |
bool pixel) { |
DLOG_ASSERT(src_x + src_w < std::numeric_limits<int16_t>::max() && |
src_y + src_h < std::numeric_limits<int16_t>::max()); |
@@ -580,10 +541,6 @@ void Canvas::DrawImageIntHelper(const ImageSkia& image, |
float user_scale_x = static_cast<float>(dest_w) / src_w; |
float user_scale_y = static_cast<float>(dest_h) / src_h; |
- const ImageSkiaRep& image_rep = image.GetRepresentation(image_scale); |
- if (image_rep.is_null()) |
- return; |
- |
SkRect dest_rect = { SkIntToScalar(dest_x), |
SkIntToScalar(dest_y), |
SkIntToScalar(dest_x + dest_w), |