| /* |
| * Copyright 2023 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| #include "include/core/SkRSXform.h" |
| |
| void SkRSXform::toQuad(SkScalar width, SkScalar height, SkPoint quad[4]) const { |
| #if 0 |
| // This is the slow way, but it documents what we're doing |
| quad[0].set(0, 0); |
| quad[1].set(width, 0); |
| quad[2].set(width, height); |
| quad[3].set(0, height); |
| SkMatrix m; |
| m.setRSXform(*this).mapPoints(quad, quad, 4); |
| #else |
| const SkScalar m00 = fSCos; |
| const SkScalar m01 = -fSSin; |
| const SkScalar m02 = fTx; |
| const SkScalar m10 = -m01; |
| const SkScalar m11 = m00; |
| const SkScalar m12 = fTy; |
| |
| quad[0].set(m02, m12); |
| quad[1].set(m00 * width + m02, m10 * width + m12); |
| quad[2].set(m00 * width + m01 * height + m02, m10 * width + m11 * height + m12); |
| quad[3].set(m01 * height + m02, m11 * height + m12); |
| #endif |
| } |
| |
| void SkRSXform::toTriStrip(SkScalar width, SkScalar height, SkPoint strip[4]) const { |
| const SkScalar m00 = fSCos; |
| const SkScalar m01 = -fSSin; |
| const SkScalar m02 = fTx; |
| const SkScalar m10 = -m01; |
| const SkScalar m11 = m00; |
| const SkScalar m12 = fTy; |
| |
| strip[0].set(m02, m12); |
| strip[1].set(m01 * height + m02, m11 * height + m12); |
| strip[2].set(m00 * width + m02, m10 * width + m12); |
| strip[3].set(m00 * width + m01 * height + m02, m10 * width + m11 * height + m12); |
| } |