Skip to content

Commit 8d3fd30

Browse files
authored
Merge pull request #43 from catdad-experiments/#40-image-positioning
setting canvas style size to allow for correct positioning
2 parents c3899df + afe0834 commit 8d3fd30

File tree

3 files changed

+31
-5
lines changed

3 files changed

+31
-5
lines changed

src/image.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ const orientations = {
88
'8': 270
99
};
1010

11+
const RENDER_RATIO = 0.96;
12+
1113
const getBlob = (canvas, { mime = 'image/png', quality = 1 } = {}) => {
1214
return new Promise((resolve, reject) => {
1315
try {
@@ -40,6 +42,7 @@ export default async ({ events, mover, load }) => {
4042
load('./image-draw.js')
4143
]);
4244

45+
const mainDisplay = document.querySelector('.main');
4346
const renderer = document.querySelector('.renderer');
4447
const hiddenImg = document.querySelector('.hidden-image');
4548
const canvas = document.querySelector('#canvas');
@@ -49,6 +52,22 @@ export default async ({ events, mover, load }) => {
4952
let width;
5053
let height;
5154

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+
5271
const onUpdate = (() => {
5372
let url;
5473

@@ -58,6 +77,8 @@ export default async ({ events, mover, load }) => {
5877
url = null;
5978
}
6079

80+
onUpdateSize();
81+
6182
try {
6283
url = URL.createObjectURL(await getBlob(canvas, exportQuality));
6384
await loadUrl(hiddenImg, url);
@@ -217,6 +238,7 @@ export default async ({ events, mover, load }) => {
217238
events.on('controls-done', onDone);
218239
events.on('controls-cancel', onCancel);
219240
events.on('controls-undo', onUndo);
241+
events.on('window-resize', onUpdateSize);
220242

221243
return function destroy() {
222244
events.off('file-load', onFile);
@@ -229,5 +251,6 @@ export default async ({ events, mover, load }) => {
229251
events.off('controls-done', onDone);
230252
events.off('controls-cancel', onCancel);
231253
events.off('controls-undo', onUndo);
254+
events.off('window-resize', onUpdateSize);
232255
};
233256
};

src/style.css

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,6 @@ html, body {
137137
.renderer {
138138
display: block;
139139
position: relative;
140-
max-width: 96%;
141-
max-height: 96%;
142140
}
143141

144142
.hidden-image {

src/window-size.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
export default () => {
1+
export default ({ events }) => {
22
// vh style hack for smartphone address bar issues
33
// https://css-tricks.com/the-trick-to-viewport-units-on-mobile/
44
let height = 0;
55

6-
const onResize = () => {
6+
const setVh = () => {
77
const temp = window.innerHeight;
88

99
if (height !== temp) {
@@ -12,7 +12,12 @@ export default () => {
1212
}
1313
};
1414

15-
onResize();
15+
const onResize = () => {
16+
setVh();
17+
events.emit('window-resize');
18+
};
19+
20+
setVh();
1621

1722
window.addEventListener('resize', onResize);
1823

0 commit comments

Comments
 (0)