summaryrefslogtreecommitdiffstats
path: root/src/2geom/transforms.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/2geom/transforms.cpp')
-rw-r--r--src/2geom/transforms.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/2geom/transforms.cpp b/src/2geom/transforms.cpp
new file mode 100644
index 000000000..8c0164338
--- /dev/null
+++ b/src/2geom/transforms.cpp
@@ -0,0 +1,48 @@
+#include "transforms.h"
+
+namespace Geom {
+
+Matrix operator*(Translate const &t, Scale const &s) {
+ Matrix ret(s);
+ ret[4] = t[X] * s[X];
+ ret[5] = t[Y] * s[Y];
+ return ret;
+}
+
+Matrix operator*(Translate const &t, Rotate const &r) {
+ Matrix ret(r);
+ ret.setTranslation(t.vec * ret);
+ return ret;
+}
+
+Matrix operator*(Scale const &s, Translate const &t) {
+ return Matrix(s[0], 0,
+ 0 , s[1],
+ t[0], t[1]);
+}
+
+Matrix operator*(Scale const &s, Matrix const &m) {
+ Matrix ret(m);
+ ret[0] *= s[X];
+ ret[1] *= s[X];
+ ret[2] *= s[Y];
+ ret[3] *= s[Y];
+ return ret;
+}
+
+Matrix operator*(Matrix const &m, Translate const &t) {
+ Matrix ret(m);
+ ret[4] += t[X];
+ ret[5] += t[Y];
+ return ret;
+}
+
+Matrix operator*(Matrix const &m, Scale const &s) {
+ Matrix ret(m);
+ ret[0] *= s[X]; ret[1] *= s[Y];
+ ret[2] *= s[X]; ret[3] *= s[Y];
+ ret[4] *= s[X]; ret[5] *= s[Y];
+ return ret;
+}
+
+}