Method: MiniGL::Button#initialize

Defined in:
lib/minigl/forms.rb

#initialize(x, y = nil, font = nil, text = nil, img = nil, text_color = 0, disabled_text_color = 0, over_text_color = 0, down_text_color = 0, center_x = true, center_y = true, margin_x = 0, margin_y = 0, width = nil, height = nil, params = nil, retro = nil, scale_x = 1, scale_y = 1, anchor = nil, &action) ⇒ Button

Creates a button.

Parameters:

x

The x-coordinate where the button will be drawn in the screen.

y

The y-coordinate where the button will be drawn in the screen.

font

The Gosu::Font object that will be used to draw the button text.

text

The button text. Can be nil or empty.

img

A spritesheet containing four images in a column, representing, from top to bottom, the default state, the hover state (when the mouse is over the button), the pressed state (when the mouse button is down and the cursor is over the button) and the disabled state. If nil, the width and height parameters must be provided.

text_color

Color of the button text, in hexadecimal RRGGBB format.

disabled_text_color

Color of the button text, when it’s disabled, in hexadecimal RRGGBB format.

over_text_color

Color of the button text, when the cursor is over it (hexadecimal RRGGBB).

down_text_color

Color of the button text, when it is pressed (hexadecimal RRGGBB).

center_x

Whether the button text should be horizontally centered in its area (the area is defined by the image size, if an image is given, or by the width and height parameters, otherwise).

center_y

Whether the button text should be vertically centered in its area (the area is defined by the image size, if an image is given, or by the width and height parameters, otherwise).

margin_x

The x offset, from the button x-coordinate, to draw the text. This parameter is used only if center is false.

margin_y

The y offset, from the button y-coordinate, to draw the text. This parameter is used only if center is false.

width

Width of the button clickable area. This parameter is used only if img is nil.

height

Height of the button clickable area. This parameter is used only if img is nil.

params

An object containing any parameters you want passed to the action block. When the button is clicked, the following is called:

@action.call @params

Note that this doesn’t force you to declare a block that takes parameters.

retro

Whether the image should be loaded with the ‘retro’ option set (see Gosu::Image for details). If the value is omitted, the Res.retro_images value will be used.

scale_x

Horizontal scale to draw the component with.

scale_y

Vertical scale to draw the component with.

anchor

See parameter with the same name in Panel#initialize for details.

action

The block of code executed when the button is clicked (or by calling the click method).

Obs.: This method accepts named parameters, but x and y are mandatory (also, img is mandatory when width and height are not provided, and vice-versa).



274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
# File 'lib/minigl/forms.rb', line 274

def initialize(x, y = nil, font = nil, text = nil, img = nil,
               text_color = 0, disabled_text_color = 0, over_text_color = 0, down_text_color = 0,
               center_x = true, center_y = true, margin_x = 0, margin_y = 0, width = nil, height = nil,
               params = nil, retro = nil, scale_x = 1, scale_y = 1, anchor = nil, &action)
  if x.is_a? Hash
    y = x[:y]
    font = x[:font]
    text = x[:text]
    img = x[:img]
    text_color = x.fetch(:text_color, 0)
    disabled_text_color = x.fetch(:disabled_text_color, 0)
    over_text_color = x.fetch(:over_text_color, 0)
    down_text_color = x.fetch(:down_text_color, 0)
    center_x = x.fetch(:center_x, true)
    center_y = x.fetch(:center_y, true)
    margin_x = x.fetch(:margin_x, 0)
    margin_y = x.fetch(:margin_y, 0)
    width = x.fetch(:width, nil)
    height = x.fetch(:height, nil)
    params = x.fetch(:params, nil)
    retro = x.fetch(:retro, nil)
    scale_x = x.fetch(:scale_x, 1)
    scale_y = x.fetch(:scale_y, 1)
    anchor = x.fetch(:anchor, nil)
    x = x[:x]
  end

  retro = Res.retro_images if retro.nil?
  @scale_x = scale_x
  @scale_y = scale_y
  @img =
      if img; Res.imgs img, 1, 4, true, '.png', retro
      else; nil; end
  @w =
      if img; @img[0].width * @scale_x
      else; width * @scale_x; end
  @h =
      if img; @img[0].height * @scale_y
      else; height * @scale_y; end

  @anchor_offset_x = x; @anchor_offset_y = y
  @anchor, x, y = FormUtils.check_anchor(anchor, x, y, @w, @h)

  super x, y, font, text, text_color, disabled_text_color
  @over_text_color = over_text_color
  @down_text_color = down_text_color
  @center_x = center_x
  @center_y = center_y
  @margin_x = margin_x
  @margin_y = margin_y
  set_position(x, y)

  @action = action
  @params = params

  @state = :up
  @img_index = @enabled ? 0 : 3
end