indexing
	description: "Abstract class for figure projection routines."
	status: "See notice at end of class"
	keywords: "projector, events, routines"
	date: "$Date$"
	revision: "$Revision$"

deferred class interface
	EV_PROJECTION_ROUTINES

feature -- Basic operations

	is_projecting: BOOLEAN
			-- Is a project currently being performed?
			-- Then, do not start a new one.

	project
			-- Make standard projection of world on device.

	register_figure (a_figure: EV_FIGURE; a_routine: PROCEDURE [ANY, TUPLE [EV_FIGURE]])
			-- Assign a_routine for drawing of a_figure.
	
feature -- Figure drawing

	draw_figure_arc (arc: EV_FIGURE_ARC)
			-- Draw standard representation of arc to canvas.
			-- (from EV_FIGURE_DRAWING_ROUTINES)
		require -- from EV_FIGURE_DRAWING_ROUTINES
			arc_not_void: arc /= void

	draw_figure_dot (dot: EV_FIGURE_DOT)
			-- Draw standard representation of dot to canvas.
			-- (from EV_FIGURE_DRAWING_ROUTINES)
		require -- from EV_FIGURE_DRAWING_ROUTINES
			dot_not_void: dot /= void

	draw_figure_ellipse (ellipse: EV_FIGURE_ELLIPSE)
			-- Draw standard representation of ellipse to canvas.
			-- (from EV_FIGURE_DRAWING_ROUTINES)
		require -- from EV_FIGURE_DRAWING_ROUTINES
			ellipse_not_void: ellipse /= void

	draw_figure_equilateral (eql: EV_FIGURE_EQUILATERAL)
			-- Draw standard representation of eql to canvas.
			-- (from EV_FIGURE_DRAWING_ROUTINES)
		require -- from EV_FIGURE_DRAWING_ROUTINES
			eql_not_void: eql /= void

	draw_figure_line (line: EV_FIGURE_LINE)
			-- Draw a standard representation of line to the canvas.
			-- (from EV_FIGURE_DRAWING_ROUTINES)
		require -- from EV_FIGURE_DRAWING_ROUTINES
			line_not_void: line /= void

	draw_figure_picture (picture: EV_FIGURE_PICTURE)
			-- Draw standard representation of picture to canvas.
			-- (from EV_FIGURE_DRAWING_ROUTINES)
		require -- from EV_FIGURE_DRAWING_ROUTINES
			picture_not_void: picture /= void

	draw_figure_pie_slice (slice: EV_FIGURE_PIE_SLICE)
			-- Draw standard representation of slice to canvas.
			-- (from EV_FIGURE_DRAWING_ROUTINES)
		require -- from EV_FIGURE_DRAWING_ROUTINES
			slice_not_void: slice /= void

	draw_figure_polygon (polygon: EV_FIGURE_POLYGON)
			-- Draw standard representation of polygon to canvas.
			-- (from EV_FIGURE_DRAWING_ROUTINES)
		require -- from EV_FIGURE_DRAWING_ROUTINES
			polygon_not_void: polygon /= void

	draw_figure_polyline (line: EV_FIGURE_POLYLINE)
			-- Draw standard representation of polyline to canvas.
			-- (from EV_FIGURE_DRAWING_ROUTINES)
		require -- from EV_FIGURE_DRAWING_ROUTINES
			line_not_void: line /= void

	draw_figure_rectangle (rectangle: EV_FIGURE_RECTANGLE)
			-- Draw standard representation of rectangle to canvas.
			-- (from EV_FIGURE_DRAWING_ROUTINES)
		require -- from EV_FIGURE_DRAWING_ROUTINES
			rectangle_not_void: rectangle /= void

	draw_figure_rounded_rectangle (f: EV_FIGURE_ROUNDED_RECTANGLE)
			-- Draw standard representation of f to canvas.
			-- (from EV_FIGURE_DRAWING_ROUTINES)
		require -- from EV_FIGURE_DRAWING_ROUTINES
			f_not_void: f /= void

	draw_figure_star (star: EV_FIGURE_STAR)
			-- Draw standard representation of star to canvas.
			-- (from EV_FIGURE_DRAWING_ROUTINES)
		require -- from EV_FIGURE_DRAWING_ROUTINES
			star_not_void: star /= void

	draw_figure_text (text_figure: EV_FIGURE_TEXT)
			-- Draw standard representation of text_figure to canvas.
			-- (from EV_FIGURE_DRAWING_ROUTINES)
		require -- from EV_FIGURE_DRAWING_ROUTINES
			text_figure_not_void: text_figure /= void
	
invariant

		-- from ANY
	reflexive_equality: standard_is_equal (Current)
	reflexive_conformance: conforms_to (Current)

end -- class EV_PROJECTION_ROUTINES