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::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. 
| 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 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. 
- 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,: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. 
- 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 |