Skip to content

Commit 16022b8

Browse files
committed
Merge pull request niklasvh#92 from bdkzero/master
Support for other renderers than Canvas and fixed image rendering in SVG renderer
2 parents 1ad7ed3 + 17f4701 commit 16022b8

File tree

6 files changed

+92
-20
lines changed

6 files changed

+92
-20
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
image.jpg
1010
/.project
1111
/.settings/
12+
.envrc

build.xml

Lines changed: 71 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,27 @@
2222
<file name="Queue.js"/>
2323
<file name="Renderer.js"/>
2424
<file name="Util.js"/>
25-
<file name="renderers/Canvas.js"/>
25+
<file name="renderers/Canvas.js"/>
2626
<file name="html2canvas-post.txt"/>
27-
</filelist>
28-
</path>
27+
</filelist>
28+
</path>
29+
30+
<path id="sourcefiles-allrends">
31+
<filelist dir="${src.dir}">
32+
<file name="LICENSE"/>
33+
<file name="html2canvas-pre.txt"/>
34+
<file name="Core.js"/>
35+
<file name="Generate.js"/>
36+
<file name="Parse.js"/>
37+
<file name="Preload.js"/>
38+
<file name="Queue.js"/>
39+
<file name="Renderer.js"/>
40+
<file name="Util.js"/>
41+
<file name="renderers/Canvas.js"/>
42+
<file name="renderers/SVG.js"/>
43+
<file name="html2canvas-post.txt"/>
44+
</filelist>
45+
</path>
2946

3047
<path id="jquery-plugin">
3148
<fileset dir="${src.dir}" includes="LICENSE"/>
@@ -46,11 +63,21 @@
4663
</target>
4764

4865
<pathconvert property="prettty-sourcefiles" pathsep="${line.separator}" refid="sourcefiles"></pathconvert>
66+
67+
<pathconvert property="prettty-sourcefiles-allrends" pathsep="${line.separator}" refid="sourcefiles-allrends"></pathconvert>
4968

5069
<target name="build" depends="build-dir,plugins">
5170
<echo>Concatenating files:${line.separator}${prettty-sourcefiles}${line.separator}into ${build.dir}/${JS_NAME}...</echo>
52-
<concat fixlastline="yes" destfile="${build.dir}/${JS_NAME}">
53-
<path refid="sourcefiles"/>
71+
<concat fixlastline="yes" destfile="${build.dir}/${JS_NAME}">
72+
<path refid="sourcefiles"/>
73+
</concat>
74+
<replaceregexp match="@VERSION@" replace="${version}" flags="g" byline="true" file="${build.dir}/${JS_NAME}" />
75+
</target>
76+
77+
<target name="build-allrends" depends="build-dir,plugins">
78+
<echo>Concatenating files:${line.separator}${prettty-sourcefiles-allrends}${line.separator}into ${build.dir}/${JS_NAME}...</echo>
79+
<concat fixlastline="yes" destfile="${build.dir}/${JS_NAME}">
80+
<path refid="sourcefiles-allrends"/>
5481
</concat>
5582
<replaceregexp match="@VERSION@" replace="${version}" flags="g" byline="true" file="${build.dir}/${JS_NAME}" />
5683
</target>
@@ -75,7 +102,31 @@
75102
<file name="Queue.js"/>
76103
<file name="Renderer.js"/>
77104
<file name="Util.js"/>
78-
<file name="renderers/Canvas.js"/>
105+
<file name="renderers/Canvas.js"/>
106+
</sources>
107+
</jscomp>
108+
<delete file="${build.dir}/${JS_NAME_MIN}.tmp"></delete>
109+
</target>
110+
111+
<target name="syntaxcheck-allrends" depends="build-dir,build-allrends">
112+
<jscomp compilationLevel="simple" warning="verbose"
113+
debug="false"
114+
output="${build.dir}/${JS_NAME_MIN}.tmp">
115+
<externs dir="${lib.dir}">
116+
<file name="${jquery-externs}"/>
117+
</externs>
118+
<sources dir="${src.dir}">
119+
<!-- need to write them again here since the closure compiler doesn't understand filesets,... -->
120+
<file name="LICENSE"/>
121+
<file name="Core.js"/>
122+
<file name="Generate.js"/>
123+
<file name="Parse.js"/>
124+
<file name="Preload.js"/>
125+
<file name="Queue.js"/>
126+
<file name="Renderer.js"/>
127+
<file name="Util.js"/>
128+
<file name="renderers/Canvas.js"/>
129+
<file name="renderers/SVG.js"/>
79130
</sources>
80131
</jscomp>
81132
<delete file="${build.dir}/${JS_NAME_MIN}.tmp"></delete>
@@ -95,6 +146,20 @@
95146
<replaceregexp match="@VERSION@" replace="${version}" flags="g" byline="true" file="${build.dir}/${JS_NAME_MIN}" />
96147
</target>
97148

149+
<target name="release-allrends" depends="build-dir,build-allrends,syntaxcheck-allrends">
150+
<jscomp compilationLevel="simple" warning="verbose"
151+
debug="false"
152+
output="${build.dir}/${JS_NAME_MIN}">
153+
<externs dir="${lib.dir}">
154+
<file name="${jquery-externs}"/>
155+
</externs>
156+
<sources dir="${build.dir}">
157+
<file name="${JS_NAME}"/>
158+
</sources>
159+
</jscomp>
160+
<replaceregexp match="@VERSION@" replace="${version}" flags="g" byline="true" file="${build.dir}/${JS_NAME_MIN}" />
161+
</target>
162+
98163
<target name="clean">
99164
<delete dir="${build.dir}"></delete>
100165
</target>

demo.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<html>
1+
<html>
22
<head>
33
<script type="text/javascript" src="external/jquery-1.6.2.min.js"></script>
44
<script type="text/javascript" src="build/html2canvas.js"></script>
@@ -2370,4 +2370,4 @@ <h2>Page heading</h2>
23702370
<div class="copyright">
23712371
&copy;Copyright Max Design 2010
23722372
</div>
2373-
</body></html>
2373+
</body></html>

src/Renderer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ _html2canvas.Renderer = function(parseQueue, options){
5858

5959

6060
sortZ(parseQueue.zIndex);
61-
if ( typeof options.renderer._create !== "function" ) {
61+
if ( typeof options._renderer._create !== "function" ) {
6262
throw new Error("Invalid renderer defined");
6363
}
64-
return options.renderer._create( parseQueue, options, document, queue, _html2canvas );
64+
return options._renderer._create( parseQueue, options, document, queue, _html2canvas );
6565

6666
};

src/Util.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,20 @@ html2canvas = function( elements, opts ) {
3434
flashcanvas: undefined, // path to flashcanvas
3535
width: null,
3636
height: null,
37-
taintTest: true // do a taint test with all images before applying to canvas
38-
39-
};
37+
taintTest: true, // do a taint test with all images before applying to canvas
38+
renderer: "Canvas"
39+
}, renderer;
4040

4141
options = _html2canvas.Util.Extend(opts, options);
42-
43-
options.renderer = options.renderer || _html2canvas.Renderer.Canvas( options );
44-
42+
43+
if (typeof options.renderer === "string" && _html2canvas.Renderer[options.renderer] !== undefined) {
44+
options._renderer = _html2canvas.Renderer[options.renderer]( options );
45+
} else if (typeof options.renderer === "function") {
46+
options._renderer = options.renderer( options );
47+
} else {
48+
throw("Unknown renderer");
49+
}
50+
4551
_html2canvas.logging = options.logging;
4652
options.complete = function( images ) {
4753

src/renderers/SVG.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,10 @@ _html2canvas.Renderer.SVG = function( options ) {
135135

136136
el = doc.createElementNS(svgNS, "image");
137137
el.setAttributeNS(xlinkNS, "xlink:href", renderItem['arguments'][0].src);
138-
el.setAttribute("width", renderItem['arguments'][0].width);
139-
el.setAttribute("height", renderItem['arguments'][0].height);
140-
el.setAttribute("x", renderItem['arguments'][5] - renderItem['arguments'][1]);
141-
el.setAttribute("y", renderItem['arguments'][6] - renderItem['arguments'][2]);
138+
el.setAttribute("width", renderItem['arguments'][7]);
139+
el.setAttribute("height", renderItem['arguments'][8]);
140+
el.setAttribute("x", renderItem['arguments'][5]);
141+
el.setAttribute("y", renderItem['arguments'][6]);
142142
el.setAttribute("clip-path", "url(#clipId" + clipId + ")");
143143
// el.setAttribute("xlink:href", );
144144

0 commit comments

Comments
 (0)