Framework support for font features in text styles (#33230)
See https://github.com/flutter/flutter/issues/31691
This commit is contained in:
parent
7c811b6a66
commit
841286d652
@ -2,7 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
import 'dart:ui' as ui show ParagraphStyle, TextStyle, StrutStyle, lerpDouble, Shadow;
|
import 'dart:ui' as ui show ParagraphStyle, TextStyle, StrutStyle, lerpDouble, Shadow, FontFeature;
|
||||||
|
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
|
||||||
@ -316,6 +316,7 @@ class TextStyle extends Diagnosticable {
|
|||||||
this.foreground,
|
this.foreground,
|
||||||
this.background,
|
this.background,
|
||||||
this.shadows,
|
this.shadows,
|
||||||
|
this.fontFeatures,
|
||||||
this.decoration,
|
this.decoration,
|
||||||
this.decorationColor,
|
this.decorationColor,
|
||||||
this.decorationStyle,
|
this.decorationStyle,
|
||||||
@ -562,6 +563,15 @@ class TextStyle extends Diagnosticable {
|
|||||||
/// equivalent as order produces differing transparency.
|
/// equivalent as order produces differing transparency.
|
||||||
final List<ui.Shadow> shadows;
|
final List<ui.Shadow> shadows;
|
||||||
|
|
||||||
|
/// A list of [FontFeature]s that affect how the font selects glyphs.
|
||||||
|
///
|
||||||
|
/// Some fonts support multiple variants of how a given character can be
|
||||||
|
/// rendered. For example, a font might provide both proportional and
|
||||||
|
/// tabular numbers, or it might offer versions of the zero digit with
|
||||||
|
/// and without slashes. [FontFeature]s can be used to select which of
|
||||||
|
/// these variants will be used for rendering.
|
||||||
|
final List<ui.FontFeature> fontFeatures;
|
||||||
|
|
||||||
/// Creates a copy of this text style but with the given fields replaced with
|
/// Creates a copy of this text style but with the given fields replaced with
|
||||||
/// the new values.
|
/// the new values.
|
||||||
///
|
///
|
||||||
@ -588,6 +598,7 @@ class TextStyle extends Diagnosticable {
|
|||||||
Paint foreground,
|
Paint foreground,
|
||||||
Paint background,
|
Paint background,
|
||||||
List<ui.Shadow> shadows,
|
List<ui.Shadow> shadows,
|
||||||
|
List<ui.FontFeature> fontFeatures,
|
||||||
TextDecoration decoration,
|
TextDecoration decoration,
|
||||||
Color decorationColor,
|
Color decorationColor,
|
||||||
TextDecorationStyle decorationStyle,
|
TextDecorationStyle decorationStyle,
|
||||||
@ -619,6 +630,7 @@ class TextStyle extends Diagnosticable {
|
|||||||
foreground: foreground ?? this.foreground,
|
foreground: foreground ?? this.foreground,
|
||||||
background: background ?? this.background,
|
background: background ?? this.background,
|
||||||
shadows: shadows ?? this.shadows,
|
shadows: shadows ?? this.shadows,
|
||||||
|
fontFeatures: fontFeatures ?? this.fontFeatures,
|
||||||
decoration: decoration ?? this.decoration,
|
decoration: decoration ?? this.decoration,
|
||||||
decorationColor: decorationColor ?? this.decorationColor,
|
decorationColor: decorationColor ?? this.decorationColor,
|
||||||
decorationStyle: decorationStyle ?? this.decorationStyle,
|
decorationStyle: decorationStyle ?? this.decorationStyle,
|
||||||
@ -718,6 +730,7 @@ class TextStyle extends Diagnosticable {
|
|||||||
foreground: foreground,
|
foreground: foreground,
|
||||||
background: background,
|
background: background,
|
||||||
shadows: shadows,
|
shadows: shadows,
|
||||||
|
fontFeatures: fontFeatures,
|
||||||
decoration: decoration ?? this.decoration,
|
decoration: decoration ?? this.decoration,
|
||||||
decorationColor: decorationColor ?? this.decorationColor,
|
decorationColor: decorationColor ?? this.decorationColor,
|
||||||
decorationStyle: decorationStyle ?? this.decorationStyle,
|
decorationStyle: decorationStyle ?? this.decorationStyle,
|
||||||
@ -776,6 +789,7 @@ class TextStyle extends Diagnosticable {
|
|||||||
foreground: other.foreground,
|
foreground: other.foreground,
|
||||||
background: other.background,
|
background: other.background,
|
||||||
shadows: other.shadows,
|
shadows: other.shadows,
|
||||||
|
fontFeatures: other.fontFeatures,
|
||||||
decoration: other.decoration,
|
decoration: other.decoration,
|
||||||
decorationColor: other.decorationColor,
|
decorationColor: other.decorationColor,
|
||||||
decorationStyle: other.decorationStyle,
|
decorationStyle: other.decorationStyle,
|
||||||
@ -829,6 +843,7 @@ class TextStyle extends Diagnosticable {
|
|||||||
background: t < 0.5 ? null : b.background,
|
background: t < 0.5 ? null : b.background,
|
||||||
decoration: t < 0.5 ? null : b.decoration,
|
decoration: t < 0.5 ? null : b.decoration,
|
||||||
shadows: t < 0.5 ? null : b.shadows,
|
shadows: t < 0.5 ? null : b.shadows,
|
||||||
|
fontFeatures: t < 0.5 ? null : b.fontFeatures,
|
||||||
decorationColor: Color.lerp(null, b.decorationColor, t),
|
decorationColor: Color.lerp(null, b.decorationColor, t),
|
||||||
decorationStyle: t < 0.5 ? null : b.decorationStyle,
|
decorationStyle: t < 0.5 ? null : b.decorationStyle,
|
||||||
decorationThickness: t < 0.5 ? null : b.decorationThickness,
|
decorationThickness: t < 0.5 ? null : b.decorationThickness,
|
||||||
@ -854,6 +869,7 @@ class TextStyle extends Diagnosticable {
|
|||||||
foreground: t < 0.5 ? a.foreground : null,
|
foreground: t < 0.5 ? a.foreground : null,
|
||||||
background: t < 0.5 ? a.background : null,
|
background: t < 0.5 ? a.background : null,
|
||||||
shadows: t < 0.5 ? a.shadows : null,
|
shadows: t < 0.5 ? a.shadows : null,
|
||||||
|
fontFeatures: t < 0.5 ? a.fontFeatures : null,
|
||||||
decoration: t < 0.5 ? a.decoration : null,
|
decoration: t < 0.5 ? a.decoration : null,
|
||||||
decorationColor: Color.lerp(a.decorationColor, null, t),
|
decorationColor: Color.lerp(a.decorationColor, null, t),
|
||||||
decorationStyle: t < 0.5 ? a.decorationStyle : null,
|
decorationStyle: t < 0.5 ? a.decorationStyle : null,
|
||||||
@ -887,6 +903,7 @@ class TextStyle extends Diagnosticable {
|
|||||||
: b.background ?? (Paint()..color = b.backgroundColor)
|
: b.background ?? (Paint()..color = b.backgroundColor)
|
||||||
: null,
|
: null,
|
||||||
shadows: t < 0.5 ? a.shadows : b.shadows,
|
shadows: t < 0.5 ? a.shadows : b.shadows,
|
||||||
|
fontFeatures: t < 0.5 ? a.fontFeatures : b.fontFeatures,
|
||||||
decoration: t < 0.5 ? a.decoration : b.decoration,
|
decoration: t < 0.5 ? a.decoration : b.decoration,
|
||||||
decorationColor: Color.lerp(a.decorationColor, b.decorationColor, t),
|
decorationColor: Color.lerp(a.decorationColor, b.decorationColor, t),
|
||||||
decorationStyle: t < 0.5 ? a.decorationStyle : b.decorationStyle,
|
decorationStyle: t < 0.5 ? a.decorationStyle : b.decorationStyle,
|
||||||
@ -919,6 +936,7 @@ class TextStyle extends Diagnosticable {
|
|||||||
: null
|
: null
|
||||||
),
|
),
|
||||||
shadows: shadows,
|
shadows: shadows,
|
||||||
|
fontFeatures: fontFeatures,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -994,6 +1012,7 @@ class TextStyle extends Diagnosticable {
|
|||||||
foreground != other.foreground ||
|
foreground != other.foreground ||
|
||||||
background != other.background ||
|
background != other.background ||
|
||||||
!listEquals(shadows, other.shadows) ||
|
!listEquals(shadows, other.shadows) ||
|
||||||
|
!listEquals(fontFeatures, other.fontFeatures) ||
|
||||||
!listEquals(fontFamilyFallback, other.fontFamilyFallback))
|
!listEquals(fontFamilyFallback, other.fontFamilyFallback))
|
||||||
return RenderComparison.layout;
|
return RenderComparison.layout;
|
||||||
if (color != other.color ||
|
if (color != other.color ||
|
||||||
@ -1032,6 +1051,7 @@ class TextStyle extends Diagnosticable {
|
|||||||
decorationStyle == typedOther.decorationStyle &&
|
decorationStyle == typedOther.decorationStyle &&
|
||||||
decorationThickness == typedOther.decorationThickness &&
|
decorationThickness == typedOther.decorationThickness &&
|
||||||
listEquals(shadows, typedOther.shadows) &&
|
listEquals(shadows, typedOther.shadows) &&
|
||||||
|
listEquals(fontFeatures, typedOther.fontFeatures) &&
|
||||||
listEquals(fontFamilyFallback, typedOther.fontFamilyFallback);
|
listEquals(fontFamilyFallback, typedOther.fontFamilyFallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1057,6 +1077,7 @@ class TextStyle extends Diagnosticable {
|
|||||||
decorationColor,
|
decorationColor,
|
||||||
decorationStyle,
|
decorationStyle,
|
||||||
shadows,
|
shadows,
|
||||||
|
fontFeatures,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -719,6 +719,8 @@ class _TextStyleProxy implements TextStyle {
|
|||||||
double get wordSpacing => _delegate.wordSpacing;
|
double get wordSpacing => _delegate.wordSpacing;
|
||||||
@override
|
@override
|
||||||
List<Shadow> get shadows => _delegate.shadows;
|
List<Shadow> get shadows => _delegate.shadows;
|
||||||
|
@override
|
||||||
|
List<ui.FontFeature> get fontFeatures => _delegate.fontFeatures;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString({ DiagnosticLevel minLevel = DiagnosticLevel.debug }) =>
|
String toString({ DiagnosticLevel minLevel = DiagnosticLevel.debug }) =>
|
||||||
@ -781,6 +783,7 @@ class _TextStyleProxy implements TextStyle {
|
|||||||
ui.Paint foreground,
|
ui.Paint foreground,
|
||||||
ui.Paint background,
|
ui.Paint background,
|
||||||
List<Shadow> shadows,
|
List<Shadow> shadows,
|
||||||
|
List<ui.FontFeature> fontFeatures,
|
||||||
TextDecoration decoration,
|
TextDecoration decoration,
|
||||||
Color decorationColor,
|
Color decorationColor,
|
||||||
TextDecorationStyle decorationStyle,
|
TextDecorationStyle decorationStyle,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user