swfmill 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. data/.document +5 -0
  2. data/.gitignore +23 -0
  3. data/.swfmill +240 -0
  4. data/LICENSE +340 -0
  5. data/README.rdoc +37 -0
  6. data/Rakefile +59 -0
  7. data/VERSION +1 -0
  8. data/ext/.gitignore +5 -0
  9. data/ext/extconf.rb +86 -0
  10. data/ext/swfmill/.gitignore +27 -0
  11. data/ext/swfmill/AUTHORS +9 -0
  12. data/ext/swfmill/COPYING +340 -0
  13. data/ext/swfmill/Makefile.am +14 -0
  14. data/ext/swfmill/Makefile.in +635 -0
  15. data/ext/swfmill/NEWS +189 -0
  16. data/ext/swfmill/README +170 -0
  17. data/ext/swfmill/TODO +33 -0
  18. data/ext/swfmill/aclocal.m4 +7712 -0
  19. data/ext/swfmill/autogen.sh +7 -0
  20. data/ext/swfmill/compile +142 -0
  21. data/ext/swfmill/config.guess +1516 -0
  22. data/ext/swfmill/config.sub +1626 -0
  23. data/ext/swfmill/configure +21868 -0
  24. data/ext/swfmill/configure.ac +55 -0
  25. data/ext/swfmill/depcomp +589 -0
  26. data/ext/swfmill/install-sh +519 -0
  27. data/ext/swfmill/ltmain.sh +6964 -0
  28. data/ext/swfmill/missing +367 -0
  29. data/ext/swfmill/src/Geom.cpp +107 -0
  30. data/ext/swfmill/src/Geom.h +100 -0
  31. data/ext/swfmill/src/Makefile.am +86 -0
  32. data/ext/swfmill/src/Makefile.in +1025 -0
  33. data/ext/swfmill/src/SWF.h +11941 -0
  34. data/ext/swfmill/src/SWFAction.cpp +41 -0
  35. data/ext/swfmill/src/SWFAction.h +19 -0
  36. data/ext/swfmill/src/SWFBasic.h +7 -0
  37. data/ext/swfmill/src/SWFFile.cpp +406 -0
  38. data/ext/swfmill/src/SWFFile.h +34 -0
  39. data/ext/swfmill/src/SWFFilter.cpp +25 -0
  40. data/ext/swfmill/src/SWFFilter.h +15 -0
  41. data/ext/swfmill/src/SWFGlyphList.cpp +262 -0
  42. data/ext/swfmill/src/SWFGlyphList.h +34 -0
  43. data/ext/swfmill/src/SWFIdItem.h +85 -0
  44. data/ext/swfmill/src/SWFIdItems.h +16 -0
  45. data/ext/swfmill/src/SWFItem.cpp +235 -0
  46. data/ext/swfmill/src/SWFItem.h +60 -0
  47. data/ext/swfmill/src/SWFList.h +179 -0
  48. data/ext/swfmill/src/SWFReader.cpp +352 -0
  49. data/ext/swfmill/src/SWFReader.h +73 -0
  50. data/ext/swfmill/src/SWFShapeItem.cpp +220 -0
  51. data/ext/swfmill/src/SWFShapeItem.h +45 -0
  52. data/ext/swfmill/src/SWFShapeMaker.cpp +401 -0
  53. data/ext/swfmill/src/SWFShapeMaker.h +128 -0
  54. data/ext/swfmill/src/SWFTag.cpp +49 -0
  55. data/ext/swfmill/src/SWFTag.h +20 -0
  56. data/ext/swfmill/src/SWFTrait.cpp +35 -0
  57. data/ext/swfmill/src/SWFTrait.h +22 -0
  58. data/ext/swfmill/src/SWFWriter.cpp +312 -0
  59. data/ext/swfmill/src/SWFWriter.h +84 -0
  60. data/ext/swfmill/src/base64.c +110 -0
  61. data/ext/swfmill/src/base64.h +15 -0
  62. data/ext/swfmill/src/codegen/Makefile.am +15 -0
  63. data/ext/swfmill/src/codegen/Makefile.in +346 -0
  64. data/ext/swfmill/src/codegen/basic.xsl +45 -0
  65. data/ext/swfmill/src/codegen/basics.xsl +235 -0
  66. data/ext/swfmill/src/codegen/dumper.xsl +109 -0
  67. data/ext/swfmill/src/codegen/header.xsl +131 -0
  68. data/ext/swfmill/src/codegen/mk.xsl +26 -0
  69. data/ext/swfmill/src/codegen/parser.xsl +196 -0
  70. data/ext/swfmill/src/codegen/parsexml.xsl +312 -0
  71. data/ext/swfmill/src/codegen/size.xsl +189 -0
  72. data/ext/swfmill/src/codegen/source.xml +2197 -0
  73. data/ext/swfmill/src/codegen/writer.xsl +190 -0
  74. data/ext/swfmill/src/codegen/writexml.xsl +138 -0
  75. data/ext/swfmill/src/swfmill.cpp +482 -0
  76. data/ext/swfmill/src/swft/Makefile.am +55 -0
  77. data/ext/swfmill/src/swft/Makefile.in +717 -0
  78. data/ext/swfmill/src/swft/Parser.cpp +76 -0
  79. data/ext/swfmill/src/swft/Parser.h +37 -0
  80. data/ext/swfmill/src/swft/SVGAttributeParser.cpp +78 -0
  81. data/ext/swfmill/src/swft/SVGAttributeParser.h +35 -0
  82. data/ext/swfmill/src/swft/SVGColor.cpp +116 -0
  83. data/ext/swfmill/src/swft/SVGColor.h +37 -0
  84. data/ext/swfmill/src/swft/SVGColors.h +167 -0
  85. data/ext/swfmill/src/swft/SVGGradient.cpp +258 -0
  86. data/ext/swfmill/src/swft/SVGGradient.h +81 -0
  87. data/ext/swfmill/src/swft/SVGPathParser.cpp +155 -0
  88. data/ext/swfmill/src/swft/SVGPathParser.h +126 -0
  89. data/ext/swfmill/src/swft/SVGPointsParser.cpp +51 -0
  90. data/ext/swfmill/src/swft/SVGPointsParser.h +25 -0
  91. data/ext/swfmill/src/swft/SVGStyle.cpp +181 -0
  92. data/ext/swfmill/src/swft/SVGStyle.h +80 -0
  93. data/ext/swfmill/src/swft/SVGTransformParser.cpp +72 -0
  94. data/ext/swfmill/src/swft/SVGTransformParser.h +32 -0
  95. data/ext/swfmill/src/swft/readpng.c +305 -0
  96. data/ext/swfmill/src/swft/readpng.h +92 -0
  97. data/ext/swfmill/src/swft/swft.cpp +251 -0
  98. data/ext/swfmill/src/swft/swft.h +64 -0
  99. data/ext/swfmill/src/swft/swft_document.cpp +57 -0
  100. data/ext/swfmill/src/swft/swft_import.cpp +38 -0
  101. data/ext/swfmill/src/swft/swft_import_binary.cpp +82 -0
  102. data/ext/swfmill/src/swft/swft_import_jpeg.cpp +255 -0
  103. data/ext/swfmill/src/swft/swft_import_mp3.cpp +268 -0
  104. data/ext/swfmill/src/swft/swft_import_png.cpp +231 -0
  105. data/ext/swfmill/src/swft/swft_import_ttf.cpp +519 -0
  106. data/ext/swfmill/src/swft/swft_import_wav.cpp +255 -0
  107. data/ext/swfmill/src/swft/swft_path.cpp +178 -0
  108. data/ext/swfmill/src/xslt/Makefile.am +51 -0
  109. data/ext/swfmill/src/xslt/Makefile.in +536 -0
  110. data/ext/swfmill/src/xslt/README +19 -0
  111. data/ext/swfmill/src/xslt/assemble.xsl +38 -0
  112. data/ext/swfmill/src/xslt/simple-deprecated.xslt +62 -0
  113. data/ext/swfmill/src/xslt/simple-elements.xslt +627 -0
  114. data/ext/swfmill/src/xslt/simple-import.xslt +565 -0
  115. data/ext/swfmill/src/xslt/simple-svg.xslt +383 -0
  116. data/ext/swfmill/src/xslt/simple-tools.xslt +255 -0
  117. data/ext/swfmill/src/xslt/simple.cpp +1686 -0
  118. data/ext/swfmill/src/xslt/simple.xml +7 -0
  119. data/ext/swfmill/src/xslt/xslt.h +7 -0
  120. data/ext/swfmill/test/Makefile.am +1 -0
  121. data/ext/swfmill/test/Makefile.in +490 -0
  122. data/ext/swfmill/test/xml/Makefile.am +20 -0
  123. data/ext/swfmill/test/xml/Makefile.in +353 -0
  124. data/ext/swfmill/test/xml/test-xml +21 -0
  125. data/ext/swfmill_ext.cc +375 -0
  126. data/lib/swfmill.rb +30 -0
  127. data/spec/data/swfmill-banner1.swf +0 -0
  128. data/spec/spec.opts +1 -0
  129. data/spec/spec_helper.rb +14 -0
  130. data/spec/swfmill_spec.rb +125 -0
  131. metadata +206 -0
@@ -0,0 +1,367 @@
1
+ #! /bin/sh
2
+ # Common stub for a few missing GNU programs while installing.
3
+
4
+ scriptversion=2006-05-10.23
5
+
6
+ # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
7
+ # Free Software Foundation, Inc.
8
+ # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
9
+
10
+ # This program is free software; you can redistribute it and/or modify
11
+ # it under the terms of the GNU General Public License as published by
12
+ # the Free Software Foundation; either version 2, or (at your option)
13
+ # any later version.
14
+
15
+ # This program is distributed in the hope that it will be useful,
16
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ # GNU General Public License for more details.
19
+
20
+ # You should have received a copy of the GNU General Public License
21
+ # along with this program; if not, write to the Free Software
22
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23
+ # 02110-1301, USA.
24
+
25
+ # As a special exception to the GNU General Public License, if you
26
+ # distribute this file as part of a program that contains a
27
+ # configuration script generated by Autoconf, you may include it under
28
+ # the same distribution terms that you use for the rest of that program.
29
+
30
+ if test $# -eq 0; then
31
+ echo 1>&2 "Try \`$0 --help' for more information"
32
+ exit 1
33
+ fi
34
+
35
+ run=:
36
+ sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
37
+ sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
38
+
39
+ # In the cases where this matters, `missing' is being run in the
40
+ # srcdir already.
41
+ if test -f configure.ac; then
42
+ configure_ac=configure.ac
43
+ else
44
+ configure_ac=configure.in
45
+ fi
46
+
47
+ msg="missing on your system"
48
+
49
+ case $1 in
50
+ --run)
51
+ # Try to run requested program, and just exit if it succeeds.
52
+ run=
53
+ shift
54
+ "$@" && exit 0
55
+ # Exit code 63 means version mismatch. This often happens
56
+ # when the user try to use an ancient version of a tool on
57
+ # a file that requires a minimum version. In this case we
58
+ # we should proceed has if the program had been absent, or
59
+ # if --run hadn't been passed.
60
+ if test $? = 63; then
61
+ run=:
62
+ msg="probably too old"
63
+ fi
64
+ ;;
65
+
66
+ -h|--h|--he|--hel|--help)
67
+ echo "\
68
+ $0 [OPTION]... PROGRAM [ARGUMENT]...
69
+
70
+ Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
71
+ error status if there is no known handling for PROGRAM.
72
+
73
+ Options:
74
+ -h, --help display this help and exit
75
+ -v, --version output version information and exit
76
+ --run try to run the given command, and emulate it if it fails
77
+
78
+ Supported PROGRAM values:
79
+ aclocal touch file \`aclocal.m4'
80
+ autoconf touch file \`configure'
81
+ autoheader touch file \`config.h.in'
82
+ autom4te touch the output file, or create a stub one
83
+ automake touch all \`Makefile.in' files
84
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
85
+ flex create \`lex.yy.c', if possible, from existing .c
86
+ help2man touch the output file
87
+ lex create \`lex.yy.c', if possible, from existing .c
88
+ makeinfo touch the output file
89
+ tar try tar, gnutar, gtar, then tar without non-portable flags
90
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
91
+
92
+ Send bug reports to <bug-automake@gnu.org>."
93
+ exit $?
94
+ ;;
95
+
96
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
97
+ echo "missing $scriptversion (GNU Automake)"
98
+ exit $?
99
+ ;;
100
+
101
+ -*)
102
+ echo 1>&2 "$0: Unknown \`$1' option"
103
+ echo 1>&2 "Try \`$0 --help' for more information"
104
+ exit 1
105
+ ;;
106
+
107
+ esac
108
+
109
+ # Now exit if we have it, but it failed. Also exit now if we
110
+ # don't have it and --version was passed (most likely to detect
111
+ # the program).
112
+ case $1 in
113
+ lex|yacc)
114
+ # Not GNU programs, they don't have --version.
115
+ ;;
116
+
117
+ tar)
118
+ if test -n "$run"; then
119
+ echo 1>&2 "ERROR: \`tar' requires --run"
120
+ exit 1
121
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
122
+ exit 1
123
+ fi
124
+ ;;
125
+
126
+ *)
127
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
128
+ # We have it, but it failed.
129
+ exit 1
130
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
131
+ # Could not run --version or --help. This is probably someone
132
+ # running `$TOOL --version' or `$TOOL --help' to check whether
133
+ # $TOOL exists and not knowing $TOOL uses missing.
134
+ exit 1
135
+ fi
136
+ ;;
137
+ esac
138
+
139
+ # If it does not exist, or fails to run (possibly an outdated version),
140
+ # try to emulate it.
141
+ case $1 in
142
+ aclocal*)
143
+ echo 1>&2 "\
144
+ WARNING: \`$1' is $msg. You should only need it if
145
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
146
+ to install the \`Automake' and \`Perl' packages. Grab them from
147
+ any GNU archive site."
148
+ touch aclocal.m4
149
+ ;;
150
+
151
+ autoconf)
152
+ echo 1>&2 "\
153
+ WARNING: \`$1' is $msg. You should only need it if
154
+ you modified \`${configure_ac}'. You might want to install the
155
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
156
+ archive site."
157
+ touch configure
158
+ ;;
159
+
160
+ autoheader)
161
+ echo 1>&2 "\
162
+ WARNING: \`$1' is $msg. You should only need it if
163
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
164
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
165
+ from any GNU archive site."
166
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
167
+ test -z "$files" && files="config.h"
168
+ touch_files=
169
+ for f in $files; do
170
+ case $f in
171
+ *:*) touch_files="$touch_files "`echo "$f" |
172
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
173
+ *) touch_files="$touch_files $f.in";;
174
+ esac
175
+ done
176
+ touch $touch_files
177
+ ;;
178
+
179
+ automake*)
180
+ echo 1>&2 "\
181
+ WARNING: \`$1' is $msg. You should only need it if
182
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
183
+ You might want to install the \`Automake' and \`Perl' packages.
184
+ Grab them from any GNU archive site."
185
+ find . -type f -name Makefile.am -print |
186
+ sed 's/\.am$/.in/' |
187
+ while read f; do touch "$f"; done
188
+ ;;
189
+
190
+ autom4te)
191
+ echo 1>&2 "\
192
+ WARNING: \`$1' is needed, but is $msg.
193
+ You might have modified some files without having the
194
+ proper tools for further handling them.
195
+ You can get \`$1' as part of \`Autoconf' from any GNU
196
+ archive site."
197
+
198
+ file=`echo "$*" | sed -n "$sed_output"`
199
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
200
+ if test -f "$file"; then
201
+ touch $file
202
+ else
203
+ test -z "$file" || exec >$file
204
+ echo "#! /bin/sh"
205
+ echo "# Created by GNU Automake missing as a replacement of"
206
+ echo "# $ $@"
207
+ echo "exit 0"
208
+ chmod +x $file
209
+ exit 1
210
+ fi
211
+ ;;
212
+
213
+ bison|yacc)
214
+ echo 1>&2 "\
215
+ WARNING: \`$1' $msg. You should only need it if
216
+ you modified a \`.y' file. You may need the \`Bison' package
217
+ in order for those modifications to take effect. You can get
218
+ \`Bison' from any GNU archive site."
219
+ rm -f y.tab.c y.tab.h
220
+ if test $# -ne 1; then
221
+ eval LASTARG="\${$#}"
222
+ case $LASTARG in
223
+ *.y)
224
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
225
+ if test -f "$SRCFILE"; then
226
+ cp "$SRCFILE" y.tab.c
227
+ fi
228
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
229
+ if test -f "$SRCFILE"; then
230
+ cp "$SRCFILE" y.tab.h
231
+ fi
232
+ ;;
233
+ esac
234
+ fi
235
+ if test ! -f y.tab.h; then
236
+ echo >y.tab.h
237
+ fi
238
+ if test ! -f y.tab.c; then
239
+ echo 'main() { return 0; }' >y.tab.c
240
+ fi
241
+ ;;
242
+
243
+ lex|flex)
244
+ echo 1>&2 "\
245
+ WARNING: \`$1' is $msg. You should only need it if
246
+ you modified a \`.l' file. You may need the \`Flex' package
247
+ in order for those modifications to take effect. You can get
248
+ \`Flex' from any GNU archive site."
249
+ rm -f lex.yy.c
250
+ if test $# -ne 1; then
251
+ eval LASTARG="\${$#}"
252
+ case $LASTARG in
253
+ *.l)
254
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
255
+ if test -f "$SRCFILE"; then
256
+ cp "$SRCFILE" lex.yy.c
257
+ fi
258
+ ;;
259
+ esac
260
+ fi
261
+ if test ! -f lex.yy.c; then
262
+ echo 'main() { return 0; }' >lex.yy.c
263
+ fi
264
+ ;;
265
+
266
+ help2man)
267
+ echo 1>&2 "\
268
+ WARNING: \`$1' is $msg. You should only need it if
269
+ you modified a dependency of a manual page. You may need the
270
+ \`Help2man' package in order for those modifications to take
271
+ effect. You can get \`Help2man' from any GNU archive site."
272
+
273
+ file=`echo "$*" | sed -n "$sed_output"`
274
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
275
+ if test -f "$file"; then
276
+ touch $file
277
+ else
278
+ test -z "$file" || exec >$file
279
+ echo ".ab help2man is required to generate this page"
280
+ exit 1
281
+ fi
282
+ ;;
283
+
284
+ makeinfo)
285
+ echo 1>&2 "\
286
+ WARNING: \`$1' is $msg. You should only need it if
287
+ you modified a \`.texi' or \`.texinfo' file, or any other file
288
+ indirectly affecting the aspect of the manual. The spurious
289
+ call might also be the consequence of using a buggy \`make' (AIX,
290
+ DU, IRIX). You might want to install the \`Texinfo' package or
291
+ the \`GNU make' package. Grab either from any GNU archive site."
292
+ # The file to touch is that specified with -o ...
293
+ file=`echo "$*" | sed -n "$sed_output"`
294
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
295
+ if test -z "$file"; then
296
+ # ... or it is the one specified with @setfilename ...
297
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
298
+ file=`sed -n '
299
+ /^@setfilename/{
300
+ s/.* \([^ ]*\) *$/\1/
301
+ p
302
+ q
303
+ }' $infile`
304
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
305
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
306
+ fi
307
+ # If the file does not exist, the user really needs makeinfo;
308
+ # let's fail without touching anything.
309
+ test -f $file || exit 1
310
+ touch $file
311
+ ;;
312
+
313
+ tar)
314
+ shift
315
+
316
+ # We have already tried tar in the generic part.
317
+ # Look for gnutar/gtar before invocation to avoid ugly error
318
+ # messages.
319
+ if (gnutar --version > /dev/null 2>&1); then
320
+ gnutar "$@" && exit 0
321
+ fi
322
+ if (gtar --version > /dev/null 2>&1); then
323
+ gtar "$@" && exit 0
324
+ fi
325
+ firstarg="$1"
326
+ if shift; then
327
+ case $firstarg in
328
+ *o*)
329
+ firstarg=`echo "$firstarg" | sed s/o//`
330
+ tar "$firstarg" "$@" && exit 0
331
+ ;;
332
+ esac
333
+ case $firstarg in
334
+ *h*)
335
+ firstarg=`echo "$firstarg" | sed s/h//`
336
+ tar "$firstarg" "$@" && exit 0
337
+ ;;
338
+ esac
339
+ fi
340
+
341
+ echo 1>&2 "\
342
+ WARNING: I can't seem to be able to run \`tar' with the given arguments.
343
+ You may want to install GNU tar or Free paxutils, or check the
344
+ command line arguments."
345
+ exit 1
346
+ ;;
347
+
348
+ *)
349
+ echo 1>&2 "\
350
+ WARNING: \`$1' is needed, and is $msg.
351
+ You might have modified some files without having the
352
+ proper tools for further handling them. Check the \`README' file,
353
+ it often tells you about the needed prerequisites for installing
354
+ this package. You may also peek at any GNU archive site, in case
355
+ some other package would contain this missing \`$1' program."
356
+ exit 1
357
+ ;;
358
+ esac
359
+
360
+ exit 0
361
+
362
+ # Local variables:
363
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
364
+ # time-stamp-start: "scriptversion="
365
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
366
+ # time-stamp-end: "$"
367
+ # End:
@@ -0,0 +1,107 @@
1
+ #include "Geom.h"
2
+
3
+ #define TMP_STRLEN 0xff
4
+
5
+ namespace SWF {
6
+
7
+ Matrix::Matrix() {
8
+ identity();
9
+ }
10
+
11
+ Matrix::Matrix(double v11, double v12, double v13,
12
+ double v21, double v22, double v23,
13
+ double v31, double v32, double v33) {
14
+
15
+ values[0][0] = v11; values[0][1] = v12; values[0][2] = v13;
16
+ values[1][0] = v21; values[1][1] = v22; values[1][2] = v23;
17
+ values[2][0] = v31; values[2][1] = v32; values[2][2] = v33;
18
+ }
19
+
20
+ void Matrix::identity() {
21
+ values[0][0] = 1; values[0][1] = 0; values[0][2] = 0;
22
+ values[1][0] = 0; values[1][1] = 1; values[1][2] = 0;
23
+ values[2][0] = 0; values[2][1] = 0; values[2][2] = 1;
24
+ }
25
+
26
+ void Matrix::translate(double tx, double ty) {
27
+ Matrix t(1, 0, tx,
28
+ 0, 1, ty,
29
+ 0, 0, 1);
30
+ (*this) *= t;
31
+ }
32
+
33
+ void Matrix::scale(double sx, double sy) {
34
+ Matrix t(sx, 0, 0,
35
+ 0, sy, 0,
36
+ 0, 0, 1);
37
+ (*this) *= t;
38
+ }
39
+
40
+ void Matrix::scale(double s) {
41
+ scale(s, s);
42
+ }
43
+
44
+ void Matrix::rotate(double a) {
45
+ Matrix t(cos(a), -sin(a), 0,
46
+ sin(a), cos(a), 0,
47
+ 0, 0, 1);
48
+ (*this) *= t;
49
+ }
50
+
51
+ void Matrix::skewX(double a) {
52
+ Matrix t(1, tan(a), 0,
53
+ 0, 1, 0,
54
+ 0, 0, 1);
55
+ (*this) *= t;
56
+ }
57
+
58
+ void Matrix::skewY(double a) {
59
+ Matrix t( 1, 0, 0,
60
+ tan(a), 1, 0,
61
+ 0, 0, 1);
62
+ (*this) *= t;
63
+ }
64
+
65
+ Matrix& Matrix::operator*=(const Matrix &m) {
66
+ *this = *this * m;
67
+ return *this;
68
+ }
69
+
70
+ Matrix Matrix::operator*(const Matrix &m) {
71
+ return Matrix(values[0][0] * m.values[0][0] + values[0][1] * m.values[1][0] + values[0][2] * m.values[2][0],
72
+ values[0][0] * m.values[0][1] + values[0][1] * m.values[1][1] + values[0][2] * m.values[2][1],
73
+ values[0][0] * m.values[0][2] + values[0][1] * m.values[1][2] + values[0][2] * m.values[2][2],
74
+ values[1][0] * m.values[0][0] + values[1][1] * m.values[1][0] + values[1][2] * m.values[2][0],
75
+ values[1][0] * m.values[0][1] + values[1][1] * m.values[1][1] + values[1][2] * m.values[2][1],
76
+ values[1][0] * m.values[0][2] + values[1][1] * m.values[1][2] + values[1][2] * m.values[2][2],
77
+ values[2][0] * m.values[0][0] + values[2][1] * m.values[1][0] + values[2][2] * m.values[2][0],
78
+ values[2][0] * m.values[0][1] + values[2][1] * m.values[1][1] + values[2][2] * m.values[2][1],
79
+ values[2][0] * m.values[0][2] + values[2][1] * m.values[1][2] + values[2][2] * m.values[2][2]);
80
+ }
81
+
82
+ double Matrix::getValue(int row, int col) {
83
+ if(row >= 0 && row <= 2 && col >=0 && col <= 2) {
84
+ return values[row][col];
85
+ } else {
86
+ return 0;
87
+ }
88
+ }
89
+
90
+ void Matrix::setXMLProps(xmlNodePtr node) {
91
+ char tmp[TMP_STRLEN];
92
+
93
+ snprintf(tmp,TMP_STRLEN,"%f", values[1][0]);
94
+ xmlSetProp(node, (const xmlChar *)"skewX", (const xmlChar *)&tmp );
95
+ snprintf(tmp,TMP_STRLEN,"%f", values[0][1]);
96
+ xmlSetProp(node, (const xmlChar *)"skewY", (const xmlChar *)&tmp );
97
+ snprintf(tmp,TMP_STRLEN,"%f", values[0][0]);
98
+ xmlSetProp(node, (const xmlChar *)"scaleX", (const xmlChar *)&tmp );
99
+ snprintf(tmp,TMP_STRLEN,"%f", values[1][1]);
100
+ xmlSetProp(node, (const xmlChar *)"scaleY", (const xmlChar *)&tmp );
101
+ snprintf(tmp,TMP_STRLEN,"%f", values[0][2]);
102
+ xmlSetProp(node, (const xmlChar *)"transX", (const xmlChar *)&tmp );
103
+ snprintf(tmp,TMP_STRLEN,"%f", values[1][2]);
104
+ xmlSetProp(node, (const xmlChar *)"transY", (const xmlChar *)&tmp );
105
+ }
106
+
107
+ }