module Rabbit::Renderer::Display::Base

Public Class Methods

new(*args, &block) click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 11
def initialize(*args, &block)
  @drawable = nil
  @size = nil
  @size_dirty = true
  @default_size_ratio = nil
  @size_ratio = nil
  super
end

Public Instance Methods

attach_to(window, container=nil) click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 47
def attach_to(window, container=nil)
  @window = window
  @container = container || @window

  set_configure_event
end
create_pango_context() click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 81
def create_pango_context
  context = widget.create_pango_context
  set_font_resolution(context)
  context
end
create_pango_layout(text) click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 87
def create_pango_layout(text)
  layout = widget.create_pango_layout(text)
  set_font_resolution(layout.context)
  layout
end
detach() click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 54
def detach
  if !@window.destroyed? and @configure_signal_id
    @window.signal_handler_disconnect(@configure_signal_id)
    @configure_signal_id = nil
  end

  @window = nil
  @container = nil
end
draw_slide(slide, simulation) click to toggle source
Calls superclass method
# File lib/rabbit/renderer/display/base.rb, line 97
def draw_slide(slide, simulation)
  set_size_ratio(slide.size_ratio || @default_size_ratio)

  if simulation
    super
  else
    save_context do
      translate_context(@size.logical_margin_left,
                        @size.logical_margin_top)
      super
    end

    unless @size.have_logical_margin?
      return
    end

    margin_background = make_color("black")
    if @size.have_logical_margin_x?
      draw_rectangle(true,
                     0,
                     0,
                     @size.logical_margin_left,
                     @size.real_height,
                     margin_background)
      draw_rectangle(true,
                     @size.real_width - @size.logical_margin_right,
                     0,
                     @size.logical_margin_right,
                     @size.real_height,
                     margin_background)
    end
    if @size.have_logical_margin_y?
      draw_rectangle(true,
                     0,
                     0,
                     @size.real_width,
                     @size.logical_margin_top,
                     margin_background)
      draw_rectangle(true,
                     0,
                     @size.real_height - @size.logical_margin_bottom,
                     @size.real_width,
                     @size.logical_margin_bottom,
                     margin_background)
    end
  end
end
height() click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 29
def height
  refresh_size
  if @size
    @size.logical_height
  else
    nil
  end
end
make_layout(text) click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 74
def make_layout(text)
  attrs, text = Pango.parse_markup(text)
  layout = create_pango_layout(text)
  layout.set_attributes(attrs)
  layout
end
redraw() click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 43
def redraw
  widget.queue_draw
end
size() click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 38
def size
  refresh_size
  @size
end
toggle_blackout() click to toggle source
Calls superclass method Rabbit::Renderer::Base#toggle_blackout
# File lib/rabbit/renderer/display/base.rb, line 69
def toggle_blackout
  super
  update_menu
end
toggle_whiteout() click to toggle source
Calls superclass method Rabbit::Renderer::Base#toggle_whiteout
# File lib/rabbit/renderer/display/base.rb, line 64
def toggle_whiteout
  super
  update_menu
end
update_title() click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 93
def update_title
  @canvas.update_title(@canvas.slide_title)
end
width() click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 20
def width
  refresh_size
  if @size
    @size.logical_width
  else
    nil
  end
end

Private Instance Methods

configured(x, y, w, h) click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 185
def configured(x, y, w, h)
  @size_dirty = true
end
queue_draw() click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 189
def queue_draw
  widget.queue_draw
end
refresh_size() click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 168
def refresh_size
  return unless @size_dirty

  @size = Size.new(@drawable.width,
                   @drawable.height,
                   @size.ratio)
  @size_dirty = false
end
set_configure_event() click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 177
def set_configure_event
  id = @window.signal_connect("configure_event") do |widget, event|
    configured(event.x, event.y, event.width, event.height)
    false
  end
  @configure_signal_id = id
end
set_drawable(drawable) click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 146
def set_drawable(drawable)
  @drawable = drawable
  w = @drawable.width
  h = @drawable.height
  @default_size_ratio = w.to_f / h.to_f
  @size_ratio = @default_size_ratio
  set_size(w, h)
end
set_size(w, h) click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 155
def set_size(w, h)
  @size = Size.new(w, h, @size_ratio)
end
set_size_ratio(ratio) click to toggle source
# File lib/rabbit/renderer/display/base.rb, line 159
def set_size_ratio(ratio)
  return if @size.ratio == ratio

  w = @size.real_width
  h = @size.real_height
  @size_ratio = ratio
  @size = Size.new(w, h, @size_ratio)
end