Last active
January 23, 2026 16:48
-
-
Save fredgrott/6eaddfab306af547d69272d89be9befe to your computer and use it in GitHub Desktop.
M3ECustomExpressive
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. | |
| 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