diff --git a/extensions/image-preview/media/main.js b/extensions/image-preview/media/main.js index 34c9708df99b5eed81c647ef212f79ab4e39cc7a..ce794d2293214fad67a8a0efa9b07c4ff416fcdb 100644 --- a/extensions/image-preview/media/main.js +++ b/extensions/image-preview/media/main.js @@ -70,6 +70,7 @@ let ctrlPressed = false; let altPressed = false; let hasLoadedImage = false; + let consumeClick = false; // Elements const container = document.body; @@ -116,6 +117,18 @@ }); } + function changeActive(value) { + if (value) { + container.classList.add('zoom-in'); + consumeClick = true; + } else { + ctrlPressed = false; + altPressed = false; + container.classList.remove('zoom-out'); + container.classList.remove('zoom-in'); + } + } + function firstZoom() { if (!image || !hasLoadedImage) { return; @@ -152,6 +165,18 @@ } }); + container.addEventListener('mousedown', (/** @type {MouseEvent} */ e) => { + if (!image || !hasLoadedImage) { + return; + } + + if (e.button !== 0) { + return; + } + + consumeClick = false; + }); + container.addEventListener('click', (/** @type {MouseEvent} */ e) => { if (!image || !hasLoadedImage) { return; @@ -161,6 +186,18 @@ return; } + ctrlPressed = e.ctrlKey; + altPressed = e.altKey; + + if (isMac ? altPressed : ctrlPressed) { + container.classList.remove('zoom-in'); + container.classList.add('zoom-out'); + } + + if (consumeClick) { + consumeClick = false; + return; + } // left click if (scale === 'fit') { firstZoom(); @@ -218,7 +255,6 @@ }); container.classList.add('image'); - container.classList.add('zoom-in'); image.classList.add('scale-to-fit'); @@ -254,6 +290,9 @@ case 'setScale': updateScale(e.data.scale); break; + case 'setActive': + changeActive(e.data.value); + break; } }); }()); diff --git a/extensions/image-preview/src/preview.ts b/extensions/image-preview/src/preview.ts index 2d5963adc1b4626ba350e17e1e81632726e17f5f..329c0b5e5000e1e883a02932da43ea4592f26fc6 100644 --- a/extensions/image-preview/src/preview.ts +++ b/extensions/image-preview/src/preview.ts @@ -120,6 +120,7 @@ export class Preview extends Disposable { } this._previewState = PreviewState.Visible; } + this.webviewEditor.webview.postMessage({ type: 'setActive', value: this.webviewEditor.active }); } private getWebiewContents(): string {