# This file is part of NIT ( http://www.nitlanguage.org ). # # Copyright 2006 Jean Privat # # This file is free software, which comes along with NIT. This software is # distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. You can modify it is you want, provided this header # is kept unaltered, and a notification of the changes is added. # You are allowed to redistribute it and sell it, alone or is a part of # another product. # Binding to the SDL multomedia library package sdl universal SDL_Surface special Pointer meth width: Int is extern "sdl_surface_width" meth height: Int is extern "sdl_surface_height" meth lock_surface: Int is extern "SDL_LockSurface" meth unlock_surface: Int is extern "SDL_LockSurface" meth blit_on(dest: SDL_Surface) is extern "sdl_blit_surface" meth blit_on_xy(dest: SDL_Surface, dest_x: Int, dest_y: Int) is extern "sdl_blit_surface_xy" meth update_rect(x: Int, y: Int, w: Int, h: Int) is extern "SDL_UpdateRect" meth update_all do update_rect(0, 0, 0, 0) end meth clear is extern "sdl_clear_sruface" meth to_display_format: SDL_Surface is extern "SDL_DisplayFormat" meth free is extern "SDL_FreeSurface" end universal SDL_Screen special SDL_Surface meth flip is extern "SDL_Flip" end universal SDL_Event special Pointer meth is_keyboard: Bool is extern "sdl_evt_is_keyboard" meth as_keyboard: SDL_KeyboardEvent is extern "sdl_evt_as_keyboard" meth is_mouse_button: Bool is extern "sdl_evt_is_mouse_button" meth as_mouse_button: SDL_MouseButtonEvent is extern "sdl_evt_as_mouse_button" meth is_mouse_motion: Bool is extern "sdl_evt_is_mouse_motion" meth as_mouse_motion: SDL_MouseMotionEvent is extern "sdl_evt_as_mouse_motion" meth is_expose: Bool is extern "sdl_evt_is_expose" meth is_quit: Bool is extern "sdl_evt_is_quit" end universal SDL_ButtonEvent special SDL_Event meth is_pressed: Bool is abstract end universal SDL_MouseEvent special SDL_Event meth x: Int is abstract meth y: Int is abstract end universal SDL_KeyboardEvent special SDL_ButtonEvent redef meth is_pressed: Bool is extern "sdl_keyboard_evt_state" end universal SDL_MouseButtonEvent special SDL_ButtonEvent special SDL_MouseEvent redef meth is_pressed: Bool is extern "sdl_mouse_button_evt_state" redef meth x: Int is extern "sdl_mouse_button_evt_x" redef meth y: Int is extern "sdl_mouse_button_evt_y" meth button: Int is extern "sdl_mouse_button_evt_button" end universal SDL_MouseMotionEvent special SDL_MouseEvent redef meth x: Int is extern "sdl_mouse_evt_x" redef meth y: Int is extern "sdl_mouse_evt_y" meth xrel: Int is extern "sdl_mouse_evt_xrel" meth yrel: Int is extern "sdl_mouse_evt_yrel" end class SDL_EventListener meth on_keyboard(evt: SDL_KeyboardEvent) do end meth on_mouse_button(evt: SDL_MouseButtonEvent) do end meth on_mouse_motion(evt: SDL_MouseMotionEvent) do end meth on_expose do end meth on_quit do end end class SDL_EventProcessor attr _listeners: Array[SDL_EventListener] meth add_listener(l: SDL_EventListener) do _listeners.add(l) end meth remove_listener(l: SDL_EventListener) do _listeners.remove(l) end meth process_one_event do if sdl_poll_next_event then process_event(sdl_current_event) end end meth process_all_events do while sdl_poll_next_event do process_event(sdl_current_event) end end private meth process_event(evt: SDL_Event) do var sdl_listeners = _listeners if evt.is_keyboard then for i in sdl_listeners do i.on_keyboard(evt.as_keyboard) end else if evt.is_mouse_button then for i in sdl_listeners do i.on_mouse_button(evt.as_mouse_button) end else if evt.is_mouse_motion then for i in sdl_listeners do i.on_mouse_motion(evt.as_mouse_motion) end else if evt.is_expose then for i in sdl_listeners do i.on_expose end else if evt.is_quit then for i in sdl_listeners do i.on_quit end end end init do _listeners = new Array[SDL_EventListener] end end # General meth sdl_init is extern # Video meth sdl_set_video_mode(w: Int, h: Int, d: Int): SDL_Screen is extern meth sdl_set_fullscreen_video_mode(w: Int, h: Int, d: Int): SDL_Screen is extern meth sdl_load_raw_bmp(s: String): SDL_Surface do return sdl_load_bmp_native(s.to_cstring) end meth sdl_load_bmp(s: String): SDL_Surface do var raw = sdl_load_raw_bmp(s) var sprite = raw.to_display_format raw.free return sprite end meth sdl_load_bmp_native(s: NativeString): SDL_Surface is extern meth sdl_show_cursor=(b: Bool) is extern "sdl_show_cursor_1" meth sdl_show_cursor: Bool is extern "sdl_show_cursor_0" # WM meth sdl_grab=(b: Bool) is extern "sdl_grab_1" meth sdl_grab: Bool is extern "sdl_grab_0" # Events meth sdl_current_event: SDL_Event is extern meth sdl_poll_next_event: Bool is extern # Time meth sdl_get_ticks: Int is extern meth sdl_delay(ms: Int) is extern