note description: "A cursor representing the mouse in a window" author: "Louis Marchand" date: "Mon, 04 May 2015 20:37:11 +0000" revision: "0.1" class GAME_CURSOR inherit GAME_SDL_ANY redefine is_equal end DISPOSABLE redefine is_equal end create make_from_image, make_from_surface, make_arrow, make_i_beam, make_wait, make_crosshair, make_wait_arrow, make_resize_north_west_south_east, make_resize_north_east_south_west, make_resize_north_south, make_resize_west_east, make_resize_all, make_unavailable, make_hand create {GAME_LIBRARY_CONTROLLER} make_by_pointer feature {NONE} -- Initialization make_by_pointer (a_pointer: POINTER) -- Initialization of Current using a_pointer as item require pointer_exists: not a_pointer.is_default_pointer do item := a_pointer shared := True ensure exists: exists and shared end make_from_image (a_image: GAME_IMAGE; hot_point_x, hot_point_y: INTEGER_32) -- Initialization for Current. require image_open: a_image.is_open hot_point_valid: attached (create {GAME_SURFACE}.make_from_image (a_image)) as la_surface and then (hot_point_x >= 0 and hot_point_x < la_surface.width and hot_point_y >= 0 and hot_point_y < la_surface.height) local l_item: POINTER do clear_error l_item := {GAME_SDL_EXTERNAL}.sdl_createcolorcursor (a_image.item, hot_point_x, hot_point_y) if l_item.is_default_pointer then manage_error_pointer (l_item, "Cannot create cursor") else make_by_pointer (l_item) shared := False end ensure is_created: not has_error implies (exists and not shared) end make_from_surface (a_surface: GAME_SURFACE; hot_point_x, hot_point_y: INTEGER_32) require surface_valid: a_surface.is_open hot_point_x_valid: hot_point_x >= 0 and hot_point_x < a_surface.width hot_point_y_valid: hot_point_y >= 0 and hot_point_y < a_surface.height do make_from_image (a_surface.image, hot_point_x, hot_point_y) ensure is_created: not has_error implies (exists and not shared) end make_arrow -- Initialization of Current using a standard Arrow image. do make_system ({GAME_SDL_EXTERNAL}.sdl_system_cursor_arrow) ensure is_created: not has_error implies (exists and shared) end make_i_beam -- Initialization of Current using a I-beam image (the edit text cursor). do make_system ({GAME_SDL_EXTERNAL}.sdl_system_cursor_ibeam) ensure is_created: not has_error implies (exists and shared) end make_wait -- Initialization of Current using a waiting image (sometime use to indicate that the application is buzy). do make_system ({GAME_SDL_EXTERNAL}.sdl_system_cursor_wait) ensure is_created: not has_error implies (exists and shared) end make_crosshair -- Initialization of Current using a crosshair image (generally shown as a +). do make_system ({GAME_SDL_EXTERNAL}.sdl_system_cursor_crosshair) ensure is_created: not has_error implies (exists and shared) end make_wait_arrow -- Initialization of Current using an arrow with a wait image. do make_system ({GAME_SDL_EXTERNAL}.sdl_system_cursor_waitarrow) ensure is_created: not has_error implies (exists and shared) end make_resize_north_west_south_east -- Initialization of Current using a diagonal resize image oriented north-west to south-east. do make_system ({GAME_SDL_EXTERNAL}.sdl_system_cursor_sizenwse) ensure is_created: not has_error implies (exists and shared) end make_resize_north_east_south_west -- Initialization of Current using a diagonal resize image oriented north-east to south-west. do make_system ({GAME_SDL_EXTERNAL}.sdl_system_cursor_sizenesw) ensure is_created: not has_error implies (exists and shared) end make_resize_north_south -- Initialization of Current using a vertical resize image. do make_system ({GAME_SDL_EXTERNAL}.sdl_system_cursor_sizens) ensure is_created: not has_error implies (exists and shared) end make_resize_west_east -- Initialization of Current using a horizontal resize image. do make_system ({GAME_SDL_EXTERNAL}.sdl_system_cursor_sizewe) ensure is_created: not has_error implies (exists and shared) end make_resize_all -- Initialization of Current using a vertical and horizontal resize image. do make_system ({GAME_SDL_EXTERNAL}.sdl_system_cursor_sizewe) ensure is_created: not has_error implies (exists and shared) end make_unavailable -- Initialization of Current using an image that implies an unavailable feature. do make_system ({GAME_SDL_EXTERNAL}.sdl_system_cursor_no) ensure is_created: not has_error implies (exists and shared) end make_hand -- Initialization of Current using a hand image. do make_system ({GAME_SDL_EXTERNAL}.sdl_system_cursor_hand) ensure is_created: not has_error implies (exists and shared) end make_system (a_system_cursor_id: INTEGER_32) -- Initialize a system cursor using a_system_cursor_id as internal system cursor index local l_item: POINTER do clear_error l_item := {GAME_SDL_EXTERNAL}.sdl_createsystemcursor (a_system_cursor_id) if l_item.is_default_pointer then manage_error_pointer (l_item, "Cannot create cursor") else make_by_pointer (l_item) end ensure is_created: not has_error implies (exists and shared) end feature -- Access exists: BOOLEAN -- Is item reprensenting valid memory structure do Result := not item.is_default_pointer end is_equal (a_other: like Current): BOOLEAN -- Is other attached to an object considered -- equal to current object? do Result := item = a_other.item end feature {GAME_LIBRARY_CONTROLLER, GAME_CURSOR} -- Access item: POINTER -- Internal POINTER of Current shared: BOOLEAN -- Must not free item when Current is collected feature -- Implementation dispose -- Action to be executed just before garbage collection -- reclaims an object. -- Effect it in descendants to perform specific dispose -- actions. Those actions should only take care of freeing -- external resources; they should not perform remote calls -- on other objects since these may also be dead and reclaimed. do if exists and not shared then {GAME_SDL_EXTERNAL}.sdl_freecursor (item) end end end -- class GAME_CURSOR
Generated by ISE EiffelStudio