Created
January 26, 2026 14:10
-
-
Save fredgrott/21a3b1dc7fbfab20915dfae08f1f12cb to your computer and use it in GitHub Desktop.
M3EEmphasized
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /// Expressive emphasis tweaks layered on top of baseline M3 type. | |
| /// Keep line-height the same; only tune weight/letter-spacing for emphasis. | |
| /// For most purposes, the M3ECustomEmphasized() construct is used. | |
| @immutable | |
| class M3ECustomEmphasized { | |
| final TextStyle expressiveDisplayLarge; | |
| final TextStyle expressiveDisplayMedium; | |
| final TextStyle expressiveDisplaySmall; | |
| final TextStyle expressiveHeadlineLarge; | |
| final TextStyle expressiveHeadlineMedium; | |
| final TextStyle expressiveHeadlineSmall; | |
| final TextStyle expressiveTitleLarge; | |
| final TextStyle expressiveTitleMedium; | |
| final TextStyle expressiveTitleSmall; | |
| final TextStyle expressiveBodyLarge; | |
| final TextStyle expressiveBodyMedium; | |
| final TextStyle expressiveBodySmall; | |
| final TextStyle expressiveLabelLarge; | |
| final TextStyle expressiveLabelMedium; | |
| final TextStyle expressiveLabelSmall; | |
| const M3ECustomEmphasized({ | |
| required this.expressiveDisplayLarge, | |
| required this.expressiveDisplayMedium, | |
| required this.expressiveDisplaySmall, | |
| required this.expressiveHeadlineLarge, | |
| required this.expressiveHeadlineMedium, | |
| required this.expressiveHeadlineSmall, | |
| required this.expressiveTitleLarge, | |
| required this.expressiveTitleMedium, | |
| required this.expressiveTitleSmall, | |
| required this.expressiveBodyLarge, | |
| required this.expressiveBodyMedium, | |
| required this.expressiveBodySmall, | |
| required this.expressiveLabelLarge, | |
| required this.expressiveLabelMedium, | |
| required this.expressiveLabelSmall, | |
| }); | |
| /// M3E guidance: slightly heavier weights and tighter tracking for large roles. | |
| /// Since I use varaible fonts it has to have those parameters. | |
| static M3ECustomEmphasized forBrightness(Brightness b) { | |
| // You could vary by brightness if desired; values below are neutral. | |
| return M3ECustomEmphasized( | |
| expressiveDisplayLarge: TextStyle( | |
| fontWeight: kFontWeights().expressiveDisplayLarge, | |
| letterSpacing: kFontTracking().expressiveDisplayLarge, // subtle tightening on big sizes | |
| ), | |
| expressiveDisplayMedium: TextStyle( | |
| fontWeight: kFontWeights().expressiveDisplayMedium, | |
| letterSpacing: kFontTracking().expressiveDisplayMedium, // subtle tightening on big sizes | |
| ), | |
| expressiveDisplaySmall: TextStyle( | |
| fontWeight: kFontWeights().expressiveDisplaySmall, | |
| letterSpacing: kFontTracking().expressiveDisplaySmall, // subtle tightening on big sizes | |
| ), | |
| expressiveHeadlineLarge: TextStyle(fontWeight: kFontWeights().expressiveHeadlineLarge, letterSpacing: kFontTracking().expressiveHeadlineLarge), | |
| expressiveHeadlineMedium: TextStyle(fontWeight: kFontWeights().expressiveHeadlineMedium, letterSpacing: kFontTracking().expressiveHeadlineMedium), | |
| expressiveHeadlineSmall: TextStyle(fontWeight: kFontWeights().expressiveHeadlineSmall, letterSpacing: kFontTracking().expressiveHeadlineSmall), | |
| expressiveTitleLarge: TextStyle(fontWeight: kFontWeights().expressiveTitleLarge, letterSpacing: kFontTracking().expressiveTitleLarge), | |
| expressiveTitleMedium: TextStyle(fontWeight: kFontWeights().expressiveTitleMedium, letterSpacing: kFontTracking().expressiveTitleMedium), | |
| expressiveTitleSmall: TextStyle(fontWeight: kFontWeights().expressiveTitleSmall, letterSpacing: kFontTracking().expressiveTitleSmall), | |
| expressiveBodyLarge: TextStyle(fontWeight: kFontWeights().expressiveBodyLarge, letterSpacing: kFontTracking().expressiveBodyLarge), | |
| expressiveBodyMedium: TextStyle(fontWeight: kFontWeights().expressiveBodyMedium, letterSpacing: kFontTracking().expressiveBodyMedium), | |
| expressiveBodySmall: TextStyle(fontWeight: kFontWeights().expressiveBodySmall, letterSpacing: kFontTracking().expressiveBodySmall), | |
| expressiveLabelLarge: TextStyle(fontWeight: kFontWeights().expressiveLabelLarge, letterSpacing: kFontTracking().expressiveLabelLarge), | |
| expressiveLabelMedium: TextStyle(fontWeight: kFontWeights().expressiveLabelMedium, letterSpacing: kFontTracking().expressiveLabelMedium), | |
| expressiveLabelSmall: TextStyle(fontWeight: kFontWeights().expressiveLabelSmall, letterSpacing: kFontTracking().expressiveLabelSmall), | |
| ); | |
| } | |
| static M3ECustomEmphasized lerp(M3ECustomEmphasized a, M3ECustomEmphasized b, double t) => M3ECustomEmphasized( | |
| expressiveDisplayLarge: TextStyle.lerp(a.expressiveDisplayLarge, b.expressiveDisplayLarge, t)!, | |
| expressiveDisplayMedium: TextStyle.lerp(a.expressiveDisplayMedium, b.expressiveDisplayMedium, t)!, | |
| expressiveDisplaySmall: TextStyle.lerp(a.expressiveDisplaySmall, b.expressiveDisplaySmall, t)!, | |
| expressiveHeadlineLarge: TextStyle.lerp(a.expressiveHeadlineLarge, b.expressiveHeadlineLarge, t)!, | |
| expressiveHeadlineMedium: TextStyle.lerp(a.expressiveHeadlineMedium, b.expressiveHeadlineMedium, t)!, | |
| expressiveHeadlineSmall: TextStyle.lerp(a.expressiveHeadlineSmall, b.expressiveHeadlineSmall, t)!, | |
| expressiveTitleLarge: TextStyle.lerp(a.expressiveTitleLarge, b.expressiveTitleLarge, t)!, | |
| expressiveTitleMedium: TextStyle.lerp(a.expressiveTitleMedium, b.expressiveTitleMedium, t)!, | |
| expressiveTitleSmall: TextStyle.lerp(a.expressiveTitleSmall, b.expressiveTitleSmall, t)!, | |
| expressiveBodyLarge: TextStyle.lerp(a.expressiveBodyLarge, b.expressiveBodyLarge, t)!, | |
| expressiveBodyMedium: TextStyle.lerp(a.expressiveBodyMedium, b.expressiveBodyMedium, t)!, | |
| expressiveBodySmall: TextStyle.lerp(a.expressiveBodySmall, b.expressiveBodySmall, t)!, | |
| expressiveLabelLarge: TextStyle.lerp(a.expressiveLabelLarge, b.expressiveLabelLarge, t)!, | |
| expressiveLabelMedium: TextStyle.lerp(a.expressiveLabelMedium, b.expressiveLabelMedium, t)!, | |
| expressiveLabelSmall: TextStyle.lerp(a.expressiveLabelSmall, b.expressiveLabelSmall, t)!, | |
| ); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment