Files
jrshikoku/utils/scaleTextForDensity.ts

36 lines
1.2 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 低密度ディスプレイSamsung DeX等でのテキスト自動拡大
*
* babel-plugin-disable-font-scaling がビルド時に全 Text/TextInput の
* style プロップを global.__scaleTextStyle() でラップする。
* このランタイム関数が render 毎に PixelRatio をチェックし、
* 低密度時のみ fontSize を拡大する。
*
* DeX実測: PR=0.756, Win=1133x690
* 補償倍率: 2.0/0.756 = 2.64 → cap 2.5x
*/
import { StyleSheet, PixelRatio } from "react-native";
const RN_DEFAULT_FONT_SIZE = 14;
function scaleTextStyle(style?: any): any {
const pr = PixelRatio.get();
if (pr >= 2.0) return style; // 通常密度 → 変更なし
// DeX(PR=0.756)向け: 大幅拡大テスト
// 3.5倍 → fontSize14→49dp, fontSize20→70dp
const compensation = Math.min(4.0, 2.625 / pr);
const flat = style != null ? StyleSheet.flatten(style) : null;
const baseSize =
flat && typeof flat === "object" && typeof flat.fontSize === "number"
? flat.fontSize
: RN_DEFAULT_FONT_SIZE;
const scaled = Math.round(baseSize * compensation);
if (style == null) return { fontSize: scaled };
return [style, { fontSize: scaled }];
}
(global as any).__scaleTextStyle = scaleTextStyle;