Restore WebGL book quality settings
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
* Defines the canonical page geometry used by the WebGL book renderer.
|
||||
*/
|
||||
import { BaseModule } from './base-module.js';
|
||||
import { calculateProceduralBookThickness, snapProceduralPageCount } from './procedural-book-model.js?v=20260607-webgl-physical-stack-quality';
|
||||
|
||||
class BookPageFormatModule extends BaseModule {
|
||||
constructor() {
|
||||
@@ -17,8 +18,13 @@ class BookPageFormatModule extends BaseModule {
|
||||
margins: Object.freeze({
|
||||
topIn: 0.46,
|
||||
bottomIn: 0.58,
|
||||
innerIn: 0.56,
|
||||
outerIn: 0.44
|
||||
innerBaseIn: 0.375,
|
||||
innerMinIn: 0.44,
|
||||
innerMaxIn: 0.68,
|
||||
innerThicknessFactor: 0.25,
|
||||
outerBaseIn: 0.44,
|
||||
outerThicknessFactor: 0.04,
|
||||
outerMaxIn: 0.5
|
||||
}),
|
||||
typography: Object.freeze({
|
||||
fontFamily: '"EB Garamond", "EB Garamond 12", serif',
|
||||
@@ -28,16 +34,27 @@ class BookPageFormatModule extends BaseModule {
|
||||
dropCapLines: 2
|
||||
})
|
||||
});
|
||||
this.pageCount = snapProceduralPageCount(window.WebGLBookInitialState?.pageCount ?? 300);
|
||||
|
||||
this.bindMethods([
|
||||
'getFormat',
|
||||
'getAspectRatio',
|
||||
'getTextureMetrics',
|
||||
'setPageCount',
|
||||
'getPageCount',
|
||||
'getDynamicMargins',
|
||||
'inchesToTexture'
|
||||
]);
|
||||
}
|
||||
|
||||
async initialize() {
|
||||
this.addEventListener(document, 'webgl-book:page-count-changed', (event) => {
|
||||
this.setPageCount(event.detail?.pageCount);
|
||||
});
|
||||
this.addEventListener(document, 'preference-updated', (event) => {
|
||||
const detail = event.detail || {};
|
||||
if (detail.category === 'webgl' && detail.key === 'bookPageCount') this.setPageCount(detail.value);
|
||||
});
|
||||
this.reportProgress(100, 'Book page format ready');
|
||||
return true;
|
||||
}
|
||||
@@ -54,14 +71,49 @@ class BookPageFormatModule extends BaseModule {
|
||||
return (Number(valueIn) / this.format.trim.heightIn) * textureHeight;
|
||||
}
|
||||
|
||||
getTextureMetrics(textureWidth = 1280) {
|
||||
setPageCount(value) {
|
||||
const nextPageCount = snapProceduralPageCount(value ?? this.pageCount);
|
||||
if (nextPageCount === this.pageCount) return this.pageCount;
|
||||
this.pageCount = nextPageCount;
|
||||
return this.pageCount;
|
||||
}
|
||||
|
||||
getPageCount() {
|
||||
return this.pageCount;
|
||||
}
|
||||
|
||||
getDynamicMargins(pageCount = this.pageCount) {
|
||||
const marginConfig = this.format.margins;
|
||||
const thickness = calculateProceduralBookThickness(pageCount);
|
||||
const innerIn = Math.min(
|
||||
marginConfig.innerMaxIn,
|
||||
Math.max(
|
||||
marginConfig.innerMinIn,
|
||||
marginConfig.innerBaseIn + thickness.textBlockThicknessIn * marginConfig.innerThicknessFactor
|
||||
)
|
||||
);
|
||||
const outerIn = Math.min(
|
||||
marginConfig.outerMaxIn,
|
||||
marginConfig.outerBaseIn + thickness.textBlockThicknessIn * marginConfig.outerThicknessFactor
|
||||
);
|
||||
return {
|
||||
topIn: 0.46,
|
||||
bottomIn: 0.58,
|
||||
innerIn,
|
||||
outerIn,
|
||||
thickness
|
||||
};
|
||||
}
|
||||
|
||||
getTextureMetrics(textureWidth = 1280, pageCount = this.pageCount) {
|
||||
const width = Math.max(1, Math.round(Number(textureWidth) || 1280));
|
||||
const height = Math.round(width / this.getAspectRatio());
|
||||
const dynamicMargins = this.getDynamicMargins(pageCount);
|
||||
const margins = {
|
||||
top: this.inchesToTexture(this.format.margins.topIn, height),
|
||||
bottom: this.inchesToTexture(this.format.margins.bottomIn, height),
|
||||
inner: this.inchesToTexture(this.format.margins.innerIn, height),
|
||||
outer: this.inchesToTexture(this.format.margins.outerIn, height)
|
||||
top: this.inchesToTexture(dynamicMargins.topIn, height),
|
||||
bottom: this.inchesToTexture(dynamicMargins.bottomIn, height),
|
||||
inner: this.inchesToTexture(dynamicMargins.innerIn, height),
|
||||
outer: this.inchesToTexture(dynamicMargins.outerIn, height)
|
||||
};
|
||||
const content = {
|
||||
x: margins.outer,
|
||||
@@ -89,6 +141,13 @@ class BookPageFormatModule extends BaseModule {
|
||||
margins,
|
||||
content,
|
||||
contentBySide,
|
||||
marginsIn: {
|
||||
top: dynamicMargins.topIn,
|
||||
bottom: dynamicMargins.bottomIn,
|
||||
inner: dynamicMargins.innerIn,
|
||||
outer: dynamicMargins.outerIn
|
||||
},
|
||||
thickness: dynamicMargins.thickness,
|
||||
linesPerPage,
|
||||
bodyFontSizePx,
|
||||
typographyLineHeightPx,
|
||||
|
||||
Reference in New Issue
Block a user