gtk3 2.1.0-x86-mingw32 → 2.2.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/gtk3/extconf.rb +1 -1
- data/ext/gtk3/rbgtk-about-dialog.c +0 -6
- data/ext/gtk3/rbgtk-accessible.c +0 -16
- data/ext/gtk3/rbgtk-entry.c +4 -18
- data/ext/gtk3/rbgtk-header-bar.c +58 -0
- data/ext/gtk3/rbgtk-icon-view.c +30 -5
- data/ext/gtk3/rbgtk-level-bar.c +88 -0
- data/ext/gtk3/rbgtk-link-button.c +0 -6
- data/ext/gtk3/rbgtk-menu-button.c +41 -0
- data/ext/gtk3/rbgtk-revealer.c +42 -0
- data/ext/gtk3/rbgtk-search-bar.c +59 -0
- data/ext/gtk3/rbgtk-search-entry.c +42 -0
- data/ext/gtk3/rbgtk-stack.c +106 -0
- data/ext/gtk3/rbgtk-tree-selection.c +7 -22
- data/ext/gtk3/rbgtk.c +24 -3
- data/ext/gtk3/rbgtk3conversions.h +25 -2
- data/ext/gtk3/rbgtk3private.h +23 -3
- data/lib/1.9/gtk3.so +0 -0
- data/lib/2.0/gtk3.so +0 -0
- data/lib/2.1/gtk3.so +0 -0
- data/sample/gtk-demo/appwindow.rb +95 -95
- data/sample/gtk-demo/cairo-operator.rb +8 -8
- data/sample/gtk-demo/drawingarea.rb +74 -99
- data/sample/gtk-demo/pixbufs.rb +48 -57
- data/sample/misc/alpha-demo.rb +1 -1
- data/sample/misc/assistant.rb +45 -51
- data/sample/misc/cairo-pong.rb +26 -24
- data/sample/misc/composited-windows.rb +2 -2
- data/sample/misc/dnd.rb +23 -23
- data/sample/misc/drag-move.rb +19 -11
- data/sample/misc/drawing.rb +1 -1
- data/sample/misc/mouse-gesture.rb +3 -3
- data/sample/misc/pangorenderer.rb +1 -1
- data/sample/misc/properties.rb +1 -0
- data/sample/misc/to_drawable.rb +1 -1
- data/sample/misc/tooltips.rb +1 -1
- data/test/test_gtk_accessible.rb +31 -0
- data/test/test_gtk_entry.rb +36 -0
- data/test/test_gtk_header_bar.rb +66 -0
- data/test/test_gtk_icon_view.rb +41 -0
- data/test/test_gtk_level_bar.rb +82 -0
- data/test/test_gtk_list_store.rb +2 -1
- data/test/test_gtk_menu_button.rb +49 -0
- data/test/test_gtk_revealer.rb +57 -0
- data/test/test_gtk_search_bar.rb +55 -0
- data/test/test_gtk_search_entry.rb +34 -0
- data/test/test_gtk_stack.rb +115 -0
- data/test/test_gtk_tree_selection.rb +31 -0
- metadata +31 -14
data/sample/gtk-demo/pixbufs.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2003-
|
1
|
+
# Copyright (c) 2003-2014 Ruby-GNOME2 Project Team
|
2
2
|
# This program is licenced under the same licence as Ruby-GNOME2.
|
3
3
|
#
|
4
4
|
# $Id: pixbufs.rb,v 1.5 2005/02/12 23:02:43 kzys Exp $
|
@@ -16,29 +16,29 @@ off how to use Gtk::DrawingArea to do a simple animation.
|
|
16
16
|
Look at the Image demo for additional pixbuf usage examples.
|
17
17
|
=end
|
18
18
|
|
19
|
-
require
|
19
|
+
require "common"
|
20
20
|
|
21
21
|
module Demo
|
22
22
|
class Pixbufs < BasicWindow
|
23
23
|
FRAME_DELAY = 50
|
24
24
|
|
25
|
-
BACKGROUND_NAME =
|
25
|
+
BACKGROUND_NAME = "background.jpg"
|
26
26
|
|
27
27
|
IMAGE_NAMES = [
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
28
|
+
"apple-red.png",
|
29
|
+
"gnome-applets.png",
|
30
|
+
"gnome-calendar.png",
|
31
|
+
"gnome-foot.png",
|
32
|
+
"gnome-gmush.png",
|
33
|
+
"gnome-gimp.png",
|
34
|
+
"gnome-gsame.png",
|
35
|
+
"gnu-keys.png",
|
36
|
+
"ruby-gnome2-logo.png",
|
37
37
|
]
|
38
38
|
|
39
39
|
CYCLE_LEN = 60
|
40
40
|
def initialize
|
41
|
-
super(
|
41
|
+
super("Pixbufs")
|
42
42
|
set_resizable(false)
|
43
43
|
|
44
44
|
@background = nil
|
@@ -47,40 +47,41 @@ module Demo
|
|
47
47
|
@images = []
|
48
48
|
|
49
49
|
begin
|
50
|
-
|
50
|
+
load_pixbufs
|
51
51
|
|
52
|
-
|
52
|
+
set_size_request(@background.width, @background.height)
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
@frame = Gdk::Pixbuf.new(Gdk::Pixbuf::COLORSPACE_RGB,
|
55
|
+
false, 8,
|
56
|
+
@background.width, @background.height)
|
57
57
|
|
58
|
-
|
58
|
+
@da = Gtk::DrawingArea.new
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
@da.signal_connect("draw") do |w, e|
|
61
|
+
draw_cb(w, e)
|
62
|
+
end
|
63
63
|
|
64
|
-
|
64
|
+
add(@da)
|
65
65
|
|
66
|
-
|
66
|
+
timeout_id = GLib::Timeout.add(FRAME_DELAY) do
|
67
67
|
timeout
|
68
|
-
|
69
|
-
signal_connect(
|
70
|
-
|
68
|
+
end
|
69
|
+
signal_connect("destroy") do
|
70
|
+
GLib::Source.remove(timeout_id)
|
71
71
|
end
|
72
72
|
rescue
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
73
|
+
message = "Failed to load an image: #{$!.message}"
|
74
|
+
dialog = Gtk::MessageDialog.new(:parent => self,
|
75
|
+
:flags => :destroy_with_parent,
|
76
|
+
:type => :error,
|
77
|
+
:buttons_type => :close,
|
78
|
+
:message => message)
|
79
|
+
|
80
|
+
dialog.signal_connect("response") do
|
81
|
+
dialog.destroy
|
82
|
+
end
|
82
83
|
|
83
|
-
|
84
|
+
dialog.show
|
84
85
|
end
|
85
86
|
end
|
86
87
|
|
@@ -88,7 +89,7 @@ module Demo
|
|
88
89
|
# Loads the images for the demo
|
89
90
|
|
90
91
|
if @background
|
91
|
-
|
92
|
+
return # already loaded earlier
|
92
93
|
end
|
93
94
|
|
94
95
|
# demo_find_file() looks in the the current directory first,
|
@@ -99,25 +100,15 @@ module Demo
|
|
99
100
|
@background = Gdk::Pixbuf.new(filename)
|
100
101
|
|
101
102
|
IMAGE_NAMES.each_with_index do |basename, i|
|
102
|
-
|
103
|
+
filename = Demo.find_file(basename)
|
103
104
|
|
104
|
-
|
105
|
+
@images[i] = Gdk::Pixbuf.new(filename)
|
105
106
|
end
|
106
107
|
end
|
107
108
|
|
108
|
-
def
|
109
|
-
|
110
|
-
|
111
|
-
pixels = @frame.pixels
|
112
|
-
pixels[0, rowstride * event.area.y + event.area.x * 3] = ''
|
113
|
-
|
114
|
-
Gdk::RGB.draw_rgb_image(widget.window,
|
115
|
-
widget.style.black_gc,
|
116
|
-
event.area.x, event.area.y,
|
117
|
-
event.area.width, event.area.height,
|
118
|
-
Gdk::RGB::Dither::NORMAL,
|
119
|
-
pixels, rowstride,
|
120
|
-
event.area.x, event.area.y)
|
109
|
+
def draw_cb(widget, cairo_context)
|
110
|
+
cairo_context.set_source_pixbuf(@frame)
|
111
|
+
cairo_context.paint
|
121
112
|
true
|
122
113
|
end
|
123
114
|
|
@@ -128,7 +119,7 @@ module Demo
|
|
128
119
|
|
129
120
|
f = Float(@frame_num % CYCLE_LEN) / CYCLE_LEN;
|
130
121
|
|
131
|
-
xmid = @background.width
|
122
|
+
xmid = @background.width / 2.0
|
132
123
|
ymid = @background.height / 2.0
|
133
124
|
|
134
125
|
radius = [xmid, ymid].min / 2.0
|
@@ -138,7 +129,7 @@ module Demo
|
|
138
129
|
|
139
130
|
r = radius + (radius / 3.0) * Math.sin(f * 2.0 * Math::PI)
|
140
131
|
|
141
|
-
xpos = (xmid + r * Math.cos(ang) - image.width
|
132
|
+
xpos = (xmid + r * Math.cos(ang) - image.width / 2.0 + 0.5).floor
|
142
133
|
ypos = (ymid + r * Math.sin(ang) - image.height / 2.0 + 0.5).floor
|
143
134
|
|
144
135
|
k = if (i & 1) == 1
|
@@ -158,12 +149,12 @@ module Demo
|
|
158
149
|
if (i & 1) == 1
|
159
150
|
[
|
160
151
|
127,
|
161
|
-
(255 * Math.sin(f * 2.0 * Math::PI)).abs
|
152
|
+
(255 * Math.sin(f * 2.0 * Math::PI)).abs,
|
162
153
|
].max
|
163
154
|
else
|
164
155
|
[
|
165
156
|
127,
|
166
|
-
(255 * Math.cos(f * 2.0 * Math::PI)).abs
|
157
|
+
(255 * Math.cos(f * 2.0 * Math::PI)).abs,
|
167
158
|
].max
|
168
159
|
end)
|
169
160
|
end
|
data/sample/misc/alpha-demo.rb
CHANGED
data/sample/misc/assistant.rb
CHANGED
@@ -10,13 +10,7 @@
|
|
10
10
|
$Id: assistant.rb,v 1.1 2006/11/23 08:39:12 mutoh Exp $
|
11
11
|
=end
|
12
12
|
|
13
|
-
require
|
14
|
-
|
15
|
-
if str = Gtk.check_version(2, 10, 0)
|
16
|
-
puts "This sample requires GTK+ 2.10.0 or later"
|
17
|
-
puts str
|
18
|
-
exit
|
19
|
-
end
|
13
|
+
require "gtk3"
|
20
14
|
|
21
15
|
class AssistantRunner
|
22
16
|
def initialize
|
@@ -60,12 +54,12 @@ class AssistantRunner
|
|
60
54
|
end
|
61
55
|
|
62
56
|
def add_completion_test_page(assistant, text, visible, complete)
|
63
|
-
page = Gtk::
|
57
|
+
page = Gtk::Box.new(:vertical, 0)
|
64
58
|
check = Gtk::CheckButton.new("Complete")
|
65
59
|
page.add(Gtk::Label.new(text))
|
66
60
|
page.add(check)
|
67
61
|
check.active = complete
|
68
|
-
check.signal_connect(
|
62
|
+
check.signal_connect("toggled") do
|
69
63
|
complete = check.active?
|
70
64
|
assistant.set_page_complete(page, complete)
|
71
65
|
end
|
@@ -83,11 +77,11 @@ class AssistantRunner
|
|
83
77
|
def prepare_cb(assistant, page)
|
84
78
|
if page.is_a?(Gtk::Label)
|
85
79
|
puts "prepare: #{page.text}"
|
86
|
-
elsif assistant.get_page_type(page) ==
|
80
|
+
elsif assistant.get_page_type(page) == :progress
|
87
81
|
progress = page.child
|
88
82
|
assistant.set_page_complete(page, false)
|
89
83
|
progress.fraction = 0.0
|
90
|
-
|
84
|
+
GLib::Timeout.add(300) do
|
91
85
|
page = assistant.get_nth_page(assistant.current_page)
|
92
86
|
progress = page.child
|
93
87
|
value = progress.fraction = progress.fraction + 0.1
|
@@ -103,18 +97,18 @@ class AssistantRunner
|
|
103
97
|
def create_simple_assistant
|
104
98
|
assistant = Gtk::Assistant.new
|
105
99
|
assistant.set_default_size(400, 300)
|
106
|
-
assistant.signal_connect(
|
100
|
+
assistant.signal_connect("cancel") do
|
107
101
|
puts "cancel"
|
108
102
|
assistant.hide
|
109
103
|
end
|
110
|
-
assistant.signal_connect(
|
104
|
+
assistant.signal_connect("close") do
|
111
105
|
puts "close"
|
112
106
|
assistant.hide
|
113
107
|
end
|
114
|
-
assistant.signal_connect(
|
108
|
+
assistant.signal_connect("apply") do
|
115
109
|
puts "apply"
|
116
110
|
end
|
117
|
-
assistant.signal_connect(
|
111
|
+
assistant.signal_connect("prepare") do |_assistant, page|
|
118
112
|
prepare_cb(_assistant, page)
|
119
113
|
end
|
120
114
|
|
@@ -135,18 +129,18 @@ class AssistantRunner
|
|
135
129
|
def create_generous_assistant
|
136
130
|
assistant = Gtk::Assistant.new
|
137
131
|
assistant.set_default_size(400, 300)
|
138
|
-
assistant.signal_connect(
|
132
|
+
assistant.signal_connect("cancel") do
|
139
133
|
puts "cancel"
|
140
134
|
assistant.hide
|
141
135
|
end
|
142
|
-
assistant.signal_connect(
|
136
|
+
assistant.signal_connect("close") do
|
143
137
|
puts "close"
|
144
138
|
assistant.hide
|
145
139
|
end
|
146
|
-
assistant.signal_connect(
|
140
|
+
assistant.signal_connect("apply") do
|
147
141
|
puts "apply"
|
148
142
|
end
|
149
|
-
assistant.signal_connect(
|
143
|
+
assistant.signal_connect("prepare") do|_assistant, page|
|
150
144
|
prepare_cb(_assistant, page)
|
151
145
|
end
|
152
146
|
|
@@ -162,7 +156,7 @@ class AssistantRunner
|
|
162
156
|
|
163
157
|
check = Gtk::CheckButton.new("Next page visible");
|
164
158
|
check.active = true
|
165
|
-
check.signal_connect(
|
159
|
+
check.signal_connect("toggled") do
|
166
160
|
puts "beuh"
|
167
161
|
next_page.visible = check.active?
|
168
162
|
end
|
@@ -197,25 +191,25 @@ class AssistantRunner
|
|
197
191
|
def create_nonlinear_assistant
|
198
192
|
assistant = Gtk::Assistant.new
|
199
193
|
assistant.set_default_size(400, 300)
|
200
|
-
assistant.signal_connect(
|
194
|
+
assistant.signal_connect("cancel") do
|
201
195
|
puts "cancel"
|
202
196
|
assistant.hide
|
203
197
|
end
|
204
|
-
assistant.signal_connect(
|
198
|
+
assistant.signal_connect("close") do
|
205
199
|
puts "close"
|
206
200
|
assistant.hide
|
207
201
|
end
|
208
|
-
assistant.signal_connect(
|
202
|
+
assistant.signal_connect("apply") do
|
209
203
|
puts "apply"
|
210
204
|
end
|
211
|
-
assistant.signal_connect(
|
205
|
+
assistant.signal_connect("prepare") do |_assistant, page|
|
212
206
|
prepare_cb(_assistant, page)
|
213
207
|
end
|
214
208
|
|
215
209
|
assistant.set_forward_page_func do |current_page|
|
216
210
|
retval = -1
|
217
211
|
if current_page == 0
|
218
|
-
if @selected_branch ==
|
212
|
+
if @selected_branch == "A"
|
219
213
|
retval = 1
|
220
214
|
else
|
221
215
|
retval = 2
|
@@ -226,17 +220,17 @@ class AssistantRunner
|
|
226
220
|
retval
|
227
221
|
end
|
228
222
|
|
229
|
-
page = Gtk::
|
230
|
-
button = Gtk::RadioButton.new(
|
231
|
-
page.pack_start(button, false, false, 0)
|
232
|
-
button.signal_connect(
|
233
|
-
@selected_branch =
|
223
|
+
page = Gtk::Box.new(:vertical, 6)
|
224
|
+
button = Gtk::RadioButton.new("branch A")
|
225
|
+
page.pack_start(button, :expand => false, :fill => false, :padding => 0)
|
226
|
+
button.signal_connect("toggled") do
|
227
|
+
@selected_branch = "A"
|
234
228
|
end
|
235
229
|
button.active = true
|
236
|
-
button = Gtk::RadioButton.new(button,
|
237
|
-
page.pack_start(button, false, false, 0)
|
238
|
-
button.signal_connect(
|
239
|
-
@selected_branch =
|
230
|
+
button = Gtk::RadioButton.new(button, "branch B")
|
231
|
+
page.pack_start(button, :expand => false, :fill => false, :padding => 0)
|
232
|
+
button.signal_connect("toggled") do
|
233
|
+
@selected_branch = "B"
|
240
234
|
end
|
241
235
|
page.show_all
|
242
236
|
assistant.append_page(page)
|
@@ -266,22 +260,22 @@ class AssistantRunner
|
|
266
260
|
def create_full_featured_assistant
|
267
261
|
assistant = Gtk::Assistant.new
|
268
262
|
assistant.set_default_size(400, 300)
|
269
|
-
assistant.signal_connect(
|
263
|
+
assistant.signal_connect("cancel") do
|
270
264
|
puts "cancel"
|
271
265
|
assistant.hide
|
272
266
|
end
|
273
|
-
assistant.signal_connect(
|
267
|
+
assistant.signal_connect("close") do
|
274
268
|
puts "close"
|
275
269
|
assistant.hide
|
276
270
|
end
|
277
|
-
assistant.signal_connect(
|
271
|
+
assistant.signal_connect("apply") do
|
278
272
|
puts "apply"
|
279
273
|
end
|
280
|
-
assistant.signal_connect(
|
274
|
+
assistant.signal_connect("prepare") do |_assistant, page|
|
281
275
|
prepare_cb(_assistant, page)
|
282
276
|
end
|
283
277
|
|
284
|
-
button = Gtk::Button.new(Gtk::Stock::STOP)
|
278
|
+
button = Gtk::Button.new(:stock_id => Gtk::Stock::STOP)
|
285
279
|
button.show
|
286
280
|
assistant.add_action_widget(button)
|
287
281
|
|
@@ -319,29 +313,29 @@ end
|
|
319
313
|
|
320
314
|
runner = AssistantRunner.new
|
321
315
|
buttons = [
|
322
|
-
[
|
323
|
-
[
|
324
|
-
[
|
325
|
-
[
|
316
|
+
[ "simple assistant", proc { runner.run_simple_assistant } ],
|
317
|
+
[ "generous assistant", proc { runner.run_generous_assistant } ],
|
318
|
+
[ "nonlinear assistant", proc { runner.run_nonlinear_assistant } ],
|
319
|
+
[ "full featured assistant", proc { runner.run_full_featured_assistant } ],
|
326
320
|
]
|
327
321
|
|
328
|
-
if ENV[
|
322
|
+
if ENV["RTL"]
|
329
323
|
Gtk::Widget.default_direction = Gtk::Widget::TEXT_DIR_RTL
|
330
324
|
end
|
331
325
|
|
332
|
-
window = Gtk::Window.new(
|
333
|
-
window.signal_connect(
|
334
|
-
window.signal_connect(
|
326
|
+
window = Gtk::Window.new(:toplevel)
|
327
|
+
window.signal_connect("destroy") { Gtk.main_quit }
|
328
|
+
window.signal_connect("delete-event") { false }
|
335
329
|
|
336
|
-
box = Gtk::
|
330
|
+
box = Gtk::Box.new(:vertical, 6)
|
337
331
|
window.add(box)
|
338
332
|
|
339
333
|
buttons.each do |label, callback|
|
340
|
-
button = Gtk::Button.new(label)
|
341
|
-
button.signal_connect(
|
334
|
+
button = Gtk::Button.new(:label => label)
|
335
|
+
button.signal_connect("clicked") do
|
342
336
|
callback.call
|
343
337
|
end
|
344
|
-
box.pack_start(button, true, true, 0)
|
338
|
+
box.pack_start(button, :expand => true, :fill => true, :padding => 0)
|
345
339
|
end
|
346
340
|
window.show_all
|
347
341
|
Gtk.main
|
data/sample/misc/cairo-pong.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
Original: gtkcairo sample by Evan Martins.
|
6
6
|
|
7
|
-
Copyright (c) 2005,2006 Ruby-GNOME2 Project Team
|
7
|
+
Copyright (c) 2005,2006 Ruby-GNOME2 Project Team
|
8
8
|
This program is licenced under the same licence as Ruby-GNOME2.
|
9
9
|
|
10
10
|
$Id: cairo-pong.rb,v 1.3 2006/06/17 13:18:12 mutoh Exp $
|
@@ -20,7 +20,7 @@ module Pong
|
|
20
20
|
class CenteredItem
|
21
21
|
attr_accessor :x, :y
|
22
22
|
attr_reader :width, :height
|
23
|
-
|
23
|
+
|
24
24
|
def initialize(x, y, width, height)
|
25
25
|
@x = x
|
26
26
|
@y = y
|
@@ -31,15 +31,15 @@ module Pong
|
|
31
31
|
def min_x
|
32
32
|
@x - @width / 2
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
def max_x
|
36
36
|
@x + @width / 2
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
def min_y
|
40
40
|
@y - @height / 2
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
def max_y
|
44
44
|
@y + @height / 2
|
45
45
|
end
|
@@ -53,7 +53,7 @@ module Pong
|
|
53
53
|
cr.fill
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
class CenteredRect < CenteredItem
|
58
58
|
def draw(cr)
|
59
59
|
cr.translate(min_x, min_y)
|
@@ -62,7 +62,7 @@ module Pong
|
|
62
62
|
cr.fill
|
63
63
|
end
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
class Ball < CenteredCircle
|
67
67
|
attr_accessor :dx, :dy
|
68
68
|
def initialize(dx=0.02, dy=0.02)
|
@@ -70,7 +70,7 @@ module Pong
|
|
70
70
|
@dx = dx
|
71
71
|
@dy = dy
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
def update
|
75
75
|
@x += @dx
|
76
76
|
@y += @dy
|
@@ -83,7 +83,7 @@ module Pong
|
|
83
83
|
@y -= min_y
|
84
84
|
@dy *= -1
|
85
85
|
end
|
86
|
-
|
86
|
+
|
87
87
|
if max_x > 1
|
88
88
|
@x = 1 - (max_x - 1)
|
89
89
|
@dx *= -1
|
@@ -93,13 +93,13 @@ module Pong
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
end
|
96
|
-
|
96
|
+
|
97
97
|
class Paddle < CenteredRect
|
98
98
|
def initialize(field, x, y)
|
99
99
|
super(x, y, 0.05, 0.3)
|
100
100
|
@field = field
|
101
101
|
end
|
102
|
-
|
102
|
+
|
103
103
|
def update(ball)
|
104
104
|
# is the ball coming towards us?
|
105
105
|
if (ball.x < @x and ball.dx > 0) or
|
@@ -112,7 +112,7 @@ module Pong
|
|
112
112
|
def ball_hit?(ball)
|
113
113
|
ball.y > min_y and ball.y < max_y
|
114
114
|
end
|
115
|
-
|
115
|
+
|
116
116
|
def update_ball(ball)
|
117
117
|
if ball_hit?(ball)
|
118
118
|
if ball.min_x < @x and ball.max_x > min_x # hit our left side
|
@@ -128,16 +128,16 @@ module Pong
|
|
128
128
|
|
129
129
|
class Field
|
130
130
|
attr_accessor :width, :height
|
131
|
-
|
131
|
+
|
132
132
|
def initialize(margin=0.05)
|
133
133
|
@margin = margin
|
134
|
-
|
134
|
+
|
135
135
|
@left_paddle = Paddle.new(self, @margin, 0.5)
|
136
136
|
@right_paddle = Paddle.new(self, 1 - @margin, 0.7)
|
137
137
|
@paddles = [@left_paddle, @right_paddle]
|
138
138
|
@ball = Ball.new
|
139
139
|
end
|
140
|
-
|
140
|
+
|
141
141
|
def update
|
142
142
|
@paddles.each do |paddle|
|
143
143
|
paddle.update(@ball)
|
@@ -147,7 +147,7 @@ module Pong
|
|
147
147
|
paddle.update_ball(@ball)
|
148
148
|
end
|
149
149
|
end
|
150
|
-
|
150
|
+
|
151
151
|
def draw(cr)
|
152
152
|
cr.set_source_rgba(1, 1, 1)
|
153
153
|
cr.rectangle(0, 0, 1, 1)
|
@@ -160,7 +160,7 @@ module Pong
|
|
160
160
|
cr.save {paddle.draw(cr)}
|
161
161
|
end
|
162
162
|
end
|
163
|
-
|
163
|
+
|
164
164
|
cr.set_source_rgba(0, 0, 0)
|
165
165
|
cr.save {@ball.draw(cr)}
|
166
166
|
end
|
@@ -170,9 +170,9 @@ module Pong
|
|
170
170
|
def initialize(speed=30)
|
171
171
|
super()
|
172
172
|
@speed = speed
|
173
|
-
|
174
|
-
self.title =
|
175
|
-
signal_connect(
|
173
|
+
|
174
|
+
self.title = "Pong Demonstration"
|
175
|
+
signal_connect("destroy") { Gtk.main_quit }
|
176
176
|
signal_connect("key_press_event") do |widget, event|
|
177
177
|
if event.state.control_mask? and event.keyval == Gdk::Keyval::GDK_q
|
178
178
|
destroy
|
@@ -189,20 +189,22 @@ module Pong
|
|
189
189
|
@drawing_area = Gtk::DrawingArea.new
|
190
190
|
set_draw
|
191
191
|
|
192
|
-
vb = Gtk::
|
192
|
+
vb = Gtk::Box.new(:vertical, 5)
|
193
193
|
vb.border_width = 10
|
194
|
-
vb.pack_start(@drawing_area,
|
194
|
+
vb.pack_start(@drawing_area, :expand => true,
|
195
|
+
:fill => true,
|
196
|
+
:padding => 0)
|
195
197
|
vb.show_all
|
196
198
|
add(vb)
|
197
199
|
|
198
|
-
|
200
|
+
GLib::Timeout.add(@speed) do
|
199
201
|
@field.update
|
200
202
|
@drawing_area.queue_draw unless @drawing_area.destroyed?
|
201
203
|
end
|
202
204
|
end
|
203
205
|
|
204
206
|
def set_draw
|
205
|
-
@drawing_area.signal_connect(
|
207
|
+
@drawing_area.signal_connect("draw") do |widget, cr|
|
206
208
|
window = widget.window
|
207
209
|
cr.scale(window.width, window.height)
|
208
210
|
@field.draw(cr)
|