| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef SkLinearBitmapPipeline_matrix_DEFINED | 8 #ifndef SkLinearBitmapPipeline_matrix_DEFINED |
| 9 #define SkLinearBitmapPipeline_matrix_DEFINED | 9 #define SkLinearBitmapPipeline_matrix_DEFINED |
| 10 | 10 |
| 11 #include "SkLinearBitmapPipeline_core.h" | 11 #include "SkLinearBitmapPipeline_core.h" |
| 12 | 12 |
| 13 namespace { | 13 namespace { |
| 14 class TranslateMatrixStrategy { | 14 class TranslateMatrixStrategy { |
| 15 public: | 15 public: |
| 16 TranslateMatrixStrategy(SkVector offset) | 16 TranslateMatrixStrategy(SkVector offset) |
| 17 : fXOffset{X(offset)} | 17 : fXOffset{X(offset)} |
| 18 , fYOffset{Y(offset)} { } | 18 , fYOffset{Y(offset)} { } |
| 19 | 19 |
| 20 void processPoints(Sk4s* xs, Sk4s* ys) { | 20 void processPoints(Sk4s* xs, Sk4s* ys) const { |
| 21 *xs = *xs + fXOffset; | 21 *xs = *xs + fXOffset; |
| 22 *ys = *ys + fYOffset; | 22 *ys = *ys + fYOffset; |
| 23 } | 23 } |
| 24 | 24 |
| 25 template <typename Next> | 25 template <typename Next> |
| 26 bool maybeProcessSpan(Span span, Next* next) { | 26 bool maybeProcessSpan(Span span, Next* next) const { |
| 27 SkPoint start; SkScalar length; int count; | 27 SkPoint start; SkScalar length; int count; |
| 28 std::tie(start, length, count) = span; | 28 std::tie(start, length, count) = span; |
| 29 next->pointSpan(Span{start + SkPoint{fXOffset, fYOffset}, length, count}
); | 29 next->pointSpan(Span{start + SkPoint{fXOffset, fYOffset}, length, count}
); |
| 30 return true; | 30 return true; |
| 31 } | 31 } |
| 32 | 32 |
| 33 private: | 33 private: |
| 34 const SkScalar fXOffset, fYOffset; | 34 const SkScalar fXOffset, fYOffset; |
| 35 }; | 35 }; |
| 36 | 36 |
| 37 class ScaleMatrixStrategy { | 37 class ScaleMatrixStrategy { |
| 38 public: | 38 public: |
| 39 ScaleMatrixStrategy(SkVector offset, SkVector scale) | 39 ScaleMatrixStrategy(SkVector offset, SkVector scale) |
| 40 : fXOffset{X(offset)}, fYOffset{Y(offset)} | 40 : fXOffset{X(offset)}, fYOffset{Y(offset)} |
| 41 , fXScale{X(scale)}, fYScale{Y(scale)} { } | 41 , fXScale{X(scale)}, fYScale{Y(scale)} { } |
| 42 void processPoints(Sk4s* xs, Sk4s* ys) { | 42 void processPoints(Sk4s* xs, Sk4s* ys) const { |
| 43 *xs = *xs * fXScale + fXOffset; | 43 *xs = *xs * fXScale + fXOffset; |
| 44 *ys = *ys * fYScale + fYOffset; | 44 *ys = *ys * fYScale + fYOffset; |
| 45 } | 45 } |
| 46 | 46 |
| 47 template <typename Next> | 47 template <typename Next> |
| 48 bool maybeProcessSpan(Span span, Next* next) { | 48 bool maybeProcessSpan(Span span, Next* next) const { |
| 49 SkPoint start; SkScalar length; int count; | 49 SkPoint start; SkScalar length; int count; |
| 50 std::tie(start, length, count) = span; | 50 std::tie(start, length, count) = span; |
| 51 SkPoint newStart = | 51 SkPoint newStart = |
| 52 SkPoint{X(start) * fXScale + fXOffset, Y(start) * fYScale + fYOffset
}; | 52 SkPoint{X(start) * fXScale + fXOffset, Y(start) * fYScale + fYOffset
}; |
| 53 SkScalar newLength = length * fXScale; | 53 SkScalar newLength = length * fXScale; |
| 54 next->pointSpan(Span{newStart, newLength, count}); | 54 next->pointSpan(Span{newStart, newLength, count}); |
| 55 return true; | 55 return true; |
| 56 } | 56 } |
| 57 | 57 |
| 58 private: | 58 private: |
| 59 const SkScalar fXOffset, fYOffset; | 59 const SkScalar fXOffset, fYOffset; |
| 60 const SkScalar fXScale, fYScale; | 60 const SkScalar fXScale, fYScale; |
| 61 }; | 61 }; |
| 62 | 62 |
| 63 class AffineMatrixStrategy { | 63 class AffineMatrixStrategy { |
| 64 public: | 64 public: |
| 65 AffineMatrixStrategy(SkVector offset, SkVector scale, SkVector skew) | 65 AffineMatrixStrategy(SkVector offset, SkVector scale, SkVector skew) |
| 66 : fXOffset{X(offset)}, fYOffset{Y(offset)} | 66 : fXOffset{X(offset)}, fYOffset{Y(offset)} |
| 67 , fXScale{X(scale)}, fYScale{Y(scale)} | 67 , fXScale{X(scale)}, fYScale{Y(scale)} |
| 68 , fXSkew{X(skew)}, fYSkew{Y(skew)} { } | 68 , fXSkew{X(skew)}, fYSkew{Y(skew)} { } |
| 69 void processPoints(Sk4s* xs, Sk4s* ys) { | 69 void processPoints(Sk4s* xs, Sk4s* ys) const { |
| 70 Sk4s newXs = fXScale * *xs + fXSkew * *ys + fXOffset; | 70 Sk4s newXs = fXScale * *xs + fXSkew * *ys + fXOffset; |
| 71 Sk4s newYs = fYSkew * *xs + fYScale * *ys + fYOffset; | 71 Sk4s newYs = fYSkew * *xs + fYScale * *ys + fYOffset; |
| 72 | 72 |
| 73 *xs = newXs; | 73 *xs = newXs; |
| 74 *ys = newYs; | 74 *ys = newYs; |
| 75 } | 75 } |
| 76 | 76 |
| 77 template <typename Next> | 77 template <typename Next> |
| 78 bool maybeProcessSpan(Span span, Next* next) { | 78 bool maybeProcessSpan(Span span, Next* next) const { |
| 79 return false; | 79 return false; |
| 80 } | 80 } |
| 81 | 81 |
| 82 private: | 82 private: |
| 83 const SkScalar fXOffset, fYOffset; | 83 const SkScalar fXOffset, fYOffset; |
| 84 const SkScalar fXScale, fYScale; | 84 const SkScalar fXScale, fYScale; |
| 85 const SkScalar fXSkew, fYSkew; | 85 const SkScalar fXSkew, fYSkew; |
| 86 }; | 86 }; |
| 87 | 87 |
| 88 class PerspectiveMatrixStrategy { | 88 class PerspectiveMatrixStrategy { |
| 89 public: | 89 public: |
| 90 PerspectiveMatrixStrategy(SkVector offset, SkVector scale, SkVector skew, | 90 PerspectiveMatrixStrategy(SkVector offset, SkVector scale, SkVector skew, |
| 91 SkVector zSkew, SkScalar zOffset) | 91 SkVector zSkew, SkScalar zOffset) |
| 92 : fXOffset{X(offset)}, fYOffset{Y(offset)}, fZOffset{zOffset} | 92 : fXOffset{X(offset)}, fYOffset{Y(offset)}, fZOffset{zOffset} |
| 93 , fXScale{X(scale)}, fYScale{Y(scale)} | 93 , fXScale{X(scale)}, fYScale{Y(scale)} |
| 94 , fXSkew{X(skew)}, fYSkew{Y(skew)}, fZXSkew{X(zSkew)}, fZYSkew{Y(zSk
ew)} { } | 94 , fXSkew{X(skew)}, fYSkew{Y(skew)}, fZXSkew{X(zSkew)}, fZYSkew{Y(zSk
ew)} { } |
| 95 void processPoints(Sk4s* xs, Sk4s* ys) { | 95 void processPoints(Sk4s* xs, Sk4s* ys) const { |
| 96 Sk4s newXs = fXScale * *xs + fXSkew * *ys + fXOffset; | 96 Sk4s newXs = fXScale * *xs + fXSkew * *ys + fXOffset; |
| 97 Sk4s newYs = fYSkew * *xs + fYScale * *ys + fYOffset; | 97 Sk4s newYs = fYSkew * *xs + fYScale * *ys + fYOffset; |
| 98 Sk4s newZs = fZXSkew * *xs + fZYSkew * *ys + fZOffset; | 98 Sk4s newZs = fZXSkew * *xs + fZYSkew * *ys + fZOffset; |
| 99 | 99 |
| 100 *xs = newXs / newZs; | 100 *xs = newXs / newZs; |
| 101 *ys = newYs / newZs; | 101 *ys = newYs / newZs; |
| 102 } | 102 } |
| 103 | 103 |
| 104 template <typename Next> | 104 template <typename Next> |
| 105 bool maybeProcessSpan(Span span, Next* next) { | 105 bool maybeProcessSpan(Span span, Next* next) const { |
| 106 return false; | 106 return false; |
| 107 } | 107 } |
| 108 | 108 |
| 109 private: | 109 private: |
| 110 const SkScalar fXOffset, fYOffset, fZOffset; | 110 const SkScalar fXOffset, fYOffset, fZOffset; |
| 111 const SkScalar fXScale, fYScale; | 111 const SkScalar fXScale, fYScale; |
| 112 const SkScalar fXSkew, fYSkew, fZXSkew, fZYSkew; | 112 const SkScalar fXSkew, fYSkew, fZXSkew, fZYSkew; |
| 113 }; | 113 }; |
| 114 | 114 |
| 115 | 115 |
| 116 } // namespace | 116 } // namespace |
| 117 | 117 |
| 118 #endif // SkLinearBitmapPipeline_matrix_DEFINED | 118 #endif // SkLinearBitmapPipeline_matrix_DEFINED |
| OLD | NEW |