From 8a7095f640c459f4599afb2987788900bca8095a Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Sat, 26 Oct 2024 13:01:47 +0400 Subject: [PATCH] Weather Widget: Adjust styles for weather widget (#5059) Co-authored-by: zubiden <19638254+zubiden@users.noreply.github.com> --- .../fonts/Roboto-Condensed-Regular.woff2 | Bin 0 -> 32584 bytes src/assets/fonts/roboto.css | 7 +++ src/components/story/MediaStory.module.scss | 1 + src/components/story/Story.tsx | 7 ++- .../story/mediaArea/MediaArea.module.scss | 34 +++++------ .../story/mediaArea/MediaAreaOverlay.tsx | 28 ++++++--- .../story/mediaArea/MediaAreaWeather.tsx | 53 ++++++++++++------ src/styles/index.scss | 11 ++-- src/util/formatTemperature.ts | 2 +- 9 files changed, 91 insertions(+), 52 deletions(-) create mode 100644 src/assets/fonts/Roboto-Condensed-Regular.woff2 diff --git a/src/assets/fonts/Roboto-Condensed-Regular.woff2 b/src/assets/fonts/Roboto-Condensed-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3bb6bd31c15bad7df61c963bc9949dcda8ae00b7 GIT binary patch literal 32584 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%0D?gk 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 )} {isLoadedStory && fullMediaData && ( - + )} {!isMobile && (
diff --git a/src/components/story/mediaArea/MediaArea.module.scss b/src/components/story/mediaArea/MediaArea.module.scss index e91df5c06..1aad3302b 100644 --- a/src/components/story/mediaArea/MediaArea.module.scss +++ b/src/components/story/mediaArea/MediaArea.module.scss @@ -114,13 +114,6 @@ } } -.withBackground { - width: 100%; - height: 100%; - background-color: var(--custom-background-color); - filter: drop-shadow(0 0.125rem 0.25rem var(--color-default-shadow)); -} - .reaction { position: absolute; top: 50%; @@ -141,26 +134,27 @@ font-weight: 500; } -.weatherInfo { - width: 100%; - height: 100%; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - transition: transform 200ms ease-out; +.weather { + display: grid; + place-items: center; +} + +.weatherInner { + width: auto !important; + height: auto !important; + display: flex; align-items: center; justify-content: center; - gap: 0.3125rem; + gap: 0.2em; white-space: nowrap; + padding: 0 0.2em; + background-color: var(--custom-background-color); + border-radius: 0.25em; } .temperature { + font-family: var(--font-family-condensed); font-weight: 700; margin: 0; } - -.border { - border-radius: 0.3125rem !important; -} diff --git a/src/components/story/mediaArea/MediaAreaOverlay.tsx b/src/components/story/mediaArea/MediaAreaOverlay.tsx index 89066d900..1cb995748 100644 --- a/src/components/story/mediaArea/MediaAreaOverlay.tsx +++ b/src/components/story/mediaArea/MediaAreaOverlay.tsx @@ -1,4 +1,6 @@ -import React, { memo, useEffect, useRef } from '../../../lib/teact/teact'; +import React, { + memo, useEffect, useRef, useState, +} from '../../../lib/teact/teact'; import { getActions } from '../../../global'; import type { ApiMediaArea, ApiStory } from '../../../api/types'; @@ -18,13 +20,15 @@ import styles from './MediaArea.module.scss'; type OwnProps = { story: ApiStory; isActive?: boolean; + isStoryPlaying?: boolean; className?: string; }; const STORY_ASPECT_RATIO = 9 / 16; +const PERCENTAGE_BASE = 100; const MediaAreaOverlay = ({ - story, isActive, className, + story, isActive, className, isStoryPlaying, }: OwnProps) => { const { openMapModal, focusMessage, closeStoryViewer, openUrl, @@ -32,12 +36,14 @@ const MediaAreaOverlay = ({ // eslint-disable-next-line no-null/no-null const ref = useRef(null); + const [mediaWidth, setMediaWidth] = useState(0); const windowSize = useWindowSize(); useEffect(() => { - if (!ref.current || !isActive) return; + if (!ref.current) return; const element = ref.current; + setMediaWidth(element!.clientWidth!); if (windowSize.width > MOBILE_SCREEN_MAX_WIDTH) { requestMutation(() => { @@ -124,8 +130,8 @@ const MediaAreaOverlay = ({ key={`${mediaArea.type}-${i}`} mediaArea={mediaArea} className={styles.mediaArea} - style={prepareStyle(mediaArea)} - isPreview={isActive} + style={prepareStyle(mediaArea, mediaWidth)} + isPreview={!isActive || isStoryPlaying} /> ); } @@ -137,18 +143,26 @@ const MediaAreaOverlay = ({ ); }; -function prepareStyle(mediaArea: ApiMediaArea) { +function prepareStyle(mediaArea: ApiMediaArea, mediaWidth?: number) { const { x, y, width, height, rotation, radius, } = mediaArea.coordinates; + let pixelRadius = ''; + + if (mediaWidth && radius && mediaWidth > 0) { + const pixelWidth = (mediaWidth * (width / PERCENTAGE_BASE)); + const pixelHeight = (mediaWidth * (height / PERCENTAGE_BASE)); + pixelRadius = `${Math.min(pixelWidth, pixelHeight) * (radius / PERCENTAGE_BASE)}px`; + } + return buildStyle( `left: ${x}%`, `top: ${y}%`, `width: ${width}%`, `height: ${height}%`, `transform: rotate(${rotation}deg) translate(-50%, -50%)`, - Boolean(radius) && `border-radius: ${radius}%`, + pixelRadius && `border-radius: ${pixelRadius}`, ); } diff --git a/src/components/story/mediaArea/MediaAreaWeather.tsx b/src/components/story/mediaArea/MediaAreaWeather.tsx index 8e53372a0..97af92b64 100644 --- a/src/components/story/mediaArea/MediaAreaWeather.tsx +++ b/src/components/story/mediaArea/MediaAreaWeather.tsx @@ -1,16 +1,19 @@ import React, { - type FC, memo, useRef, useState, + type FC, memo, + useLayoutEffect, + useRef, useState, } from '../../../lib/teact/teact'; +import { setExtraStyles } from '../../../lib/teact/teact-dom'; import { withGlobal } from '../../../global'; import type { ApiMediaAreaWeather, ApiSticker } from '../../../api/types'; +import { requestForcedReflow, requestMutation } from '../../../lib/fasterdom/fasterdom'; import { selectRestrictedEmoji } from '../../../global/selectors'; import buildClassName from '../../../util/buildClassName'; import buildStyle from '../../../util/buildStyle'; import { convertToRGBA, getTextColor } from '../../../util/colors'; import { formatTemperature } from '../../../util/formatTemperature'; -import { REM } from '../../common/helpers/mediaDimensions'; import useLastCallback from '../../../hooks/useLastCallback'; import useResizeObserver from '../../../hooks/useResizeObserver'; @@ -42,48 +45,62 @@ const MediaAreaWeather: FC = ({ }) => { // eslint-disable-next-line no-null/no-null const ref = useRef(null); - const [customEmojiSize, setCustomEmojiSize] = useState(1.5 * REM); - const [customTemperatureSize, setCustomTemperatureSize] = useState(0); + const [customEmojiSize, setCustomEmojiSize] = useState(0); const { temperatureC, color } = mediaArea; const backgroundColor = convertToRGBA(color); const textColor = getTextColor(color); - const updateCustomSize = useLastCallback(() => { - if (!ref.current) return; - const height = ref.current.clientHeight; - setCustomEmojiSize(Math.round(height * EMOJI_SIZE_MULTIPLIER)); - setCustomTemperatureSize(height / TEMPERATURE_SIZE); + const updateCustomSize = useLastCallback((isImmediate?: boolean) => { + if (!ref.current) return undefined; + const el = ref.current; + + const height = el.clientHeight; + const customEmojiHeight = Math.round(height * EMOJI_SIZE_MULTIPLIER); + setCustomEmojiSize(customEmojiHeight); + const applyFn = () => { + setExtraStyles(el, { + '--custom-emoji-size': `${customEmojiHeight}px`, + 'font-size': `${height / TEMPERATURE_SIZE}rem`, + }); + }; + + if (isImmediate) return applyFn; + + requestMutation(applyFn); + + return undefined; }); - useResizeObserver(ref, updateCustomSize); + useLayoutEffect(() => { + requestForcedReflow(() => updateCustomSize(true)); + }, []); + + useResizeObserver(ref, () => updateCustomSize()); return (
-
+
{restrictedEmoji && ( )} -

+

{formatTemperature(temperatureC)}

diff --git a/src/styles/index.scss b/src/styles/index.scss index 18a22766f..38eae501a 100644 --- a/src/styles/index.scss +++ b/src/styles/index.scss @@ -30,10 +30,11 @@ body { user-select: none; --font-family: "Roboto", -apple-system, BlinkMacSystemFont, "Apple Color Emoji", "Segoe UI", Oxygen, Ubuntu, - Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; --font-family-monospace: "Cascadia Mono", "Roboto Mono", "Droid Sans Mono", 'SF Mono', "Menlo", "Ubuntu Mono", - "Consolas", monospace; + "Consolas", monospace; --font-family-rounded: -ui-rounded, "Roboto Round"; + --font-family-condensed: -ui-rounded, "Roboto Condensed"; @media (max-width: 600px) { height: calc(var(--vh, 1vh) * 100); @@ -61,18 +62,18 @@ html.theme-dark { body.is-ios, body.is-macos { --font-family: system-ui, -apple-system, BlinkMacSystemFont, "Roboto", "Apple Color Emoji", "Helvetica Neue", - sans-serif; + sans-serif; } html[lang="fa"], html[lang="fa"] body { --font-family: "Vazirmatn", "Roboto", -apple-system, BlinkMacSystemFont, "Apple Color Emoji", "Segoe UI", Oxygen, - Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; &.is-ios, &.is-macos { --font-family: "Vazirmatn", -apple-system, BlinkMacSystemFont, "Roboto", "Apple Color Emoji", "Segoe UI", Oxygen, - Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; } } diff --git a/src/util/formatTemperature.ts b/src/util/formatTemperature.ts index 6c1fa6505..1d949838c 100644 --- a/src/util/formatTemperature.ts +++ b/src/util/formatTemperature.ts @@ -1,4 +1,4 @@ export const formatTemperature = (temperatureC: number) => { const isFahrenheit = Boolean(navigator.language === 'en-US'); - return isFahrenheit ? `${Math.round((temperatureC * 9) / 5 + 32)} °F` : `${Math.round(temperatureC)} °C`; + return isFahrenheit ? `${Math.round((temperatureC * 9) / 5 + 32)}°F` : `${Math.round(temperatureC)}°C`; };