diff options
author | Hailey <me@haileyok.com> | 2024-11-09 16:24:51 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-09 16:24:51 -0800 |
commit | 89c93313a3fc3123a2e53856f53cc8cea8e693fa (patch) | |
tree | f0189bdd75fcdb151ed74f8b43057ddee631b907 /src | |
parent | 3aeee1e4aa9ae76d2c3638ab2fad54d7171effbf (diff) | |
download | voidsky-89c93313a3fc3123a2e53856f53cc8cea8e693fa.tar.zst |
android scroll performance fixes pt. 1 (#6196)
Diffstat (limited to 'src')
-rw-r--r-- | src/alf/index.tsx | 53 | ||||
-rw-r--r-- | src/view/com/util/text/Text.tsx | 67 |
2 files changed, 58 insertions, 62 deletions
diff --git a/src/alf/index.tsx b/src/alf/index.tsx index f9d93d4ca..5d08722ff 100644 --- a/src/alf/index.tsx +++ b/src/alf/index.tsx @@ -103,35 +103,32 @@ export function ThemeProvider({ }) }, []) - return ( - <Context.Provider - value={React.useMemo<Alf>( - () => ({ - themes, - themeName: themeName, - theme: themes[themeName], - fonts: { - scale: fontScale, - scaleMultiplier: fontScaleMultiplier, - family: fontFamily, - setFontScale: setFontScaleAndPersist, - setFontFamily: setFontFamilyAndPersist, - }, - flags: {}, - }), - [ - themeName, - themes, - fontScale, - setFontScaleAndPersist, - fontFamily, - setFontFamilyAndPersist, - fontScaleMultiplier, - ], - )}> - {children} - </Context.Provider> + const value = React.useMemo<Alf>( + () => ({ + themes, + themeName: themeName, + theme: themes[themeName], + fonts: { + scale: fontScale, + scaleMultiplier: fontScaleMultiplier, + family: fontFamily, + setFontScale: setFontScaleAndPersist, + setFontFamily: setFontFamilyAndPersist, + }, + flags: {}, + }), + [ + themeName, + themes, + fontScale, + setFontScaleAndPersist, + fontFamily, + setFontFamilyAndPersist, + fontScaleMultiplier, + ], ) + + return <Context.Provider value={value}>{children}</Context.Provider> } export function useAlf() { diff --git a/src/view/com/util/text/Text.tsx b/src/view/com/util/text/Text.tsx index 42ea79b8f..dbf5e2e13 100644 --- a/src/view/com/util/text/Text.tsx +++ b/src/view/com/util/text/Text.tsx @@ -5,7 +5,7 @@ import {UITextView} from 'react-native-uitextview' import {lh, s} from '#/lib/styles' import {TypographyVariant, useTheme} from '#/lib/ThemeContext' import {logger} from '#/logger' -import {isIOS} from '#/platform/detection' +import {isIOS, isWeb} from '#/platform/detection' import {applyFonts, useAlf} from '#/alf' import { childHasEmoji, @@ -44,8 +44,6 @@ export function Text({ ...props }: React.PropsWithChildren<CustomTextProps>) { const theme = useTheme() - const typography = theme.typography[type] - const lineHeightStyle = lineHeight ? lh(theme, type, lineHeight) : undefined const {fonts} = useAlf() if (IS_DEV) { @@ -60,7 +58,10 @@ export function Text({ } } - if (selectable && isIOS) { + const textProps = React.useMemo(() => { + const typography = theme.typography[type] + const lineHeightStyle = lineHeight ? lh(theme, type, lineHeight) : undefined + const flattened = StyleSheet.flatten([ s.black, typography, @@ -74,49 +75,47 @@ export function Text({ // @ts-ignore if (flattened.fontSize) { // @ts-ignore - flattened.fontSize = flattened.fontSize * fonts.scaleMultiplier + flattened.fontSize = Math.round( + // @ts-ignore + flattened.fontSize * fonts.scaleMultiplier, + ) } - const shared = { - uiTextView: true, + return { + uiTextView: selectable && isIOS, selectable, style: flattened, + dataSet: isWeb + ? Object.assign({tooltip: title}, dataSet || {}) + : undefined, ...props, } + }, [ + dataSet, + fonts.family, + fonts.scaleMultiplier, + lineHeight, + props, + selectable, + style, + theme, + title, + type, + ]) + if (selectable && isIOS) { return ( - <UITextView {...shared}> - {isIOS && emoji ? renderChildrenWithEmoji(children, shared) : children} + <UITextView {...textProps}> + {isIOS && emoji + ? renderChildrenWithEmoji(children, textProps) + : children} </UITextView> ) } - const flattened = StyleSheet.flatten([ - s.black, - typography, - lineHeightStyle, - style, - ]) - - applyFonts(flattened, fonts.family) - - // should always be defined on `typography` - // @ts-ignore - if (flattened.fontSize) { - // @ts-ignore - flattened.fontSize = flattened.fontSize * fonts.scaleMultiplier - } - - const shared = { - selectable, - style: flattened, - dataSet: Object.assign({tooltip: title}, dataSet || {}), - ...props, - } - return ( - <RNText {...shared}> - {isIOS && emoji ? renderChildrenWithEmoji(children, shared) : children} + <RNText {...textProps}> + {isIOS && emoji ? renderChildrenWithEmoji(children, textProps) : children} </RNText> ) } |