/* * 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); }