1 /** 2 * Copyright © Novelate 2020 3 * License: MIT (https://github.com/Novelate/NovelateEngine/blob/master/LICENSE) 4 * Author: Jacob Jensen (bausshf) 5 * Website: https://novelate.com/ 6 * ------ 7 * Novelate is a free and open-source visual novel engine and framework written in the D programming language. 8 * It can be used freely for both personal and commercial projects. 9 * ------ 10 * Module Description: 11 * A label is a simple component for displaying text. 12 */ 13 module novelate.label; 14 15 import std.datetime; 16 17 import novelate.component; 18 import novelate.fonts; 19 import novelate.config; 20 21 /// Wrapper around a label component. 22 final class Label : Component 23 { 24 private: 25 /// The text component. 26 ExternalText _textComponent; 27 /// The text. 28 dstring _text; 29 /// The font name. 30 string _fontName; 31 /// The font. 32 ExternalFont _font; 33 /// The font size. 34 size_t _fontSize; 35 /// The color. 36 Paint _color; 37 38 public: 39 final: 40 /// Creates a new label. 41 this() 42 { 43 super(); 44 45 _fontName = config.defaultFont; 46 _font = retrieveFont(_fontName, FontStyle.normal); 47 _fontSize = config.defaultFontSize; 48 49 _textComponent = new ExternalText; 50 _textComponent.setFont(_font); 51 _textComponent.setString(""); 52 _textComponent.setCharacterSize(_fontSize); 53 } 54 55 @property 56 { 57 /// Gets the text. 58 dstring text() { return _text; } 59 60 /// Sets the text. 61 void text(dstring newText) 62 { 63 _text = newText; 64 65 _textComponent.setString(_text); 66 67 auto bounds = _textComponent.bounds; 68 69 super.size = FloatVector(bounds.x, bounds.y); 70 } 71 72 /// Gets the font name. 73 string fontName() { return _fontName; } 74 75 /// Sets the font name. 76 void fontName(string newFontName) 77 { 78 _fontName = newFontName; 79 80 _font = retrieveFont(_fontName, FontStyle.normal); 81 _textComponent.setFont(_font); 82 } 83 84 /// Gets the font size. 85 size_t fontSize() { return _fontSize; } 86 87 /// Sets the font size. 88 void fontSize(size_t newFontSize) 89 { 90 _fontSize = newFontSize; 91 92 _textComponent.setCharacterSize(_fontSize); 93 } 94 95 /// Gets the color. 96 Paint color() { return _color; } 97 98 /// Sets the color. 99 void color(Paint newColor) 100 { 101 _color = newColor; 102 103 _textComponent.setColor(_color); 104 } 105 } 106 107 /// See: Component.render() 108 override void render(ExternalWindow window) 109 { 110 _textComponent.draw(window); 111 } 112 113 /// See: Component.refresh() 114 override void refresh(size_t width, size_t height) 115 { 116 size_t boxHeight; 117 if (width == 800) 118 { 119 boxHeight = config.defaultDialogueHeight800; 120 } 121 else if (width == 1024) 122 { 123 boxHeight = config.defaultDialogueHeight1024; 124 } 125 else if (width == 1280) 126 { 127 boxHeight = config.defaultDialogueHeight1280; 128 } 129 130 _textComponent.position = FloatVector(config.defaultDialogueMargin + config.defaultDialoguePadding, ((height + config.defaultDialoguePadding) - boxHeight)); 131 132 updateInternalPosition(_textComponent.position); 133 } 134 135 /// See: Component.updateSize() 136 override void updateSize() 137 { 138 } 139 140 /// See: Component.updatePosition() 141 override void updatePosition() 142 { 143 _textComponent.position = super.position; 144 } 145 }