xref: /aosp_15_r20/external/skia/src/core/SkRSXform.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2023 Google LLC
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 #include "include/core/SkRSXform.h"
8 
toQuad(SkScalar width,SkScalar height,SkPoint quad[4]) const9 void SkRSXform::toQuad(SkScalar width, SkScalar height, SkPoint quad[4]) const {
10 #if 0
11     // This is the slow way, but it documents what we're doing
12     quad[0].set(0, 0);
13     quad[1].set(width, 0);
14     quad[2].set(width, height);
15     quad[3].set(0, height);
16     SkMatrix m;
17     m.setRSXform(*this).mapPoints(quad, quad, 4);
18 #else
19     const SkScalar m00 = fSCos;
20     const SkScalar m01 = -fSSin;
21     const SkScalar m02 = fTx;
22     const SkScalar m10 = -m01;
23     const SkScalar m11 = m00;
24     const SkScalar m12 = fTy;
25 
26     quad[0].set(m02, m12);
27     quad[1].set(m00 * width + m02, m10 * width + m12);
28     quad[2].set(m00 * width + m01 * height + m02, m10 * width + m11 * height + m12);
29     quad[3].set(m01 * height + m02, m11 * height + m12);
30 #endif
31 }
32 
toTriStrip(SkScalar width,SkScalar height,SkPoint strip[4]) const33 void SkRSXform::toTriStrip(SkScalar width, SkScalar height, SkPoint strip[4]) const {
34     const SkScalar m00 = fSCos;
35     const SkScalar m01 = -fSSin;
36     const SkScalar m02 = fTx;
37     const SkScalar m10 = -m01;
38     const SkScalar m11 = m00;
39     const SkScalar m12 = fTy;
40 
41     strip[0].set(m02, m12);
42     strip[1].set(m01 * height + m02, m11 * height + m12);
43     strip[2].set(m00 * width + m02, m10 * width + m12);
44     strip[3].set(m00 * width + m01 * height + m02, m10 * width + m11 * height + m12);
45 }
46