Mercurial > hg > orthanc-stone
annotate Applications/StoneWebViewer/Resources/Graveyard/print.js @ 1609:5f5c549499ff
new class MacroSceneLayer
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 29 Oct 2020 17:01:29 +0100 |
parents | 4fb8fdf03314 |
children | 05b55b89a134 |
rev | line source |
---|---|
1589
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
1 /** |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
2 * Stone of Orthanc |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
5 * Copyright (C) 2017-2020 Osimis S.A., Belgium |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
6 * |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
7 * This program is free software: you can redistribute it and/or |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
8 * modify it under the terms of the GNU Affero General Public License |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
9 * as published by the Free Software Foundation, either version 3 of |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
10 * the License, or (at your option) any later version. |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
11 * |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, but |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
13 * WITHOUT ANY WARRANTY; without even the implied warranty of |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
15 * Affero General Public License for more details. |
1596
4fb8fdf03314
removed annoying whitespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1589
diff
changeset
|
16 * |
1589
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
17 * You should have received a copy of the GNU Affero General Public License |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
19 **/ |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
20 |
8c5f9864545f
adding missing headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1575
diff
changeset
|
21 |
1575 | 22 function beforePrint(event){ |
23 console.log('beforePrint'); | |
24 var $body = $('body'); | |
25 $body.addClass('print'); | |
26 | |
27 // because firefox does not support/executes codes after the cloned document as been rendered | |
28 // https://bugzilla.mozilla.org/show_bug.cgi?format=default&id=1048317 | |
29 // we cannot calculate using the good body size for the clone document | |
30 // so we have to hardcode the body width (meaning we can only renders in A4 in firefox); | |
31 var uaParser = new UAParser(); | |
32 var isFirefox = (uaParser.getBrowser().name === 'Firefox'); | |
33 var isIE = (uaParser.getBrowser().name === 'IE'); | |
34 var isEdge = (uaParser.getBrowser().name === 'Edge'); | |
35 console.log('ua parser', uaParser.getBrowser()); | |
36 if(isFirefox || isIE || isEdge){ | |
37 if (0) { | |
38 // This is Letter | |
39 $body.css('width', '8.5in'); | |
40 $body.css('height', '11in'); | |
41 } else { | |
42 // This is A4 | |
43 //$body.css('width', '210mm'); | |
44 //$body.css('height', '297mm'); | |
45 $body.css('width', '210mm'); | |
46 $body.css('height', '297mm'); // Setting "297mm" makes Firefox create 2 pages | |
47 } | |
48 | |
49 // console.log('html size', $html.width(), $html.height()); | |
50 } | |
51 | |
52 if(isIE){ | |
53 window.alert('GENERAL_PARAGRAPHS.INCOMPATIBLE_PRINT_BROWSER'); | |
54 } | |
55 | |
56 console.log('body size', $body.width(), $body.height()); | |
57 | |
58 var $splitpane = $('#viewport'); | |
59 var splitpaneSize = {width: $splitpane.width(), height: $splitpane.height()}; | |
60 console.log(splitpaneSize); | |
61 var panesCount = { | |
62 x: app.layoutCountX, | |
63 y: app.layoutCountY | |
64 } | |
65 | |
66 var panes = []; | |
67 $('#viewport canvas').each(function(key, value) { | |
68 if ($(value).is(':visible')) { | |
69 console.log(value); | |
70 panes.push(value); | |
71 } | |
72 }); | |
73 | |
74 console.log(panesCount); | |
75 | |
76 if (0){ | |
77 for(var i = 0; i < panes.length; i++){ | |
78 var canvas = panes[i]; | |
79 var paneSize = { | |
80 originalWidth: $(canvas).width(), //canvas.getBoundingClientRect().width, | |
81 originalHeight: $(canvas).height(), //canvas.getBoundingClientRect().height, | |
82 originalRatio: 0, | |
83 paneFinalWidth: splitpaneSize.width / panesCount.x, | |
84 paneFinalHeight: splitpaneSize.height / panesCount.y, | |
85 paneFinalRatio: 0, | |
86 canvasFinalWidth: 0, | |
87 canvasFinalHeight: 0, | |
88 canvasFinalRatio: 0 | |
89 }; | |
90 paneSize.originalRatio = paneSize.originalWidth / paneSize.originalHeight; | |
91 paneSize.paneFinalRatio = paneSize.paneFinalWidth / paneSize.paneFinalHeight; | |
92 | |
93 if(paneSize.paneFinalRatio > 1){ | |
94 // If pane width ratio means it's width is larger than it's height | |
95 if(paneSize.paneFinalRatio > paneSize.originalRatio){ | |
96 // the final pane is larger than the original | |
97 // So we should fit on the height to recalc the ratio | |
98 console.log('case 1'); | |
99 paneSize.canvasFinalHeight = paneSize.paneFinalHeight; | |
100 paneSize.canvasFinalWidth = paneSize.canvasFinalHeight * paneSize.originalRatio; // Then we calc the width according the ratio | |
101 } else { | |
102 // the final pane is higher than or equal to the original | |
103 // So we should fit on the width | |
104 console.log('case 2'); | |
105 paneSize.canvasFinalWidth = paneSize.paneFinalWidth; | |
106 paneSize.canvasFinalHeight = paneSize.canvasFinalWidth / paneSize.originalRatio; // Then we calc the width according the ratio | |
107 | |
108 } | |
109 } else { | |
110 // If pane width ratio means it's height is higher than it's height | |
111 if(paneSize.paneFinalRatio > paneSize.originalRatio){ | |
112 // the final pane is larger than the original | |
113 // So we should fit on the height to recalc the ratio | |
114 console.log('case 3'); | |
115 paneSize.canvasFinalHeight = paneSize.paneFinalHeight; | |
116 paneSize.canvasFinalWidth = paneSize.canvasFinalHeight * paneSize.originalRatio; // Then we calc the width according the ratio | |
117 } else { | |
118 // the final pane is higher than or equal to the original | |
119 // So we should fit on the width | |
120 console.log('case 4'); | |
121 paneSize.canvasFinalWidth = paneSize.paneFinalWidth; | |
122 paneSize.canvasFinalHeight = paneSize.canvasFinalWidth / paneSize.originalRatio; // Then we calc the width according the ratio | |
123 | |
124 } | |
125 } | |
126 | |
127 paneSize.canvasFinalRatio = paneSize.canvasFinalWidth / paneSize.canvasFinalHeight; | |
128 console.log('paneSizes:', paneSize, 'splitpaneSize:', splitpaneSize, 'panesCount:', panesCount); | |
129 //canvas.resizeCanvas(paneSize.canvasFinalWidth, paneSize.canvasFinalHeight); | |
130 //canvas.draw(); | |
131 | |
132 console.log(paneSize.canvasFinalWidth + ' ' + paneSize.canvasFinalHeight); | |
133 /*canvas.width = Math.round(paneSize.canvasFinalWidth); | |
134 canvas.height = Math.round(paneSize.canvasFinalHeight);*/ | |
135 | |
136 $(canvas).width(paneSize.canvasFinalWidth); | |
137 $(canvas).height(paneSize.canvasFinalHeight); | |
138 | |
139 | |
140 /* | |
141 https://stackoverflow.com/questions/27863783/javascript-canvas-disappears-after-changing-width | |
142 | |
143 var buffer = document.getElementById('buffer'); | |
144 var context = canvas.getContext('2d'); | |
145 console.log(context); | |
146 var bufferContext = buffer.getContext('2d'); | |
147 console.log(bufferContext); | |
148 | |
149 bufferContext.drawImage(canvas, 0, 0); //Make a copy of the canvas to hidden buffer | |
150 canvas.width = Math.round(paneSize.canvasFinalWidth); | |
151 canvas.height = Math.round(paneSize.canvasFinalHeight); | |
152 context.drawImage(buffer, 0, 0); */ | |
153 } | |
154 } | |
155 else { | |
156 for(var i = 0; i < panes.length; i++){ | |
157 var canvas = panes[i]; | |
158 $(canvas).width($(canvas).parent().width()); | |
159 $(canvas).height($(canvas).parent().height()); | |
160 } | |
161 } | |
162 | |
163 stone.AllViewportsUpdateSize(false); | |
164 $(window).trigger('resize'); // to force screen and canvas recalculation | |
165 }; | |
166 | |
167 function afterPrint(){ | |
168 console.log('afterprint'); | |
169 var $body = $('body'); | |
170 // var $html = $('html'); | |
171 $body.removeClass('print'); | |
172 $body.css('width', '100%'); | |
173 $body.css('height', '100%'); | |
174 $('#viewport canvas').css('width', '100%'); | |
175 $('#viewport canvas').css('height', '100%'); | |
176 stone.AllViewportsUpdateSize(false); | |
177 $(window).trigger('resize'); // to force screen and canvas recalculation | |
178 } | |
179 | |
180 window.addEventListener('beforeprint', function(event){ | |
181 beforePrint(event); | |
182 }); | |
183 | |
184 var printMedia = window.matchMedia('print'); | |
185 printMedia.addListener(function(mql) { | |
186 if(mql.matches) { | |
187 console.log('webkit equivalent of onbeforeprint'); | |
188 beforePrint(); | |
189 } | |
190 }); | |
191 | |
192 window.addEventListener('afterprint', function(){ | |
193 afterPrint(); | |
194 });$ | |
195 | |
196 /*vm.cancelPrintMode = function(){ | |
197 afterPrint(); | |
198 } | |
199 */ |