opacity_filter_canvas.cc 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Copyright 2015 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "skia/ext/opacity_filter_canvas.h"
  5. #include "third_party/skia/include/core/SkPaint.h"
  6. namespace skia {
  7. OpacityFilterCanvas::OpacityFilterCanvas(SkCanvas* canvas,
  8. float opacity,
  9. bool disable_image_filtering)
  10. : INHERITED(canvas),
  11. opacity_(opacity),
  12. disable_image_filtering_(disable_image_filtering) {}
  13. bool OpacityFilterCanvas::onFilter(SkPaint& paint) const {
  14. if (opacity_ < 1.f)
  15. paint.setAlphaf(paint.getAlphaf() * opacity_);
  16. return true;
  17. }
  18. void OpacityFilterCanvas::onDrawImage2(const SkImage* image,
  19. SkScalar dx,
  20. SkScalar dy,
  21. const SkSamplingOptions& sampling,
  22. const SkPaint* paint) {
  23. this->INHERITED::onDrawImage2(
  24. image, dx, dy, disable_image_filtering_ ? SkSamplingOptions() : sampling,
  25. paint);
  26. }
  27. void OpacityFilterCanvas::onDrawImageRect2(const SkImage* image,
  28. const SkRect& src,
  29. const SkRect& dst,
  30. const SkSamplingOptions& sampling,
  31. const SkPaint* paint,
  32. SrcRectConstraint constraint) {
  33. this->INHERITED::onDrawImageRect2(
  34. image, src, dst,
  35. disable_image_filtering_ ? SkSamplingOptions() : sampling, paint,
  36. constraint);
  37. }
  38. void OpacityFilterCanvas::onDrawEdgeAAImageSet2(
  39. const ImageSetEntry imageSet[],
  40. int count,
  41. const SkPoint dstClips[],
  42. const SkMatrix preViewMatrices[],
  43. const SkSamplingOptions& sampling,
  44. const SkPaint* paint,
  45. SrcRectConstraint constraint) {
  46. this->INHERITED::onDrawEdgeAAImageSet2(
  47. imageSet, count, dstClips, preViewMatrices,
  48. disable_image_filtering_ ? SkSamplingOptions() : sampling, paint,
  49. constraint);
  50. }
  51. void OpacityFilterCanvas::onDrawPicture(const SkPicture* picture,
  52. const SkMatrix* matrix,
  53. const SkPaint* paint) {
  54. SkPaint filteredPaint(paint ? *paint : SkPaint());
  55. if (this->onFilter(filteredPaint)) {
  56. // Unfurl pictures in order to filter nested paints.
  57. this->SkCanvas::onDrawPicture(picture, matrix, &filteredPaint);
  58. }
  59. }
  60. } // namespace skia