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

Side by Side Diff: ui/gfx/canvas.cc

Issue 271653003: Scrub deprecated Skia APIs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <cmath> 7 #include <cmath>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/i18n/rtl.h" 10 #include "base/i18n/rtl.h"
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 void Canvas::DrawImageInt(const ImageSkia& image, int x, int y, uint8 a) { 328 void Canvas::DrawImageInt(const ImageSkia& image, int x, int y, uint8 a) {
329 SkPaint paint; 329 SkPaint paint;
330 paint.setAlpha(a); 330 paint.setAlpha(a);
331 DrawImageInt(image, x, y, paint); 331 DrawImageInt(image, x, y, paint);
332 } 332 }
333 333
334 void Canvas::DrawImageInt(const ImageSkia& image, 334 void Canvas::DrawImageInt(const ImageSkia& image,
335 int x, 335 int x,
336 int y, 336 int y,
337 const SkPaint& paint) { 337 const SkPaint& paint) {
338 const ImageSkiaRep& image_rep = GetImageRepToPaint(image); 338 const ImageSkiaRep& image_rep = image.GetRepresentation(image_scale_);
339 if (image_rep.is_null()) 339 if (image_rep.is_null())
340 return; 340 return;
341 const SkBitmap& bitmap = image_rep.sk_bitmap(); 341 const SkBitmap& bitmap = image_rep.sk_bitmap();
342 float bitmap_scale = image_rep.scale(); 342 float bitmap_scale = image_rep.scale();
343 343
344 canvas_->save(); 344 canvas_->save();
345 canvas_->scale(SkFloatToScalar(1.0f / bitmap_scale), 345 canvas_->scale(SkFloatToScalar(1.0f / bitmap_scale),
346 SkFloatToScalar(1.0f / bitmap_scale)); 346 SkFloatToScalar(1.0f / bitmap_scale));
347 canvas_->drawBitmap(bitmap, 347 canvas_->drawBitmap(bitmap,
348 SkFloatToScalar(x * bitmap_scale), 348 SkFloatToScalar(x * bitmap_scale),
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 434
435 // Restore the state of the canvas. 435 // Restore the state of the canvas.
436 Restore(); 436 Restore();
437 } 437 }
438 438
439 void Canvas::DrawImageInPath(const ImageSkia& image, 439 void Canvas::DrawImageInPath(const ImageSkia& image,
440 int x, 440 int x,
441 int y, 441 int y,
442 const SkPath& path, 442 const SkPath& path,
443 const SkPaint& paint) { 443 const SkPaint& paint) {
444 const ImageSkiaRep& image_rep = GetImageRepToPaint(image); 444 const ImageSkiaRep& image_rep = image.GetRepresentation(image_scale_);
445 if (image_rep.is_null()) 445 if (image_rep.is_null())
446 return; 446 return;
447 447
448 SkMatrix matrix; 448 SkMatrix matrix;
449 matrix.setTranslate(SkIntToScalar(x), SkIntToScalar(y)); 449 matrix.setTranslate(SkIntToScalar(x), SkIntToScalar(y));
450 skia::RefPtr<SkShader> shader = CreateImageRepShader( 450 skia::RefPtr<SkShader> shader = CreateImageRepShader(
451 image_rep, 451 image_rep,
452 SkShader::kRepeat_TileMode, 452 SkShader::kRepeat_TileMode,
453 matrix); 453 matrix);
454 454
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 int src_y, 497 int src_y,
498 float tile_scale_x, 498 float tile_scale_x,
499 float tile_scale_y, 499 float tile_scale_y,
500 int dest_x, 500 int dest_x,
501 int dest_y, 501 int dest_y,
502 int w, 502 int w,
503 int h) { 503 int h) {
504 if (!IntersectsClipRectInt(dest_x, dest_y, w, h)) 504 if (!IntersectsClipRectInt(dest_x, dest_y, w, h))
505 return; 505 return;
506 506
507 const ImageSkiaRep& image_rep = GetImageRepToPaint( 507 const ImageSkiaRep& image_rep = image.GetRepresentation(image_scale_);
508 image, image_scale_, tile_scale_x, tile_scale_y);
509 if (image_rep.is_null()) 508 if (image_rep.is_null())
510 return; 509 return;
511 510
512 SkMatrix shader_scale; 511 SkMatrix shader_scale;
513 shader_scale.setScale(SkFloatToScalar(tile_scale_x), 512 shader_scale.setScale(SkFloatToScalar(tile_scale_x),
514 SkFloatToScalar(tile_scale_y)); 513 SkFloatToScalar(tile_scale_y));
515 shader_scale.preTranslate(SkIntToScalar(-src_x), SkIntToScalar(-src_y)); 514 shader_scale.preTranslate(SkIntToScalar(-src_x), SkIntToScalar(-src_y));
516 shader_scale.postTranslate(SkIntToScalar(dest_x), SkIntToScalar(dest_y)); 515 shader_scale.postTranslate(SkIntToScalar(dest_x), SkIntToScalar(dest_y));
517 516
518 skia::RefPtr<SkShader> shader = CreateImageRepShader( 517 skia::RefPtr<SkShader> shader = CreateImageRepShader(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 return canvas_->getClipBounds(&clip) && 554 return canvas_->getClipBounds(&clip) &&
556 clip.intersect(SkIntToScalar(x), SkIntToScalar(y), SkIntToScalar(x + w), 555 clip.intersect(SkIntToScalar(x), SkIntToScalar(y), SkIntToScalar(x + w),
557 SkIntToScalar(y + h)); 556 SkIntToScalar(y + h));
558 } 557 }
559 558
560 bool Canvas::IntersectsClipRect(const Rect& rect) { 559 bool Canvas::IntersectsClipRect(const Rect& rect) {
561 return IntersectsClipRectInt(rect.x(), rect.y(), 560 return IntersectsClipRectInt(rect.x(), rect.y(),
562 rect.width(), rect.height()); 561 rect.width(), rect.height());
563 } 562 }
564 563
565 const ImageSkiaRep& Canvas::GetImageRepToPaint(const ImageSkia& image) const {
566 return GetImageRepToPaint(image, image_scale_, 1.0f, 1.0f);
567 }
568
569 const ImageSkiaRep& Canvas::GetImageRepToPaint(
570 const ImageSkia& image,
571 float image_scale,
572 float user_additional_scale_x,
573 float user_additional_scale_y) const {
574 const ImageSkiaRep& image_rep = image.GetRepresentation(image_scale);
575
576 if (!image_rep.is_null()) {
577 SkMatrix m = canvas_->getTotalMatrix();
578 float scale_x = SkScalarToFloat(SkScalarAbs(m.getScaleX())) *
579 user_additional_scale_x;
580 float scale_y = SkScalarToFloat(SkScalarAbs(m.getScaleY())) *
581 user_additional_scale_y;
582
583 float bitmap_scale = image_rep.scale();
584 if (scale_x < bitmap_scale || scale_y < bitmap_scale)
585 const_cast<SkBitmap&>(image_rep.sk_bitmap()).buildMipMap();
586 }
587
588 return image_rep;
589 }
590
591 void Canvas::DrawImageIntHelper(const ImageSkia& image, 564 void Canvas::DrawImageIntHelper(const ImageSkia& image,
592 int src_x, 565 int src_x,
593 int src_y, 566 int src_y,
594 int src_w, 567 int src_w,
595 int src_h, 568 int src_h,
596 int dest_x, 569 int dest_x,
597 int dest_y, 570 int dest_y,
598 int dest_w, 571 int dest_w,
599 int dest_h, 572 int dest_h,
600 bool filter, 573 bool filter,
601 const SkPaint& paint, 574 const SkPaint& paint,
602 float image_scale, 575 float image_scale,
603 bool pixel) { 576 bool pixel) {
604 DLOG_ASSERT(src_x + src_w < std::numeric_limits<int16_t>::max() && 577 DLOG_ASSERT(src_x + src_w < std::numeric_limits<int16_t>::max() &&
605 src_y + src_h < std::numeric_limits<int16_t>::max()); 578 src_y + src_h < std::numeric_limits<int16_t>::max());
606 if (src_w <= 0 || src_h <= 0) { 579 if (src_w <= 0 || src_h <= 0) {
607 NOTREACHED() << "Attempting to draw bitmap from an empty rect!"; 580 NOTREACHED() << "Attempting to draw bitmap from an empty rect!";
608 return; 581 return;
609 } 582 }
610 583
611 if (!IntersectsClipRectInt(dest_x, dest_y, dest_w, dest_h)) 584 if (!IntersectsClipRectInt(dest_x, dest_y, dest_w, dest_h))
612 return; 585 return;
613 586
614 float user_scale_x = static_cast<float>(dest_w) / src_w; 587 float user_scale_x = static_cast<float>(dest_w) / src_w;
615 float user_scale_y = static_cast<float>(dest_h) / src_h; 588 float user_scale_y = static_cast<float>(dest_h) / src_h;
616 589
617 const ImageSkiaRep& image_rep = GetImageRepToPaint(image, 590 const ImageSkiaRep& image_rep = image.GetRepresentation(image_scale);
618 image_scale, user_scale_x, user_scale_y);
619 if (image_rep.is_null()) 591 if (image_rep.is_null())
620 return; 592 return;
621 593
622 SkRect dest_rect = { SkIntToScalar(dest_x), 594 SkRect dest_rect = { SkIntToScalar(dest_x),
623 SkIntToScalar(dest_y), 595 SkIntToScalar(dest_y),
624 SkIntToScalar(dest_x + dest_w), 596 SkIntToScalar(dest_x + dest_w),
625 SkIntToScalar(dest_y + dest_h) }; 597 SkIntToScalar(dest_y + dest_h) };
626 598
627 if (src_w == dest_w && src_h == dest_h && 599 if (src_w == dest_w && src_h == dest_h &&
628 user_scale_x == 1.0f && user_scale_y == 1.0f && 600 user_scale_x == 1.0f && user_scale_y == 1.0f &&
(...skipping 18 matching lines...) Expand all
647 619
648 skia::RefPtr<SkShader> shader = CreateImageRepShaderForScale( 620 skia::RefPtr<SkShader> shader = CreateImageRepShaderForScale(
649 image_rep, 621 image_rep,
650 SkShader::kRepeat_TileMode, 622 SkShader::kRepeat_TileMode,
651 shader_scale, 623 shader_scale,
652 pixel ? 1.0f : image_scale); 624 pixel ? 1.0f : image_scale);
653 625
654 // Set up our paint to use the shader & release our reference (now just owned 626 // Set up our paint to use the shader & release our reference (now just owned
655 // by the paint). 627 // by the paint).
656 SkPaint p(paint); 628 SkPaint p(paint);
657 p.setFilterBitmap(filter); 629 p.setFilterLevel(filter ? SkPaint::kLow_FilterLevel
630 : SkPaint::kNone_FilterLevel);
658 p.setShader(shader.get()); 631 p.setShader(shader.get());
659 632
660 // The rect will be filled by the bitmap. 633 // The rect will be filled by the bitmap.
661 canvas_->drawRect(dest_rect, p); 634 canvas_->drawRect(dest_rect, p);
662 } 635 }
663 636
664 } // namespace gfx 637 } // namespace gfx
OLDNEW
« ui/gfx/canvas.h ('K') | « ui/gfx/canvas.h ('k') | ui/gfx/color_analysis_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698