From 8a41339418df9943583e72029813ea76d33587bf Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Fri, 6 Jun 2025 14:10:51 -0500 Subject: [PATCH] [engine/web] Migrate many things to switch expressions (#170096) --- .../src/flutter/lib/web_ui/lib/painting.dart | 46 +++++++------------ .../web_ui/lib/src/engine/color_filter.dart | 16 +++---- .../lib/web_ui/lib/src/engine/display.dart | 19 +++----- .../web_ui/lib/src/engine/font_fallbacks.dart | 23 ++++------ .../lib/src/engine/keyboard_binding.dart | 19 ++++---- .../lib/src/engine/platform_dispatcher.dart | 19 +++----- .../lib/src/engine/pointer_binding.dart | 32 +++++-------- .../src/engine/semantics/accessibility.dart | 10 ++-- .../lib/src/engine/semantics/text_field.dart | 19 +++----- .../web_ui/lib/src/engine/text/paragraph.dart | 20 ++++---- 10 files changed, 85 insertions(+), 138 deletions(-) diff --git a/engine/src/flutter/lib/web_ui/lib/painting.dart b/engine/src/flutter/lib/web_ui/lib/painting.dart index 0549c43092c..70ec37aae8a 100644 --- a/engine/src/flutter/lib/web_ui/lib/painting.dart +++ b/engine/src/flutter/lib/web_ui/lib/painting.dart @@ -531,35 +531,23 @@ _ColorTransform _getColorTransform(ColorSpace source, ColorSpace destination) { -0.109450321455370, // 0.214813187718391, 0.054268702864647, 1.406898424029350, -0.364892765879631, ]); - switch (source) { - case ColorSpace.sRGB: - switch (destination) { - case ColorSpace.sRGB: - return const _IdentityColorTransform(); - case ColorSpace.extendedSRGB: - return const _IdentityColorTransform(); - case ColorSpace.displayP3: - return srgbToP3; - } - case ColorSpace.extendedSRGB: - switch (destination) { - case ColorSpace.sRGB: - return const _ClampTransform(_IdentityColorTransform()); - case ColorSpace.extendedSRGB: - return const _IdentityColorTransform(); - case ColorSpace.displayP3: - return const _ClampTransform(srgbToP3); - } - case ColorSpace.displayP3: - switch (destination) { - case ColorSpace.sRGB: - return const _ClampTransform(p3ToSrgb); - case ColorSpace.extendedSRGB: - return p3ToSrgb; - case ColorSpace.displayP3: - return const _IdentityColorTransform(); - } - } + return switch (source) { + ColorSpace.sRGB => switch (destination) { + ColorSpace.sRGB => const _IdentityColorTransform(), + ColorSpace.extendedSRGB => const _IdentityColorTransform(), + ColorSpace.displayP3 => srgbToP3, + }, + ColorSpace.extendedSRGB => switch (destination) { + ColorSpace.sRGB => const _ClampTransform(_IdentityColorTransform()), + ColorSpace.extendedSRGB => const _IdentityColorTransform(), + ColorSpace.displayP3 => const _ClampTransform(srgbToP3), + }, + ColorSpace.displayP3 => switch (destination) { + ColorSpace.sRGB => const _ClampTransform(p3ToSrgb), + ColorSpace.extendedSRGB => p3ToSrgb, + ColorSpace.displayP3 => const _IdentityColorTransform(), + }, + }; } // This needs to be kept in sync with the "_FilterQuality" enum in skwasm's canvas.cpp diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/color_filter.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/color_filter.dart index c3572f88604..93ff23a253d 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/color_filter.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/color_filter.dart @@ -119,16 +119,12 @@ class EngineColorFilter implements SceneImageFilter, ui.ColorFilter { @override String toString() { - switch (type) { - case ColorFilterType.mode: - return 'ColorFilter.mode($color, $blendMode)'; - case ColorFilterType.matrix: - return 'ColorFilter.matrix($matrix)'; - case ColorFilterType.linearToSrgbGamma: - return 'ColorFilter.linearToSrgbGamma()'; - case ColorFilterType.srgbToLinearGamma: - return 'ColorFilter.srgbToLinearGamma()'; - } + return switch (type) { + ColorFilterType.mode => 'ColorFilter.mode($color, $blendMode)', + ColorFilterType.matrix => 'ColorFilter.matrix($matrix)', + ColorFilterType.linearToSrgbGamma => 'ColorFilter.linearToSrgbGamma()', + ColorFilterType.srgbToLinearGamma => 'ColorFilter.srgbToLinearGamma()', + }; } @override diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/display.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/display.dart index c2dfaf06a33..57d76fc1474 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/display.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/display.dart @@ -121,17 +121,12 @@ class ScreenOrientation { // // See also: https://developer.mozilla.org/en-US/docs/Web/API/ScreenOrientation/lock static String? _deviceOrientationToLockType(String? deviceOrientation) { - switch (deviceOrientation) { - case 'DeviceOrientation.portraitUp': - return lockTypePortraitPrimary; - case 'DeviceOrientation.portraitDown': - return lockTypePortraitSecondary; - case 'DeviceOrientation.landscapeLeft': - return lockTypeLandscapePrimary; - case 'DeviceOrientation.landscapeRight': - return lockTypeLandscapeSecondary; - default: - return null; - } + return switch (deviceOrientation) { + 'DeviceOrientation.portraitUp' => lockTypePortraitPrimary, + 'DeviceOrientation.portraitDown' => lockTypePortraitSecondary, + 'DeviceOrientation.landscapeLeft' => lockTypeLandscapePrimary, + 'DeviceOrientation.landscapeRight' => lockTypeLandscapeSecondary, + _ => null, + }; } } diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/font_fallbacks.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/font_fallbacks.dart index cff6a2e7c5b..3588922eb81 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/font_fallbacks.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/font_fallbacks.dart @@ -247,20 +247,15 @@ class FontFallbackManager { } NotoFont _selectFont(List fonts) { - NotoFont? bestFont; - // Priority is given to fonts that match the language - switch (_language) { - case 'zh-Hans' || 'zh-CN' || 'zh-SG' || 'zh-MY': - bestFont = fonts.firstWhereOrNull(_isNotoSansSC); - case 'zh-Hant' || 'zh-TW' || 'zh-MO': - bestFont = fonts.firstWhereOrNull(_isNotoSansTC); - case 'zh-HK': - bestFont = fonts.firstWhereOrNull(_isNotoSansHK); - case 'ja': - bestFont = fonts.firstWhereOrNull(_isNotoSansJP); - case 'ko': - bestFont = fonts.firstWhereOrNull(_isNotoSansKR); - } + // Priority is given to fonts that match the language. + NotoFont? bestFont = switch (_language) { + 'zh-Hans' || 'zh-CN' || 'zh-SG' || 'zh-MY' => fonts.firstWhereOrNull(_isNotoSansSC), + 'zh-Hant' || 'zh-TW' || 'zh-MO' => fonts.firstWhereOrNull(_isNotoSansTC), + 'zh-HK' => fonts.firstWhereOrNull(_isNotoSansHK), + 'ja' => fonts.firstWhereOrNull(_isNotoSansJP), + 'ko' => fonts.firstWhereOrNull(_isNotoSansKR), + _ => null, + }; if (bestFont != null) { return bestFont; diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/keyboard_binding.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/keyboard_binding.dart index 60ff035c950..1c4d862f8d2 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/keyboard_binding.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/keyboard_binding.dart @@ -234,17 +234,14 @@ class KeyboardConverter { final locale_keymap.LocaleKeymap _mapping; static locale_keymap.LocaleKeymap _mappingFromPlatform(ui_web.OperatingSystem platform) { - switch (platform) { - case ui_web.OperatingSystem.iOs: - case ui_web.OperatingSystem.macOs: - return locale_keymap.LocaleKeymap.darwin(); - case ui_web.OperatingSystem.windows: - return locale_keymap.LocaleKeymap.win(); - case ui_web.OperatingSystem.android: - case ui_web.OperatingSystem.linux: - case ui_web.OperatingSystem.unknown: - return locale_keymap.LocaleKeymap.linux(); - } + return switch (platform) { + ui_web.OperatingSystem.iOs || + ui_web.OperatingSystem.macOs => locale_keymap.LocaleKeymap.darwin(), + ui_web.OperatingSystem.windows => locale_keymap.LocaleKeymap.win(), + ui_web.OperatingSystem.android || + ui_web.OperatingSystem.linux || + ui_web.OperatingSystem.unknown => locale_keymap.LocaleKeymap.linux(), + }; } // The `performDispatchKeyData` wrapped with tracking logic. diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart index 5bf16d1ec8c..ea6a2fe3c97 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart @@ -666,18 +666,13 @@ class EnginePlatformDispatcher extends ui.PlatformDispatcher { const int vibrateHeavyImpact = 30; const int vibrateSelectionClick = 10; - switch (type) { - case 'HapticFeedbackType.lightImpact': - return vibrateLightImpact; - case 'HapticFeedbackType.mediumImpact': - return vibrateMediumImpact; - case 'HapticFeedbackType.heavyImpact': - return vibrateHeavyImpact; - case 'HapticFeedbackType.selectionClick': - return vibrateSelectionClick; - default: - return vibrateLongPress; - } + return switch (type) { + 'HapticFeedbackType.lightImpact' => vibrateLightImpact, + 'HapticFeedbackType.mediumImpact' => vibrateMediumImpact, + 'HapticFeedbackType.heavyImpact' => vibrateHeavyImpact, + 'HapticFeedbackType.selectionClick' => vibrateSelectionClick, + _ => vibrateLongPress, + }; } /// Requests that, at the next appropriate opportunity, the [onBeginFrame] diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/pointer_binding.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/pointer_binding.dart index cd371a8ab83..7b2b68ad6f6 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/pointer_binding.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/pointer_binding.dart @@ -69,16 +69,12 @@ int _nthButton(int n) => 0x1 << n; @visibleForTesting int convertButtonToButtons(int button) { assert(button >= 0, 'Unexpected negative button $button.'); - switch (button) { - case 0: - return _kPrimaryMouseButton; - case 1: - return _kMiddleMouseButton; - case 2: - return _kSecondaryMouseButton; - default: - return _nthButton(button); - } + return switch (button) { + 0 => _kPrimaryMouseButton, + 1 => _kMiddleMouseButton, + 2 => _kSecondaryMouseButton, + _ => _nthButton(button), + }; } /// Wrapping the Safari iOS workaround that adds a dummy event listener @@ -1119,16 +1115,12 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { } ui.PointerDeviceKind _pointerTypeToDeviceKind(String pointerType) { - switch (pointerType) { - case 'mouse': - return ui.PointerDeviceKind.mouse; - case 'pen': - return ui.PointerDeviceKind.stylus; - case 'touch': - return ui.PointerDeviceKind.touch; - default: - return ui.PointerDeviceKind.unknown; - } + return switch (pointerType) { + 'mouse' => ui.PointerDeviceKind.mouse, + 'pen' => ui.PointerDeviceKind.stylus, + 'touch' => ui.PointerDeviceKind.touch, + _ => ui.PointerDeviceKind.unknown, + }; } int _getPointerId(DomPointerEvent event) { diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/accessibility.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/accessibility.dart index 207acaa97e8..38fd8e01a15 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/accessibility.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/accessibility.dart @@ -59,12 +59,10 @@ class AccessibilityAnnouncements { /// Looks up the element used to announce messages of the given [assertiveness]. DomHTMLElement ariaLiveElementFor(Assertiveness assertiveness) { - switch (assertiveness) { - case Assertiveness.polite: - return _politeElement; - case Assertiveness.assertive: - return _assertiveElement; - } + return switch (assertiveness) { + Assertiveness.polite => _politeElement, + Assertiveness.assertive => _assertiveElement, + }; } /// Makes an accessibity announcement from a message sent by the framework diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/text_field.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/text_field.dart index 74d7faa435e..f51de3d8cc4 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/text_field.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/text_field.dart @@ -354,18 +354,13 @@ class SemanticTextField extends SemanticRole { if (semanticsObject.hasFlag(ui.SemanticsFlag.isObscured)) { input.type = 'password'; } else { - switch (semanticsObject.inputType) { - case ui.SemanticsInputType.search: - input.type = 'search'; - case ui.SemanticsInputType.email: - input.type = 'email'; - case ui.SemanticsInputType.url: - input.type = 'url'; - case ui.SemanticsInputType.phone: - input.type = 'tel'; - default: - input.type = 'text'; - } + input.type = switch (semanticsObject.inputType) { + ui.SemanticsInputType.search => 'search', + ui.SemanticsInputType.email => 'email', + ui.SemanticsInputType.url => 'url', + ui.SemanticsInputType.phone => 'tel', + _ => 'text', + }; } } diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/text/paragraph.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/text/paragraph.dart index a8277808dc2..2886df9e4b6 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/text/paragraph.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/text/paragraph.dart @@ -144,19 +144,15 @@ String textAlignToCssValue(ui.TextAlign? align, ui.TextDirection textDirection) case ui.TextAlign.justify: return 'justify'; case ui.TextAlign.end: - switch (textDirection) { - case ui.TextDirection.ltr: - return 'end'; - case ui.TextDirection.rtl: - return 'left'; - } + return switch (textDirection) { + ui.TextDirection.ltr => 'end', + ui.TextDirection.rtl => 'left', + }; case ui.TextAlign.start: - switch (textDirection) { - case ui.TextDirection.ltr: - return ''; // it's the default - case ui.TextDirection.rtl: - return 'right'; - } + return switch (textDirection) { + ui.TextDirection.ltr => '', // it's the default + ui.TextDirection.rtl => 'right', + }; case null: // If align is not specified return default. return '';