Hide flag emoji on the web target, where they render as empty boxes
Compose for Web (js/wasmJs) draws everything through Skia onto a <canvas> rather than through the browser's own text stack, so it has no color-emoji font to fall back to — a flag's regional-indicator codepoints render as empty tofu boxes instead of a flag. Reproduced via a headless-Chrome screenshot of the running dev server. Adds a per-platform supportsFlagEmoji() (true everywhere except js/wasmJs) that currencyFlagEmoji() now checks first, so currency rows on web just show the plain code/name with no flag rather than a broken glyph. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FXcrACM5sok3M1KQJ8kByy
This commit is contained in:
@@ -34,10 +34,13 @@ internal fun issuingCountryCodes(code: String): List<String> {
|
||||
|
||||
/**
|
||||
* A country flag emoji for [code], or null when there's no flag to show — either because [code]
|
||||
* isn't tied to any country, or because it's shared by more than [MAX_FLAGS_PER_CURRENCY]
|
||||
* countries, which would be too visually noisy to show side by side.
|
||||
* isn't tied to any country, because it's shared by more than [MAX_FLAGS_PER_CURRENCY] countries
|
||||
* (too visually noisy to show side by side), or because [supportsFlagEmoji] says the platform
|
||||
* can't render one anyway (Compose for Web's canvas-based text renderer has no color-emoji font
|
||||
* to fall back to, so a flag's regional-indicator codepoints draw as empty boxes there).
|
||||
*/
|
||||
fun currencyFlagEmoji(code: String): String? {
|
||||
if (!supportsFlagEmoji()) return null
|
||||
val regionCodes = issuingCountryCodes(code)
|
||||
if (regionCodes.isEmpty() || regionCodes.size > MAX_FLAGS_PER_CURRENCY) return null
|
||||
return regionCodes.joinToString(" ") { regionFlagEmoji(it) }
|
||||
|
||||
@@ -45,3 +45,10 @@ expect fun localeCurrencyCode(): String?
|
||||
|
||||
/** The conventional number of decimal places for [code] (e.g. 2 for USD, 0 for JPY, 3 for BHD). */
|
||||
expect fun currencyDecimalDigits(code: String): Int
|
||||
|
||||
/**
|
||||
* Whether the current platform's text renderer can draw flag emoji. False on Compose for Web
|
||||
* (js/wasmJs): its canvas-based Skia renderer has no bundled or system color-emoji font to draw a
|
||||
* flag's regional-indicator codepoints with, so they'd otherwise render as empty boxes.
|
||||
*/
|
||||
expect fun supportsFlagEmoji(): Boolean
|
||||
|
||||
Reference in New Issue
Block a user