@@ -8,6 +8,8 @@ const orientations = {
8
8
'8' : 270
9
9
} ;
10
10
11
+ const RENDER_RATIO = 0.96 ;
12
+
11
13
const getBlob = ( canvas , { mime = 'image/png' , quality = 1 } = { } ) => {
12
14
return new Promise ( ( resolve , reject ) => {
13
15
try {
@@ -40,6 +42,7 @@ export default async ({ events, mover, load }) => {
40
42
load ( './image-draw.js' )
41
43
] ) ;
42
44
45
+ const mainDisplay = document . querySelector ( '.main' ) ;
43
46
const renderer = document . querySelector ( '.renderer' ) ;
44
47
const hiddenImg = document . querySelector ( '.hidden-image' ) ;
45
48
const canvas = document . querySelector ( '#canvas' ) ;
@@ -49,6 +52,22 @@ export default async ({ events, mover, load }) => {
49
52
let width ;
50
53
let height ;
51
54
55
+ const onUpdateSize = ( ) => {
56
+ const mainBB = mainDisplay . getBoundingClientRect ( ) ;
57
+ const widthMax = Math . min ( canvas . width , mainBB . width * RENDER_RATIO ) ;
58
+ const heightMax = Math . min ( canvas . height , mainBB . height * RENDER_RATIO ) ;
59
+
60
+ if ( canvas . height * widthMax / canvas . width > heightMax ) {
61
+ canvas . style . height = `${ heightMax } px` ;
62
+ canvas . style . width = 'auto' ;
63
+ } else if ( widthMax < canvas . width ) {
64
+ canvas . style . height = 'auto' ;
65
+ canvas . style . width = `${ widthMax } px` ;
66
+ } else {
67
+ canvas . style . width = canvas . style . height = 'auto' ;
68
+ }
69
+ } ;
70
+
52
71
const onUpdate = ( ( ) => {
53
72
let url ;
54
73
@@ -58,6 +77,8 @@ export default async ({ events, mover, load }) => {
58
77
url = null ;
59
78
}
60
79
80
+ onUpdateSize ( ) ;
81
+
61
82
try {
62
83
url = URL . createObjectURL ( await getBlob ( canvas , exportQuality ) ) ;
63
84
await loadUrl ( hiddenImg , url ) ;
@@ -217,6 +238,7 @@ export default async ({ events, mover, load }) => {
217
238
events . on ( 'controls-done' , onDone ) ;
218
239
events . on ( 'controls-cancel' , onCancel ) ;
219
240
events . on ( 'controls-undo' , onUndo ) ;
241
+ events . on ( 'window-resize' , onUpdateSize ) ;
220
242
221
243
return function destroy ( ) {
222
244
events . off ( 'file-load' , onFile ) ;
@@ -229,5 +251,6 @@ export default async ({ events, mover, load }) => {
229
251
events . off ( 'controls-done' , onDone ) ;
230
252
events . off ( 'controls-cancel' , onCancel ) ;
231
253
events . off ( 'controls-undo' , onUndo ) ;
254
+ events . off ( 'window-resize' , onUpdateSize ) ;
232
255
} ;
233
256
} ;
0 commit comments