~ubuntu-branches/ubuntu/vivid/rabbit/vivid

« back to all changes in this revision

Viewing changes to sample/kof2005/high-light-expose.rb

  • Committer: Bazaar Package Importer
  • Author(s): Youhei SASAKI
  • Date: 2009-07-22 22:15:37 UTC
  • Revision ID: james.westby@ubuntu.com-20090722221537-iy7foj73p2kyuumi
Tags: upstream-0.6.1
ImportĀ upstreamĀ versionĀ 0.6.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env ruby
 
2
 
 
3
require 'gtk2'
 
4
 
 
5
Gtk.init
 
6
 
 
7
class Widget < Gtk::EventBox
 
8
 
 
9
  def initialize
 
10
    super
 
11
    set_visible_window(false)
 
12
    add_events(Gdk::Event::ENTER_NOTIFY_MASK)
 
13
    add_events(Gdk::Event::LEAVE_NOTIFY_MASK)
 
14
    set_enter_notify
 
15
    set_leave_notify
 
16
    set_expose_after
 
17
    @entered = false
 
18
  end
 
19
 
 
20
  def set_enter_notify
 
21
    signal_connect("enter_notify_event") do |widget, event|
 
22
      @entered = true
 
23
      queue_draw
 
24
      false
 
25
    end
 
26
  end
 
27
  
 
28
  def set_leave_notify
 
29
    signal_connect("leave_notify_event") do |widget, event|
 
30
      @entered = false
 
31
      queue_draw
 
32
      false
 
33
    end
 
34
  end
 
35
 
 
36
  def set_expose_after
 
37
    signal_connect_after("expose_event") do |widget, event|
 
38
      if @entered
 
39
        cr = widget.window.create_cairo_context
 
40
        
 
41
        x, y, w, h = widget.allocation.to_a
 
42
        line_width = cr.line_width / 2
 
43
        x += line_width
 
44
        y += line_width
 
45
        w -= line_width * 2
 
46
        h -= line_width * 2
 
47
        cr.rectangle(x, y, w, h)
 
48
        cr.set_source_rgba([0, 0, 1, 0.6])
 
49
        cr.stroke
 
50
      end
 
51
      false
 
52
    end
 
53
  end
 
54
end
 
55
 
 
56
window = Gtk::Window.new
 
57
window.set_default_size(512, 400)
 
58
 
 
59
window.signal_connect("destroy") do
 
60
  Gtk.main_quit
 
61
  true
 
62
end
 
63
window.signal_connect("key_press_event") do |widget, event|
 
64
  if event.state.control_mask? and event.keyval == Gdk::Keyval::GDK_q
 
65
    widget.destroy
 
66
    true
 
67
  else
 
68
    false
 
69
  end
 
70
end
 
71
 
 
72
layout = Gtk::Layout.new
 
73
 
 
74
rect = Widget.new
 
75
rect.set_size_request(260, 260)
 
76
rect.signal_connect("expose_event") do |widget, event|
 
77
  x, y, w, h = widget.allocation.to_a
 
78
  cr = widget.window.create_cairo_context
 
79
  line_width = cr.line_width / 2
 
80
  x += line_width
 
81
  y += line_width
 
82
  w -= line_width * 2
 
83
  h -= line_width * 2
 
84
  rgba = [0xff, 0xf1, 0xec, 0xff].collect{|c| c / 255.0}
 
85
  cr.set_source_rgba(rgba)
 
86
  cr.rectangle(x, y, w, h)
 
87
  cr.fill_preserve
 
88
  rgba = [0xff, 0x99, 0x99, 0xff].collect{|c| c / 255.0}
 
89
  cr.set_source_rgba(rgba)
 
90
  cr.stroke
 
91
  false
 
92
end
 
93
layout.put(rect, 80, 30)
 
94
  
 
95
circ = Widget.new
 
96
circ.set_size_request(250, 250)
 
97
circ.signal_connect("expose_event") do |widget, event|
 
98
  x, y, w, h = widget.allocation.to_a
 
99
  cr = widget.window.create_cairo_context
 
100
  line_width = cr.line_width / 2
 
101
  x += line_width
 
102
  y += line_width
 
103
  w -= line_width * 2
 
104
  h -= line_width * 2
 
105
  rgba = [0xcc, 0xff, 0xcc, 0xff].collect{|c| c / 255.0}
 
106
  cr.set_source_rgba(rgba)
 
107
  r = w / 2
 
108
  cr.arc(x + r , y + r, r, 0, 2 * Math::PI)
 
109
  cr.fill_preserve
 
110
  rgba = [0x00, 0x66, 0x00, 0xff].collect{|c| c / 255.0}
 
111
  cr.set_source_rgba(rgba)
 
112
  cr.stroke
 
113
  false
 
114
end
 
115
layout.put(circ, 180, 140)
 
116
 
 
117
window.add(layout)
 
118
window.show_all
 
119
 
 
120
Gtk.main