Jay McGavren's Journal

2007-10-03

wxRuby: Painting a device context...

We pass Wx::Window#paint a block which will be called with a device context to paint on. Then we hook this into Wx::Window#evt_paint so it’s called whenever a repaint is needed.

This is a bit simpler than Ruby-Gnome2 so far…

gems_loaded = false
begin
	require 'wx'
rescue LoadError
	if gems_loaded == false
		require 'rubygems'
		gems_loaded = true
		retry
	else
		raise
	end
end

class MyApp < Wx::App
	def on_init
		#Create the top window.
		frame = Wx::Frame.new(nil, :size => [300, 300])
		#Create a panel within it.
		view = Wx::Window.new(frame)
		#Create a grey pen, 5 pixels wide.
		pen = Wx::Pen.new(Wx::Colour.new(128, 128, 128), 5)
		#Set up a handler for paint events.
		view.evt_paint do |event|
			#Wx::Window#paint takes a block.
			#This will later be called with a device context to paint on.
			view.paint do |dc|
				dc.clear
				dc.pen = pen
				dc.draw_line(0, 0, 100, 100)
			end
		end
		#Show the window.
		frame.show
		return true
	end
end

app = MyApp.new
app.main_loop
comments powered by Disqus