Add pixel ratio resolution utility, respecting Safari limitations
This commit is contained in:
36
src/rendering/renderer-pixel-ratio.ts
Normal file
36
src/rendering/renderer-pixel-ratio.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
const DEFAULT_MAX_RENDERER_PIXEL_RATIO = 2;
|
||||||
|
const SAFARI_MAX_RENDERER_PIXEL_RATIO = 1;
|
||||||
|
|
||||||
|
export function isSafariUserAgent(userAgent: string): boolean {
|
||||||
|
return (
|
||||||
|
userAgent.includes("Safari/") &&
|
||||||
|
!userAgent.includes("Chrome/") &&
|
||||||
|
!userAgent.includes("Chromium/") &&
|
||||||
|
!userAgent.includes("CriOS/") &&
|
||||||
|
!userAgent.includes("Edg/") &&
|
||||||
|
!userAgent.includes("OPR/") &&
|
||||||
|
!userAgent.includes("Firefox/")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function resolveRendererPixelRatio(options: {
|
||||||
|
devicePixelRatio: number;
|
||||||
|
userAgent: string;
|
||||||
|
}): number {
|
||||||
|
const devicePixelRatio = Number.isFinite(options.devicePixelRatio)
|
||||||
|
? Math.max(1, options.devicePixelRatio)
|
||||||
|
: 1;
|
||||||
|
const maxPixelRatio = isSafariUserAgent(options.userAgent)
|
||||||
|
? SAFARI_MAX_RENDERER_PIXEL_RATIO
|
||||||
|
: DEFAULT_MAX_RENDERER_PIXEL_RATIO;
|
||||||
|
|
||||||
|
return Math.min(devicePixelRatio, maxPixelRatio);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getRendererPixelRatio(): number {
|
||||||
|
return resolveRendererPixelRatio({
|
||||||
|
devicePixelRatio:
|
||||||
|
typeof window === "undefined" ? 1 : window.devicePixelRatio,
|
||||||
|
userAgent: typeof navigator === "undefined" ? "" : navigator.userAgent
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user