Line data Source code
1 : import 'dart:ui'; 2 : 3 : import 'package:flutter/painting.dart'; 4 : import 'package:meta/meta.dart'; 5 : 6 : import '../extensions/vector2.dart'; 7 : import '../text.dart'; 8 : import 'position_component.dart'; 9 : 10 : class TextComponent<T extends TextRenderer> extends PositionComponent { 11 : String _text; 12 : T _textRenderer; 13 : 14 0 : String get text => _text; 15 : 16 0 : set text(String text) { 17 0 : if (_text != text) { 18 0 : _text = text; 19 0 : _updateBox(); 20 : } 21 : } 22 : 23 2 : T get textRenderer => _textRenderer; 24 : 25 1 : set textRenderer(T textRenderer) { 26 1 : _textRenderer = textRenderer; 27 1 : _updateBox(); 28 : } 29 : 30 1 : TextComponent( 31 : this._text, { 32 : T? textRenderer, 33 : Vector2? position, 34 : Vector2? size, 35 : int? priority, 36 1 : }) : _textRenderer = textRenderer ?? TextRenderer.createDefault<T>(), 37 1 : super(position: position, size: size, priority: priority) { 38 1 : _updateBox(); 39 : } 40 : 41 1 : void _updateBox() { 42 3 : final expectedSize = textRenderer.measureText(_text); 43 4 : size.setValues(expectedSize.x, expectedSize.y); 44 : } 45 : 46 0 : @mustCallSuper 47 : @override 48 : void render(Canvas canvas) { 49 0 : super.render(canvas); 50 0 : _textRenderer.render(canvas, text, Vector2.zero()); 51 : } 52 : }