def initialize (parent_window, text)
super()
@parent_window = parent_window
@text = text
self.use_full_page = false
self.unit = Gtk::PaperSize::UNIT_POINTS
page_setup = Gtk::PageSetup.new
paper_size = Gtk::PaperSize.new(Gtk::PaperSize.default)
page_setup.paper_size_and_default_margins = paper_size
self.default_page_setup = page_setup
self.show_progress = true
signal_connect("begin-print") do |pop, context|
puts "calls begin-print"
cr = context.cairo_context
paragraphs = @text.split("\n")
layouts = []
paragraphs.each do |para|
layouts << create_layout(cr, para)
end
@page_layouts = []
curr_height = 0
n_pages = 0
layouts.each do |layout|
height = layout.height_in_points
if curr_height + height > real_page_height
n_pages += 1
curr_height = 0
end
@page_layouts[n_pages] ||= []
@page_layouts[n_pages] << layout
curr_height += height
end
pop.n_pages = n_pages + 1
end
signal_connect("draw-page") do |pop, context, page_num|
puts "calls draw-page %d" % page_num
cr = context.cairo_context
x, y = [0,0]
if @page_layouts[page_num]
@page_layouts[page_num].each do |layout|
cr.move_to(x,y)
cr.show_pango_layout(layout)
y += layout.height_in_points
end
total_pages = @page_layouts.length
else
total_pages = 1
end
draw_footer(cr, page_num + 1, total_pages)
end
end