Class: MiniGL::TextHelper
- Inherits:
-
Object
- Object
- MiniGL::TextHelper
- Defined in:
- lib/minigl/text.rb
Overview
This class provides methods for easily drawing one or multiple lines of text, with control over the text alignment and coloring.
Instance Method Summary collapse
-
#initialize(font, line_spacing = 0) ⇒ TextHelper
constructor
Creates a TextHelper.
-
#write_breaking(text, x, y, width, mode = :left, color = 0, alpha = 0xff, z_index = 0) ⇒ Object
Draws text, breaking lines when needed and when explicitly caused by the “n” character.
-
#write_line(text, x, y, mode = :left, color = 0, effect = nil, effect_color = 0, effect_size = 1, effect_alpha = 0xff, alpha = 0xff, z_index = 0) ⇒ Object
Draws a single line of text.
Constructor Details
#initialize(font, line_spacing = 0) ⇒ TextHelper
Creates a TextHelper.
Parameters:
- font
-
A
Gosu::Fontthat will be used to draw the text. - line_spacing
-
When drawing multiple lines, the distance, in pixels, between each line.
11 12 13 14 |
# File 'lib/minigl/text.rb', line 11 def initialize(font, line_spacing = 0) @font = font @line_spacing = line_spacing end |
Instance Method Details
#write_breaking(text, x, y, width, mode = :left, color = 0, alpha = 0xff, z_index = 0) ⇒ Object
Draws text, breaking lines when needed and when explicitly caused by the “n” character.
Parameters:
- text
-
The text to be drawn. Line breaks are allowed.
- x
-
The horizontal reference for drawing the text. Works like in
write_linefor the:left,:rightand:centermodes. For the:justifiedmode, works the same as for:left. - y
-
The vertical reference for drawing the text. All text will be drawn from this point down.
- width
-
The maximum width for the lines of text. Line is broken when this width is exceeded.
- mode
-
The alignment of the text. Valid values are
:left,:right,:centerand:justified. - color
-
The color of the text, in hexadecimal RRGGBB format.
- alpha
-
The opacity of the text. Valid values vary from 0 (fully transparent) to 255 (fully opaque).
- z_index
-
The z-order to draw the object. Objects with larger z-orders will be drawn on top of the ones with smaller z-orders.
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/minigl/text.rb', line 93 def write_breaking(text, x, y, width, mode = :left, color = 0, alpha = 0xff, z_index = 0) color = (alpha << 24) | color text.split("\n").each do |p| if mode == :justified y = write_paragraph_justified p, x, y, width, color, z_index else rel = case mode when :left then 0 when :center then 0.5 when :right then 1 else 0 end y = write_paragraph p, x, y, width, rel, color, z_index end end end |
#write_line(text, x, y, mode = :left, color = 0, effect = nil, effect_color = 0, effect_size = 1, effect_alpha = 0xff, alpha = 0xff, z_index = 0) ⇒ Object
Draws a single line of text.
Parameters:
- text
-
The text to be drawn. No line breaks are allowed.
- x
-
The horizontal reference for drawing the text. If
modeis:left, all text will be drawn from this point to the right; ifmodeis:right, all text will be drawn from this point to the left; and ifmodeis:center, the text will be equally distributed to the left and to the right of this point. - y
-
The vertical reference for drawing the text. All text will be drawn from this point down.
- mode
-
The alignment of the text. Valid values are
:left,:rightand:center. - color
-
The color of the text, in hexadecimal RRGGBB format.
- effect
-
Effect to add to the text. It can be either
nil, for no effect,:borderfor bordered text, or:shadowfor shadowed text (the shadow is always placed below and to the right of the text). - effect_color
-
Color of the effect, if any.
- effect_size
-
Size of the effect, if any. In the case of
:border, this will be the width of the border (the border will only look good wheneffect_sizeis relatively small, compared to the size of the font); in the case of:shadow, it will be the distance between the text and the shadow. - effect_alpha
-
Opacity of the effect, if any. For shadows, it is usual to provide less than 255.
- alpha
-
The opacity of the text. Valid values vary from 0 (fully transparent) to 255 (fully opaque).
- z_index
-
The z-order to draw the object. Objects with larger z-orders will be drawn on top of the ones with smaller z-orders.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/minigl/text.rb', line 45 def write_line(text, x, y, mode = :left, color = 0, effect = nil, effect_color = 0, effect_size = 1, effect_alpha = 0xff, alpha = 0xff, z_index = 0) color = (alpha << 24) | color rel = case mode when :left then 0 when :center then 0.5 when :right then 1 else 0 end if effect effect_color = (effect_alpha << 24) | effect_color if effect == :border @font.draw_rel text, x - effect_size, y - effect_size, z_index, rel, 0, 1, 1, effect_color @font.draw_rel text, x, y - effect_size, z_index, rel, 0, 1, 1, effect_color @font.draw_rel text, x + effect_size, y - effect_size, z_index, rel, 0, 1, 1, effect_color @font.draw_rel text, x + effect_size, y, z_index, rel, 0, 1, 1, effect_color @font.draw_rel text, x + effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color @font.draw_rel text, x, y + effect_size, z_index, rel, 0, 1, 1, effect_color @font.draw_rel text, x - effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color @font.draw_rel text, x - effect_size, y, z_index, rel, 0, 1, 1, effect_color elsif effect == :shadow @font.draw_rel text, x + effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color end end @font.draw_rel text, x, y, z_index, rel, 0, 1, 1, color end |