From 52344cd816844b5457d826545270fac38099308f Mon Sep 17 00:00:00 2001
From: Emile Bangma <github@emilebangma.com>
Date: Sat, 24 May 2025 02:05:41 +0000
Subject: [PATCH] fix(style): Katex adding scrollbars on non-overflowing content (#1989)
---
quartz/components/scripts/graph.inline.ts | 32 ++++++++++++++++++++++++++++++--
1 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/quartz/components/scripts/graph.inline.ts b/quartz/components/scripts/graph.inline.ts
index fca7bd2..9c8ec60 100644
--- a/quartz/components/scripts/graph.inline.ts
+++ b/quartz/components/scripts/graph.inline.ts
@@ -68,6 +68,30 @@
stop: () => void
}
+// workaround for pixijs webgpu issue: https://github.com/pixijs/pixijs/issues/11389
+async function determineGraphicsAPI(): Promise<"webgpu" | "webgl"> {
+ const adapter = await navigator.gpu?.requestAdapter().catch(() => null)
+ const device = adapter && (await adapter.requestDevice().catch(() => null))
+ if (!device) {
+ return "webgl"
+ }
+
+ const canvas = document.createElement("canvas")
+ const gl =
+ (canvas.getContext("webgl2") as WebGL2RenderingContext | null) ??
+ (canvas.getContext("webgl") as WebGLRenderingContext | null)
+
+ // we have to return webgl so pixijs automatically falls back to canvas
+ if (!gl) {
+ return "webgl"
+ }
+
+ const webglMaxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)
+ const webgpuMaxTextures = device.limits.maxSampledTexturesPerShaderStage
+
+ return webglMaxTextures === webgpuMaxTextures ? "webgpu" : "webgl"
+}
+
async function renderGraph(graph: HTMLElement, fullSlug: FullSlug) {
const slug = simplifySlug(fullSlug)
const visited = getVisited()
@@ -349,6 +373,7 @@
tweens.forEach((tween) => tween.stop())
tweens.clear()
+ const pixiPreference = await determineGraphicsAPI()
const app = new Application()
await app.init({
width,
@@ -357,7 +382,7 @@
autoStart: false,
autoDensity: true,
backgroundAlpha: 0,
- preference: "webgpu",
+ preference: pixiPreference,
resolution: window.devicePixelRatio,
eventMode: "static",
})
@@ -400,7 +425,6 @@
})
.circle(0, 0, nodeRadius(n))
.fill({ color: isTagNode ? computedStyleMap["--light"] : color(n) })
- .stroke({ width: isTagNode ? 2 : 0, color: color(n) })
.on("pointerover", (e) => {
updateHoverInfo(e.target.label)
oldLabelOpacity = label.alpha
@@ -416,6 +440,10 @@
}
})
+ if (isTagNode) {
+ gfx.stroke({ width: 2, color: computedStyleMap["--tertiary"] })
+ }
+
nodesContainer.addChild(gfx)
labelsContainer.addChild(label)
--
Gitblit v1.10.0