Class: Badline::GUI::Window

Inherits:
Object
  • Object
show all
Defined in:
lib/badline/gui/window.rb

Constant Summary collapse

DEFAULT_REFRESH_RATE =
60

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(title:, width:, height:, scale: 2, vsync: true) ⇒ Window

Returns a new instance of Window.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/badline/gui/window.rb', line 10

def initialize(title:, width:, height:, scale: 2, vsync: true)
  SDL2.init(SDL2::INIT_VIDEO | SDL2::INIT_EVENTS)
  SDL2::Hints["SDL_RENDER_SCALE_QUALITY"] = "0" # nearest-neighbour

  @window = SDL2::Window.create(
    title,
    SDL2::Window::POS_CENTERED, SDL2::Window::POS_CENTERED,
    width * scale, height * scale,
    SDL2::Window::Flags::RESIZABLE
  )

  flags = SDL2::Renderer::Flags::ACCELERATED
  flags |= SDL2::Renderer::Flags::PRESENTVSYNC if vsync
  @renderer = @window.create_renderer(-1, flags)
  @renderer.logical_size = [width, height]
end

Instance Attribute Details

#rendererObject (readonly)

Returns the value of attribute renderer.



8
9
10
# File 'lib/badline/gui/window.rb', line 8

def renderer
  @renderer
end

Instance Method Details

#draw(panes) ⇒ Object



38
39
40
41
42
43
# File 'lib/badline/gui/window.rb', line 38

def draw(panes)
  @renderer.draw_color = [0, 0, 0]
  @renderer.clear
  panes.each { |pane| pane.render(@renderer) }
  @renderer.present
end

#refresh_rateObject



31
32
33
34
35
36
# File 'lib/badline/gui/window.rb', line 31

def refresh_rate
  rate = SDL2::Display.displays.first.current_mode.refresh_rate
  rate.positive? ? rate : DEFAULT_REFRESH_RATE
rescue StandardError
  DEFAULT_REFRESH_RATE
end

#title=(title) ⇒ Object



27
28
29
# File 'lib/badline/gui/window.rb', line 27

def title=(title)
  @window.title = title
end