indexing
	description: "Facilities for direct drawing on the screen."
	status: "See notice at end of class"
	keywords: "screen, root, window, visual, top"
	date: "$Date$"
	revision: "$Revision$"
class interface
	EV_SCREEN
create 
	frozen default_create
			
			 EV_ANY
		ensure then  EV_ANY
			is_coupled: implementation /= void
			is_initialized: is_initialized
			default_create_called_set: default_create_called
			is_in_default_state: is_in_default_state
feature 
	background_color: EV_COLOR
			
			 EV_COLORIZABLE
		require  EV_COLORIZABLE
			not_destroyed: not is_destroyed
		ensure  EV_COLORIZABLE
			bridge_ok: Result.is_equal (implementation.background_color)
	clip_area: EV_RECTANGLE
			
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			bridge_ok: (Result = void) = (implementation.clip_area = void)
	dashed_line_style: BOOLEAN
			
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			bridge_ok: Result = implementation.dashed_line_style
	data: ANY
			
			 EV_ANY
	drawing_mode: INTEGER
			
			
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			bridge_ok: Result = implementation.drawing_mode
	font: EV_FONT
			Current
			 EV_FONTABLE
		require  EV_FONTABLE
			not_destroyed: not is_destroyed
		ensure  EV_FONTABLE
			not_void: Result /= void
			bridge_ok: Result.is_equal (implementation.font)
	foreground_color: EV_COLOR
			
			 EV_COLORIZABLE
		require  EV_COLORIZABLE
			not_destroyed: not is_destroyed
		ensure  EV_COLORIZABLE
			bridge_ok: Result.is_equal (implementation.foreground_color)
	line_width: INTEGER
			
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			bridge_ok: Result = implementation.line_width
	tile: EV_PIXMAP
			
			foreground_color
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			bridge_ok: (Result = void) = (implementation.tile = void)
	
feature 
	height: INTEGER
			
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure then
			bridge_ok: Result = implementation.height
			positive: Result > 0
	width: INTEGER
			
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure then
			bridge_ok: Result = implementation.width
			positive: Result > 0
	
feature 
	pointer_position: EV_COORDINATE
			
		require
			not_destroyed: not is_destroyed
	widget_at_position (x, y: INTEGER): EV_WIDGET
			xy
		require
			not_destroyed: not is_destroyed
	
feature 
	set_default_colors
			
			 EV_COLORIZABLE
		require  EV_COLORIZABLE
			not_destroyed: not is_destroyed
	
feature 
	disable_dashed_line_style
			
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			dashed_line_style_disabled: not dashed_line_style
	enable_dashed_line_style
			
			
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			dashed_line_style_enabled: dashed_line_style
	remove_clip_area
			
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			clip_area_void: clip_area = void
	remove_tile
			
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			tile_void: tile = void
	set_background_color (a_color: like background_color)
			a_colorforeground_color
			 EV_COLORIZABLE
		require  EV_COLORIZABLE
			not_destroyed: not is_destroyed
			a_color_not_void: a_color /= void
		ensure  EV_COLORIZABLE
			background_color_assigned: background_color.is_equal (a_color)
	set_clip_area (an_area: EV_RECTANGLE)
			
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			an_area_not_void: an_area /= void
		ensure  EV_DRAWABLE
			clip_area_assigned: clip_area.is_equal (an_area)
	set_data (some_data: like data)
			some_datadata
			 EV_ANY
		require  EV_ANY
			not_destroyed: not is_destroyed
		ensure  EV_ANY
			data_assigned: data = some_data
	set_drawing_mode (a_mode: INTEGER)
			a_logical_mode
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_mode_valid: valid_drawing_mode (a_mode)
		ensure  EV_DRAWABLE
			drawing_mode_assigned: drawing_mode = a_mode
	set_font (a_font: EV_FONT)
			a_fontfont
			 EV_FONTABLE
		require  EV_FONTABLE
			not_destroyed: not is_destroyed
			a_font_not_void: a_font /= void
		ensure  EV_FONTABLE
			font_assigned: font.is_equal (a_font)
	set_foreground_color (a_color: like foreground_color)
			a_colorforeground_color
			 EV_COLORIZABLE
		require  EV_COLORIZABLE
			not_destroyed: not is_destroyed
			a_color_not_void: a_color /= void
		ensure  EV_COLORIZABLE
			foreground_color_assigned: foreground_color.is_equal (a_color)
	set_line_width (a_width: INTEGER)
			a_widthline_width
			
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_width_positive_or_zero: a_width >= 0
		ensure  EV_DRAWABLE
			line_width_assigned: line_width = a_width
	set_tile (a_pixmap: EV_PIXMAP)
			
			background_color
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_pixmap_not_void: a_pixmap /= void
		ensure  EV_DRAWABLE
			tile_assigned: tile /= void
	
feature 
	copy (other: like Current)
			
			other
			 EV_ANY
		require  ANY
			other_not_void: other /= void
			type_identity: same_type (other)
		ensure  ANY
			is_equal: is_equal (other)
	
feature 
	fake_key_click (a_key: EV_KEY)
			key
		require
			not_destroyed: not is_destroyed
	fake_key_press (a_key: EV_KEY)
			key
		require
			not_destroyed: not is_destroyed
	fake_key_release (a_key: EV_KEY)
			key
		require
			not_destroyed: not is_destroyed
	fake_pointer_button_click (a_button: INTEGER)
			a_button
		require
			not_destroyed: not is_destroyed
	fake_pointer_button_press (a_button: INTEGER)
			a_button
		require
			not_destroyed: not is_destroyed
	fake_pointer_button_release (a_button: INTEGER)
			a_button
		require
			not_destroyed: not is_destroyed
	set_pointer_position (x, y: INTEGER)
			pointer_positionx
		require
			not_destroyed: not is_destroyed
	
feature 
	clear
			Currentbackground_color
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
	clear_rectangle (x, y, a_width, a_height: INTEGER)
			xy
			a_widtha_heightbackground_color
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_width_positive_or_zero: a_width >= 0
			a_height_positive_or_zero: a_height >= 0
	
feature 
	destroy
			
			Current
			 EV_ANY
		ensure  EV_ANY
			is_destroyed: is_destroyed
	
feature  
	valid_drawing_mode (a_mode: INTEGER): BOOLEAN
			a_mode
			 EV_DRAWABLE_CONSTANTS
	
feature 
	set_and_mode
			drawing_mode
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			drawing_mode_assigned: drawing_mode = drawing_mode_and
	set_copy_mode
			drawing_mode
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			drawing_mode_assigned: drawing_mode = drawing_mode_copy
	set_invert_mode
			drawing_mode
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			drawing_mode_assigned: drawing_mode = drawing_mode_invert
	set_or_mode
			drawing_mode
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			drawing_mode_assigned: drawing_mode = drawing_mode_or
	set_xor_mode
			drawing_mode
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
		ensure  EV_DRAWABLE
			drawing_mode_assigned: drawing_mode = drawing_mode_xor
	
feature 
	draw_arc (x, y, a_bounding_width, a_bounding_height: INTEGER; a_start_angle, an_aperture: REAL)
			
			xya_bounding_width
			a_bounding_height
			a_start_anglea_start_anglean_aperture
			
			
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_bounding_width_positive_or_zero: a_bounding_width >= 0
			a_bounding_height_positive_or_zero: a_bounding_width >= 0
	draw_ellipse (x, y, a_bounding_width, a_bounding_height: INTEGER)
			
			xya_bounding_width
			a_bounding_height
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_bounding_width_positive_or_zero: a_bounding_width >= 0
			a_bounding_height_positive_or_zero: a_bounding_height >= 0
	draw_pie_slice (x, y, a_bounding_width, a_bounding_height: INTEGER; a_start_angle, an_aperture: REAL)
			
			xya_bounding_width
			a_bounding_height
			a_start_anglea_start_anglean_aperture
			x
			
			
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_bounding_width_positive_or_zero: a_bounding_width >= 0
			a_bounding_height_positive_or_zero: a_bounding_height >= 0
	draw_pixmap (x, y: INTEGER; a_pixmap: EV_PIXMAP)
			a_pixmapxy
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_pixmap_not_void: a_pixmap /= void
	draw_point (x, y: INTEGER)
			xy
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
	draw_polyline (points: ARRAY [EV_COORDINATE]; is_closed: BOOLEAN)
			
			pointsis_closed
			points
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			points_not_void: points /= void
	draw_rectangle (x, y, a_width, a_height: INTEGER)
			xy
			a_widtha_height
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_width_positive_or_zero: a_width >= 0
			a_height_positive_or_zero: a_height >= 0
	draw_segment (x1, y1, x2, y2: INTEGER)
			x1y1x2y2
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
	draw_straight_line (x1, y1, x2, y2: INTEGER)
			x1y1
			x2y2
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
	draw_sub_pixmap (x, y: INTEGER; a_pixmap: EV_PIXMAP; area: EV_RECTANGLE)
			areaa_pixmapxy
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_pixmap_not_void: a_pixmap /= void
			area_not_void: area /= void
	draw_text (x, y: INTEGER; a_text: STRING)
			a_textxyfont
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_text_not_void: a_text /= void
	draw_text_top_left (x, y: INTEGER; a_text: STRING)
			a_textxyfont
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_text_not_void: a_text /= void
	
feature 
	fill_ellipse (x, y, a_bounding_width, a_bounding_height: INTEGER)
			
			xya_bounding_width
			a_bounding_height
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_bounding_width_positive_or_zero: a_bounding_width >= 0
			a_bounding_height_positive_or_zero: a_bounding_height >= 0
	fill_pie_slice (x, y, a_bounding_width, a_bounding_height: INTEGER; a_start_angle, an_aperture: REAL)
			
			xya_bounding_width
			a_bounding_height
			a_start_anglea_start_anglean_aperture
			x
			
			
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_bounding_width_positive_or_zero: a_bounding_width >= 0
			a_bounding_height_positive_or_zero: a_bounding_height >= 0
	fill_polygon (points: ARRAY [EV_COORDINATE])
			points
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			points_not_void: points /= void
	fill_rectangle (x, y, a_width, a_height: INTEGER)
			xy
			a_widtha_height
			 EV_DRAWABLE
		require  EV_DRAWABLE
			not_destroyed: not is_destroyed
			a_width_positive_or_zero: a_width >= 0
			a_height_positive_or_zero: a_height >= 0
	
feature 
	is_destroyed: BOOLEAN
			Current
			 EV_ANY
		ensure  EV_ANY
			bridge_ok: Result = implementation.is_destroyed
	
invariant
	pointer_position_not_negative: pointer_position.x >= 0 and pointer_position.y >= 0
		 ANY
	reflexive_equality: standard_is_equal (Current)
	reflexive_conformance: conforms_to (Current)
		 EV_DRAWABLE
	line_width_positive_or_zero: is_usable implies line_width >= 0
	drawing_mode_valid: is_usable implies valid_drawing_mode (drawing_mode)
		 EV_ANY
	is_initialized: is_initialized
	is_coupled: implementation /= void and then implementation.interface = Current
	default_create_called: default_create_called
		 EV_COLORIZABLE
	background_color_not_void: is_usable implies background_color /= void
	foreground_color_not_void: is_usable implies foreground_color /= void
end -- EV_SCREEN