Method: MiniGL::TextHelper#write_line

Defined in:
lib/minigl/text.rb

#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

x

The horizontal reference for drawing the text. If mode is :left, all text will be drawn from this point to the right; if mode is :right, all text will be drawn from this point to the left; and if mode 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 when effect_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.



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
90
# File 'lib/minigl/text.rb', line 49

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_markup_rel text, x - effect_size, y - effect_size, z_index, rel, 0, 1, 1, effect_color
      @font.draw_markup_rel text, x, y - effect_size, z_index, rel, 0, 1, 1, effect_color
      @font.draw_markup_rel text, x + effect_size, y - effect_size, z_index, rel, 0, 1, 1, effect_color
      @font.draw_markup_rel text, x + effect_size, y, z_index, rel, 0, 1, 1, effect_color
      @font.draw_markup_rel text, x + effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color
      @font.draw_markup_rel text, x, y + effect_size, z_index, rel, 0, 1, 1, effect_color
      @font.draw_markup_rel text, x - effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color
      @font.draw_markup_rel text, x - effect_size, y, z_index, rel, 0, 1, 1, effect_color
    elsif effect == :shadow
      @font.draw_markup_rel text, x + effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color
    end
  end
  @font.draw_markup_rel text, x, y, z_index, rel, 0, 1, 1, color
end