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

Unified Diff: ui/gfx/canvas.cc

Issue 1424983005: ui: Fix NinePatchPainter to work in physical pixels. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: ninepatchscale: testreview Created 5 years, 2 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/nine_image_painter.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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),
« no previous file with comments | « ui/gfx/canvas.h ('k') | ui/gfx/nine_image_painter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698