resolveStyle static method
Turns a map of active attributes into a TextStyle on top of base.
Implementation
static TextStyle resolveStyle(Map<UInlineAttr, Object?> active, TextStyle base, ColorScheme cs) {
final bool link = active.containsKey(UInlineAttr.link);
final bool inlineCode = active.containsKey(UInlineAttr.code);
final List<TextDecoration> decos = <TextDecoration>[
if (active.containsKey(UInlineAttr.underline) || link) TextDecoration.underline,
if (active.containsKey(UInlineAttr.strikethrough)) TextDecoration.lineThrough,
];
final int? color = active[UInlineAttr.color] as int?;
final int? highlight = active[UInlineAttr.highlight] as int?;
final double? size = active[UInlineAttr.fontSize] as double?;
final bool sup = active.containsKey(UInlineAttr.superscript);
final bool sub = active.containsKey(UInlineAttr.subscript);
// Sub/superscript are approximated with a smaller font plus a baseline shift.
final double? resolvedSize = sup || sub ? (size ?? base.fontSize ?? 16) * 0.72 : size;
return base.copyWith(
fontWeight: active.containsKey(UInlineAttr.bold) ? FontWeight.bold : null,
fontStyle: active.containsKey(UInlineAttr.italic) ? FontStyle.italic : null,
decoration: decos.isEmpty ? null : TextDecoration.combine(decos),
decorationColor: link
? cs.primary
: color != null
? Color(color)
: null,
color: link
? cs.primary
: color != null
? Color(color)
: (inlineCode ? cs.error : null),
backgroundColor: highlight != null ? Color(highlight) : (inlineCode ? cs.surfaceContainerHighest : null),
fontSize: resolvedSize,
fontFamily: active.containsKey(UInlineAttr.fontFamily) ? active[UInlineAttr.fontFamily] as String? : (inlineCode ? "monospace" : null),
height: sup || sub ? 1.0 : null,
textBaseline: TextBaseline.alphabetic,
);
}