mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-29 08:46:55 +08:00
1 parent
05d9657c7c
commit
51ab8846e3
2 files changed
+21
-12
No files matched your search
@@ -2802,7 +2802,6 @@ function detachDocumentView() {
|
|||||||
state.scrollFrame = state.thumbnailFrame = state.openActionFrame = 0;
|
state.scrollFrame = state.thumbnailFrame = state.openActionFrame = 0;
|
||||||
state.openActionTask = null;
|
state.openActionTask = null;
|
||||||
pageView.resetPageLoading();
|
pageView.resetPageLoading();
|
||||||
state.pageRenderRunning = state.pageRenderWorkers > 0;
|
|
||||||
state.pageWindow = null;
|
state.pageWindow = null;
|
||||||
state.thumbnailWindow = null;
|
state.thumbnailWindow = null;
|
||||||
state.visiblePages.clear();
|
state.visiblePages.clear();
|
||||||
|
|||||||
+21
-11
@@ -229,6 +229,7 @@ export function createPageView(context) {
|
|||||||
task.resolve(null);
|
task.resolve(null);
|
||||||
}
|
}
|
||||||
context.state.pageRenderQueue = [];
|
context.state.pageRenderQueue = [];
|
||||||
|
context.state.pageRenderRunning = context.state.pageRenderWorkers > 0;
|
||||||
context.state.pagePrefetchIndex = null;
|
context.state.pagePrefetchIndex = null;
|
||||||
context.state.pagePrefetchDirection = 1;
|
context.state.pagePrefetchDirection = 1;
|
||||||
context.state.pageInFlight.clear();
|
context.state.pageInFlight.clear();
|
||||||
@@ -339,7 +340,7 @@ export function createPageView(context) {
|
|||||||
const current = context.state.pageInFlight.get(key);
|
const current = context.state.pageInFlight.get(key);
|
||||||
if (current) {
|
if (current) {
|
||||||
current.priority = Math.min(current.priority, priority);
|
current.priority = Math.min(current.priority, priority);
|
||||||
if (current.preview && !options.preview) return current.promise.then(() => pageView.loadPageData(index, options));
|
if (current.preview && !options.preview) return current.promise.then(() => openSeq === context.state.openSeq ? pageView.loadPageData(index, options) : null);
|
||||||
return current.promise;
|
return current.promise;
|
||||||
}
|
}
|
||||||
if (!options.refresh && context.state.pageCache.has(index) && (options.preview || !context.state.pageCache.get(index).previewOnly)) {
|
if (!options.refresh && context.state.pageCache.has(index) && (options.preview || !context.state.pageCache.get(index).previewOnly)) {
|
||||||
@@ -369,14 +370,18 @@ export function createPageView(context) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
context.state.pageRenderRunning = true;
|
context.state.pageRenderRunning = true;
|
||||||
requestAnimationFrame(pageView.processPageRenderQueue);
|
const tab = context.documentTab(), openSeq = tab.state.openSeq;
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
if (context.activeTab === tab && openSeq === tab.state.openSeq) pageView.processPageRenderQueue();
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
async processPageRenderQueue() {
|
async processPageRenderQueue() {
|
||||||
const tab = context.documentTab();
|
const tab = context.documentTab(), openSeq = tab.state.openSeq;
|
||||||
await context.nextFrame();
|
await context.nextFrame();
|
||||||
if (context.activeTab !== tab) return;
|
if (context.activeTab !== tab || openSeq !== tab.state.openSeq) return;
|
||||||
await Promise.all(Array.from({ length: nativeHost?.parallelism || context.wasmWorker?.parallelism || 1 }, () => pageView.processPageRenderTasks()));
|
const available = (nativeHost?.parallelism || context.wasmWorker?.parallelism || 1) - tab.state.pageRenderWorkers;
|
||||||
|
await Promise.all(Array.from({ length: Math.max(0, available) }, () => pageView.processPageRenderTasks()));
|
||||||
},
|
},
|
||||||
|
|
||||||
async processPageRenderTasks() {
|
async processPageRenderTasks() {
|
||||||
@@ -516,21 +521,22 @@ export function createPageView(context) {
|
|||||||
},
|
},
|
||||||
|
|
||||||
async loadSVGFonts(fonts, openSeq) {
|
async loadSVGFonts(fonts, openSeq) {
|
||||||
|
const state = context.state;
|
||||||
for (const font of fonts) {
|
for (const font of fonts) {
|
||||||
if (openSeq !== context.state.openSeq) {
|
if (openSeq !== context.state.openSeq) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (context.state.svgFonts.has(font.name)) {
|
if (state.svgFonts.has(font.name)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const key = `${openSeq}:${font.name}`;
|
const key = `${openSeq}:${font.name}`;
|
||||||
let loading = context.state.svgFontLoads.get(key);
|
let loading = state.svgFontLoads.get(key);
|
||||||
if (!loading) {
|
if (!loading) {
|
||||||
loading = pageView.loadSVGFont(font, openSeq);
|
loading = pageView.loadSVGFont(font, openSeq);
|
||||||
context.state.svgFontLoads.set(key, loading);
|
state.svgFontLoads.set(key, loading);
|
||||||
}
|
}
|
||||||
try { await loading; }
|
try { await loading; }
|
||||||
finally { if (context.state.svgFontLoads.get(key) === loading) context.state.svgFontLoads.delete(key); }
|
finally { if (state.svgFontLoads.get(key) === loading) state.svgFontLoads.delete(key); }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -807,7 +813,9 @@ export function createPageView(context) {
|
|||||||
async togglePageLayout() {
|
async togglePageLayout() {
|
||||||
if (!(context.state.doc?.pageCount > 1) || document.body.hasAttribute("data-busy")) return;
|
if (!(context.state.doc?.pageCount > 1) || document.body.hasAttribute("data-busy")) return;
|
||||||
const openSeq = context.state.openSeq;
|
const openSeq = context.state.openSeq;
|
||||||
if (!await context.canvasEditor.commitNudge() || !await context.canvasEditor.commitText() || !await context.canvasEditor.commitCrop() || openSeq !== context.state.openSeq) return;
|
if (!await context.canvasEditor.commitNudge() || openSeq !== context.state.openSeq) return;
|
||||||
|
if (!await context.canvasEditor.commitText() || openSeq !== context.state.openSeq) return;
|
||||||
|
if (!await context.canvasEditor.commitCrop() || openSeq !== context.state.openSeq) return;
|
||||||
context.state.pageLayoutPreference = context.state.pageLayout === 1 ? 2 : 1;
|
context.state.pageLayoutPreference = context.state.pageLayout === 1 ? 2 : 1;
|
||||||
pageView.layoutPages();
|
pageView.layoutPages();
|
||||||
pageView.layoutThumbnails();
|
pageView.layoutThumbnails();
|
||||||
@@ -1207,7 +1215,9 @@ export function createPageView(context) {
|
|||||||
async toggleContinuous() {
|
async toggleContinuous() {
|
||||||
if (!context.state.doc || document.body.hasAttribute("data-busy")) return;
|
if (!context.state.doc || document.body.hasAttribute("data-busy")) return;
|
||||||
const openSeq = context.state.openSeq;
|
const openSeq = context.state.openSeq;
|
||||||
if (!await context.canvasEditor.commitNudge() || !await context.canvasEditor.commitText() || !await context.canvasEditor.commitCrop() || openSeq !== context.state.openSeq) return;
|
if (!await context.canvasEditor.commitNudge() || openSeq !== context.state.openSeq) return;
|
||||||
|
if (!await context.canvasEditor.commitText() || openSeq !== context.state.openSeq) return;
|
||||||
|
if (!await context.canvasEditor.commitCrop() || openSeq !== context.state.openSeq) return;
|
||||||
const anchor = context.state.fitMode === "free" ? pageView.scaleAnchor() : null;
|
const anchor = context.state.fitMode === "free" ? pageView.scaleAnchor() : null;
|
||||||
pageView.setContinuous(!context.state.continuous);
|
pageView.setContinuous(!context.state.continuous);
|
||||||
if (context.state.pageWindow) {
|
if (context.state.pageWindow) {
|
||||||
|
|||||||
Reference in new issue
Block a user