From 5b7bcb5fbae358293a5576e925e2cf84b7d02d28 Mon Sep 17 00:00:00 2001 From: ZXY101 Date: Fri, 22 Sep 2023 06:45:24 +0200 Subject: [PATCH] Page num utils, testing zoom functions --- src/lib/components/NavBar.svelte | 8 +++- src/lib/components/Reader/Reader.svelte | 53 +++++++++++++++++++++-- src/lib/panzoom/util.ts | 56 ++++++++++++++++++++++++- 3 files changed, 110 insertions(+), 7 deletions(-) diff --git a/src/lib/components/NavBar.svelte b/src/lib/components/NavBar.svelte index 8657c12..d9bb838 100644 --- a/src/lib/components/NavBar.svelte +++ b/src/lib/components/NavBar.svelte @@ -11,6 +11,10 @@ let uploadModalOpen = false; let isReader = false; + function openSettings() { + settingsHidden = false; + } + afterNavigate(() => { isReader = $page.route.id === '/[manga]/[volume]'; @@ -28,13 +32,13 @@ Mokuro
- (settingsHidden = false)} /> + (uploadModalOpen = true)} />
{#if isReader}
{#if !$settings.singlePageView && index + 1 < pages.length} @@ -64,4 +104,9 @@ on:mouseup={right} class="right-0 top-0 absolute h-full" /> +
+ + + +
{/if} diff --git a/src/lib/panzoom/util.ts b/src/lib/panzoom/util.ts index c83655b..36a4692 100644 --- a/src/lib/panzoom/util.ts +++ b/src/lib/panzoom/util.ts @@ -20,7 +20,20 @@ export function initPanzoom(node: HTMLElement) { return nodeName === 'P'; }, beforeWheel: (e) => e.altKey, - onTouch: (e) => e.touches.length > 1 + onTouch: (e) => e.touches.length > 1, + // Panzoom typing is wrong here + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + filterKey: (e: any) => { + if ( + e.key === 'ArrowLeft' || + e.key === 'ArrowRight' || + e.key === 'ArrowUp' || + e.key === 'ArrowDown' + ) { + return true; + } + } }); panzoomStore.set(pz) @@ -72,4 +85,45 @@ export function zoomOriginal() { pz?.moveTo(0, 0); pz?.zoomTo(0, 0, 1 / pz.getTransform().scale); panAlign('center', 'center'); +} + +export function zoomFitToWidth() { + if (!pz || !container) { + return + } + const { innerWidth } = window + + const scale = + (1 / pz.getTransform().scale) * (innerWidth / container.offsetWidth); + pz.moveTo(0, 0); + pz.zoomTo(0, 0, scale); + panAlign('center', 'top'); +} + +export function zoomFitToScreen() { + if (!pz || !container) { + return + } + const { innerWidth, innerHeight } = window + const scaleX = innerWidth / container.offsetWidth; + const scaleY = innerHeight / container.offsetHeight; + const scale = + (1 / pz.getTransform().scale) * Math.min(scaleX, scaleY); + pz.moveTo(0, 0); + pz.zoomTo(0, 0, scale); + panAlign('center', 'center'); +} + +export function zoomDefault(zoomDefault: any) { + switch (zoomDefault) { + case 'fit to screen': + zoomFitToScreen(); + break; + case 'fit to width': + zoomFitToWidth(); + break; + case 'original size': + zoomOriginal(); + break; + } } \ No newline at end of file