| Index: ui/gfx/canvas.cc
|
| diff --git a/ui/gfx/canvas.cc b/ui/gfx/canvas.cc
|
| index 503cee00e9a7b8ef12c29d0e8653dbacfd4ec106..37ca6289269a42726b2c091ba38bf0fa3aeab774 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,
|
| @@ -562,7 +524,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,
|
| @@ -573,7 +535,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());
|
| @@ -588,10 +549,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),
|
|
|