= Event
* ((<Event system概要>))
* ((<SDL::Event>))
* ((<SDL::Event::Active>))
* ((<SDL::Event::KeyDown>))
* ((<SDL::Event::KeyUp>))
* ((<SDL::Event::MouseMotion>))
* ((<SDL::Event::MouseButtonDown>))
* ((<SDL::Event::MouseButtonUp>))
* ((<SDL::Event::JoyAxis>))
* ((<SDL::Event::JoyBall>))
* ((<SDL::Event::JoyHat>))
* ((<SDL::Event::JoyButtonDown>))
* ((<SDL::Event::JoyButtonUp>))
* ((<SDL::Event::Quit>))
* ((<SDL::Event::SysWM>))
* ((<SDL::Event::VideoResize>))
* ((<SDL::Event::VideoExpose>))
* ((<SDL::Key>))
* ((<SDL::Mouse>))
* Event関連メソッド
  * ((<SDL::Event.poll>)) -- 現在留まっているイベントを取り出します。
  * ((<SDL::Event.wait>)) -- 次の利用可能なイベントが来るまで無限に待機します。
  * ((<SDL::Event.push>)) -- イベントをイベントキューにプッシュします。
  * ((<SDL::Event.app_state>)) -- アプリケーションの状態を得ます。
  * ((<SDL::Event.enable_unicode>)) -- UNICODE変換を有効にします。
  * ((<SDL::Event.disable_unicode>)) -- UNICODE変換を無効にします。
  * ((<SDL::Event.enable_unicode?>)) -- UNICODE変換が有効かどうか調べます。
  * ((<SDL::Event::Active#gain>)) -- 可視性を得たなら true を、失ったなら false を返します。
  * ((<SDL::Event::Active#state>)) -- どのような種類の可視性変更イベントが発生したのかを返します。
  * ((<SDL::Event::KeyDown#press>)) -- trueを返します。
  * ((<SDL::Event::KeyDown#sym>)) -- 何のキーを押したかをキーシンボルで返します。
  * ((<SDL::Event::KeyDown#mod>)) -- キー押下時のキーモディファイアの状態を返します。
  * ((<SDL::Event::KeyDown#unicode>)) -- 変換された文字を返します。
  * ((<SDL::Event::KeyUp#press>)) -- falseを返します。
  * ((<SDL::Event::KeyUp#sym>)) -- 何のキーを離したかをキーシンボルで返します。
  * ((<SDL::Event::KeyUp#mod>)) -- キーモディファイアの状態を返します。
  * ((<SDL::Event::MouseMotion#state>)) -- 現在のボタンの状態を返します。
  * ((<SDL::Event::MouseMotion#x>)) -- マウスの X 座標を返します。
  * ((<SDL::Event::MouseMotion#y>)) -- マウスの Y 座標を返します。
  * ((<SDL::Event::MouseMotion#xrel>)) -- マウスの X 方向の相対的な動きを返します。
  * ((<SDL::Event::MouseMotion#yrel>)) -- マウスの Y 方向の相対的な動きを返します。
  * ((<SDL::Event::MouseButtonDown#button>)) -- 押されたボタンの番号を返します。
  * ((<SDL::Event::MouseButtonDown#press>)) -- ボタン押し下げイベントかどうかを返します。
  * ((<SDL::Event::MouseButtonDown#x>)) -- マウスの X 座標を返します。
  * ((<SDL::Event::MouseButtonDown#y>)) -- マウスの Y 座標を返します。
  * ((<SDL::Event::MouseButtonUp#button>)) -- 離されたボタンの番号を返します。
  * ((<SDL::Event::MouseButtonUp#press>)) -- ボタン押し下げイベントかどうかを返します。
  * ((<SDL::Event::MouseButtonUp#x>)) -- マウスの X 座標を返します。
  * ((<SDL::Event::MouseButtonUp#y>)) -- マウスの Y 座標を返します。
  * ((<SDL::Event::JoyAxis#which>)) -- ジョイスティックデバイスの番号を返します。
  * ((<SDL::Event::JoyAxis#axis>)) -- ジョイスティックの軸の番号を返します。
  * ((<SDL::Event::JoyAxis#value>)) -- 軸の値を返します。
  * ((<SDL::Event::JoyBall#which>)) -- ジョイスティックデバイスの番号を返します。
  * ((<SDL::Event::JoyBall#ball>)) -- ジョイスティックのトラックボールの番号を返します。
  * ((<SDL::Event::JoyBall#xrel>)) -- X方向の相対的な動きを返します。
  * ((<SDL::Event::JoyBall#yrel>)) -- Y方向の相対的な動きを返します。
  * ((<SDL::Event::JoyHat#which>)) -- ジョイスティックデバイスの番号を返します。
  * ((<SDL::Event::JoyHat#hat>)) -- ジョイスティックのハットスイッチの番号を返します。
  * ((<SDL::Event::JoyHat#value>)) -- ハットスイッチの位置を返します。
  * ((<SDL::Event::JoyButtonDown#which>)) -- ジョイスティックデバイスの番号を返します。
  * ((<SDL::Event::JoyButtonDown#button>)) -- ジョイスティックのボタンの番号を返します。
  * ((<SDL::Event::JoyButtonDown#press>)) -- ボタン押し下げイベントかどうかを返します。
  * ((<SDL::Event::JoyButtonUp#which>)) -- ジョイスティックデバイスの番号を返します。
  * ((<SDL::Event::JoyButtonUp#button>)) -- ジョイスティックのボタンの番号を返します。
  * ((<SDL::Event::JoyButtonUp#press>)) -- ボタン押し下げイベントかどうかを返します。
  * ((<SDL::Event::VideoResize#w>)) -- ウィンドウの新しい幅を返します。
  * ((<SDL::Event::VideoResize#h>)) -- ウィンドウの新しい高さを返します。
  * ((<SDL::Key.scan>)) -- キーボードの状態のスナップショットをとります。
  * ((<SDL::Key.press?>)) -- キーボードを押しているかどうかを返します。
  * ((<SDL::Key.mod_state>)) -- モディファイアキーの状態を得ます。
  * ((<SDL::Key.get_key_name>)) -- キーシンボルに対応する名前を得ます。
  * ((<SDL::Key.enable_key_repeat>)) -- キーリピートレートを設定します。
  * ((<SDL::Key.disable_key_repeat>)) -- キーリピートを無効にします。
  * ((<SDL::Mouse.state>)) -- 現在のマウスの状態を得ます。
  * ((<SDL::Mouse.warp>)) -- マウスカーソルの位置をセットします。
  * ((<SDL::Mouse.show>)) -- カーソルが画面に表示されるようにします。
  * ((<SDL::Mouse.hide>)) -- カーソルが画面に表示されないようにします。
  * ((<SDL::Mouse.show?>)) -- カーソルが画面に表示されているかどうかを返します。
  * ((<SDL::Mouse.set_cursor>)) -- 現在アクティブなマウスカーソルを設定します。

== Event system概要
イベント処理によってあなたのアプリケーションはユーザーからの
入力を受け取ることができます。
イベント処理は次のメソッドを呼ぶことで、(ビデオと一緒に)初期化されます。
  SDL.init(SDL::INIT_VIDEO)
内部的には、SDL は処理されるまで待機している全てのイベントをイベントキューに
格納します。

((<SDL::Event.poll>)) や ((<SDL::Event.wait>)) のようなメソッドを使うことで、
待機している入力イベントを見たり、処理することができます。

Ruby/SDLにおけるイベント処理の鍵は、((<SDL::Event>))のサブクラス群です。
イベントキュー自身は((<SDL::Event>))(のサブクラス)のインスタンスの列と
みなすことができます。それらのオブジェクトは((<SDL::Event.poll>))を使って
キューから読みだされ、
そしてそこに格納された情報の処理をアプリケーションがします。

((<SDL::Event>))のサブクラスは以下の通りです。
* ((<SDL::Event::Active>))
* ((<SDL::Event::KeyDown>))
* ((<SDL::Event::KeyUp>))
* ((<SDL::Event::MouseMotion>))
* ((<SDL::Event::MouseButtonDown>))
* ((<SDL::Event::MouseButtonUp>))
* ((<SDL::Event::JoyAxis>))
* ((<SDL::Event::JoyBall>))
* ((<SDL::Event::JoyHat>))
* ((<SDL::Event::JoyButtonDown>))
* ((<SDL::Event::JoyButtonUp>))
* ((<SDL::Event::Quit>))
* ((<SDL::Event::SysWM>))
* ((<SDL::Event::VideoResize>))
* ((<SDL::Event::VideoExpose>))

イベントクラスには以下の二つの用途があります。
* キューからイベントを読み出す
* キューにイベントを登録する

キューからイベントを読み出すには、 ((<SDL::Event.poll>)) を使います。
ここでは、 ((<SDL::Event.poll>)) を使った例を示します。
  while event = SDL::Event.poll
((<SDL::Event.poll>)) はイベントキューから次のイベントを
取り出して、キューから削除します。キューにイベントがないときは
nil を返し、それ以外の場合は上に挙げたイベントクラスのインスタンス
を返します。

次に、イベントの種類を判別するために case〜when 文を使います。
    case event
次に、どの種類のイベントを知りたいのかということと、起こった
イベントの種類を知らなければいけません。
ここでは、アプリケーション内のマウスポインタの動きを知りたいとします。
求めているイベントに対応するクラスは((<SDL::Event::MouseMotion>))
であることがわかります。case〜when 文の when の所にクラスを書くと、
そのクラスのインスタンスをcaseに与えたときに分岐することを利用します
  when SDL::Event::MouseMotion
ここでは event は ((<SDL::Event::MouseMotion>)) のインスタンスなので
そのメソッドを使って情報を得ることができます。
      puts "マウスカーソルが移動するイベントを受信しました。"
      puts "カーソルの位置は(#{event.x}, #{event.y})です。"
    else
      puts "ハンドルしていないイベントです!"
    end
  end
  puts "イベントキューは空です。"

イベントキューにイベントを送ることもできますので、
イベントキューを双方向通信に利用することもできます。
((<SDL::Event.push>))でイベントキューにイベントを送ることができます。
偽の入力イベントを作り出したりするために使うことができます。
ユーザイベントは Ruby/SDL では利用できません。

== SDL::Event
イベントを取り扱うためのクラスです。実際のクラスはこのクラスのサブクラス
として表されます。

== 過去との互換性
かつてSDL::Eventという名前だったクラスは廃止されました。
現在SDL::Eventという名前のクラスは以前は
SDL::Event2という名前でした。
この変更のため、旧 SDL::Event を使っていると
互換性がありません。また、SDL::Event2という名前は互換性
のため残されています。

== SDL::Event::Active
アプリケーションの可視性に関するイベントのクラスです。

マウスカーソルのウインドウの出入り、
キーボードフォーカスの得失、および
最小化/アイコン化されたり元に戻ったときに発生します。

上のいずれが生じたのかは ((<SDL::Event::Active#state>)) でわかります。

* NOTES

  このイベントは、最初にウィンドウが作成されたときには発生しません。

* ((<SDL::Event::Active#gain>)) -- 可視性を得たなら true を、失ったなら false を返します。
* ((<SDL::Event::Active#state>)) -- どのような種類の可視性変更イベントが発生したのかを返します。

== SDL::Event::KeyDown
キーボードを押したときに発生するイベントのクラスです。

* ((<SDL::Event::KeyDown#press>)) -- trueを返します。
* ((<SDL::Event::KeyDown#sym>)) -- 何のキーを押したかをキーシンボルで返します。
* ((<SDL::Event::KeyDown#mod>)) -- キー押下時のキーモディファイアの状態を返します。
* ((<SDL::Event::KeyDown#unicode>)) -- 変換された文字を返します。

== SDL::Event::KeyUp
キーボードを離したときに発生するイベントのクラスです。

* ((<SDL::Event::KeyUp#press>)) -- falseを返します。
* ((<SDL::Event::KeyUp#sym>)) -- 何のキーを離したかをキーシンボルで返します。
* ((<SDL::Event::KeyUp#mod>)) -- キーモディファイアの状態を返します。

== SDL::Event::MouseMotion
マウスを動かしたときに発生するイベントのクラスです。

簡単に言うと、
このイベントは
アプリケーションウィンドウの中でユーザーがマウスを動かしたとき、
または ((<SDL::Mouse.warp>)) が呼ばれた時に発生します。
現在のボタンの状態(((<SDL::Event::MouseMotion#state>)))とともに、
絶対座標(((<SDL::Event::MouseMotion#x>)) と ((<SDL::Event::MouseMotion#y>)))
と相対座標(((<SDL::Event::MouseMotion#xrel>)) と ((<SDL::Event::MouseMotion#yrel>)))
の両方が報告されます。

* ((<SDL::Event::MouseMotion#state>)) -- 現在のボタンの状態を返します。
* ((<SDL::Event::MouseMotion#x>)) -- マウスの X 座標を返します。
* ((<SDL::Event::MouseMotion#y>)) -- マウスの Y 座標を返します。
* ((<SDL::Event::MouseMotion#xrel>)) -- マウスの X 方向の相対的な動きを返します。
* ((<SDL::Event::MouseMotion#yrel>)) -- マウスの Y 方向の相対的な動きを返します。

== SDL::Event::MouseButtonDown
マウスボタンを押したときのイベントのクラスです。

* ((<SDL::Event::MouseButtonDown#button>)) -- 押されたボタンの番号を返します。
* ((<SDL::Event::MouseButtonDown#press>)) -- ボタン押し下げイベントかどうかを返します。
* ((<SDL::Event::MouseButtonDown#x>)) -- マウスの X 座標を返します。
* ((<SDL::Event::MouseButtonDown#y>)) -- マウスの Y 座標を返します。

== SDL::Event::MouseButtonUp
マウスボタンを離したときのイベントのクラスです。

* ((<SDL::Event::MouseButtonUp#button>)) -- 離されたボタンの番号を返します。
* ((<SDL::Event::MouseButtonUp#press>)) -- ボタン押し下げイベントかどうかを返します。
* ((<SDL::Event::MouseButtonUp#x>)) -- マウスの X 座標を返します。
* ((<SDL::Event::MouseButtonUp#y>)) -- マウスの Y 座標を返します。

== SDL::Event::JoyAxis
ジョイスティックの軸イベントのクラスです。

ユーザがジョイスティックの軸を移動させるとこのイベントが発生します。

* ((<SDL::Event::JoyAxis#which>)) -- ジョイスティックデバイスの番号を返します。
* ((<SDL::Event::JoyAxis#axis>)) -- ジョイスティックの軸の番号を返します。
* ((<SDL::Event::JoyAxis#value>)) -- 軸の値を返します。

* SEEALSO
    ((<SDL::Joystick#num_axes>))、((<SDL::Joystick#axis>))

== SDL::Event::JoyBall
ジョイスティックのトラックボールの動きイベントのクラスです。

* ((<SDL::Event::JoyBall#which>)) -- ジョイスティックデバイスの番号を返します。
* ((<SDL::Event::JoyBall#ball>)) -- ジョイスティックのトラックボールの番号を返します。
* ((<SDL::Event::JoyBall#xrel>)) -- X方向の相対的な動きを返します。
* ((<SDL::Event::JoyBall#yrel>)) -- Y方向の相対的な動きを返します。

* SEEALSO

  ((<SDL::Joystick#num_balls>))、((<SDL::Joystick#ball>))

== SDL::Event::JoyHat
ジョイスティックのハットスイッチの位置変化イベントのクラスです。

* ((<SDL::Event::JoyHat#which>)) -- ジョイスティックデバイスの番号を返します。
* ((<SDL::Event::JoyHat#hat>)) -- ジョイスティックのハットスイッチの番号を返します。
* ((<SDL::Event::JoyHat#value>)) -- ハットスイッチの位置を返します。

* SEEALSO
  
  ((<SDL::Joystick#num_hats>))、((<SDL::Joystick#hat>))

== SDL::Event::JoyButtonDown
ジョイスティックのボタンが押し下げられたときに発生するイベントのクラスです。

* ((<SDL::Event::JoyButtonDown#which>)) -- ジョイスティックデバイスの番号を返します。
* ((<SDL::Event::JoyButtonDown#button>)) -- ジョイスティックのボタンの番号を返します。
* ((<SDL::Event::JoyButtonDown#press>)) -- ボタン押し下げイベントかどうかを返します。

* SEEALSO

  ((<SDL::Joystick#num_buttons>))、((<SDL::Joystick#button>))

== SDL::Event::JoyButtonUp
ジョイスティックのボタンを離したときに発生するイベントのクラスです。

* ((<SDL::Event::JoyButtonUp#which>)) -- ジョイスティックデバイスの番号を返します。
* ((<SDL::Event::JoyButtonUp#button>)) -- ジョイスティックのボタンの番号を返します。
* ((<SDL::Event::JoyButtonUp#press>)) -- ボタン押し下げイベントかどうかを返します。

* SEEALSO

  ((<SDL::Joystick#num_buttons>))、((<SDL::Joystick#button>))

== SDL::Event::Quit
終了要請イベントのクラスです。

終了イベントを無視すると、
ユーザーはウィンドウを閉じることが不可能になります。
一方で、終了イベントを受け入れるならば、
アプリケーションウィンドウは閉じられて
アプリケーションは見えなくなりますが、
画面更新はそれでも成功イベントを報告します。

== SDL::Event::SysWM
プラットフォーム依存のウィンドウマネージャイベントのクラスです。

ウィンドウマネージャから処理できないイベントを受け取った時はいつでも
生成されます。Ruby/SDL からはいかなるイベントであるのかを知ることは
できません。ただ存在するだけで有用でないイベントです。
Ruby からは無視する以外のことはできません。

== SDL::Event::VideoResize
ウィンドウのリサイズイベントのクラスです。

SDL::RESIZABLE が ((|flag|)) として ((<SDL::Screen.open>)) に
渡された時は、ユーザーはアプリケーションウィンドウをリサイズすることが
許されます。
ウィンドウがリサイズされた時は、このイベントが発生し、
((<SDL::Event::VideoResize#w>)) と ((<SDL::Event::VideoResize#h>)) から
ウィンドウの新しい横幅と高さが得られます。

このイベントを受け取ると、ウィンドウは
((<SDL::Screen.open>))を使って新しい寸法にリサイズされるはずです。

== SDL::Event::VideoExpose
再描画に関するイベントのクラスです

このイベントは他のアプリケーション、通常はウインドウマネージャによってscreen
が変更されたときに発生し、再描画の必要性を通知します。

== SDL::Key
キーボード入力関連を取り扱うモジュールです。

キーボード関連の定数とモジュール関数が定義されています。

* ((<SDL::Key.scan>)) -- キーボードの状態のスナップショットをとります。
* ((<SDL::Key.press?>)) -- キーボードを押しているかどうかを返します。
* ((<SDL::Key.mod_state>)) -- モディファイアキーの状態を得ます。
* ((<SDL::Key.get_key_name>)) -- キーシンボルに対応する名前を得ます。
* ((<SDL::Key.enable_key_repeat>)) -- キーリピートレートを設定します。
* ((<SDL::Key.disable_key_repeat>)) -- キーリピートを無効にします。

=== キーシンボル
((<SDL::Key>)) にはキーボードのそれぞれのキーに対応する以下の定数が定義されています。
* SDL::Key::BACKSPACE  '\b'  backspace  
* SDL::Key::TAB  '\t'  tab  
* SDL::Key::CLEAR     clear クリア  
* SDL::Key::RETURN  '\r'  return  
* SDL::Key::PAUSE    pause  
* SDL::Key::ESCAPE  '^['  escape  
* SDL::Key::SPACE  ' '   space スペース  
* SDL::Key::EXCLAIM  '!'   exclaim 感嘆符  
* SDL::Key::QUOTEDBL  '"'   quotedbl 二重引用符   
* SDL::Key::HASH  '#'   hash ハッシュ(シャープ)  
* SDL::Key::DOLLAR  '$'   dollar ドル  
* SDL::Key::AMPERSAND  '&'   ampersand アンパサンド  
* SDL::Key::QUOTE  '''   quote 引用符  
* SDL::Key::LEFTPAREN  '('   left parenthesis 左丸括弧  
* SDL::Key::RIGHTPAREN  ')'   right parenthesis 右丸括弧  
* SDL::Key::ASTERISK  '*'   asterisk アスタリスク  
* SDL::Key::PLUS  '+'   plus sign プラス  
* SDL::Key::COMMA  ','   comma カンマ  
* SDL::Key::MINUS  '-'   minus sign マイナス  
* SDL::Key::PERIOD  '.'   period ピリオド  
* SDL::Key::SLASH  '/'   forward slash スラッシュ  
* SDL::Key::K0  '0'  0  
* SDL::Key::K1  '1'  1  
* SDL::Key::K2  '2'  2  
* SDL::Key::K3  '3'  3  
* SDL::Key::K4  '4'  4  
* SDL::Key::K5  '5'  5  
* SDL::Key::K6  '6'  6  
* SDL::Key::K7  '7'  7  
* SDL::Key::K8  '8'  8  
* SDL::Key::K9  '9'  9  
* SDL::Key::COLON  ':'   colon コロン  
* SDL::Key::SEMICOLON  ';'   semicolon セミコロン  
* SDL::Key::LESS  '&lt;'   less-than sign 小なり  
* SDL::Key::EQUALS  '='   equals sign イコール  
* SDL::Key::GREATER  '&gt;'   greater-than sign 大なり  
* SDL::Key::QUESTION  '?'   question mark 疑問符  
* SDL::Key::AT  '@'   at アットマーク  
* SDL::Key::LEFTBRACKET  '['   left bracket 左かぎ括弧  
* SDL::Key::BACKSLASH  '\'   backslash バックスラッシュ  
* SDL::Key::RIGHTBRACKET  ']'   right bracket 右かぎ括弧  
* SDL::Key::CARET  '^'   caret キャレット  
* SDL::Key::UNDERSCORE  '_'   underscore アンダースコア  
* SDL::Key::BACKQUOTE  '`'   grave 逆引用符  
* SDL::Key::A  'a'  a  
* SDL::Key::B  'b'  b  
* SDL::Key::C  'c'  c  
* SDL::Key::D  'd'  d  
* SDL::Key::E  'e'  e  
* SDL::Key::F  'f'  f  
* SDL::Key::G  'g'  g  
* SDL::Key::H  'h'  h  
* SDL::Key::I  'i'  i  
* SDL::Key::J  'j'  j  
* SDL::Key::K  'k'  k  
* SDL::Key::L  'l'  l  
* SDL::Key::M  'm'  m  
* SDL::Key::N  'n'  n  
* SDL::Key::O  'o'  o  
* SDL::Key::P  'p'  p  
* SDL::Key::Q  'q'  q  
* SDL::Key::R  'r'  r  
* SDL::Key::S  's'  s  
* SDL::Key::T  't'  t  
* SDL::Key::U  'u'  u  
* SDL::Key::V  'v'  v  
* SDL::Key::W  'w'  w  
* SDL::Key::X  'x'  x  
* SDL::Key::Y  'y'  y  
* SDL::Key::Z  'z'  z  
* SDL::Key::DELETE  '^?'  delete  
* SDL::Key::KP0     keypad 0 キーバッド(テンキー)の0  
* SDL::Key::KP1     keypad 1 キーバッドの1  
* SDL::Key::KP2     keypad 2 キーバッドの2  
* SDL::Key::KP3     keypad 3 キーバッドの3  
* SDL::Key::KP4     keypad 4 キーバッドの4  
* SDL::Key::KP5     keypad 5 キーバッドの5  
* SDL::Key::KP6     keypad 6 キーバッドの6  
* SDL::Key::KP7     keypad 7 キーバッドの7  
* SDL::Key::KP8     keypad 8 キーバッドの8  
* SDL::Key::KP9     keypad 9 キーバッドの9  
* SDL::Key::KP_PERIOD  '.'   keypad period キーバッドのピリオド  
* SDL::Key::KP_DIVIDE  '/'   keypad divide キーパッドの除算記号  
* SDL::Key::KP_MULTIPLY  '*'   keypad multiply キーバッドの乗算記号  
* SDL::Key::KP_MINUS  '-'   keypad minus キーバッドのマイナス  
* SDL::Key::KP_PLUS  '+'   keypad plus キーバッドのプラス  
* SDL::Key::KP_ENTER  '\r'   keypad enter キーパッドのenter  
* SDL::Key::KP_EQUALS  '='   keypad equals キーパッドのイコール  
* SDL::Key::UP     up arrow 上矢印  
* SDL::Key::DOWN     down arrow 下矢印  
* SDL::Key::RIGHT     right arrow 右矢印  
* SDL::Key::LEFT     left arrow 左矢印  
* SDL::Key::INSERT    insert  
* SDL::Key::HOME    home  
* SDL::Key::END    end  
* SDL::Key::PAGEUP    page up  
* SDL::Key::PAGEDOWN    page down  
* SDL::Key::F1    F1  
* SDL::Key::F2    F2  
* SDL::Key::F3    F3  
* SDL::Key::F4    F4  
* SDL::Key::F5    F5  
* SDL::Key::F6    F6  
* SDL::Key::F7    F7  
* SDL::Key::F8    F8  
* SDL::Key::F9    F9  
* SDL::Key::F10    F10  
* SDL::Key::F11    F11  
* SDL::Key::F12    F12  
* SDL::Key::F13    F13  
* SDL::Key::F14    F14  
* SDL::Key::F15    F15  
* SDL::Key::NUMLOCK    numlock  
* SDL::Key::CAPSLOCK    capslock  
* SDL::Key::SCROLLOCK    scrollock  
* SDL::Key::RSHIFT     right shift 右shift  
* SDL::Key::LSHIFT     left shift 左shift  
* SDL::Key::RCTRL     right ctrl 右ctrl  
* SDL::Key::LCTRL     left ctrl 左ctrl  
* SDL::Key::RALT     right alt 右alt  
* SDL::Key::LALT     left alt 左alt  
* SDL::Key::RMETA     right meta 右meta  
* SDL::Key::LMETA     left meta 左meta  
* SDL::Key::LSUPER     left windows key 左windowsキー  
* SDL::Key::RSUPER     right windows key 右windowsキー  
* SDL::Key::MODE     mode shift モードシフト  
* SDL::Key::HELP    help  
* SDL::Key::PRINT    print-screen  
* SDL::Key::SYSREQ    SysRq  
* SDL::Key::BREAK    break  
* SDL::Key::MENU    menu  
* SDL::Key::POWER    power  
* SDL::Key::EURO     euro ユーロ  

== SDL::Mouse
マウス入力関連を取り扱うモジュールです。

マウス関連の定数とモジュール関数が定義されています。

* ((<SDL::Mouse.state>)) -- 現在のマウスの状態を得ます。
* ((<SDL::Mouse.warp>)) -- マウスカーソルの位置をセットします。
* ((<SDL::Mouse.show>)) -- カーソルが画面に表示されるようにします。
* ((<SDL::Mouse.hide>)) -- カーソルが画面に表示されないようにします。
* ((<SDL::Mouse.show?>)) -- カーソルが画面に表示されているかどうかを返します。
* ((<SDL::Mouse.set_cursor>)) -- 現在アクティブなマウスカーソルを設定します。
== Methods

--- SDL::Event.poll

    現在留まっているイベントを取り出し、イベントがあるときはそのイベントを、
    無いときは nil を返します。イベントが取り出されたときは
    キューからそのイベントを削除します。


    EXAMPLE
      while event = SDL::Event.poll #キューに残っているイベントがなくなるまでループ
        case event # 適切なイベントタイプを処理
        when SDL::Event::KeyDown # キー押下イベントを処理
          puts "あ! キーを押しましたね"
        when SDL::Event::MouseMotion
          .
          .
          .
        else # 未処理のイベントを報告
          puts "私にはよく分からないイベントです!"
        end
      end

    * See Also
      
      ((<SDL::Event>)), ((<SDL::Event.wait>))

--- SDL::Event.wait

    次の利用可能なイベントが来るまで無限に待機し、
    イベントが来たらそのイベントを返します。
    
    返したイベントはキューから削除されます。

    イベントを待っている間にエラーがあった場合は例外 ((<SDL::Error>)) を
    発生させます。

    * NOTES

      Ruby 1.8では
      このメソッドを呼びイベントを待っている間はRubyのスレッドは
      切り替わりません。
      
      Ruby 1.9ではイベントを待っている間に他のRubyのスレッド
      に切り替わることが可能です。
      
      
      Ruby/SDL が対応していないイベントが生じた場合など、
      このメソッドが nil を返す場合があります。
      常に Event オブジェクトが返されるという仮定はしないでください。

    * See Also
      
      ((<SDL::Event.poll>))

--- SDL::Event.push(event)

    ((|event|)) で指定したイベントをイベントキューにプッシュします。

    失敗したときには例外((<SDL::Error>))を発生させます。

    * NOTES

      デバイス入力イベントをキューにプッシュしても、
      SDL 内のデバイスの状態は変わりません。

    * See Also
      
      ((<SDL::Event.poll>))

--- SDL::Event.app_state
--- SDL::Event.appState

    アプリケーションの現在の状態を返します。戻り値は以下のビット和です。
    :SDL::Event::APPMOUSEFOCUS
      マウスのフォーカスがあります。
    :SDL::Event::APPINPUTFOCUS
      キーボードのフォーカスがあります。
    :SDL::Event::APPACTIVE
      アプリケーションは可視状態です。

    * See Also
      
      ((<SDL::Event::Active>))

--- SDL::Event.enable_unicode
--- SDL::Event.enableUNICODE

    キーイベントに対応した文字コードを得るために、
    まずこの関数を呼び出してUnicode変換を有効にしなければいけません。
    変換を有効にすると、キーボードイベントのたびにちょっとした
    オーバーヘッドが発生するため、デフォルトでは変換は無効になっています。
    変換を有効にすると、以後のキーダウンイベントでは、
    ((<SDL::Event::KeyDown#unicode>)) から対応する文字コードが得られます。
    対応する文字コードが見つからないときは0が入ります。

    * NOTES

      変換が有効なのはキーダウンイベントのみです。
      キーリリースイベントは変換されません。

    * See Also
      
      ((<SDL::Event.disable_unicode>)), ((<SDL::Event.enable_unicode?>))

--- SDL::Event.disable_unicode
--- SDL::Event.disableUNICODE

    UNICODE変換を無効にします。詳しくは ((<SDL::Event.enable_unicode>))
    を見てください。

--- SDL::Event.enable_unicode?
--- SDL::Event.enableUNICODE?

    UNICODE変換が有効かどうか調べます。詳しくは ((<SDL::Event.enable_unicode>))
    を見てください。

--- SDL::Event::Active#gain

    可視性を得たことに対応するイベントなら true を、
    失ったことに対応するイベントなら false を返します。

    * See Also
      
      ((<SDL::Event::Active>)), ((<SDL::Event::Active#state>))

--- SDL::Event::Active#state

    マウスカーソルがウインドウの外に出たり(gain=false)、ウインドウ内に
    入ったり(gain=true)したときは、SDL::Event::APPMOUSEFOCUS を返します。
    
    アプリケーションがキーボードフォーカスを得たり(gain=true)
    失ったり(gain=false)したときは、SDL::Event::APPINPUTFOCUS を
    返します。これは通常他のアプリケーションがアクティブに
    なったときに発生します。
    
    アプリケーションが最小化/アイコン化されたり(gain=false)
    元に戻ったとき(gain=true)には SDL::Event::APPACTIVE を返します。

    * See Also
      
      ((<SDL::Event::Active>)), ((<SDL::Event::Active#gain>))

--- SDL::Event::KeyDown#press

    常に true を返します。

    * See Also
      
      ((<SDL::Event::KeyUp#press>))

--- SDL::Event::KeyDown#sym

    何のキーを押したかを((<キーシンボル>))で返します。

    * See Also
      
      ((<SDL::Event::KeyDown#unicode>))

--- SDL::Event::KeyDown#mod

    キー押下時のキーモディファイアの状態を返します。
    返り値は ((<SDL::Key.mod_state>)) で得られるものと同じです。

    * See Also
      
      ((<SDL::Key.mod_state>))

--- SDL::Event::KeyDown#unicode

    ((<SDL::Event.enable_unicode>)) によって UNICODE 変換が有効にされた時には、
    キーの押下に対応する UNICODE 文字を返します。
    文字の上位 9 ビットが 0 の場合は、 ASCII 文字に対応しています。
    
    変換が有効でない場合には0 を返します。

--- SDL::Event::KeyUp#press

    常に false を返します。

    * See Also
      
      ((<SDL::Event::KeyDown#press>))

--- SDL::Event::KeyUp#sym

    何のキーを離したかを((<キーシンボル>))で返します。

--- SDL::Event::KeyUp#mod

    キーモディファイアの状態を返します。
    返り値は ((<SDL::Key.mod_state>)) で得られるものと同じです。

    * See Also
      
      ((<SDL::Key.mod_state>))

--- SDL::Event::MouseMotion#state

    現在のボタンの状態を返します。
    以下の定数の論理和を取ったものを返します。
    
    :SDL::Mouse::BUTTON_LMASK
      左ボタン
    :SDL::Mouse::BUTTON_MMASK
      中央ボタン
    :SDL::Mouse::BUTTON_RMASK
      右ボタン

    * See Also
      
      ((<SDL::Mouse.state>))

--- SDL::Event::MouseMotion#x

    マウスの X 座標を正の整数で返します。

    * See Also
      
      ((<SDL::Mouse.state>))

--- SDL::Event::MouseMotion#y

    マウスの Y 座標を正の整数で返します。

    * See Also
      
      ((<SDL::Mouse.state>))

--- SDL::Event::MouseMotion#xrel

    マウスの X 座標の相対的な動きを整数で返します。

--- SDL::Event::MouseMotion#yrel

    マウスの Y 座標の相対的な動きを整数で返します。

--- SDL::Event::MouseButtonDown#button

    どのボタンが押されたのかを返します。左、中央、右のボタンに対応して
    * SDL::Mouse::BUTTON_LEFT
    * SDL::Mouse::BUTTON_MIDDLE
    * SDL::Mouse::BUTTON_RIGHT
    が得られます。

--- SDL::Event::MouseButtonDown#press

    ボタン押し下げイベントかどうかを返します。
    常に true を返します。

    * See Also
      
      ((<SDL::Event::MouseButtonUp#press>))

--- SDL::Event::MouseButtonDown#x

    マウスの X 座標を正の整数で返します。

    * See Also
      
      ((<SDL::Mouse.state>))

--- SDL::Event::MouseButtonDown#y

    マウスの Y 座標を正の整数で返します。

    * See Also
      
      ((<SDL::Mouse.state>))

--- SDL::Event::MouseButtonUp#button

    どのボタンが離されたのかを返します。左、中央、右のボタンに対応して
    * SDL::Mouse::BUTTON_LEFT
    * SDL::Mouse::BUTTON_MIDDLE
    * SDL::Mouse::BUTTON_RIGHT
    が得られます。

--- SDL::Event::MouseButtonUp#press

    ボタン押し下げイベントかどうかを返します。
    常に false を返します。

    * See Also
      
      ((<SDL::Event::MouseButtonDown#press>))

--- SDL::Event::MouseButtonUp#x

    マウスの X 座標を正の整数で返します。

    * See Also
      
      ((<SDL::Mouse.state>))

--- SDL::Event::MouseButtonUp#y

    マウスの Y 座標を正の整数で返します。

    * See Also
      
      ((<SDL::Mouse.state>))

--- SDL::Event::JoyAxis#which

    イベントが発生したジョイスティックのインデックスを返します。

    * See Also
      
      ((<SDL::Joystick>)), ((<SDL::Joystick#num_axes>))

--- SDL::Event::JoyAxis#axis

    イベントが発生した軸のインデックスを返します。

    * See Also
      
      ((<SDL::Joystick>))

--- SDL::Event::JoyAxis#value

    軸の現在の位置を -32767 から 32767 までの整数で返します。

    * See Also
      
      ((<SDL::Joystick>)), ((<SDL::Joystick#axis>))

--- SDL::Event::JoyBall#which

    イベントが発生したジョイスティックのインデックスを返します。

    * See Also
      
      ((<SDL::Joystick>))

--- SDL::Event::JoyBall#ball

    イベントが発生したジョイスティックのトラックボールの
    インデックスを返します。

    * See Also
      
      ((<SDL::Joystick>)), ((<SDL::Joystick#num_balls>))

--- SDL::Event::JoyBall#xrel

    X方向の相対的な動きを整数で返します。

    * See Also
      
      ((<SDL::Joystick>)), ((<SDL::Joystick#ball>))

--- SDL::Event::JoyBall#yrel

    Y方向の相対的な動きを整数で返します。

    * See Also
      
      ((<SDL::Joystick>)), ((<SDL::Joystick#ball>))

--- SDL::Event::JoyHat#which

    イベントが発生したジョイスティックのインデックスを返します。

    * See Also
      
      ((<SDL::Joystick>))

--- SDL::Event::JoyHat#hat

    イベントが発生したジョイスティックのハットスイッチのインデックスを返します。

    * See Also
      
      ((<SDL::Joystick>)), ((<SDL::Joystick#num_hats>))

--- SDL::Event::JoyHat#value

    イベントが発生したハットスイッチの現在の位置を以下の値の論理和で
    返します。
    
    * SDL::Joystick::HAT_CENTERED
    * SDL::Joystick::HAT_UP
    * SDL::Joystick::HAT_RIGHT
    * SDL::Joystick::HAT_DOWN
    * SDL::Joystick::HAT_LEFT
    * SDL::Joystick::HAT_RIGHTUP
    * SDL::Joystick::HAT_RIGHTDOWN
    * SDL::Joystick::HAT_LEFTUP
    * SDL::Joystick::HAT_LEFTDOWN

--- SDL::Event::JoyButtonDown#which

    イベントが発生したジョイスティックのインデックスを返します。

    * See Also
      
      ((<SDL::Joystick>))

--- SDL::Event::JoyButtonDown#button

    イベントが発生したジョイスティックのボタンのインデックスを返します。

    * See Also
      
      ((<SDL::Joystick>)), ((<SDL::Joystick#num_buttons>))

--- SDL::Event::JoyButtonDown#press

    ボタン押し下げイベントかどうかを返します。
    常に true を返します。

    * See Also
      
      ((<SDL::Event::JoyButtonUp#press>)), ((<SDL::Joystick#button>))

--- SDL::Event::JoyButtonUp#which

    イベントが発生したジョイスティックのインデックスを返します。

    * See Also
      
      ((<SDL::Joystick>))

--- SDL::Event::JoyButtonUp#button

    イベントが発生したジョイスティックのボタンのインデックスを返します。

    * See Also
      
      ((<SDL::Joystick>)), ((<SDL::Joystick#num_buttons>))

--- SDL::Event::JoyButtonUp#press

    ボタン押し下げイベントかどうかを返します。
    常に false を返します。

    * See Also
      
      ((<SDL::Event::JoyButtonDown#press>)), ((<SDL::Joystick#button>))

--- SDL::Event::VideoResize#w

    ウィンドウがリサイズされたときに、
    ウィンドウの新しい幅を整数で返します。

--- SDL::Event::VideoResize#h

    ウィンドウがリサイズされたときに、
    ウィンドウの新しい高さを整数で返します。

--- SDL::Key.scan

    キーボードの状態のスナップショットをとります。
    ((<SDL::Key.press?>))を使いこの関数で取った状態の情報を得ます。
    
    この状態は ((<SDL::Event.poll>)) や ((<SDL::Event.wait>)) を呼ばないと更新されません。

    * See Also
      
      ((<SDL::Key.press?>)), ((<SDL::Event::KeyDown>)), ((<SDL::Event::KeyUp>)), ((<SDL::Event.poll>))

--- SDL::Key.press?(key)

    ((|key|))で指定したキーを押しているかどうかを返します。ここで返す値は
    最も最近に呼んだ ((<SDL::Key.scan>)) の時点での状態に基きます。
    ((|key|)) として((<キーシンボル>))を与えてください。

    * See Also
      
      ((<SDL::Key.scan>)), ((<SDL::Event::KeyDown>)), ((<SDL::Event::KeyUp>))

--- SDL::Key.mod_state
--- SDL::Key.modState

    モディファイアキー(CTRL、ALTなど)の状態を返します。
    以下の値の論理和が帰ります。
    :SDL::Key::MOD_NONE
      何も押していない
    :SDL::Key::MOD_LSHIFT
      左シフト
    :SDL::Key::MOD_RSHIFT
      右シフト
    :SDL::Key::MOD_LCTRL
      左コントロール
    :SDL::Key::MOD_RCTRL
      右コントロール
    :SDL::Key::MOD_LALT
      左ALT
    :SDL::Key::MOD_RALT
      右ALT
    :SDL::Key::MOD_LMETA
      左メタキー
    :SDL::Key::MOD_RMETA
      右メタキー
    :SDL::Key::MOD_NUM
      NumLock
    :SDL::Key::MOD_CAPS
      Caps
    :SDL::Key::MOD_MODE
     
    以下のような定数も定義されています。
    * SDL::Key::MOD_CTRL = SDL::Key::MOD_LCTRL|SDL::Key::MOD_RCTRL
    * SDL::Key::MOD_SHIFT = SDL::Key::MOD_LSHIFT|SDL::Key::MOD_RSHIFT
    * SDL::Key::MOD_ALT = SDL::Key::MOD_LALT|SDL::Key::MOD_RALT
    * SDL::Key::MOD_META = SDL::Key::MOD_LMETA|SDL::Key::MOD_RMETA

    * See Also
      
      ((<SDL::Key.scan>))

--- SDL::Key.get_key_name(key)
--- SDL::Key.getKeyName(key)

    ((|key|)) で与えた((<キーシンボル>))に対応する文字列を返します。

--- SDL::Key.enable_key_repeat(delay,interval)
--- SDL::Key.enableKeyRepeat(delay,interval)

    キーリピートレートを有効にします。
    ((|delay|)) は、リピートが開始されるまでの
    時間を指定します。
    その後に、((|interval|))で指定された
    レートでリピートが始まります。
    ((|delay|)) と ((|interval|)) は
    どちらもミリセカンド単位で指定します。
    
    デフォルト値はそれぞれ SDL::Key::DEFAULT_REPEAT_DELAY と
    SDL::Key::DEFAULT_REPEAT_INTERVAL という定数で定義されています。

    レートの変更に失敗すると例外 SDL::Error が発生します。

    * See Also
      
      ((<SDL::Key.disable_key_repeat>))

--- SDL::Key.disable_key_repeat
--- SDL::Key.disableKeyRepeat

    キーリピートを無効にします。

    失敗したときには例外((<SDL::Error>))を発生させます。

    * See Also
      
      ((<SDL::Key.enable_key_repeat>))

--- SDL::Mouse.state

    現在のマウスの状態を以下のような要素5個の配列で得ます。
      [ マウスのX座標, マウスのY座標, 左ボタンが押されているか？, 中央ボタンが押されているか？, 右ボタンが押されているか？ ]


    EXAMPLE
      x, y, lbutton, * = SDL::Mouse.state
      if lbutton
        print "マウス左ボタン が押されました。\n"
      end

    * See Also
      
      ((<SDL::Event::MouseMotion>)), ((<SDL::Event::MouseButtonDown>)), ((<SDL::Event::MouseButtonUp>))

--- SDL::Mouse.warp(x,y)

    マウスカーソルの位置をセットします。(マウスモーションイベントを発生させます)

    * See Also
      
      ((<SDL::Event::MouseMotion>))

--- SDL::Mouse.show

    カーソルを表示します。
    
    カーソルは最初は表示されていますが、非表示にすることもできます。

    * See Also
      
      ((<SDL::Mouse.hide>)), ((<SDL::Mouse.show?>))

--- SDL::Mouse.hide

    カーソルを非表示にします。

    * See Also
      
      ((<SDL::Mouse.show>)), ((<SDL::Mouse.show?>))

--- SDL::Mouse.show?

    カーソルが画面に表示されているなら trueを、 いなければ false を返します。

    * See Also
      
      ((<SDL::Mouse.show>)), ((<SDL::Mouse.hide>))

--- SDL::Mouse.set_cursor(bitmap,white,black,transparent,inverted,hot_x=0,hot_y=0)
--- SDL::Mouse.setCursor(bitmap,white,black,transparent,inverted,hot_x=0,hot_y=0)

    現在アクティブなカーソルを指定されたものに設定します。
    カーソルが現在見える状態にあるときは、この変更はすぐに表示に反映されます。
    
    カーソルは ((|bitmap|)) で ((<SDL::Surface>)) のインスタンスを指定します。
    カーソルは白黒2色で作られます。((|white|)) が白に対応するピクセル値、
    ((|black|)) が黒に対応するピクセル値、((|transparent|))は透明に対応するピクセル値、
    ((|inverted|)) は反転色(なければ黒)に対応するピクセル値です。
    またカーソルの横幅は 8 の倍数でなければいけません。
    
    ((|hot_x|))、((|hot_y|)) はビットマップのどの点をマウスカーソルの位置とするかを
    指定します。

    * See Also
      
      ((<SDL::Surface>))

