| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:flutter/foundation.dart'; |
| |
| import 'basic_types.dart'; |
| |
| @immutable |
| class TextStyle { |
| /// Whether null values are replaced with their value in an ancestor text |
| /// style (e.g., in a [TextSpan] tree). |
| /// |
| /// If this is false, properties that don't have explicit values will revert |
| /// to the defaults: white in color, a font size of 10 pixels, in a sans-serif |
| /// font face. |
| final bool inherit; |
| |
| /// The name of the font to use when painting the text (e.g., Roboto). If the |
| /// font is defined in a package, this will be prefixed with |
| /// 'packages/package_name/' (e.g. 'packages/cool_fonts/Roboto'). The |
| /// prefixing is done by the constructor when the `package` argument is |
| /// provided. |
| /// |
| /// The value provided in [fontFamily] will act as the preferred/first font |
| /// family that glyphs are looked for in, followed in order by the font families |
| /// in [fontFamilyFallback]. When [fontFamily] is null or not provided, the |
| /// first value in [fontFamilyFallback] acts as the preferred/first font |
| /// family. When neither is provided, then the default platform font will |
| /// be used. |
| final String fontFamily; |
| |
| /// The size of glyphs (in logical pixels) to use when painting the text. |
| /// |
| /// During painting, the [fontSize] is multiplied by the current |
| /// `textScaleFactor` to let users make it easier to read text by increasing |
| /// its size. |
| /// |
| /// [getParagraphStyle] will default to 14 logical pixels if the font size |
| /// isn't specified here. |
| final double fontSize; |
| |
| /// The typeface thickness to use when painting the text (e.g., bold). |
| final FontWeight fontWeight; |
| |
| /// The typeface variant to use when drawing the letters (e.g., italics). |
| final FontStyle fontStyle; |
| |
| /// The amount of space (in logical pixels) to add between each letter. |
| /// A negative value can be used to bring the letters closer. |
| final double letterSpacing; |
| |
| /// The amount of space (in logical pixels) to add at each sequence of |
| /// white-space (i.e. between each word). A negative value can be used to |
| /// bring the words closer. |
| final double wordSpacing; |
| |
| /// The common baseline that should be aligned between this text span and its |
| /// parent text span, or, for the root text spans, with the line box. |
| final TextBaseline textBaseline; |
| |
| /// The height of this text span, as a multiple of the font size. |
| /// |
| /// When [height] is null or omitted, the line height will be determined |
| /// by the font's metrics directly, which may differ from the fontSize. |
| /// When [height] is non-null, the line height of the span of text will be a |
| /// multiple of [fontSize] and be exactly `fontSize * height` logical pixels |
| /// tall. |
| /// |
| /// For most fonts, setting [height] to 1.0 is not the same as omitting or |
| /// setting height to null because the [fontSize] sets the height of the EM-square, |
| /// which is different than the font provided metrics for line height. The |
| /// following diagram illustrates the difference between the font-metrics |
| /// defined line height and the line height produced with `height: 1.0` |
| /// (which forms the upper and lower edges of the EM-square): |
| /// |
| /// ![Text height diagram](https://flutter.github.io/assets-for-api-docs/assets/painting/text_height_diagram.png) |
| /// |
| /// {@tool sample} |
| /// |
| /// Examples of the resulting line heights from different values of `TextStyle.height`: |
| /// |
| /// ![Text height comparison diagram](https://flutter.github.io/assets-for-api-docs/assets/painting/text_height_comparison_diagram.png) |
| /// |
| /// {@end-tool} |
| final double height; |
| |
| /// The thickness of the decoration stroke as a muliplier of the thickness |
| /// defined by the font. |
| /// |
| /// The font provides a base stroke width for [decoration]s which scales off |
| /// of the [fontSize]. This property may be used to achieve a thinner or |
| /// thicker decoration stroke, without changing the [fontSize]. For example, |
| /// a [decorationThickness] of 2.0 will draw a decoration twice as thick as |
| /// the font defined decoration thickness. |
| /// |
| /// The default [decorationThickness] is 1.0, which will use the font's base |
| /// stroke thickness/width. |
| final double decorationThickness; |
| |
| /// Creates a text style. |
| /// |
| /// The `package` argument must be non-null if the font family is defined in a |
| /// package. It is combined with the `fontFamily` argument to set the |
| /// [fontFamily] property. |
| const TextStyle({ |
| this.inherit = true, |
| this.fontSize, |
| this.fontWeight, |
| this.fontStyle, |
| this.letterSpacing, |
| this.wordSpacing, |
| this.textBaseline, |
| this.height, |
| this.decorationThickness, |
| String fontFamily, |
| List<String> fontFamilyFallback, |
| String package, |
| }) : fontFamily = |
| package == null ? fontFamily : 'packages/$package/$fontFamily'; |
| } |