aboutsummaryrefslogtreecommitdiffstats
path: root/experimental/SkSetPoly3To3_D.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'experimental/SkSetPoly3To3_D.cpp')
-rw-r--r--experimental/SkSetPoly3To3_D.cpp65
1 files changed, 0 insertions, 65 deletions
diff --git a/experimental/SkSetPoly3To3_D.cpp b/experimental/SkSetPoly3To3_D.cpp
deleted file mode 100644
index 47c0946..0000000
--- a/experimental/SkSetPoly3To3_D.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-#include "SkMatrix.h"
-
-typedef int64_t SkDScalar;
-
-static SkScalar SkDScalar_toScalar(SkDScalar value) {
- SkDScalar result = (value + (1 << 15)) >> 16;
- int top = result >> 31;
- SkASSERT(top == 0 || top == -1);
- return (SkScalar)result;
-}
-
-static SkDScalar SkDScalar_setMul(SkScalar a, SkScalar b) {
- return (SkDScalar)a * b;
-}
-
-static void computeOuterProduct(SkMatrix* matrix,
- const SkPoint pts0[3], const SkPoint& ave0,
- const SkPoint pts1[3], const SkPoint& ave1) {
- SkDScalar tmp[4];
- sk_bzero(tmp, sizeof(tmp));
-
- for (int i = 0; i < 3; i++) {
- SkScalar x0 = pts0[i].fX - ave0.fX;
- SkScalar y0 = pts0[i].fY - ave0.fY;
- SkScalar x1 = pts1[i].fX - ave1.fX;
- SkScalar y1 = pts1[i].fY - ave1.fY;
- tmp[0] += SkDScalar_setMul(x0, x1);
- tmp[1] += SkDScalar_setMul(x0, y1);
- tmp[2] += SkDScalar_setMul(y0, x1);
- tmp[3] += SkDScalar_setMul(y0, y1);
- }
- matrix->reset();
- matrix->setScaleX(SkDScalar_toScalar(tmp[0]));
- matrix->setSkewY( SkDScalar_toScalar(tmp[1]));
- matrix->setSkewX( SkDScalar_toScalar(tmp[2]));
- matrix->setScaleY(SkDScalar_toScalar(tmp[3]));
-}
-
-static SkScalar dot(SkScalar ax, SkScalar ay, SkScalar bx, SkScalar by) {
- return SkDScalar_toScalar(SkDScalar_setMul(ax, bx) +
- SkDScalar_setMul(ay, by));
-}
-
-bool SkSetPoly3To3(SkMatrix* matrix, const SkPoint src[3], const SkPoint dst[3]) {
- const SkPoint& srcAve = src[0];
- const SkPoint& dstAve = dst[0];
-
- SkMatrix srcOP, dstOP;
-
- computeOuterProduct(&srcOP, src, srcAve, src, srcAve);
-
- if (!srcOP.invert(&srcOP)) {
- return false;
- }
-
- computeOuterProduct(&dstOP, src, srcAve, dst, dstAve);
-
- matrix->setConcat(dstOP, srcOP);
- matrix->setTranslateX(dstAve.fX - dot(srcAve.fX, srcAve.fY,
- matrix->getScaleX(), matrix->getSkewX()));
- matrix->setTranslateY(dstAve.fY - dot(srcAve.fX, srcAve.fY,
- matrix->getSkewY(), matrix->getScaleY()));
- return true;
-}
-