// 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. part of flutter_sprites; /// Labels are used to display a string of text in a the node tree. To align /// the label, the textAlign property of the [TextStyle] can be set. class Label extends Node { /// Creates a new Label with the provided [text] and [textStyle]. Label(this._text, { TextStyle textStyle, TextAlign textAlign }) : _textStyle = textStyle ?? const TextStyle(), textAlign = textAlign ?? TextAlign.left; /// The text being drawn by the label. String get text => _text; String _text; set text(String text) { _text = text; _painter = null; } /// The style to draw the text in. TextStyle get textStyle => _textStyle; TextStyle _textStyle; set textStyle(TextStyle textStyle) { _textStyle = textStyle; _painter = null; } /// How the text should be aligned horizontally. TextAlign textAlign; TextPainter _painter; double _width; @override void paint(Canvas canvas) { if (_painter == null) { _painter = new TextPainter(text: new TextSpan(style: _textStyle, text: _text)) ..layout(); _width = _painter.size.width; } Offset offset = Offset.zero; if (textAlign == TextAlign.center) { offset = new Offset(-_width / 2.0, 0.0); } else if (textAlign == TextAlign.right) { offset = new Offset(-_width, 0.0); } _painter.paint(canvas, offset); } }