require 'gtk2'
$supports_alpha = false
def clicked(widget, event)
widget.decorated = !widget.decorated?
end
def expose_event(widget, event)
cr = widget.window.create_cairo_context
if $supports_alpha
cr.set_source_rgba(1.0, 1.0, 1.0, 0.0)
else
cr.set_source_rgb(1.0, 1.0, 1.0)
end
cr.operator = Cairo::OPERATOR_SOURCE
cr.paint
width, height = widget.size
cr.set_source_rgba(1.0, 0.2, 0.2, 0.6)
if width < height
radius = width.to_f/2 - 0.8
else
radius = height.to_f/2 - 0.8
end
cr.arc(width.to_f/2, height.to_f/2, radius, 0, 2.0*3.14)
cr.fill
cr.stroke
return false
end
def screen_changed(widget, old_screen = nil)
screen = widget.screen
colormap = screen.rgba_colormap
if colormap.nil?
puts 'Your screen does not support alpha channels!'
colormap = screen.rgb_colormap
$supports_alpha = false
else
puts 'Your screen supports alpha channels!'
$supports_alpha = true
end
widget.colormap = colormap
return false
end
def main
window = Gtk::Window.new
window.title = "Alpha Demo"
window.signal_connect('delete-event') { |widget, event| Gtk.main_quit }
window.app_paintable = true
window.signal_connect('expose-event') { |widget, event| expose_event(widget, event) }
window.signal_connect('screen-changed') { |widget, old_screen| screen_changed(widget, old_screen) }
window.decorated = false
window.add_events(Gdk::Event::BUTTON_PRESS_MASK)
window.signal_connect('button-press-event') { |widget, event| clicked(widget, event) }
screen_changed(window)
window.show_all
Gtk.main
end
main