rubydraw 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/examples/image_ex.rb +8 -6
- data/lib/rubydraw/events.rb +74 -15
- data/lib/rubydraw/image.rb +0 -2
- data/lib/rubydraw/window.rb +1 -1
- metadata +3 -3
data/examples/image_ex.rb
CHANGED
@@ -6,10 +6,13 @@ class MyWindow < Rubydraw::Window
|
|
6
6
|
def initialize(width, height)
|
7
7
|
super(width, height)
|
8
8
|
@image = Rubydraw::Image.new("media/bug.png")
|
9
|
-
@
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
@focused = true
|
10
|
+
whenever Rubydraw::Events::QuitRequest do
|
11
|
+
close
|
12
|
+
end
|
13
|
+
whenever Rubydraw::Events::MouseMove do |event|
|
14
|
+
@mouse_position = event.position
|
15
|
+
end
|
13
16
|
end
|
14
17
|
|
15
18
|
def mouse_moved(event)
|
@@ -17,9 +20,8 @@ class MyWindow < Rubydraw::Window
|
|
17
20
|
puts "Mouse moved! New position: #{new_position.x}, #{new_position.y}"
|
18
21
|
end
|
19
22
|
|
20
|
-
# Draw the image inside this window.
|
21
23
|
def tick
|
22
|
-
@image.draw(self, @mouse_position)
|
24
|
+
@image.draw(self, @mouse_position) #if @focused
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
data/lib/rubydraw/events.rb
CHANGED
@@ -20,10 +20,12 @@ module Rubydraw
|
|
20
20
|
# Translate the given SDL event to its corresponding Rubydraw event, by asking
|
21
21
|
# each event class if it matches the SDL event. No case statements here.
|
22
22
|
def self.match(sdl_event)
|
23
|
-
sdl_event_type = sdl_event.type
|
24
23
|
event_classes = Event.all_subclasses.compact
|
25
24
|
rubydraw_event = UnknownEvent.new
|
26
|
-
|
25
|
+
# Remove all the classes that don't want to be included in the search
|
26
|
+
event_classes.delete_if {|event_class| not event_class.wants_to_match?}
|
27
|
+
event_classes.each {|event_class| rubydraw_event = event_class.from_sdl_event(sdl_event) if event_class.matches?(sdl_event)}
|
28
|
+
#puts rubydraw_event.class
|
27
29
|
rubydraw_event
|
28
30
|
end
|
29
31
|
|
@@ -31,6 +33,11 @@ module Rubydraw
|
|
31
33
|
# won't be recognized as an event and therefore will *not* participate in event
|
32
34
|
# matching.
|
33
35
|
class Event
|
36
|
+
# Include the class for searching by default.
|
37
|
+
def self.wants_to_match?
|
38
|
+
true
|
39
|
+
end
|
40
|
+
|
34
41
|
# Just creates a new instance of this class by default. Override this if the subclass
|
35
42
|
# requires parameters in +initialize,+ like Rubydraw::Events::MouseDown::from_sdl_event.
|
36
43
|
def self.from_sdl_event(sdl_event)
|
@@ -40,7 +47,7 @@ module Rubydraw
|
|
40
47
|
# Returns true if this is the overlaying class for the given SDL event. Override this
|
41
48
|
# for custom matching.
|
42
49
|
def self.matches?(sdl_event)
|
43
|
-
sdl_event ==
|
50
|
+
sdl_event.type == matching_sdl_type
|
44
51
|
end
|
45
52
|
|
46
53
|
# Returns true for all event objects. Also see Object#event?
|
@@ -50,7 +57,7 @@ module Rubydraw
|
|
50
57
|
|
51
58
|
# Returns the matching SDL event, override this in subclasses. Returns nil by
|
52
59
|
# default.
|
53
|
-
def self.
|
60
|
+
def self.matching_sdl_type
|
54
61
|
nil
|
55
62
|
end
|
56
63
|
end
|
@@ -64,6 +71,10 @@ module Rubydraw
|
|
64
71
|
# Rubydraw::Events::KeyReleased. No instances of this class should be created,
|
65
72
|
# but instances of subclasses are fine.
|
66
73
|
class KeyboardEvent < Event
|
74
|
+
def self.wants_to_match?
|
75
|
+
false
|
76
|
+
end
|
77
|
+
|
67
78
|
def self.from_sdl_event(sdl_event)
|
68
79
|
self.new(sdl_event.keysym.sym)
|
69
80
|
end
|
@@ -84,7 +95,11 @@ module Rubydraw
|
|
84
95
|
# @key:: An integer specifying the key, which can be matched with a Rubydraw
|
85
96
|
# button constants.
|
86
97
|
class KeyPressed < KeyboardEvent
|
87
|
-
def self.
|
98
|
+
def self.wants_to_match?
|
99
|
+
true
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.matching_sdl_type
|
88
103
|
SDL::KEYDOWN
|
89
104
|
end
|
90
105
|
end
|
@@ -94,7 +109,11 @@ module Rubydraw
|
|
94
109
|
# @key:: An integer specifying the key, which can be matched with a Rubydraw
|
95
110
|
# button constants.
|
96
111
|
class KeyReleased < KeyboardEvent
|
97
|
-
def self.
|
112
|
+
def self.wants_to_match?
|
113
|
+
true
|
114
|
+
end
|
115
|
+
|
116
|
+
def self.matching_sdl_type
|
98
117
|
SDL::KEYUP
|
99
118
|
end
|
100
119
|
end
|
@@ -120,7 +139,7 @@ module Rubydraw
|
|
120
139
|
self.new(Point[sdl_event.x, sdl_event.y], sdl_event.button)
|
121
140
|
end
|
122
141
|
|
123
|
-
def self.
|
142
|
+
def self.matching_sdl_type
|
124
143
|
SDL::MOUSEBUTTONDOWN
|
125
144
|
end
|
126
145
|
|
@@ -140,7 +159,7 @@ module Rubydraw
|
|
140
159
|
self.new(Point[sdl_event.x, sdl_event.y], sdl_event.button)
|
141
160
|
end
|
142
161
|
|
143
|
-
def self.
|
162
|
+
def self.matching_sdl_type
|
144
163
|
SDL::MOUSEBUTTONUP
|
145
164
|
end
|
146
165
|
|
@@ -159,7 +178,7 @@ module Rubydraw
|
|
159
178
|
self.new(Point[sdl_event.x, sdl_event.y], Point[sdl_event.xrel, sdl_event.yrel])
|
160
179
|
end
|
161
180
|
|
162
|
-
def self.
|
181
|
+
def self.matching_sdl_type
|
163
182
|
SDL::MOUSEMOTION
|
164
183
|
end
|
165
184
|
|
@@ -169,22 +188,62 @@ module Rubydraw
|
|
169
188
|
#
|
170
189
|
# +x+ and +y+: The new position of the cursor.
|
171
190
|
#
|
172
|
-
# +relative_x+ and +relative_y+: The relative movement of the cursor since the
|
191
|
+
# +relative_x+ and +relative_y+: The relative movement of the cursor since the lasttick.
|
173
192
|
def initialize(position, relative_position)
|
174
193
|
@position, @relative_position = position, relative_position
|
175
194
|
end
|
176
195
|
end
|
177
196
|
|
178
|
-
# Created either when the window gains or loses focus.
|
179
|
-
|
180
|
-
|
181
|
-
|
197
|
+
# Created either when the window gains or loses focus. This is the parent class for
|
198
|
+
# Rubydraw::Events::FocusGain and Rubydraw::Events::FocusLose.
|
199
|
+
class FocusEvent < Event
|
200
|
+
def self.wants_to_match?
|
201
|
+
false
|
202
|
+
end
|
203
|
+
|
204
|
+
def self.matching_sdl_type
|
205
|
+
SDL::ACTIVEEVENT
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
# Created when the window gains focus.
|
210
|
+
class FocusGain < FocusEvent
|
211
|
+
def self.wants_to_match?
|
212
|
+
true
|
213
|
+
end
|
214
|
+
|
215
|
+
# Redefine Event#matches? because both this class and Rubydraw::Events::FocusLoss use
|
216
|
+
# SDL::ActiveEvent.
|
217
|
+
def self.matches?(sdl_event)
|
218
|
+
result = false
|
219
|
+
if super(sdl_event)
|
220
|
+
result = sdl_event.gain == 1
|
221
|
+
end
|
222
|
+
result
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
# Created when the window loses focus.
|
227
|
+
class FocusLoss < FocusEvent
|
228
|
+
def self.wants_to_match?
|
229
|
+
true
|
230
|
+
end
|
231
|
+
|
232
|
+
# Redefine Event#matches? because both this class and Rubydraw::Events::FocuGain use
|
233
|
+
# SDL::ActiveEvent
|
234
|
+
def self.matches?(sdl_event)
|
235
|
+
result = false
|
236
|
+
if super(sdl_event)
|
237
|
+
result = sdl_event.gain == 0
|
238
|
+
end
|
239
|
+
result
|
182
240
|
end
|
183
241
|
end
|
184
242
|
|
185
243
|
# Created when the user attempts to close the window.
|
186
244
|
class QuitRequest < Event
|
187
|
-
|
245
|
+
|
246
|
+
def self.matching_sdl_type
|
188
247
|
SDL::QUIT
|
189
248
|
end
|
190
249
|
end
|
data/lib/rubydraw/image.rb
CHANGED
data/lib/rubydraw/window.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubydraw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- J. Wostenberg
|