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 = nil, y = nil, mode = :left, color = 0, alpha = 0xff, effect = nil, effect_color = 0, effect_size = 1, effect_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::Font
that 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_line
for the:left
,:right
and:center
modes. For the:justified
mode, 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
,:center
and: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.
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/minigl/text.rb', line 110 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 = nil, y = nil, mode = :left, color = 0, alpha = 0xff, effect = nil, effect_color = 0, effect_size = 1, effect_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
mode
is:left
, all text will be drawn from this point to the right; ifmode
is:right
, all text will be drawn from this point to the left; and ifmode
is: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
,:right
and:center
. - 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).
- effect
-
Effect to add to the text. It can be either
nil
, for no effect,:border
for bordered text, or:shadow
for 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_size
is 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.
- 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.
Obs.: This method accepts named parameters, but text
, x
and y
are mandatory.
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/minigl/text.rb', line 48 def write_line(text, x = nil, y = nil, mode = :left, color = 0, alpha = 0xff, effect = nil, effect_color = 0, effect_size = 1, effect_alpha = 0xff, z_index = 0) if text.is_a? Hash x = text[:x] y = text[:y] mode = text.fetch(:mode, :left) color = text.fetch(:color, 0) alpha = text.fetch(:alpha, 0xff) effect = text.fetch(:effect, nil) effect_color = text.fetch(:effect_color, 0) effect_size = text.fetch(:effect_size, 1) effect_alpha = text.fetch(:effect_alpha, 0xff) z_index = text.fetch(:z_index, 0) text = text[:text] end 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 |