rubygame 2.3.0 → 2.4.0
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/CREDITS +5 -0
- data/NEWS +88 -0
- data/README +8 -4
- data/ROADMAP +19 -43
- data/Rakefile +94 -10
- data/doc/macosx_install.rdoc +2 -2
- data/doc/windows_install.rdoc +2 -2
- data/ext/rubygame/rubygame_event.c +116 -0
- data/ext/rubygame/rubygame_event2.c +661 -0
- data/ext/rubygame/rubygame_event2.h +29 -0
- data/ext/rubygame/rubygame_joystick.c +106 -17
- data/ext/rubygame/rubygame_main.c +3 -0
- data/ext/rubygame/rubygame_shared.c +2 -5
- data/ext/rubygame/rubygame_shared.h +1 -0
- data/ext/rubygame/rubygame_surface.c +11 -9
- data/lib/rubygame.rb +14 -3
- data/lib/rubygame/event_actions.rb +203 -0
- data/lib/rubygame/event_handler.rb +454 -0
- data/lib/rubygame/event_hook.rb +112 -0
- data/lib/rubygame/event_triggers.rb +692 -0
- data/lib/rubygame/events.rb +44 -0
- data/lib/rubygame/events/joystick_events.rb +342 -0
- data/lib/rubygame/events/keyboard_events.rb +132 -0
- data/lib/rubygame/events/misc_events.rb +144 -0
- data/lib/rubygame/events/mouse_events.rb +155 -0
- data/lib/rubygame/ftor.rb +2 -2
- data/lib/rubygame/queue.rb +50 -29
- data/samples/demo_draw.rb +175 -0
- data/samples/demo_rubygame.rb +421 -165
- metadata +18 -5
data/CREDITS
CHANGED
@@ -58,3 +58,8 @@
|
|
58
58
|
Email:: mokkan at users.sourceforge.net
|
59
59
|
Contribution:: Patch to add Screen.icon=
|
60
60
|
Date:: 2007-11-21 (r597)
|
61
|
+
|
62
|
+
- <b>Elio Cuevas Gómez</b> / elcugo
|
63
|
+
Email:: elcugo at gmail.com
|
64
|
+
Contribution:: Patch to fix color conversion segfault on x86_64.
|
65
|
+
Date:: 2008-07-31
|
data/NEWS
CHANGED
@@ -1,5 +1,93 @@
|
|
1
1
|
= NEWS
|
2
2
|
|
3
|
+
== Rubygame 2.4.0
|
4
|
+
|
5
|
+
Release focus: Events.
|
6
|
+
|
7
|
+
=== Features
|
8
|
+
|
9
|
+
- New Events module, with a suite of new and revised event classes.
|
10
|
+
The new classes offer full functionality as the older classes.
|
11
|
+
|
12
|
+
- Use Rubygame::EventQueue#enable_new_style_events to enable the new
|
13
|
+
event classes. This will become the default in Rubygame 3.0.
|
14
|
+
|
15
|
+
- Uses symbols instead of integer constants for keyboard keys and
|
16
|
+
mouse buttons (e.g. :a, :space, :mouse_left, :mouse_right).
|
17
|
+
|
18
|
+
- Better unicode / international keyboard text input support.
|
19
|
+
(See Rubygame::Events::KeyPressed#string)
|
20
|
+
|
21
|
+
- More natural and memorable class naming scheme.
|
22
|
+
|
23
|
+
- New hook-based event handling system.
|
24
|
+
(NOTE: Requires use of the new event classes.)
|
25
|
+
|
26
|
+
- Rubygame::EventHandler class.
|
27
|
+
EventHandler holds many EventHook instances. It handles each event
|
28
|
+
by passing it to matching hooks.
|
29
|
+
|
30
|
+
- Rubygame::EventHandler::HasEventHandler mixin module.
|
31
|
+
Include this in your custom classes to add easy event handling
|
32
|
+
and event hook creation abilities.
|
33
|
+
|
34
|
+
- Rubygame::EventHook class.
|
35
|
+
|
36
|
+
- Rubygame::EventActions module.
|
37
|
+
Has several pre-made event action classes to use with EventHook.
|
38
|
+
|
39
|
+
- Rubygame::EventTriggers module.
|
40
|
+
Has several pre-made event trigger classes to use with EventHook.
|
41
|
+
|
42
|
+
- Added Rubygame.enable_key_repeat and Rubygame.disable_key_repeat.
|
43
|
+
Thanks to atiaxi for this new feature!
|
44
|
+
|
45
|
+
=== Fixes
|
46
|
+
|
47
|
+
- Fixed: EventQueue#peek_each didn't yield any events.
|
48
|
+
|
49
|
+
- Fixed: Segfault in extract_rgba_u8_as_u8() on x86_64 systems.
|
50
|
+
Thanks to ElCuGo for this fix!
|
51
|
+
|
52
|
+
- Fixed: Several "cast from pointer" warnings on x86_64 systems.
|
53
|
+
|
54
|
+
- Fixed: Build system didn't correctly compile with debug symbols
|
55
|
+
when using "debug" option.
|
56
|
+
|
57
|
+
- Fixed: Surface#get_at didn't work correctly for 8-bit Surfaces.
|
58
|
+
|
59
|
+
- Fixed: Ftor.new_from_to would always complain about "wrong number
|
60
|
+
of arguments". Thanks to atiaxi for this fix!
|
61
|
+
|
62
|
+
=== Other Stuff
|
63
|
+
|
64
|
+
- The panda demo (samples/demo_rubygame.rb) has been renovated to
|
65
|
+
demonstrate how to use the new features, and to be a better example.
|
66
|
+
|
67
|
+
- Old event classes are deprecated and will be removed in 3.0.
|
68
|
+
- ActiveEvent (use Events::InputFocusGained,
|
69
|
+
Events::InputFocusLost,
|
70
|
+
Events::MouseFocusGained,
|
71
|
+
Events::MouseFocusLost,
|
72
|
+
Events::WindowMinimized, and
|
73
|
+
Events::WindowUnminimized)
|
74
|
+
- ExposeEvent (use Events::WindowExposed)
|
75
|
+
- JoyAxisEvent (use Events::JoystickAxisMoved)
|
76
|
+
- JoyBallEvent (use Events::JoystickBallMoved)
|
77
|
+
- JoyDownEvent (use Events::JoystickButtonPressed)
|
78
|
+
- JoyHatEvent (use Events::JoystickHatMoved)
|
79
|
+
- JoyUpEvent (use Events::JoystickButtonReleased)
|
80
|
+
- KeyDownEvent (use Events::KeyPressed)
|
81
|
+
- KeyUpEvent (use Events::KeyReleased)
|
82
|
+
- MouseDownEvent (use Events::MousePressed)
|
83
|
+
- MouseMotionEvent (use Events::MouseMoved)
|
84
|
+
- MouseUpEvent (use Events::MouseReleased)
|
85
|
+
- QuitEvent (use Events::QuitRequested)
|
86
|
+
- ResizeEvent (use Events::WindowResized)
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
|
3
91
|
== Rubygame 2.3.0
|
4
92
|
|
5
93
|
Release focus: Media resources.
|
data/README
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
event and game object management.
|
14
14
|
|
15
15
|
=== Relevant Links
|
16
|
-
1. Rubygame: http://rubygame.
|
16
|
+
1. Rubygame: http://rubygame.org
|
17
17
|
2. Ruby: http://www.ruby-lang.org
|
18
18
|
3. Pygame: http://www.pygame.org
|
19
19
|
4. SDL: http://www.libsdl.org
|
@@ -106,18 +106,22 @@
|
|
106
106
|
|
107
107
|
== Usage
|
108
108
|
|
109
|
-
See the documentation (online at http://rubygame.
|
109
|
+
See the documentation (online at http://docs.rubygame.org, or
|
110
110
|
generated locally with the 'rake rdoc' command).
|
111
111
|
|
112
112
|
We also recommend that you take a peek at the demo applications in
|
113
|
-
the 'samples' directory, especially chimp.rb.
|
113
|
+
the 'samples' directory, especially demo_rubygame.rb and chimp.rb.
|
114
114
|
|
115
115
|
== License
|
116
116
|
|
117
117
|
Rubygame is distributed under the terms of the GNU Lesser GPL.
|
118
118
|
See LICENSE for more details.
|
119
119
|
|
120
|
+
The contents of the file 'Rakefile' is licensed under the terms of the
|
121
|
+
MIT license. See that file for more details.
|
122
|
+
|
120
123
|
Some of the sample files are distributed under licenses other than the
|
121
124
|
GNU Lesser GPL. See 'samples/README' and 'samples/GPL' for more details.
|
122
125
|
|
123
|
-
|
126
|
+
|
127
|
+
John Croisant (jacius at gmail.com)
|
data/ROADMAP
CHANGED
@@ -4,55 +4,33 @@ This represents the direction Rubygame will be going in, but
|
|
4
4
|
keep in mind that specific details may change over time.
|
5
5
|
|
6
6
|
|
7
|
-
== 2.4.0 (next minor release)
|
8
|
-
|
9
|
-
Release focus: Events.
|
10
|
-
|
11
|
-
- New EventHook class, has 3 parts: owner, trigger, and action.
|
12
|
-
- New trigger classes, e.g. KeyPressedTrigger (matches key presses)
|
13
|
-
- New action classes, e.g. MethodAction (calls a method on owner)
|
14
|
-
|
15
|
-
- New EventHandler class
|
16
|
-
- Holds many EventHook instances, feeds the event to each
|
17
|
-
matching hook.
|
18
|
-
|
19
|
-
- New HasEventHandler mixin, can embed in sprite, etc. classes
|
20
|
-
for easy event handling and hook creation.
|
21
|
-
|
22
|
-
- New Events module, with a suite of new and revised event classes.
|
23
|
-
|
24
|
-
- Eliminate integer constants in favor of symbols
|
25
|
-
- Keyboard keys are symbols (e.g. :up, :a, :space)
|
26
|
-
- Mouse buttons are symbols (e.g. :mouse_left, :mouse_wheel_up)
|
27
|
-
|
28
|
-
- Nicer, more natural naming scheme
|
29
|
-
- Drop the word "Event" from the class names.
|
30
|
-
- "Down" and "Up" (e.g. in KeyDownEvent) become "Pressed"
|
31
|
-
and "Released" (e.g. KeyPressed).
|
32
|
-
- MouseMotionEvent becomes MouseMoved.
|
33
|
-
- Other miscellaneous changes.
|
34
|
-
|
35
|
-
- Better unicode / international keyboard support
|
36
|
-
- KeyPress#string gives a UTF8 bytestring with the glyph that was
|
37
|
-
generated by the keypress (useful for text input in GUIs).
|
38
|
-
|
39
|
-
- Old versions of the event classes stay the same, but are deprecated.
|
40
|
-
|
41
|
-
|
42
|
-
|
43
7
|
== 2.X.0 (_possible_ minor releases before 3.0.0)
|
44
8
|
|
45
|
-
=== Focus:
|
9
|
+
=== Focus: Clock
|
46
10
|
|
47
|
-
- New Events::
|
48
|
-
- Time since last frame, in both seconds and milliseconds
|
11
|
+
- New Events::ClockTicked class with lots of information
|
12
|
+
- Time since last frame, in both seconds and milliseconds
|
49
13
|
- Current time
|
50
14
|
- Current framerate
|
51
15
|
|
52
16
|
- New clock class
|
53
|
-
- Based on Ruby's timer (allows multi-threading)
|
17
|
+
- Based on Ruby's timer (allows multi-threading)
|
54
18
|
- Better framerate calculation algorithm
|
55
|
-
- #tick returns an instance of Events::Tick
|
19
|
+
- #tick returns an instance of Events::Tick
|
20
|
+
|
21
|
+
|
22
|
+
=== Focus: Surface & Rect
|
23
|
+
|
24
|
+
- Surface improvements
|
25
|
+
- Make Surface instances copyable and marshalable
|
26
|
+
- Support for palettes on 8-bit Surfaces
|
27
|
+
- To Fix: New Surfaces never have alpha channels
|
28
|
+
- To Fix: Surface#set_at doesn't respect alpha
|
29
|
+
- To Add: Surface#pixels= (set pixel data directly)
|
30
|
+
- To Add: Surface.load_from_pixels (create from pixel data)
|
31
|
+
|
32
|
+
- Rewrite Rect class in C for speed
|
33
|
+
|
56
34
|
|
57
35
|
=== Focus: Sprites
|
58
36
|
|
@@ -105,5 +83,3 @@ Release focus: Events.
|
|
105
83
|
- Screen#update (cannot pass object with rect attribute)
|
106
84
|
- Screen#update_rects (same as above)
|
107
85
|
- Why not just call the ruby function from within C?
|
108
|
-
|
109
|
-
|
data/Rakefile
CHANGED
@@ -1,3 +1,41 @@
|
|
1
|
+
#
|
2
|
+
# This is the Rakefile for Rubygame. It's used for
|
3
|
+
# compiling, packaging, installing generating the
|
4
|
+
# documentation, and running specs.
|
5
|
+
#
|
6
|
+
|
7
|
+
|
8
|
+
# The version number for Rubygame.
|
9
|
+
RUBYGAME_VERSION = [2,4,0]
|
10
|
+
|
11
|
+
|
12
|
+
#
|
13
|
+
# The following terms (the MIT license) apply to this Rakefile:
|
14
|
+
#
|
15
|
+
# Copyright (c) 2008 John Croisant
|
16
|
+
#
|
17
|
+
# Permission is hereby granted, free of charge, to any person
|
18
|
+
# obtaining a copy of this software and associated documentation files
|
19
|
+
# (the "Software"), to deal in the Software without restriction,
|
20
|
+
# including without limitation the rights to use, copy, modify, merge,
|
21
|
+
# publish, distribute, sublicense, and/or sell copies of the Software,
|
22
|
+
# and to permit persons to whom the Software is furnished to do so,
|
23
|
+
# subject to the following conditions:
|
24
|
+
#
|
25
|
+
# The above copyright notice and this permission notice shall be
|
26
|
+
# included in all copies or substantial portions of the Software.
|
27
|
+
#
|
28
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
29
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
30
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
31
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
32
|
+
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
33
|
+
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
34
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
35
|
+
# SOFTWARE.
|
36
|
+
#
|
37
|
+
|
38
|
+
|
1
39
|
require 'rubygems'
|
2
40
|
Gem::manage_gems
|
3
41
|
|
@@ -48,14 +86,12 @@ end
|
|
48
86
|
OBJEXT = from_env_or_config("OBJEXT")
|
49
87
|
DLEXT = from_env_or_config("DLEXT")
|
50
88
|
|
51
|
-
RUBYGAME_VERSION = [2,3,0]
|
52
|
-
|
53
89
|
gem_spec = Gem::Specification.new do |s|
|
54
90
|
s.name = "rubygame"
|
55
91
|
s.version = RUBYGAME_VERSION.join(".")
|
56
92
|
s.author = "John Croisant"
|
57
|
-
s.email = "jacius@
|
58
|
-
s.homepage = "http://rubygame.
|
93
|
+
s.email = "jacius@gmail.com"
|
94
|
+
s.homepage = "http://rubygame.org/"
|
59
95
|
s.summary = "Clean and powerful library for game programming"
|
60
96
|
s.has_rdoc = true
|
61
97
|
|
@@ -192,7 +228,6 @@ string_option :sitelibdir
|
|
192
228
|
CFLAGS = [from_env_or_config("CFLAGS"),
|
193
229
|
try_sdl_config("--cflags"),
|
194
230
|
"-I. -I#{CONFIG['topdir']}",
|
195
|
-
("-g" if $options[:debug]),
|
196
231
|
"-DRUBYGAME_MAJOR_VERSION=#{RUBYGAME_VERSION[0]}",
|
197
232
|
"-DRUBYGAME_MINOR_VERSION=#{RUBYGAME_VERSION[1]}",
|
198
233
|
"-DRUBYGAME_PATCHLEVEL=#{RUBYGAME_VERSION[2]}"
|
@@ -283,7 +318,7 @@ class ExtensionModule
|
|
283
318
|
])\
|
284
319
|
do |t|
|
285
320
|
|
286
|
-
compile_command = "#{from_env_or_config('CC')} -c #{CFLAGS} #{t.source} -o #{t.name}"
|
321
|
+
compile_command = "#{from_env_or_config('CC')} -c #{CFLAGS} #{"-g " if $options[:debug]} #{t.source} -o #{t.name}"
|
287
322
|
|
288
323
|
# If compile command includes i386 arch, and we're not allowing universal
|
289
324
|
if( /-arch i386/ === compile_command and not $options[:universal] )
|
@@ -303,7 +338,7 @@ class ExtensionModule
|
|
303
338
|
FileList.new("#{@directory}*.c").each do |source|
|
304
339
|
object = source.sub(".c", ".#{OBJEXT}")
|
305
340
|
file object => ([source] + depends_headers( source )) do |t|
|
306
|
-
compile_command = "#{CONFIG['CC']} -c #{CFLAGS} #{source} -o #{t.name}"
|
341
|
+
compile_command = "#{CONFIG['CC']} -c #{CFLAGS} #{"-g " if $options[:debug]} #{source} -o #{t.name}"
|
307
342
|
if( $options[:verbose] )
|
308
343
|
try_shell { sh compile_command }
|
309
344
|
else
|
@@ -334,6 +369,7 @@ rubygame_core = ExtensionModule.new do |core|
|
|
334
369
|
core.objs = ['rubygame_main',
|
335
370
|
'rubygame_shared',
|
336
371
|
'rubygame_event',
|
372
|
+
'rubygame_event2',
|
337
373
|
'rubygame_gl',
|
338
374
|
'rubygame_joystick',
|
339
375
|
'rubygame_screen',
|
@@ -424,15 +460,63 @@ task :install => [:install_ext, :install_lib]
|
|
424
460
|
|
425
461
|
|
426
462
|
|
463
|
+
#########
|
464
|
+
# SPECS #
|
465
|
+
#########
|
466
|
+
|
427
467
|
begin
|
428
468
|
require 'spec/rake/spectask'
|
429
469
|
|
430
|
-
|
470
|
+
|
471
|
+
desc "Run all specs"
|
431
472
|
Spec::Rake::SpecTask.new do |t|
|
432
|
-
t.spec_files = FileList['
|
473
|
+
t.spec_files = FileList['spec/*_spec.rb']
|
433
474
|
end
|
475
|
+
|
476
|
+
|
477
|
+
namespace :spec do
|
478
|
+
desc "Run all specs"
|
479
|
+
Spec::Rake::SpecTask.new(:all) do |t|
|
480
|
+
t.spec_files = FileList['spec/*_spec.rb']
|
481
|
+
end
|
482
|
+
|
483
|
+
desc "Run spec/[name]_spec.rb (e.g. 'color')"
|
484
|
+
task :name do
|
485
|
+
puts( "This is just a stand-in spec.",
|
486
|
+
"Run rake spec:[name] where [name] is e.g. 'color', 'music'." )
|
487
|
+
end
|
488
|
+
end
|
489
|
+
|
490
|
+
|
491
|
+
rule(/spec:.+/) do |t|
|
492
|
+
name = t.name.gsub("spec:","")
|
493
|
+
|
494
|
+
path = File.join( File.dirname(__FILE__),'spec','%s_spec.rb'%name )
|
495
|
+
|
496
|
+
if File.exist? path
|
497
|
+
Spec::Rake::SpecTask.new(name) do |t|
|
498
|
+
t.spec_files = [path]
|
499
|
+
end
|
500
|
+
|
501
|
+
puts "\nRunning spec/%s_spec.rb"%name
|
502
|
+
|
503
|
+
Rake::Task[name].invoke
|
504
|
+
else
|
505
|
+
puts "File does not exist: %s"%path
|
506
|
+
end
|
507
|
+
|
508
|
+
end
|
509
|
+
|
434
510
|
rescue LoadError
|
511
|
+
|
512
|
+
error = "ERROR: RSpec is not installed?"
|
513
|
+
|
435
514
|
task :spec do
|
436
|
-
puts
|
515
|
+
puts error
|
516
|
+
end
|
517
|
+
|
518
|
+
rule( /spec:.*/ ) do
|
519
|
+
puts error
|
437
520
|
end
|
521
|
+
|
438
522
|
end
|
data/doc/macosx_install.rdoc
CHANGED
@@ -48,7 +48,7 @@ In order to use Rubygame applications on Mac OS X, you must use a special wrappe
|
|
48
48
|
|
49
49
|
|
50
50
|
== Installing Rubygame
|
51
|
-
1. {Download and unpack Rubygame}[
|
51
|
+
1. {Download and unpack Rubygame}[http://rubyforge.org/frs/?group_id=5089].
|
52
52
|
2. From within the rubygame directory:
|
53
53
|
|
54
54
|
sudo rake install
|
@@ -61,7 +61,7 @@ In order to use Rubygame applications on Mac OS X, you must use a special wrappe
|
|
61
61
|
If all went well, you can now run Rubygame applications like so:
|
62
62
|
<code>rsdl a_rubygame_app.rb</code>
|
63
63
|
|
64
|
-
If something bad happened along the way, you can {
|
64
|
+
If something bad happened along the way, you can {email rubygame-users}[https://sourceforge.net/mail/?group_id=172781]
|
65
65
|
and we'll try to help! Be sure to include plenty of details and paste any error
|
66
66
|
messages that occur (plus a good bit of the text right before the error
|
67
67
|
messages).
|
data/doc/windows_install.rdoc
CHANGED
@@ -63,9 +63,9 @@ This will allow the libraries to be detected properly later on.
|
|
63
63
|
== Step 2: Get Rubygame
|
64
64
|
|
65
65
|
If you haven't already, download the latest Rubygame source from the
|
66
|
-
{download page}[http://
|
66
|
+
{download page}[http://rubyforge.org/frs/?group_id=5089].
|
67
67
|
If you're feeling adventurous, you could try the in-development code from
|
68
|
-
the {
|
68
|
+
the {Git repository}[http://github.com/jacius/rubygame].
|
69
69
|
You can decompress the .tar.bz2 file with either MSYS' <code>tar</code>
|
70
70
|
(<code>tar xvjf rubygame-2.0.0.tar.bz2</code>) or a program like
|
71
71
|
{7zip}[http://www.7-zip.org].
|
@@ -22,6 +22,7 @@
|
|
22
22
|
#include "rubygame_event.h"
|
23
23
|
|
24
24
|
void Rubygame_Init_Event();
|
25
|
+
|
25
26
|
VALUE cEvent;
|
26
27
|
VALUE cActiveEvent;
|
27
28
|
VALUE cKeyDownEvent;
|
@@ -298,6 +299,117 @@ VALUE rbgm_fetchevents(VALUE self)
|
|
298
299
|
return event_array;
|
299
300
|
}
|
300
301
|
|
302
|
+
|
303
|
+
|
304
|
+
/* Convert an argument to #enable_key_repeat into an integer
|
305
|
+
* number of milliseconds.
|
306
|
+
*
|
307
|
+
* Argument must be nil, :default, or a numeric greater than 0.001.
|
308
|
+
*/
|
309
|
+
int rg_get_keyrepeat_value( VALUE vvalue, int default_value, char *name )
|
310
|
+
{
|
311
|
+
|
312
|
+
int value;
|
313
|
+
|
314
|
+
if( NIL_P(vvalue) )
|
315
|
+
{
|
316
|
+
return default_value;
|
317
|
+
}
|
318
|
+
|
319
|
+
switch( TYPE(vvalue) ){
|
320
|
+
case T_SYMBOL: {
|
321
|
+
if( make_symbol("default") == vvalue )
|
322
|
+
{
|
323
|
+
return default_value;
|
324
|
+
}
|
325
|
+
else
|
326
|
+
{
|
327
|
+
rb_raise( rb_eArgError, "unsupported symbol '%s' for %s",
|
328
|
+
RSTRING(rb_inspect(vvalue))->ptr, name );
|
329
|
+
}
|
330
|
+
}
|
331
|
+
|
332
|
+
default: {
|
333
|
+
int value = NUM2INT(vvalue) * 1000; /* seconds -> milleseconds */
|
334
|
+
|
335
|
+
if( value < 1 )
|
336
|
+
{
|
337
|
+
rb_raise( rb_eArgError, "%s must be at least 0.001 seconds (got %s)",
|
338
|
+
name, RSTRING(rb_inspect(vvalue))->ptr);
|
339
|
+
}
|
340
|
+
|
341
|
+
return value;
|
342
|
+
}
|
343
|
+
}
|
344
|
+
}
|
345
|
+
|
346
|
+
|
347
|
+
|
348
|
+
/*
|
349
|
+
* call-seq:
|
350
|
+
* enable_key_repeat( delay=:default, interval=:default )
|
351
|
+
*
|
352
|
+
* Enable key repeat, so that additional keyboard release and press
|
353
|
+
* events are automatically generated for as long as the key is held
|
354
|
+
* down. See also #disable_key_repeat.
|
355
|
+
*
|
356
|
+
* delay:: how many seconds to wait before starting to repeat.
|
357
|
+
* Default is 0.5 seconds. (Numeric or :default, optional)
|
358
|
+
*
|
359
|
+
* interval:: how many seconds to wait in between repetitions after
|
360
|
+
* the first one. Default is 0.03 seconds.
|
361
|
+
* (Numeric or :default, optional)
|
362
|
+
*
|
363
|
+
*/
|
364
|
+
VALUE rg_enable_key_repeat(int argc, VALUE *argv, VALUE module)
|
365
|
+
{
|
366
|
+
|
367
|
+
VALUE vdelay, vinterval;
|
368
|
+
rb_scan_args(argc, argv, "02", &vdelay, &vinterval);
|
369
|
+
|
370
|
+
|
371
|
+
int delay = rg_get_keyrepeat_value( vdelay,
|
372
|
+
SDL_DEFAULT_REPEAT_DELAY,
|
373
|
+
"delay" );
|
374
|
+
|
375
|
+
int interval = rg_get_keyrepeat_value( vinterval,
|
376
|
+
SDL_DEFAULT_REPEAT_INTERVAL,
|
377
|
+
"interval" );
|
378
|
+
|
379
|
+
|
380
|
+
int result = SDL_EnableKeyRepeat( delay, interval );
|
381
|
+
|
382
|
+
if (result != 0) {
|
383
|
+
rb_raise(eSDLError, "Could not enable key repeat: %s",
|
384
|
+
SDL_GetError());
|
385
|
+
}
|
386
|
+
|
387
|
+
return Qnil;
|
388
|
+
}
|
389
|
+
|
390
|
+
|
391
|
+
|
392
|
+
/*
|
393
|
+
* call-seq:
|
394
|
+
* disable_key_repeat
|
395
|
+
*
|
396
|
+
* Disable key repeat, undoing the effect of #enable_key_repeat.
|
397
|
+
*
|
398
|
+
*/
|
399
|
+
VALUE rg_disable_key_repeat(VALUE module)
|
400
|
+
{
|
401
|
+
int result = SDL_EnableKeyRepeat( 0, 0 );
|
402
|
+
|
403
|
+
if (result != 0) {
|
404
|
+
rb_raise(eSDLError, "Could not disable key repeat: %s",
|
405
|
+
SDL_GetError());
|
406
|
+
}
|
407
|
+
|
408
|
+
return Qnil;
|
409
|
+
}
|
410
|
+
|
411
|
+
|
412
|
+
|
301
413
|
/*
|
302
414
|
*--
|
303
415
|
* The event documentation is in rubygame/lib/rubygame/event.rb
|
@@ -310,6 +422,10 @@ void Rubygame_Init_Event()
|
|
310
422
|
#endif
|
311
423
|
|
312
424
|
rb_define_singleton_method(mRubygame, "fetch_sdl_events",rbgm_fetchevents,0);
|
425
|
+
rb_define_singleton_method(mRubygame, "enable_key_repeat",
|
426
|
+
rg_enable_key_repeat, -1);
|
427
|
+
rb_define_singleton_method(mRubygame, "disable_key_repeat",
|
428
|
+
rg_disable_key_repeat, 0);
|
313
429
|
|
314
430
|
cEvent = rb_define_class_under(mRubygame,"Event",rb_cObject);
|
315
431
|
cActiveEvent = rb_define_class_under(mRubygame,"ActiveEvent",cEvent);
|