summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/xetexdir/trans.c
diff options
context:
space:
mode:
authorJonathan Kew <jfkthame@googlemail.com>2006-07-26 16:19:45 +0000
committerJonathan Kew <jfkthame@googlemail.com>2006-07-26 16:19:45 +0000
commit622bf4a7c90729be28a038c49e4c237ce9f31297 (patch)
tree77466d5c0a89c433bd1c08f4cbeaf410fda7b25c /Build/source/texk/web2c/xetexdir/trans.c
parente88aafe4ca4779a73487925dea63e8b55dc5e251 (diff)
added main xetex source directory
git-svn-id: svn://tug.org/texlive/trunk@1920 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/xetexdir/trans.c')
-rw-r--r--Build/source/texk/web2c/xetexdir/trans.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/xetexdir/trans.c b/Build/source/texk/web2c/xetexdir/trans.c
new file mode 100644
index 00000000000..7ac31c1616a
--- /dev/null
+++ b/Build/source/texk/web2c/xetexdir/trans.c
@@ -0,0 +1,116 @@
+/****************************************************************************\
+ Part of the XeTeX typesetting system
+ copyright (c) 1994-2006 by SIL International
+ written by Jonathan Kew
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL SIL INTERNATIONAL BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of SIL International
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in this Software without prior written
+authorization from SIL International.
+\****************************************************************************/
+
+#include "trans.h"
+
+void makeidentity(transform* t)
+{
+#ifdef XETEX_MAC
+ *t = CGAffineTransformMake(1.0, 0.0, 0.0, 1.0, 0.0, 0.0);
+#else
+ t->a = 1.0;
+ t->b = 0.0;
+ t->c = 0.0;
+ t->d = 1.0;
+ t->x = 0.0;
+ t->y = 0.0;
+#endif
+}
+
+void makescale(transform* t, double xscale, double yscale)
+{
+#ifdef XETEX_MAC
+ *t = CGAffineTransformMakeScale(xscale, yscale);
+#else
+ t->a = xscale;
+ t->b = 0.0;
+ t->c = 0.0;
+ t->d = yscale;
+ t->x = 0.0;
+ t->y = 0.0;
+#endif
+}
+
+void maketranslation(transform* t, double dx, double dy)
+{
+#ifdef XETEX_MAC
+ *t = CGAffineTransformMakeTranslation(dx, dy);
+#else
+ t->a = 1.0;
+ t->b = 0.0;
+ t->c = 0.0;
+ t->d = 1.0;
+ t->x = dx;
+ t->y = dy;
+#endif
+}
+#include <stdio.h>
+void makerotation(transform* t, double a)
+{
+#ifdef XETEX_MAC
+ *t = CGAffineTransformMakeRotation(a);
+#else
+ t->a = cos(a);
+ t->b = sin(a);
+ t->c = -sin(a);
+ t->d = cos(a);
+ t->x = 0.0;
+ t->y = 0.0;
+#endif
+}
+
+void transformpoint(realpoint* p, const transform* t)
+{
+#ifdef XETEX_MAC
+ CGPoint r = CGPointApplyAffineTransform(*(CGPoint*)p, *t);
+ *p = *(realpoint*)&r;
+#else
+ realpoint r;
+ r.x = t->a * p->x + t->c * p->y + t->x;
+ r.y = t->b * p->x + t->d * p->y + t->y;
+ *p = r;
+#endif
+}
+
+void transformconcat(transform* t1, const transform* t2)
+{
+#ifdef XETEX_MAC
+ *t1 = CGAffineTransformConcat(*t1, *t2);
+#else
+ transform r;
+ r.a = t1->a * t2->a + t1->b * t2->c + 0.0 * t2->x;
+ r.b = t1->a * t2->b + t1->b * t2->d + 0.0 * t2->y;
+ r.c = t1->c * t2->a + t1->d * t2->c + 0.0 * t2->x;
+ r.d = t1->c * t2->b + t1->d * t2->d + 0.0 * t2->y;
+ r.x = t1->x * t2->a + t1->y * t2->c + 1.0 * t2->x;
+ r.y = t1->x * t2->b + t1->y * t2->d + 1.0 * t2->y;
+ *t1 = r;
+#endif
+}