Skip to content

font-subset removes necessary GSUB table for variable fonts resulting in font rendering errors #125704

@timmaffett

Description

@timmaffett

Is there an existing issue for this?

Steps to reproduce

My package material_symbols_icons provides support for the Material Symbols Icons using the variable fonts from https://github.com/google/material-design-icons. (The variable fonts are found here ).
This package addresses material symbols icon support as defined in #102560.

When building a web release of the example from this package the icon font tree-shaking is performed. (this is now the default). This breaks these variable fonts when rendering some axes variations.

  1. Visit https://timmaffett.github.io/material_symbols_icons_showing_tree_shake_bug/
  2. Select variations FILL->1 Weight->100
  3. Observe that icons are rendered incorrectly.

Here is the correct working example built using using --no-tree-shake-icons flag

  1. Visit https://timmaffett.github.io/material_symbols_icons/
  2. Select variations FILL->1 Weight->100
  3. Observe that icons are rendered correctly.

You could also checkout the material_symbols_icons and build the example using

flutter build web --release 

or for working version building without icon tree shaking:

flutter build web --release --no-tree-shake-icons

Expected results

no-tree-shake-icons

Actual results

default_tree-shake-icons

Code sample

Code sample
[Paste your code here]

Screenshots or Video

Screenshots / Video demonstration

[Upload media here]

Logs

Logs

This is the results of the release build of the web example. Note icon tree-shake is resulting in 30% savings even though the example uses every icon. This is caused by font-subset dropping the GSUB font table, which is needed for these variable fonts to properly render all variation axes.

C:\src\material_symbols_icons\example>flutter build web --release --web-renderer canvaskit --base-href "/material_symbols_icons_showing_tree_shake_bug/"

Font asset "CupertinoIcons.ttf" was tree-shaken, reducing it from 283452 to 1236 bytes (99.6% reduction). Tree-shaking
can be disabled by providing the --no-tree-shake-icons flag when building your app.
Font asset "MaterialSymbolsSharp[FILL,GRAD,opsz,wght].ttf" was tree-shaken, reducing it from 5848492 to 4079548 bytes
(30.2% reduction). Tree-shaking can be disabled by providing the --no-tree-shake-icons flag when building your app.
Font asset "MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].ttf" was tree-shaken, reducing it from 6944756 to 4781576 bytes(31.1% reduction). Tree-shaking can be disabled by providing the --no-tree-shake-icons flag when building your app.
Font asset "MaterialIcons-Regular.otf" was tree-shaken, reducing it from 1645184 to 10808 bytes (99.3% reduction).
Tree-shaking can be disabled by providing the --no-tree-shake-icons flag when building your app.
Font asset "MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf" was tree-shaken, reducing it from 9361824 to 6397020 bytes
(31.7% reduction). Tree-shaking can be disabled by providing the --no-tree-shake-icons flag when building your app.
Compiling lib\main.dart for the Web...                             63.8s

Flutter Doctor output

Doctor output
C:\src\flutter>flutter doctor -v
[✓] Flutter (Channel master, 3.10.0-12.0.pre.38, on Microsoft Windows [Version 10.0.25336.1010], locale en-US)
    • Flutter version 3.10.0-12.0.pre.38 on channel master at C:\src\flutter
    • Upstream repository [email protected]:flutter/flutter.git
    • Framework revision 1a51dc2131 (4 days ago), 2023-04-24 12:25:21 -0700
    • Engine revision 5fbde6c0fc
    • Dart version 3.1.0 (build 3.1.0-35.0.dev)
    • DevTools version 2.23.1

[✓] Windows Version (Installed version of Windows is version 10 or higher)

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at xxxxxx\Android\sdk
    • Platform android-33, build-tools 33.0.0
    • Java binary at: C:\Program Files\Android\Android Studio\jbr\bin\java
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-b2043.56-9586694)
    • All Android licenses accepted.

[✓] Chrome - develop for the web
    • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

[✓] Visual Studio - develop for Windows (Visual Studio Community 2022 17.5.4)
    • Visual Studio at C:\Program Files\Microsoft Visual Studio\2022\Community
    • Visual Studio Community 2022 version 17.5.33530.505
    • Windows 10 SDK version 10.0.22621.0

[✓] Android Studio (version 2022.2)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-b2043.56-9586694)

[✓] Android Studio (version 4.2)
    • Android Studio at C:\src\OLD_android_studios\android-studio-ide-202.7094744
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6842174)

[✓] IntelliJ IDEA Community Edition (version 2020.1)
    • IntelliJ at C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.1.1
    • Flutter plugin version 51.0.2
    • Dart plugin version 201.7223.99

[✓] VS Code (version 1.77.3)
    • VS Code at C:\Users\Tim\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.62.0

[✓] Connected device (3 available)
    • Windows (desktop) • windows • windows-x64    • Microsoft Windows [Version 10.0.25336.1010]
    • Chrome (web)      • chrome  • web-javascript • Google Chrome 112.0.5615.138
    • Edge (web)        • edge    • web-javascript • Microsoft Edge 112.0.1722.48

[✓] Network resources
    • All expected network resources are available.

• No issues found!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions