| /* |
| * Copyright 2019 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package androidx.compose.ui.text |
| |
| import androidx.compose.runtime.Immutable |
| import androidx.compose.runtime.Stable |
| import androidx.compose.ui.graphics.Brush |
| import androidx.compose.ui.graphics.Color |
| import androidx.compose.ui.graphics.Shadow |
| import androidx.compose.ui.graphics.drawscope.DrawStyle |
| import androidx.compose.ui.text.font.FontFamily |
| import androidx.compose.ui.text.font.FontStyle |
| import androidx.compose.ui.text.font.FontSynthesis |
| import androidx.compose.ui.text.font.FontWeight |
| import androidx.compose.ui.text.intl.LocaleList |
| import androidx.compose.ui.text.style.BaselineShift |
| import androidx.compose.ui.text.style.Hyphens |
| import androidx.compose.ui.text.style.LineBreak |
| import androidx.compose.ui.text.style.LineHeightStyle |
| import androidx.compose.ui.text.style.TextAlign |
| import androidx.compose.ui.text.style.TextDecoration |
| import androidx.compose.ui.text.style.TextDirection |
| import androidx.compose.ui.text.style.TextForegroundStyle |
| import androidx.compose.ui.text.style.TextGeometricTransform |
| import androidx.compose.ui.text.style.TextIndent |
| import androidx.compose.ui.text.style.TextMotion |
| import androidx.compose.ui.unit.LayoutDirection |
| import androidx.compose.ui.unit.TextUnit |
| |
| /** |
| * Styling configuration for a `Text`. |
| * |
| * @sample androidx.compose.ui.text.samples.TextStyleSample |
| * |
| * @param platformStyle Platform specific [TextStyle] parameters. |
| * @param linkStyles Sets styles for the links in different states if present in |
| * [AnnotatedString] that this TextStyle is applied to. This object passes the styles directly to |
| * the [LinkAnnotation]s and therefore overwrites any other styling configuration set on the whole |
| * text level |
| * |
| * @see AnnotatedString |
| * @see SpanStyle |
| * @see ParagraphStyle |
| */ |
| // Maintainer note: When adding a new constructor or copy parameter, make sure to add a test case to |
| // TextStyleInvalidationTest to ensure the correct phase(s) get invalidated. |
| @Immutable |
| class TextStyle internal constructor( |
| internal val spanStyle: SpanStyle, |
| internal val paragraphStyle: ParagraphStyle, |
| val platformStyle: PlatformTextStyle? = null, |
| val linkStyles: TextLinkStyles? = null, |
| ) { |
| internal constructor( |
| spanStyle: SpanStyle, |
| paragraphStyle: ParagraphStyle, |
| linkStyles: TextLinkStyles?, |
| ) : this( |
| spanStyle = spanStyle, |
| paragraphStyle = paragraphStyle, |
| platformStyle = createPlatformTextStyleInternal( |
| spanStyle.platformStyle, |
| paragraphStyle.platformStyle |
| ), |
| linkStyles = linkStyles, |
| ) |
| |
| @Deprecated( |
| "TextStyle constructors that do not take new stable parameters " + |
| "like LineHeightStyle, LineBreak, Hyphens are deprecated. Please use the new stable " + |
| "constructor.", |
| level = DeprecationLevel.HIDDEN |
| ) |
| constructor( |
| color: Color = Color.Unspecified, |
| fontSize: TextUnit = TextUnit.Unspecified, |
| fontWeight: FontWeight? = null, |
| fontStyle: FontStyle? = null, |
| fontSynthesis: FontSynthesis? = null, |
| fontFamily: FontFamily? = null, |
| fontFeatureSettings: String? = null, |
| letterSpacing: TextUnit = TextUnit.Unspecified, |
| baselineShift: BaselineShift? = null, |
| textGeometricTransform: TextGeometricTransform? = null, |
| localeList: LocaleList? = null, |
| background: Color = Color.Unspecified, |
| textDecoration: TextDecoration? = null, |
| shadow: Shadow? = null, |
| textAlign: TextAlign? = null, |
| textDirection: TextDirection? = null, |
| lineHeight: TextUnit = TextUnit.Unspecified, |
| textIndent: TextIndent? = null |
| ) : this( |
| SpanStyle( |
| color = color, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = null, |
| drawStyle = null |
| ), |
| ParagraphStyle( |
| textAlign = textAlign ?: TextAlign.Unspecified, |
| textDirection = textDirection ?: TextDirection.Unspecified, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = null, |
| lineHeightStyle = null, |
| lineBreak = LineBreak.Unspecified, |
| hyphens = Hyphens.Unspecified, |
| textMotion = null |
| ), |
| platformStyle = null |
| ) |
| |
| @Deprecated( |
| "TextStyle constructors that do not take new stable parameters " + |
| "like LineHeightStyle, LineBreak, Hyphens are deprecated. Please use the new stable " + |
| "constructor.", |
| level = DeprecationLevel.HIDDEN |
| ) |
| constructor( |
| color: Color = Color.Unspecified, |
| fontSize: TextUnit = TextUnit.Unspecified, |
| fontWeight: FontWeight? = null, |
| fontStyle: FontStyle? = null, |
| fontSynthesis: FontSynthesis? = null, |
| fontFamily: FontFamily? = null, |
| fontFeatureSettings: String? = null, |
| letterSpacing: TextUnit = TextUnit.Unspecified, |
| baselineShift: BaselineShift? = null, |
| textGeometricTransform: TextGeometricTransform? = null, |
| localeList: LocaleList? = null, |
| background: Color = Color.Unspecified, |
| textDecoration: TextDecoration? = null, |
| shadow: Shadow? = null, |
| textAlign: TextAlign? = null, |
| textDirection: TextDirection? = null, |
| lineHeight: TextUnit = TextUnit.Unspecified, |
| textIndent: TextIndent? = null, |
| platformStyle: PlatformTextStyle? = null, |
| lineHeightStyle: LineHeightStyle? = null |
| ) : this( |
| SpanStyle( |
| color = color, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = null |
| ), |
| ParagraphStyle( |
| textAlign = textAlign ?: TextAlign.Unspecified, |
| textDirection = textDirection ?: TextDirection.Unspecified, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = LineBreak.Unspecified, |
| hyphens = Hyphens.Unspecified, |
| textMotion = null |
| ), |
| platformStyle = platformStyle |
| ) |
| |
| /** |
| * Styling configuration for a `Text`. |
| * |
| * @sample androidx.compose.ui.text.samples.TextStyleSample |
| * |
| * @param color The text color. |
| * @param fontSize The size of glyphs to use when painting the text. This |
| * may be [TextUnit.Unspecified] for inheriting from another [TextStyle]. |
| * @param fontWeight The typeface thickness to use when painting the text (e.g., bold). |
| * @param fontStyle The typeface variant to use when drawing the letters (e.g., italic). |
| * @param fontSynthesis Whether to synthesize font weight and/or style when the requested weight |
| * or style cannot be found in the provided font family. |
| * @param fontFamily The font family to be used when rendering the text. |
| * @param fontFeatureSettings The advanced typography settings provided by font. The format is |
| * the same as the CSS font-feature-settings attribute: |
| * https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop |
| * @param letterSpacing The amount of space to add between each letter. |
| * @param baselineShift The amount by which the text is shifted up from the current baseline. |
| * @param textGeometricTransform The geometric transformation applied the text. |
| * @param localeList The locale list used to select region-specific glyphs. |
| * @param background The background color for the text. |
| * @param textDecoration The decorations to paint on the text (e.g., an underline). |
| * @param shadow The shadow effect applied on the text. |
| * @param textAlign The alignment of the text within the lines of the paragraph. |
| * @param textDirection The algorithm to be used to resolve the final text and paragraph |
| * direction: Left To Right or Right To Left. If no value is provided the system will use the |
| * [LayoutDirection] as the primary signal. |
| * @param lineHeight Line height for the [Paragraph] in [TextUnit] unit, e.g. SP or EM. |
| * @param textIndent The indentation of the paragraph. |
| * @param platformStyle Platform specific [TextStyle] parameters. |
| * @param lineHeightStyle the configuration for line height such as vertical alignment of the |
| * line, whether to apply additional space as a result of line height to top of first line top |
| * and bottom of last line. The configuration is applied only when a [lineHeight] is defined. |
| * When null, [LineHeightStyle.Default] is used. |
| * @param lineBreak The line breaking configuration for the text. |
| * @param hyphens The configuration of hyphenation. |
| */ |
| @Deprecated( |
| "TextStyle constructors that do not take new stable parameters " + |
| "like TextMotion are deprecated. Please use the new stable " + |
| "constructor.", |
| level = DeprecationLevel.HIDDEN |
| ) |
| constructor( |
| color: Color = Color.Unspecified, |
| fontSize: TextUnit = TextUnit.Unspecified, |
| fontWeight: FontWeight? = null, |
| fontStyle: FontStyle? = null, |
| fontSynthesis: FontSynthesis? = null, |
| fontFamily: FontFamily? = null, |
| fontFeatureSettings: String? = null, |
| letterSpacing: TextUnit = TextUnit.Unspecified, |
| baselineShift: BaselineShift? = null, |
| textGeometricTransform: TextGeometricTransform? = null, |
| localeList: LocaleList? = null, |
| background: Color = Color.Unspecified, |
| textDecoration: TextDecoration? = null, |
| shadow: Shadow? = null, |
| textAlign: TextAlign? = null, |
| textDirection: TextDirection? = null, |
| lineHeight: TextUnit = TextUnit.Unspecified, |
| textIndent: TextIndent? = null, |
| platformStyle: PlatformTextStyle? = null, |
| lineHeightStyle: LineHeightStyle? = null, |
| lineBreak: LineBreak? = null, |
| hyphens: Hyphens? = null |
| ) : this( |
| SpanStyle( |
| color = color, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle |
| ), |
| ParagraphStyle( |
| textAlign = textAlign ?: TextAlign.Unspecified, |
| textDirection = textDirection ?: TextDirection.Unspecified, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak ?: LineBreak.Unspecified, |
| hyphens = hyphens ?: Hyphens.Unspecified |
| ), |
| platformStyle = platformStyle |
| ) |
| |
| @Deprecated("TextStyle constructors that take nullable TextAlign, " + |
| "TextDirection, LineBreak, and Hyphens are deprecated. Please use a new constructor " + |
| "where these parameters are non-nullable. Null value has been replaced by a special " + |
| "Unspecified object for performance reason.", |
| level = DeprecationLevel.HIDDEN) |
| constructor( |
| color: Color = Color.Unspecified, |
| fontSize: TextUnit = TextUnit.Unspecified, |
| fontWeight: FontWeight? = null, |
| fontStyle: FontStyle? = null, |
| fontSynthesis: FontSynthesis? = null, |
| fontFamily: FontFamily? = null, |
| fontFeatureSettings: String? = null, |
| letterSpacing: TextUnit = TextUnit.Unspecified, |
| baselineShift: BaselineShift? = null, |
| textGeometricTransform: TextGeometricTransform? = null, |
| localeList: LocaleList? = null, |
| background: Color = Color.Unspecified, |
| textDecoration: TextDecoration? = null, |
| shadow: Shadow? = null, |
| drawStyle: DrawStyle? = null, |
| textAlign: TextAlign? = null, |
| textDirection: TextDirection? = null, |
| lineHeight: TextUnit = TextUnit.Unspecified, |
| textIndent: TextIndent? = null, |
| platformStyle: PlatformTextStyle? = null, |
| lineHeightStyle: LineHeightStyle? = null, |
| lineBreak: LineBreak? = null, |
| hyphens: Hyphens? = null, |
| textMotion: TextMotion? = null, |
| ) : this( |
| SpanStyle( |
| color = color, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ), |
| ParagraphStyle( |
| textAlign = textAlign ?: TextAlign.Unspecified, |
| textDirection = textDirection ?: TextDirection.Unspecified, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak ?: LineBreak.Unspecified, |
| hyphens = hyphens ?: Hyphens.Unspecified, |
| textMotion = textMotion |
| ), |
| platformStyle = platformStyle |
| ) |
| |
| @Deprecated("Kept for binary compatibiltiy", level = DeprecationLevel.HIDDEN) |
| constructor( |
| color: Color = Color.Unspecified, |
| fontSize: TextUnit = TextUnit.Unspecified, |
| fontWeight: FontWeight? = null, |
| fontStyle: FontStyle? = null, |
| fontSynthesis: FontSynthesis? = null, |
| fontFamily: FontFamily? = null, |
| fontFeatureSettings: String? = null, |
| letterSpacing: TextUnit = TextUnit.Unspecified, |
| baselineShift: BaselineShift? = null, |
| textGeometricTransform: TextGeometricTransform? = null, |
| localeList: LocaleList? = null, |
| background: Color = Color.Unspecified, |
| textDecoration: TextDecoration? = null, |
| shadow: Shadow? = null, |
| drawStyle: DrawStyle? = null, |
| textAlign: TextAlign = TextAlign.Unspecified, |
| textDirection: TextDirection = TextDirection.Unspecified, |
| lineHeight: TextUnit = TextUnit.Unspecified, |
| textIndent: TextIndent? = null, |
| platformStyle: PlatformTextStyle? = null, |
| lineHeightStyle: LineHeightStyle? = null, |
| lineBreak: LineBreak = LineBreak.Unspecified, |
| hyphens: Hyphens = Hyphens.Unspecified, |
| textMotion: TextMotion? = null, |
| ) : this( |
| SpanStyle( |
| color = color, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ), |
| ParagraphStyle( |
| textAlign = textAlign, |
| textDirection = textDirection, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak, |
| hyphens = hyphens, |
| textMotion = textMotion |
| ), |
| platformStyle = platformStyle |
| ) |
| |
| /** |
| * Styling configuration for a `Text`. |
| * |
| * @sample androidx.compose.ui.text.samples.TextStyleSample |
| * |
| * @param color The text color. |
| * @param fontSize The size of glyphs to use when painting the text. This |
| * may be [TextUnit.Unspecified] for inheriting from another [TextStyle]. |
| * @param fontWeight The typeface thickness to use when painting the text (e.g., bold). |
| * @param fontStyle The typeface variant to use when drawing the letters (e.g., italic). |
| * @param fontSynthesis Whether to synthesize font weight and/or style when the requested weight |
| * or style cannot be found in the provided font family. |
| * @param fontFamily The font family to be used when rendering the text. |
| * @param fontFeatureSettings The advanced typography settings provided by font. The format is |
| * the same as the CSS font-feature-settings attribute: |
| * https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop |
| * @param letterSpacing The amount of space to add between each letter. |
| * @param baselineShift The amount by which the text is shifted up from the current baseline. |
| * @param textGeometricTransform The geometric transformation applied the text. |
| * @param localeList The locale list used to select region-specific glyphs. |
| * @param background The background color for the text. |
| * @param textDecoration The decorations to paint on the text (e.g., an underline). |
| * @param shadow The shadow effect applied on the text. |
| * @param drawStyle Drawing style of text, whether fill in the text while drawing or stroke |
| * around the edges. |
| * @param textAlign The alignment of the text within the lines of the paragraph. |
| * @param textDirection The algorithm to be used to resolve the final text and paragraph |
| * direction: Left To Right or Right To Left. If no value is provided the system will use the |
| * [LayoutDirection] as the primary signal. |
| * @param lineHeight Line height for the [Paragraph] in [TextUnit] unit, e.g. SP or EM. |
| * @param textIndent The indentation of the paragraph. |
| * @param platformStyle Platform specific [TextStyle] parameters. |
| * @param lineHeightStyle the configuration for line height such as vertical alignment of the |
| * line, whether to apply additional space as a result of line height to top of first line top |
| * and bottom of last line. The configuration is applied only when a [lineHeight] is defined. |
| * When null, [LineHeightStyle.Default] is used. |
| * @param lineBreak The line breaking configuration for the text. |
| * @param hyphens The configuration of hyphenation. |
| * @param textMotion Text character placement, whether to optimize for animated or static text. |
| * @param linkStyles Sets styles for the links in different states if present in |
| * [AnnotatedString] that this TextStyle is applied to. This object passes the styles directly |
| * to the [LinkAnnotation]s and therefore overwrites any other styling configuration set on |
| * the whole text level |
| */ |
| constructor( |
| color: Color = Color.Unspecified, |
| fontSize: TextUnit = TextUnit.Unspecified, |
| fontWeight: FontWeight? = null, |
| fontStyle: FontStyle? = null, |
| fontSynthesis: FontSynthesis? = null, |
| fontFamily: FontFamily? = null, |
| fontFeatureSettings: String? = null, |
| letterSpacing: TextUnit = TextUnit.Unspecified, |
| baselineShift: BaselineShift? = null, |
| textGeometricTransform: TextGeometricTransform? = null, |
| localeList: LocaleList? = null, |
| background: Color = Color.Unspecified, |
| textDecoration: TextDecoration? = null, |
| shadow: Shadow? = null, |
| drawStyle: DrawStyle? = null, |
| textAlign: TextAlign = TextAlign.Unspecified, |
| textDirection: TextDirection = TextDirection.Unspecified, |
| lineHeight: TextUnit = TextUnit.Unspecified, |
| textIndent: TextIndent? = null, |
| platformStyle: PlatformTextStyle? = null, |
| lineHeightStyle: LineHeightStyle? = null, |
| lineBreak: LineBreak = LineBreak.Unspecified, |
| hyphens: Hyphens = Hyphens.Unspecified, |
| textMotion: TextMotion? = null, |
| linkStyles: TextLinkStyles? = null, |
| ) : this( |
| SpanStyle( |
| color = color, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ), |
| ParagraphStyle( |
| textAlign = textAlign, |
| textDirection = textDirection, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak, |
| hyphens = hyphens, |
| textMotion = textMotion |
| ), |
| platformStyle = platformStyle, |
| linkStyles = linkStyles, |
| ) |
| |
| /** |
| * Styling configuration for a `Text`. |
| * |
| * @sample androidx.compose.ui.text.samples.TextStyleBrushSample |
| * |
| * @param brush The brush to use when painting the text. If brush is given as null, it will be |
| * treated as unspecified. It is equivalent to calling the alternative color constructor with |
| * [Color.Unspecified] |
| * @param alpha Opacity to be applied to [brush] from 0.0f to 1.0f representing fully |
| * transparent to fully opaque respectively. |
| * @param fontSize The size of glyphs to use when painting the text. This |
| * may be [TextUnit.Unspecified] for inheriting from another [TextStyle]. |
| * @param fontWeight The typeface thickness to use when painting the text (e.g., bold). |
| * @param fontStyle The typeface variant to use when drawing the letters (e.g., italic). |
| * @param fontSynthesis Whether to synthesize font weight and/or style when the requested weight |
| * or style cannot be found in the provided font family. |
| * @param fontFamily The font family to be used when rendering the text. |
| * @param fontFeatureSettings The advanced typography settings provided by font. The format is |
| * the same as the CSS font-feature-settings attribute: |
| * https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop |
| * @param letterSpacing The amount of space to add between each letter. |
| * @param baselineShift The amount by which the text is shifted up from the current baseline. |
| * @param textGeometricTransform The geometric transformation applied the text. |
| * @param localeList The locale list used to select region-specific glyphs. |
| * @param background The background color for the text. |
| * @param textDecoration The decorations to paint on the text (e.g., an underline). |
| * @param shadow The shadow effect applied on the text. |
| * @param drawStyle Drawing style of text, whether fill in the text while drawing or stroke |
| * around the edges. |
| * @param textAlign The alignment of the text within the lines of the paragraph. |
| * @param textDirection The algorithm to be used to resolve the final text and paragraph |
| * direction: Left To Right or Right To Left. If no value is provided the system will use the |
| * [LayoutDirection] as the primary signal. |
| * @param lineHeight Line height for the [Paragraph] in [TextUnit] unit, e.g. SP or EM. |
| * @param textIndent The indentation of the paragraph. |
| * @param platformStyle Platform specific [TextStyle] parameters. |
| * @param lineHeightStyle the configuration for line height such as vertical alignment of the |
| * line, whether to apply additional space as a result of line height to top of first line top |
| * and bottom of last line. The configuration is applied only when a [lineHeight] is defined. |
| * @param lineBreak The line breaking configuration for the text. |
| * @param hyphens The configuration of hyphenation. |
| * @param textMotion Text character placement, whether to optimize for animated or static text. |
| * @param linkStyles Sets styles for the links in different states if present in |
| * [AnnotatedString] that this TextStyle is applied to. This object passes the styles directly |
| * to the [LinkAnnotation]s and therefore overwrites any other styling configuration set on |
| * the whole text level. |
| */ |
| constructor( |
| brush: Brush?, |
| alpha: Float = Float.NaN, |
| fontSize: TextUnit = TextUnit.Unspecified, |
| fontWeight: FontWeight? = null, |
| fontStyle: FontStyle? = null, |
| fontSynthesis: FontSynthesis? = null, |
| fontFamily: FontFamily? = null, |
| fontFeatureSettings: String? = null, |
| letterSpacing: TextUnit = TextUnit.Unspecified, |
| baselineShift: BaselineShift? = null, |
| textGeometricTransform: TextGeometricTransform? = null, |
| localeList: LocaleList? = null, |
| background: Color = Color.Unspecified, |
| textDecoration: TextDecoration? = null, |
| shadow: Shadow? = null, |
| drawStyle: DrawStyle? = null, |
| textAlign: TextAlign = TextAlign.Unspecified, |
| textDirection: TextDirection = TextDirection.Unspecified, |
| lineHeight: TextUnit = TextUnit.Unspecified, |
| textIndent: TextIndent? = null, |
| platformStyle: PlatformTextStyle? = null, |
| lineHeightStyle: LineHeightStyle? = null, |
| lineBreak: LineBreak = LineBreak.Unspecified, |
| hyphens: Hyphens = Hyphens.Unspecified, |
| textMotion: TextMotion? = null, |
| linkStyles: TextLinkStyles? = null, |
| ) : this( |
| SpanStyle( |
| brush = brush, |
| alpha = alpha, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ), |
| ParagraphStyle( |
| textAlign = textAlign, |
| textDirection = textDirection, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak, |
| hyphens = hyphens, |
| textMotion = textMotion |
| ), |
| platformStyle = platformStyle, |
| linkStyles = linkStyles, |
| ) |
| |
| @Deprecated("Kept for binary compatibility", level = DeprecationLevel.HIDDEN) |
| constructor( |
| brush: Brush?, |
| alpha: Float = Float.NaN, |
| fontSize: TextUnit = TextUnit.Unspecified, |
| fontWeight: FontWeight? = null, |
| fontStyle: FontStyle? = null, |
| fontSynthesis: FontSynthesis? = null, |
| fontFamily: FontFamily? = null, |
| fontFeatureSettings: String? = null, |
| letterSpacing: TextUnit = TextUnit.Unspecified, |
| baselineShift: BaselineShift? = null, |
| textGeometricTransform: TextGeometricTransform? = null, |
| localeList: LocaleList? = null, |
| background: Color = Color.Unspecified, |
| textDecoration: TextDecoration? = null, |
| shadow: Shadow? = null, |
| drawStyle: DrawStyle? = null, |
| textAlign: TextAlign = TextAlign.Unspecified, |
| textDirection: TextDirection = TextDirection.Unspecified, |
| lineHeight: TextUnit = TextUnit.Unspecified, |
| textIndent: TextIndent? = null, |
| platformStyle: PlatformTextStyle? = null, |
| lineHeightStyle: LineHeightStyle? = null, |
| lineBreak: LineBreak = LineBreak.Unspecified, |
| hyphens: Hyphens = Hyphens.Unspecified, |
| textMotion: TextMotion? = null, |
| ) : this( |
| SpanStyle( |
| brush = brush, |
| alpha = alpha, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ), |
| ParagraphStyle( |
| textAlign = textAlign, |
| textDirection = textDirection, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak, |
| hyphens = hyphens, |
| textMotion = textMotion |
| ), |
| platformStyle = platformStyle, |
| ) |
| |
| @Deprecated("TextStyle constructors that take nullable TextAlign, " + |
| "TextDirection, LineBreak, and Hyphens are deprecated. Please use a new constructor " + |
| "where these parameters are non-nullable. Null value has been replaced by a special " + |
| "Unspecified object for performance reason.", |
| level = DeprecationLevel.HIDDEN) |
| constructor( |
| brush: Brush?, |
| alpha: Float = Float.NaN, |
| fontSize: TextUnit = TextUnit.Unspecified, |
| fontWeight: FontWeight? = null, |
| fontStyle: FontStyle? = null, |
| fontSynthesis: FontSynthesis? = null, |
| fontFamily: FontFamily? = null, |
| fontFeatureSettings: String? = null, |
| letterSpacing: TextUnit = TextUnit.Unspecified, |
| baselineShift: BaselineShift? = null, |
| textGeometricTransform: TextGeometricTransform? = null, |
| localeList: LocaleList? = null, |
| background: Color = Color.Unspecified, |
| textDecoration: TextDecoration? = null, |
| shadow: Shadow? = null, |
| drawStyle: DrawStyle? = null, |
| textAlign: TextAlign? = null, |
| textDirection: TextDirection? = null, |
| lineHeight: TextUnit = TextUnit.Unspecified, |
| textIndent: TextIndent? = null, |
| platformStyle: PlatformTextStyle? = null, |
| lineHeightStyle: LineHeightStyle? = null, |
| lineBreak: LineBreak? = null, |
| hyphens: Hyphens? = null, |
| textMotion: TextMotion? = null |
| ) : this( |
| SpanStyle( |
| brush = brush, |
| alpha = alpha, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ), |
| ParagraphStyle( |
| textAlign = textAlign ?: TextAlign.Unspecified, |
| textDirection = textDirection ?: TextDirection.Unspecified, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak ?: LineBreak.Unspecified, |
| hyphens = hyphens ?: Hyphens.Unspecified, |
| textMotion = textMotion |
| ), |
| platformStyle = platformStyle |
| ) |
| |
| @Stable |
| fun toSpanStyle(): SpanStyle = spanStyle |
| |
| @Stable |
| fun toParagraphStyle(): ParagraphStyle = paragraphStyle |
| |
| /** |
| * Returns a new text style that is a combination of this style and the given [other] style. |
| * |
| * [other] text style's null or inherit properties are replaced with the non-null properties of |
| * this text style. Another way to think of it is that the "missing" properties of the [other] |
| * style are _filled_ by the properties of this style. |
| * |
| * If the given text style is null, returns this text style. |
| */ |
| @Stable |
| fun merge(other: TextStyle? = null): TextStyle { |
| if (other == null || other == Default) return this |
| return TextStyle( |
| spanStyle = toSpanStyle().merge(other.toSpanStyle()), |
| paragraphStyle = toParagraphStyle().merge(other.toParagraphStyle()), |
| linkStyles = linkStyles.mergeOrUse(other.linkStyles) |
| ) |
| } |
| |
| /** |
| * Fast merge non-default values and parameters. |
| * |
| * This is the same algorithm as [merge] but does not require allocating it's parameter and may |
| * return this instead of allocating a result when all values are default. |
| * |
| * This is a similar algorithm to [copy] but when either this or a parameter are set to a |
| * default value, the other value will take precedent. |
| * |
| * To explain better, consider the following examples: |
| * |
| * Example 1: |
| * - this.color = [Color.Unspecified] |
| * - [color] = [Color.Red] |
| * - result => [Color.Red] |
| * |
| * Example 2: |
| * - this.color = [Color.Red] |
| * - [color] = [Color.Unspecified] |
| * - result => [Color.Red] |
| * |
| * Example 3: |
| * - this.color = [Color.Red] |
| * - [color] = [Color.Blue] |
| * - result => [Color.Blue] |
| * |
| * You should _always_ use this method over the [merge]([TextStyle]) overload when you do not |
| * already have a TextStyle allocated. You should chose this over [copy] when building a theming |
| * system and applying styling information to a specific usage. |
| * |
| * @return this or a new TextLayoutResult with all parameters chosen to the non-default option |
| * provided. |
| * |
| * @see merge |
| */ |
| @Stable |
| fun merge( |
| color: Color = Color.Unspecified, |
| fontSize: TextUnit = TextUnit.Unspecified, |
| fontWeight: FontWeight? = null, |
| fontStyle: FontStyle? = null, |
| fontSynthesis: FontSynthesis? = null, |
| fontFamily: FontFamily? = null, |
| fontFeatureSettings: String? = null, |
| letterSpacing: TextUnit = TextUnit.Unspecified, |
| baselineShift: BaselineShift? = null, |
| textGeometricTransform: TextGeometricTransform? = null, |
| localeList: LocaleList? = null, |
| background: Color = Color.Unspecified, |
| textDecoration: TextDecoration? = null, |
| shadow: Shadow? = null, |
| drawStyle: DrawStyle? = null, |
| textAlign: TextAlign = TextAlign.Unspecified, |
| textDirection: TextDirection = TextDirection.Unspecified, |
| lineHeight: TextUnit = TextUnit.Unspecified, |
| textIndent: TextIndent? = null, |
| lineHeightStyle: LineHeightStyle? = null, |
| lineBreak: LineBreak = LineBreak.Unspecified, |
| hyphens: Hyphens = Hyphens.Unspecified, |
| platformStyle: PlatformTextStyle? = null, |
| textMotion: TextMotion? = null, |
| linkStyles: TextLinkStyles? = null, |
| ): TextStyle { |
| val mergedSpanStyle: SpanStyle = spanStyle.fastMerge( |
| color = color, |
| brush = null, |
| alpha = Float.NaN, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ) |
| val mergedParagraphStyle: ParagraphStyle = paragraphStyle.fastMerge( |
| textAlign = textAlign, |
| textDirection = textDirection, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak, |
| hyphens = hyphens, |
| textMotion = textMotion |
| ) |
| val mergedLinkStyles = this.linkStyles?.mergeOrUse(linkStyles) |
| if (spanStyle === mergedSpanStyle && |
| paragraphStyle === mergedParagraphStyle && |
| this.linkStyles === mergedLinkStyles) return this |
| return TextStyle(mergedSpanStyle, mergedParagraphStyle, linkStyles = mergedLinkStyles) |
| } |
| |
| @Deprecated("Kept for binary compatibility", level = DeprecationLevel.HIDDEN) |
| @Stable |
| fun merge( |
| color: Color = Color.Unspecified, |
| fontSize: TextUnit = TextUnit.Unspecified, |
| fontWeight: FontWeight? = null, |
| fontStyle: FontStyle? = null, |
| fontSynthesis: FontSynthesis? = null, |
| fontFamily: FontFamily? = null, |
| fontFeatureSettings: String? = null, |
| letterSpacing: TextUnit = TextUnit.Unspecified, |
| baselineShift: BaselineShift? = null, |
| textGeometricTransform: TextGeometricTransform? = null, |
| localeList: LocaleList? = null, |
| background: Color = Color.Unspecified, |
| textDecoration: TextDecoration? = null, |
| shadow: Shadow? = null, |
| drawStyle: DrawStyle? = null, |
| textAlign: TextAlign = TextAlign.Unspecified, |
| textDirection: TextDirection = TextDirection.Unspecified, |
| lineHeight: TextUnit = TextUnit.Unspecified, |
| textIndent: TextIndent? = null, |
| lineHeightStyle: LineHeightStyle? = null, |
| lineBreak: LineBreak = LineBreak.Unspecified, |
| hyphens: Hyphens = Hyphens.Unspecified, |
| platformStyle: PlatformTextStyle? = null, |
| textMotion: TextMotion? = null |
| ): TextStyle { |
| val mergedSpanStyle: SpanStyle = spanStyle.fastMerge( |
| color = color, |
| brush = null, |
| alpha = Float.NaN, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ) |
| val mergedParagraphStyle: ParagraphStyle = paragraphStyle.fastMerge( |
| textAlign = textAlign, |
| textDirection = textDirection, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak, |
| hyphens = hyphens, |
| textMotion = textMotion |
| ) |
| if (spanStyle === mergedSpanStyle && paragraphStyle === mergedParagraphStyle) return this |
| return TextStyle(mergedSpanStyle, mergedParagraphStyle) |
| } |
| |
| @Deprecated("merge that takes nullable TextAlign, " + |
| "TextDirection, LineBreak, and Hyphens are deprecated. Please use a new constructor " + |
| "where these parameters are non-nullable. Null value has been replaced by a special " + |
| "Unspecified object for performance reason.", |
| level = DeprecationLevel.HIDDEN) |
| @Stable |
| fun merge( |
| color: Color = Color.Unspecified, |
| fontSize: TextUnit = TextUnit.Unspecified, |
| fontWeight: FontWeight? = null, |
| fontStyle: FontStyle? = null, |
| fontSynthesis: FontSynthesis? = null, |
| fontFamily: FontFamily? = null, |
| fontFeatureSettings: String? = null, |
| letterSpacing: TextUnit = TextUnit.Unspecified, |
| baselineShift: BaselineShift? = null, |
| textGeometricTransform: TextGeometricTransform? = null, |
| localeList: LocaleList? = null, |
| background: Color = Color.Unspecified, |
| textDecoration: TextDecoration? = null, |
| shadow: Shadow? = null, |
| drawStyle: DrawStyle? = null, |
| textAlign: TextAlign? = null, |
| textDirection: TextDirection? = null, |
| lineHeight: TextUnit = TextUnit.Unspecified, |
| textIndent: TextIndent? = null, |
| lineHeightStyle: LineHeightStyle? = null, |
| lineBreak: LineBreak? = null, |
| hyphens: Hyphens? = null, |
| platformStyle: PlatformTextStyle? = null, |
| textMotion: TextMotion? = null |
| ): TextStyle { |
| val mergedSpanStyle: SpanStyle = spanStyle.fastMerge( |
| color = color, |
| brush = null, |
| alpha = Float.NaN, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ) |
| val mergedParagraphStyle: ParagraphStyle = paragraphStyle.fastMerge( |
| textAlign = textAlign ?: TextAlign.Unspecified, |
| textDirection = textDirection ?: TextDirection.Unspecified, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak ?: LineBreak.Unspecified, |
| hyphens = hyphens ?: Hyphens.Unspecified, |
| textMotion = textMotion |
| ) |
| if (spanStyle === mergedSpanStyle && paragraphStyle === mergedParagraphStyle) return this |
| return TextStyle(mergedSpanStyle, mergedParagraphStyle) |
| } |
| |
| /** |
| * Returns a new text style that is a combination of this style and the given [other] style. |
| * |
| * @see merge |
| */ |
| @Stable |
| fun merge(other: SpanStyle): TextStyle { |
| return TextStyle( |
| spanStyle = toSpanStyle().merge(other), |
| paragraphStyle = toParagraphStyle(), |
| linkStyles = linkStyles |
| ) |
| } |
| |
| /** |
| * Returns a new text style that is a combination of this style and the given [other] style. |
| * |
| * @see merge |
| */ |
| @Stable |
| fun merge(other: ParagraphStyle): TextStyle { |
| return TextStyle( |
| spanStyle = toSpanStyle(), |
| paragraphStyle = toParagraphStyle().merge(other), |
| linkStyles = linkStyles |
| ) |
| } |
| |
| /** |
| * Plus operator overload that applies a [merge]. |
| */ |
| @Stable |
| operator fun plus(other: TextStyle): TextStyle = this.merge(other) |
| |
| /** |
| * Plus operator overload that applies a [merge]. |
| */ |
| @Stable |
| operator fun plus(other: ParagraphStyle): TextStyle = this.merge(other) |
| |
| /** |
| * Plus operator overload that applies a [merge]. |
| */ |
| @Stable |
| operator fun plus(other: SpanStyle): TextStyle = this.merge(other) |
| |
| @Deprecated( |
| "TextStyle copy constructors that do not take new stable parameters " + |
| "like LineHeightStyle, LineBreak, Hyphens are deprecated. Please use the new stable " + |
| "copy constructor.", |
| level = DeprecationLevel.HIDDEN |
| ) |
| fun copy( |
| color: Color = this.spanStyle.color, |
| fontSize: TextUnit = this.spanStyle.fontSize, |
| fontWeight: FontWeight? = this.spanStyle.fontWeight, |
| fontStyle: FontStyle? = this.spanStyle.fontStyle, |
| fontSynthesis: FontSynthesis? = this.spanStyle.fontSynthesis, |
| fontFamily: FontFamily? = this.spanStyle.fontFamily, |
| fontFeatureSettings: String? = this.spanStyle.fontFeatureSettings, |
| letterSpacing: TextUnit = this.spanStyle.letterSpacing, |
| baselineShift: BaselineShift? = this.spanStyle.baselineShift, |
| textGeometricTransform: TextGeometricTransform? = this.spanStyle.textGeometricTransform, |
| localeList: LocaleList? = this.spanStyle.localeList, |
| background: Color = this.spanStyle.background, |
| textDecoration: TextDecoration? = this.spanStyle.textDecoration, |
| shadow: Shadow? = this.spanStyle.shadow, |
| textAlign: TextAlign? = this.paragraphStyle.textAlign, |
| textDirection: TextDirection? = this.paragraphStyle.textDirection, |
| lineHeight: TextUnit = this.paragraphStyle.lineHeight, |
| textIndent: TextIndent? = this.paragraphStyle.textIndent |
| ): TextStyle { |
| return TextStyle( |
| spanStyle = SpanStyle( |
| textForegroundStyle = if (color == this.spanStyle.color) { |
| spanStyle.textForegroundStyle |
| } else { |
| TextForegroundStyle.from(color) |
| }, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = this.spanStyle.platformStyle, |
| drawStyle = this.spanStyle.drawStyle |
| ), |
| paragraphStyle = ParagraphStyle( |
| textAlign = textAlign ?: TextAlign.Unspecified, |
| textDirection = textDirection ?: TextDirection.Unspecified, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = this.paragraphStyle.platformStyle, |
| lineHeightStyle = this.lineHeightStyle, |
| lineBreak = this.lineBreak, |
| hyphens = this.hyphens, |
| textMotion = this.textMotion |
| ), |
| platformStyle = this.platformStyle |
| ) |
| } |
| |
| @Deprecated( |
| "TextStyle copy constructors that do not take new stable parameters " + |
| "like LineHeightStyle, LineBreak, Hyphens are deprecated. Please use the new stable " + |
| "copy constructor.", |
| level = DeprecationLevel.HIDDEN |
| ) |
| fun copy( |
| color: Color = this.spanStyle.color, |
| fontSize: TextUnit = this.spanStyle.fontSize, |
| fontWeight: FontWeight? = this.spanStyle.fontWeight, |
| fontStyle: FontStyle? = this.spanStyle.fontStyle, |
| fontSynthesis: FontSynthesis? = this.spanStyle.fontSynthesis, |
| fontFamily: FontFamily? = this.spanStyle.fontFamily, |
| fontFeatureSettings: String? = this.spanStyle.fontFeatureSettings, |
| letterSpacing: TextUnit = this.spanStyle.letterSpacing, |
| baselineShift: BaselineShift? = this.spanStyle.baselineShift, |
| textGeometricTransform: TextGeometricTransform? = this.spanStyle.textGeometricTransform, |
| localeList: LocaleList? = this.spanStyle.localeList, |
| background: Color = this.spanStyle.background, |
| textDecoration: TextDecoration? = this.spanStyle.textDecoration, |
| shadow: Shadow? = this.spanStyle.shadow, |
| textAlign: TextAlign? = this.paragraphStyle.textAlign, |
| textDirection: TextDirection? = this.paragraphStyle.textDirection, |
| lineHeight: TextUnit = this.paragraphStyle.lineHeight, |
| textIndent: TextIndent? = this.paragraphStyle.textIndent, |
| platformStyle: PlatformTextStyle? = this.platformStyle, |
| lineHeightStyle: LineHeightStyle? = this.paragraphStyle.lineHeightStyle |
| ): TextStyle { |
| return TextStyle( |
| spanStyle = SpanStyle( |
| textForegroundStyle = if (color == this.spanStyle.color) { |
| spanStyle.textForegroundStyle |
| } else { |
| TextForegroundStyle.from(color) |
| }, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = this.spanStyle.drawStyle |
| ), |
| paragraphStyle = ParagraphStyle( |
| textAlign = textAlign ?: TextAlign.Unspecified, |
| textDirection = textDirection ?: TextDirection.Unspecified, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = this.lineBreak, |
| hyphens = this.hyphens, |
| textMotion = this.textMotion |
| ), |
| platformStyle = platformStyle |
| ) |
| } |
| |
| @Deprecated( |
| "TextStyle copy constructors that do not take new stable parameters " + |
| "like LineBreak, Hyphens, and TextMotion are deprecated. Please use the new stable " + |
| "copy constructor.", |
| level = DeprecationLevel.HIDDEN |
| ) |
| fun copy( |
| color: Color = this.spanStyle.color, |
| fontSize: TextUnit = this.spanStyle.fontSize, |
| fontWeight: FontWeight? = this.spanStyle.fontWeight, |
| fontStyle: FontStyle? = this.spanStyle.fontStyle, |
| fontSynthesis: FontSynthesis? = this.spanStyle.fontSynthesis, |
| fontFamily: FontFamily? = this.spanStyle.fontFamily, |
| fontFeatureSettings: String? = this.spanStyle.fontFeatureSettings, |
| letterSpacing: TextUnit = this.spanStyle.letterSpacing, |
| baselineShift: BaselineShift? = this.spanStyle.baselineShift, |
| textGeometricTransform: TextGeometricTransform? = this.spanStyle.textGeometricTransform, |
| localeList: LocaleList? = this.spanStyle.localeList, |
| background: Color = this.spanStyle.background, |
| textDecoration: TextDecoration? = this.spanStyle.textDecoration, |
| shadow: Shadow? = this.spanStyle.shadow, |
| textAlign: TextAlign? = this.paragraphStyle.textAlign, |
| textDirection: TextDirection? = this.paragraphStyle.textDirection, |
| lineHeight: TextUnit = this.paragraphStyle.lineHeight, |
| textIndent: TextIndent? = this.paragraphStyle.textIndent, |
| platformStyle: PlatformTextStyle? = this.platformStyle, |
| lineHeightStyle: LineHeightStyle? = this.paragraphStyle.lineHeightStyle, |
| lineBreak: LineBreak? = this.paragraphStyle.lineBreak, |
| hyphens: Hyphens? = this.paragraphStyle.hyphens |
| ): TextStyle { |
| return TextStyle( |
| spanStyle = SpanStyle( |
| textForegroundStyle = if (color == this.spanStyle.color) { |
| spanStyle.textForegroundStyle |
| } else { |
| TextForegroundStyle.from(color) |
| }, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = this.drawStyle |
| ), |
| paragraphStyle = ParagraphStyle( |
| textAlign = textAlign ?: TextAlign.Unspecified, |
| textDirection = textDirection ?: TextDirection.Unspecified, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak ?: LineBreak.Unspecified, |
| hyphens = hyphens ?: Hyphens.Unspecified, |
| textMotion = this.textMotion |
| ), |
| platformStyle = platformStyle |
| ) |
| } |
| |
| @Deprecated("copy constructors that take nullable TextAlign, " + |
| "TextDirection, LineBreak, and Hyphens are deprecated. Please use a new constructor " + |
| "where these parameters are non-nullable. Null value has been replaced by a special " + |
| "Unspecified object for performance reason.", |
| level = DeprecationLevel.HIDDEN) |
| fun copy( |
| color: Color = this.spanStyle.color, |
| fontSize: TextUnit = this.spanStyle.fontSize, |
| fontWeight: FontWeight? = this.spanStyle.fontWeight, |
| fontStyle: FontStyle? = this.spanStyle.fontStyle, |
| fontSynthesis: FontSynthesis? = this.spanStyle.fontSynthesis, |
| fontFamily: FontFamily? = this.spanStyle.fontFamily, |
| fontFeatureSettings: String? = this.spanStyle.fontFeatureSettings, |
| letterSpacing: TextUnit = this.spanStyle.letterSpacing, |
| baselineShift: BaselineShift? = this.spanStyle.baselineShift, |
| textGeometricTransform: TextGeometricTransform? = this.spanStyle.textGeometricTransform, |
| localeList: LocaleList? = this.spanStyle.localeList, |
| background: Color = this.spanStyle.background, |
| textDecoration: TextDecoration? = this.spanStyle.textDecoration, |
| shadow: Shadow? = this.spanStyle.shadow, |
| drawStyle: DrawStyle? = this.spanStyle.drawStyle, |
| textAlign: TextAlign? = this.paragraphStyle.textAlign, |
| textDirection: TextDirection? = this.paragraphStyle.textDirection, |
| lineHeight: TextUnit = this.paragraphStyle.lineHeight, |
| textIndent: TextIndent? = this.paragraphStyle.textIndent, |
| platformStyle: PlatformTextStyle? = this.platformStyle, |
| lineHeightStyle: LineHeightStyle? = this.paragraphStyle.lineHeightStyle, |
| lineBreak: LineBreak? = this.paragraphStyle.lineBreak, |
| hyphens: Hyphens? = this.paragraphStyle.hyphens, |
| textMotion: TextMotion? = this.paragraphStyle.textMotion, |
| ): TextStyle { |
| return TextStyle( |
| spanStyle = SpanStyle( |
| textForegroundStyle = if (color == this.spanStyle.color) { |
| spanStyle.textForegroundStyle |
| } else { |
| TextForegroundStyle.from(color) |
| }, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ), |
| paragraphStyle = ParagraphStyle( |
| textAlign = textAlign ?: TextAlign.Unspecified, |
| textDirection = textDirection ?: TextDirection.Unspecified, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak ?: LineBreak.Unspecified, |
| hyphens = hyphens ?: Hyphens.Unspecified, |
| textMotion = textMotion |
| ), |
| platformStyle = platformStyle |
| ) |
| } |
| |
| @Deprecated("Kept for binary compatibility", level = DeprecationLevel.HIDDEN) |
| fun copy( |
| color: Color = this.spanStyle.color, |
| fontSize: TextUnit = this.spanStyle.fontSize, |
| fontWeight: FontWeight? = this.spanStyle.fontWeight, |
| fontStyle: FontStyle? = this.spanStyle.fontStyle, |
| fontSynthesis: FontSynthesis? = this.spanStyle.fontSynthesis, |
| fontFamily: FontFamily? = this.spanStyle.fontFamily, |
| fontFeatureSettings: String? = this.spanStyle.fontFeatureSettings, |
| letterSpacing: TextUnit = this.spanStyle.letterSpacing, |
| baselineShift: BaselineShift? = this.spanStyle.baselineShift, |
| textGeometricTransform: TextGeometricTransform? = this.spanStyle.textGeometricTransform, |
| localeList: LocaleList? = this.spanStyle.localeList, |
| background: Color = this.spanStyle.background, |
| textDecoration: TextDecoration? = this.spanStyle.textDecoration, |
| shadow: Shadow? = this.spanStyle.shadow, |
| drawStyle: DrawStyle? = this.spanStyle.drawStyle, |
| textAlign: TextAlign = this.paragraphStyle.textAlign, |
| textDirection: TextDirection = this.paragraphStyle.textDirection, |
| lineHeight: TextUnit = this.paragraphStyle.lineHeight, |
| textIndent: TextIndent? = this.paragraphStyle.textIndent, |
| platformStyle: PlatformTextStyle? = this.platformStyle, |
| lineHeightStyle: LineHeightStyle? = this.paragraphStyle.lineHeightStyle, |
| lineBreak: LineBreak = this.paragraphStyle.lineBreak, |
| hyphens: Hyphens = this.paragraphStyle.hyphens, |
| textMotion: TextMotion? = this.paragraphStyle.textMotion, |
| ): TextStyle { |
| return TextStyle( |
| spanStyle = SpanStyle( |
| textForegroundStyle = if (color == this.spanStyle.color) { |
| spanStyle.textForegroundStyle |
| } else { |
| TextForegroundStyle.from(color) |
| }, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ), |
| paragraphStyle = ParagraphStyle( |
| textAlign = textAlign, |
| textDirection = textDirection, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak, |
| hyphens = hyphens, |
| textMotion = textMotion |
| ), |
| platformStyle = platformStyle |
| ) |
| } |
| |
| fun copy( |
| color: Color = this.spanStyle.color, |
| fontSize: TextUnit = this.spanStyle.fontSize, |
| fontWeight: FontWeight? = this.spanStyle.fontWeight, |
| fontStyle: FontStyle? = this.spanStyle.fontStyle, |
| fontSynthesis: FontSynthesis? = this.spanStyle.fontSynthesis, |
| fontFamily: FontFamily? = this.spanStyle.fontFamily, |
| fontFeatureSettings: String? = this.spanStyle.fontFeatureSettings, |
| letterSpacing: TextUnit = this.spanStyle.letterSpacing, |
| baselineShift: BaselineShift? = this.spanStyle.baselineShift, |
| textGeometricTransform: TextGeometricTransform? = this.spanStyle.textGeometricTransform, |
| localeList: LocaleList? = this.spanStyle.localeList, |
| background: Color = this.spanStyle.background, |
| textDecoration: TextDecoration? = this.spanStyle.textDecoration, |
| shadow: Shadow? = this.spanStyle.shadow, |
| drawStyle: DrawStyle? = this.spanStyle.drawStyle, |
| textAlign: TextAlign = this.paragraphStyle.textAlign, |
| textDirection: TextDirection = this.paragraphStyle.textDirection, |
| lineHeight: TextUnit = this.paragraphStyle.lineHeight, |
| textIndent: TextIndent? = this.paragraphStyle.textIndent, |
| platformStyle: PlatformTextStyle? = this.platformStyle, |
| lineHeightStyle: LineHeightStyle? = this.paragraphStyle.lineHeightStyle, |
| lineBreak: LineBreak = this.paragraphStyle.lineBreak, |
| hyphens: Hyphens = this.paragraphStyle.hyphens, |
| textMotion: TextMotion? = this.paragraphStyle.textMotion, |
| linkStyles: TextLinkStyles? = this.linkStyles, |
| ): TextStyle { |
| return TextStyle( |
| spanStyle = SpanStyle( |
| textForegroundStyle = if (color == this.spanStyle.color) { |
| spanStyle.textForegroundStyle |
| } else { |
| TextForegroundStyle.from(color) |
| }, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ), |
| paragraphStyle = ParagraphStyle( |
| textAlign = textAlign, |
| textDirection = textDirection, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak, |
| hyphens = hyphens, |
| textMotion = textMotion |
| ), |
| platformStyle = platformStyle, |
| linkStyles = linkStyles |
| ) |
| } |
| |
| @Deprecated("copy constructors that take nullable TextAlign, " + |
| "TextDirection, LineBreak, and Hyphens are deprecated. Please use a new constructor " + |
| "where these parameters are non-nullable. Null value has been replaced by a special " + |
| "Unspecified object for performance reason.", |
| level = DeprecationLevel.HIDDEN) |
| fun copy( |
| brush: Brush?, |
| alpha: Float = this.spanStyle.alpha, |
| fontSize: TextUnit = this.spanStyle.fontSize, |
| fontWeight: FontWeight? = this.spanStyle.fontWeight, |
| fontStyle: FontStyle? = this.spanStyle.fontStyle, |
| fontSynthesis: FontSynthesis? = this.spanStyle.fontSynthesis, |
| fontFamily: FontFamily? = this.spanStyle.fontFamily, |
| fontFeatureSettings: String? = this.spanStyle.fontFeatureSettings, |
| letterSpacing: TextUnit = this.spanStyle.letterSpacing, |
| baselineShift: BaselineShift? = this.spanStyle.baselineShift, |
| textGeometricTransform: TextGeometricTransform? = this.spanStyle.textGeometricTransform, |
| localeList: LocaleList? = this.spanStyle.localeList, |
| background: Color = this.spanStyle.background, |
| textDecoration: TextDecoration? = this.spanStyle.textDecoration, |
| shadow: Shadow? = this.spanStyle.shadow, |
| drawStyle: DrawStyle? = this.spanStyle.drawStyle, |
| textAlign: TextAlign? = this.paragraphStyle.textAlign, |
| textDirection: TextDirection? = this.paragraphStyle.textDirection, |
| lineHeight: TextUnit = this.paragraphStyle.lineHeight, |
| textIndent: TextIndent? = this.paragraphStyle.textIndent, |
| platformStyle: PlatformTextStyle? = this.platformStyle, |
| lineHeightStyle: LineHeightStyle? = this.paragraphStyle.lineHeightStyle, |
| lineBreak: LineBreak? = this.paragraphStyle.lineBreak, |
| hyphens: Hyphens? = this.paragraphStyle.hyphens, |
| textMotion: TextMotion? = this.paragraphStyle.textMotion, |
| ): TextStyle { |
| return TextStyle( |
| spanStyle = SpanStyle( |
| brush = brush, |
| alpha = alpha, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ), |
| paragraphStyle = ParagraphStyle( |
| textAlign = textAlign ?: TextAlign.Unspecified, |
| textDirection = textDirection ?: TextDirection.Unspecified, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak ?: LineBreak.Unspecified, |
| hyphens = hyphens ?: Hyphens.Unspecified, |
| textMotion = textMotion |
| ), |
| platformStyle = platformStyle |
| ) |
| } |
| |
| @Deprecated("Kept for binary compatibility", level = DeprecationLevel.HIDDEN) |
| fun copy( |
| brush: Brush?, |
| alpha: Float = this.spanStyle.alpha, |
| fontSize: TextUnit = this.spanStyle.fontSize, |
| fontWeight: FontWeight? = this.spanStyle.fontWeight, |
| fontStyle: FontStyle? = this.spanStyle.fontStyle, |
| fontSynthesis: FontSynthesis? = this.spanStyle.fontSynthesis, |
| fontFamily: FontFamily? = this.spanStyle.fontFamily, |
| fontFeatureSettings: String? = this.spanStyle.fontFeatureSettings, |
| letterSpacing: TextUnit = this.spanStyle.letterSpacing, |
| baselineShift: BaselineShift? = this.spanStyle.baselineShift, |
| textGeometricTransform: TextGeometricTransform? = this.spanStyle.textGeometricTransform, |
| localeList: LocaleList? = this.spanStyle.localeList, |
| background: Color = this.spanStyle.background, |
| textDecoration: TextDecoration? = this.spanStyle.textDecoration, |
| shadow: Shadow? = this.spanStyle.shadow, |
| drawStyle: DrawStyle? = this.spanStyle.drawStyle, |
| textAlign: TextAlign = this.paragraphStyle.textAlign, |
| textDirection: TextDirection = this.paragraphStyle.textDirection, |
| lineHeight: TextUnit = this.paragraphStyle.lineHeight, |
| textIndent: TextIndent? = this.paragraphStyle.textIndent, |
| platformStyle: PlatformTextStyle? = this.platformStyle, |
| lineHeightStyle: LineHeightStyle? = this.paragraphStyle.lineHeightStyle, |
| lineBreak: LineBreak = this.paragraphStyle.lineBreak, |
| hyphens: Hyphens = this.paragraphStyle.hyphens, |
| textMotion: TextMotion? = this.paragraphStyle.textMotion, |
| ): TextStyle { |
| return TextStyle( |
| spanStyle = SpanStyle( |
| brush = brush, |
| alpha = alpha, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ), |
| paragraphStyle = ParagraphStyle( |
| textAlign = textAlign, |
| textDirection = textDirection, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak, |
| hyphens = hyphens, |
| textMotion = textMotion |
| ), |
| platformStyle = platformStyle |
| ) |
| } |
| |
| fun copy( |
| brush: Brush?, |
| alpha: Float = this.spanStyle.alpha, |
| fontSize: TextUnit = this.spanStyle.fontSize, |
| fontWeight: FontWeight? = this.spanStyle.fontWeight, |
| fontStyle: FontStyle? = this.spanStyle.fontStyle, |
| fontSynthesis: FontSynthesis? = this.spanStyle.fontSynthesis, |
| fontFamily: FontFamily? = this.spanStyle.fontFamily, |
| fontFeatureSettings: String? = this.spanStyle.fontFeatureSettings, |
| letterSpacing: TextUnit = this.spanStyle.letterSpacing, |
| baselineShift: BaselineShift? = this.spanStyle.baselineShift, |
| textGeometricTransform: TextGeometricTransform? = this.spanStyle.textGeometricTransform, |
| localeList: LocaleList? = this.spanStyle.localeList, |
| background: Color = this.spanStyle.background, |
| textDecoration: TextDecoration? = this.spanStyle.textDecoration, |
| shadow: Shadow? = this.spanStyle.shadow, |
| drawStyle: DrawStyle? = this.spanStyle.drawStyle, |
| textAlign: TextAlign = this.paragraphStyle.textAlign, |
| textDirection: TextDirection = this.paragraphStyle.textDirection, |
| lineHeight: TextUnit = this.paragraphStyle.lineHeight, |
| textIndent: TextIndent? = this.paragraphStyle.textIndent, |
| platformStyle: PlatformTextStyle? = this.platformStyle, |
| lineHeightStyle: LineHeightStyle? = this.paragraphStyle.lineHeightStyle, |
| lineBreak: LineBreak = this.paragraphStyle.lineBreak, |
| hyphens: Hyphens = this.paragraphStyle.hyphens, |
| textMotion: TextMotion? = this.paragraphStyle.textMotion, |
| linkStyles: TextLinkStyles? = this.linkStyles, |
| ): TextStyle { |
| return TextStyle( |
| spanStyle = SpanStyle( |
| brush = brush, |
| alpha = alpha, |
| fontSize = fontSize, |
| fontWeight = fontWeight, |
| fontStyle = fontStyle, |
| fontSynthesis = fontSynthesis, |
| fontFamily = fontFamily, |
| fontFeatureSettings = fontFeatureSettings, |
| letterSpacing = letterSpacing, |
| baselineShift = baselineShift, |
| textGeometricTransform = textGeometricTransform, |
| localeList = localeList, |
| background = background, |
| textDecoration = textDecoration, |
| shadow = shadow, |
| platformStyle = platformStyle?.spanStyle, |
| drawStyle = drawStyle |
| ), |
| paragraphStyle = ParagraphStyle( |
| textAlign = textAlign, |
| textDirection = textDirection, |
| lineHeight = lineHeight, |
| textIndent = textIndent, |
| platformStyle = platformStyle?.paragraphStyle, |
| lineHeightStyle = lineHeightStyle, |
| lineBreak = lineBreak, |
| hyphens = hyphens, |
| textMotion = textMotion |
| ), |
| platformStyle = platformStyle, |
| linkStyles = linkStyles |
| ) |
| } |
| |
| /** |
| * The brush to use when drawing text. If not null, overrides [color]. |
| */ |
| val brush: Brush? get() = this.spanStyle.brush |
| |
| /** |
| * The text color. |
| */ |
| val color: Color get() = this.spanStyle.color |
| |
| /** |
| * Opacity of text. This value is either provided along side Brush, or via alpha channel in |
| * color. |
| */ |
| val alpha: Float get() = this.spanStyle.alpha |
| |
| /** |
| * The size of glyphs to use when painting the text. This |
| * may be [TextUnit.Unspecified] for inheriting from another [TextStyle]. |
| */ |
| val fontSize: TextUnit get() = this.spanStyle.fontSize |
| |
| /** |
| * The typeface thickness to use when painting the text (e.g., bold). |
| */ |
| val fontWeight: FontWeight? get() = this.spanStyle.fontWeight |
| |
| /** |
| * The typeface variant to use when drawing the letters (e.g., italic). |
| */ |
| val fontStyle: FontStyle? get() = this.spanStyle.fontStyle |
| |
| /** |
| * Whether to synthesize font weight and/or style when the requested weight or |
| * style cannot be found in the provided font family. |
| */ |
| val fontSynthesis: FontSynthesis? get() = this.spanStyle.fontSynthesis |
| |
| /** |
| * The font family to be used when rendering the text. |
| */ |
| val fontFamily: FontFamily? get() = this.spanStyle.fontFamily |
| |
| /** |
| * The advanced typography settings provided by font. The format is the |
| * same as the CSS font-feature-settings attribute: |
| * https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop |
| */ |
| val fontFeatureSettings: String? get() = this.spanStyle.fontFeatureSettings |
| |
| /** |
| * The amount of space to add between each letter. |
| */ |
| val letterSpacing: TextUnit get() = this.spanStyle.letterSpacing |
| |
| /** |
| * The amount by which the text is shifted up from the current baseline. |
| */ |
| val baselineShift: BaselineShift? get() = this.spanStyle.baselineShift |
| |
| /** |
| * The geometric transformation applied the text. |
| */ |
| val textGeometricTransform: TextGeometricTransform? get() = |
| this.spanStyle.textGeometricTransform |
| |
| /** |
| * The locale list used to select region-specific glyphs. |
| */ |
| val localeList: LocaleList? get() = this.spanStyle.localeList |
| |
| /** |
| * The background color for the text. |
| */ |
| val background: Color get() = this.spanStyle.background |
| |
| /** |
| * The decorations to paint on the text (e.g., an underline). |
| */ |
| val textDecoration: TextDecoration? get() = this.spanStyle.textDecoration |
| |
| /** |
| * The shadow effect applied on the text. |
| */ |
| val shadow: Shadow? get() = this.spanStyle.shadow |
| |
| /** |
| * Drawing style of text, whether fill in the text while drawing or stroke around the edges. |
| */ |
| val drawStyle: DrawStyle? get() = this.spanStyle.drawStyle |
| |
| /** |
| * The alignment of the text within the lines of the paragraph. |
| */ |
| val textAlign: TextAlign get() = this.paragraphStyle.textAlign |
| |
| @Deprecated("Kept for backwards compatibility.", level = DeprecationLevel.WARNING) |
| @get:JvmName("getTextAlign-buA522U") // b/320819734 |
| @Suppress("unused", "RedundantNullableReturnType", "PropertyName") |
| val deprecated_boxing_textAlign: TextAlign? get() = this.textAlign |
| |
| /** |
| * The algorithm to be used to resolve the final text and paragraph |
| * direction: Left To Right or Right To Left. If no value is provided the system will use the |
| * [LayoutDirection] as the primary signal. |
| */ |
| val textDirection: TextDirection get() = this.paragraphStyle.textDirection |
| |
| @Deprecated("Kept for backwards compatibility.", level = DeprecationLevel.WARNING) |
| @get:JvmName("getTextDirection-mmuk1to") // b/320819734 |
| @Suppress("unused", "RedundantNullableReturnType", "PropertyName") |
| val deprecated_boxing_textDirection: TextDirection? get() = this.textDirection |
| |
| /** |
| * Line height for the [Paragraph] in [TextUnit] unit, e.g. SP or EM. |
| */ |
| val lineHeight: TextUnit get() = this.paragraphStyle.lineHeight |
| |
| /** |
| * The indentation of the paragraph. |
| */ |
| val textIndent: TextIndent? get() = this.paragraphStyle.textIndent |
| |
| /** |
| * The configuration for line height such as vertical alignment of the line, whether to apply |
| * additional space as a result of line height to top of first line top and bottom of last line. |
| * |
| * The configuration is applied only when a [lineHeight] is defined. |
| * |
| * When null, [LineHeightStyle.Default] is used. |
| */ |
| val lineHeightStyle: LineHeightStyle? get() = this.paragraphStyle.lineHeightStyle |
| |
| /** |
| * The hyphens configuration of the paragraph. |
| */ |
| val hyphens: Hyphens get() = this.paragraphStyle.hyphens |
| |
| @Deprecated("Kept for backwards compatibility.", level = DeprecationLevel.WARNING) |
| @get:JvmName("getHyphens-EaSxIns") // b/320819734 |
| @Suppress("unused", "RedundantNullableReturnType", "PropertyName") |
| val deprecated_boxing_hyphens: Hyphens? get() = this.hyphens |
| |
| /** |
| * The line breaking configuration of the paragraph. |
| */ |
| val lineBreak: LineBreak get() = this.paragraphStyle.lineBreak |
| |
| @Deprecated("Kept for backwards compatibility.", level = DeprecationLevel.WARNING) |
| @get:JvmName("getLineBreak-LgCVezo") // b/320819734 |
| @Suppress("unused", "RedundantNullableReturnType", "PropertyName") |
| val deprecated_boxing_lineBreak: LineBreak? get() = this.lineBreak |
| |
| /** |
| * Text character placement configuration, whether to optimize for animated or static text. |
| */ |
| val textMotion: TextMotion? get() = this.paragraphStyle.textMotion |
| |
| override fun equals(other: Any?): Boolean { |
| if (this === other) return true |
| if (other !is TextStyle) return false |
| |
| if (spanStyle != other.spanStyle) return false |
| if (paragraphStyle != other.paragraphStyle) return false |
| if (platformStyle != other.platformStyle) return false |
| if (linkStyles != other.linkStyles) return false |
| |
| return true |
| } |
| |
| /** |
| * Returns true if text layout affecting attributes between this TextStyle and other are the |
| * same. |
| * |
| * The attributes that do not require a layout change are color, textDecoration and shadow. |
| * |
| * Majority of attributes change text layout, and examples are line height, font properties, |
| * font size, locale etc. |
| * |
| * This function can be used to identify if a new text layout is required for a given TextStyle. |
| * |
| * @param other The TextStyle to compare to. |
| */ |
| fun hasSameLayoutAffectingAttributes(other: TextStyle): Boolean { |
| return (this === other) || (paragraphStyle == other.paragraphStyle && |
| spanStyle.hasSameLayoutAffectingAttributes(other.spanStyle) && |
| linkStyles.hasSameLayoutAffectingAttributes(other.linkStyles)) |
| } |
| |
| fun hasSameDrawAffectingAttributes(other: TextStyle): Boolean { |
| return (this === other) || (spanStyle.hasSameNonLayoutAttributes(other.spanStyle) && |
| linkStyles.hasSameNonLayoutAttributes(other.linkStyles)) |
| } |
| |
| override fun hashCode(): Int { |
| var result = spanStyle.hashCode() |
| result = 31 * result + paragraphStyle.hashCode() |
| result = 31 * result + (platformStyle?.hashCode() ?: 0) |
| result = 31 * result + (linkStyles?.hashCode() ?: 0) |
| return result |
| } |
| |
| internal fun hashCodeLayoutAffectingAttributes(): Int { |
| var result = spanStyle.hashCodeLayoutAffectingAttributes() |
| result = 31 * result + paragraphStyle.hashCode() |
| result = 31 * result + (platformStyle?.hashCode() ?: 0) |
| result = 31 * result + (linkStyles?.hashCode() ?: 0) |
| return result |
| } |
| |
| override fun toString(): String { |
| return "TextStyle(" + |
| "color=$color, " + |
| "brush=$brush, " + |
| "alpha=$alpha, " + |
| "fontSize=$fontSize, " + |
| "fontWeight=$fontWeight, " + |
| "fontStyle=$fontStyle, " + |
| "fontSynthesis=$fontSynthesis, " + |
| "fontFamily=$fontFamily, " + |
| "fontFeatureSettings=$fontFeatureSettings, " + |
| "letterSpacing=$letterSpacing, " + |
| "baselineShift=$baselineShift, " + |
| "textGeometricTransform=$textGeometricTransform, " + |
| "localeList=$localeList, " + |
| "background=$background, " + |
| "textDecoration=$textDecoration, " + |
| "shadow=$shadow, " + |
| "drawStyle=$drawStyle, " + |
| "textAlign=$textAlign, " + |
| "textDirection=$textDirection, " + |
| "lineHeight=$lineHeight, " + |
| "textIndent=$textIndent, " + |
| "platformStyle=$platformStyle, " + |
| "lineHeightStyle=$lineHeightStyle, " + |
| "lineBreak=$lineBreak, " + |
| "hyphens=$hyphens, " + |
| "textMotion=$textMotion, " + |
| "linkStyles=$linkStyles" + |
| ")" |
| } |
| |
| companion object { |
| /** |
| * Constant for default text style. |
| */ |
| @Stable |
| val Default = TextStyle() |
| } |
| } |
| |
| /** |
| * Interpolate between two text styles. |
| * |
| * This will not work well if the styles don't set the same fields. |
| * |
| * The [fraction] argument represents position on the timeline, with 0.0 meaning |
| * that the interpolation has not started, returning [start] (or something |
| * equivalent to [start]), 1.0 meaning that the interpolation has finished, |
| * returning [stop] (or something equivalent to [stop]), and values in between |
| * meaning that the interpolation is at the relevant point on the timeline |
| * between [start] and [stop]. The interpolation can be extrapolated beyond 0.0 and |
| * 1.0, so negative values and values greater than 1.0 are valid. |
| */ |
| fun lerp(start: TextStyle, stop: TextStyle, fraction: Float): TextStyle { |
| return TextStyle( |
| spanStyle = lerp(start.toSpanStyle(), stop.toSpanStyle(), fraction), |
| paragraphStyle = lerp(start.toParagraphStyle(), stop.toParagraphStyle(), fraction), |
| linkStyles = lerp(start.linkStyles, stop.linkStyles, fraction) |
| ) |
| } |
| |
| /** |
| * Fills missing values in TextStyle with default values and resolve [TextDirection]. |
| * |
| * This function will fill all null or [TextUnit.Unspecified] field with actual values. |
| * @param style a text style to be resolved |
| * @param direction a layout direction to be used for resolving text layout direction algorithm |
| * @return resolved text style. |
| */ |
| fun resolveDefaults(style: TextStyle, direction: LayoutDirection) = TextStyle( |
| spanStyle = resolveSpanStyleDefaults(style.spanStyle), |
| paragraphStyle = resolveParagraphStyleDefaults(style.paragraphStyle, direction), |
| platformStyle = style.platformStyle, |
| linkStyles = style.linkStyles |
| ) |
| |
| /** |
| * If [textDirection] is null returns a [TextDirection] based on [layoutDirection]. |
| */ |
| internal fun resolveTextDirection( |
| layoutDirection: LayoutDirection, |
| textDirection: TextDirection |
| ): TextDirection { |
| return when (textDirection) { |
| TextDirection.Content -> when (layoutDirection) { |
| LayoutDirection.Ltr -> TextDirection.ContentOrLtr |
| LayoutDirection.Rtl -> TextDirection.ContentOrRtl |
| } |
| TextDirection.Unspecified -> when (layoutDirection) { |
| LayoutDirection.Ltr -> TextDirection.Ltr |
| LayoutDirection.Rtl -> TextDirection.Rtl |
| } |
| else -> textDirection |
| } |
| } |
| |
| private fun createPlatformTextStyleInternal( |
| platformSpanStyle: PlatformSpanStyle?, |
| platformParagraphStyle: PlatformParagraphStyle? |
| ): PlatformTextStyle? { |
| return if (platformSpanStyle == null && platformParagraphStyle == null) { |
| null |
| } else { |
| createPlatformTextStyle(platformSpanStyle, platformParagraphStyle) |
| } |
| } |