ANY NONE
class interface DRAW_KIT
   -- DRAW_KIT is a tool to make some free drawing, you may consider
   -- it as a pen. You can draw points, lines, rectangles, arcs, words...
   -- Difference with DRAW_STYLE is that you pre-select the drawable
   -- to draw into and drawing functions automatically use this drawable.

creation
   default_create
      -- Default creation method. It is used when no creation
      -- method is specified if allowed. Note it may be renamed.

feature(s) from MEMORY
   -- Garbage collector information and tuning:

   collecting: BOOLEAN
      -- Is garbage collection enabled?

   collection_off
      -- Disable garbage collection.

   collection_on
      -- Enable garbage collection.

   full_collect
      -- Force a full collection cycle if garbage collection is
      -- enabled (i.e. collecting is True); do nothing otherwise.

   collector_counter: INTEGER
      -- The number of collections actually performed or -1 when the
      -- system is not using the SmartEiffel garbage collector (i.e. when
      -- the system is compiled using the -no_gc flag).
      ensure
         Result >= -1

feature(s) from MEMORY
   -- SmartEiffel Garbage collector information and tuning:

   smart_eiffel_collector: BOOLEAN
      -- Is the SmartEiffel garbage collector really used?
      ensure
         Result = (collector_counter >= 0)

   low_memory_strategy: BOOLEAN
      -- Is the low memory strategy in use? When this strategy is used,
      -- the garbage collector try to use as few memory as possible.
      require
         smart_eiffel_collector

   set_low_memory_strategy
      require
         smart_eiffel_collector
      ensure
         low_memory_strategy

   high_memory_strategy: BOOLEAN
      -- Is the high memory strategy in use? When this strategy is used,
      -- the garbage collector assume that more memory can be allocated
      -- if necessary.
      require
         smart_eiffel_collector

   set_high_memory_strategy
      require
         smart_eiffel_collector
      ensure
         high_memory_strategy

   default_memory_strategy: BOOLEAN
      -- Is the default memory strategy in use? This is the default initial
      -- mode for the garbage collector (somewhere between low_memory_strategy
      -- and high_memory_strategy).
      require
         smart_eiffel_collector

   set_default_memory_strategy
      require
         smart_eiffel_collector
      ensure
         default_memory_strategy

   allocated_bytes: INTEGER
      -- Total number of allocated bytes of memory in the heap.
      require
         collector_counter >= 0

feature(s) from DRAW_STYLE
   color: COLOR

   set_color (c: COLOR)
      require
         c /= Void

   line_width: INTEGER

   set_line_width (w: INTEGER)
      require
         w > 0

feature(s) from DRAW_KIT
   set_drawable (d: DRAWABLE)
      -- Set the drawable to use in future drawing function calls.
      require
         d /= Void
      ensure
         valid_drawable

   point (x1, y1: INTEGER)
      require
         valid_drawable

   line (x1, y1, x2, y2: INTEGER)
      --TODO: explain how line width is used
      require
         valid_drawable

   rectangle (x1, y1, w, h: INTEGER)
      --TODO: explain how line width is used
      require
         w > 0;
         h > 0;
         valid_drawable

   arc (x1, y1, w, h: INTEGER; angle1, angle2: DOUBLE)
      --TODO: explain how line width is used
      -- arc will be drawn inside the rectangle defined with x1, y1, w, h
      require
         w > 0;
         h > 0;
         valid_drawable

   arc_radius (x, y, r1, r2: INTEGER; angle1, angle2: DOUBLE)
      --TODO: explain how line width is used
      -- arc will be drawn using (x, y) as center and r1/r2 as
      -- horizontal/vertical radius
      require
         r1 > 0;
         r2 > 0;
         valid_drawable

   fill_rectangle (x1, y1, w, h: INTEGER)
      require
         w > 0;
         h > 0;
         valid_drawable

   fill_arc (x1, y1, w, h: INTEGER; angle1, angle2: DOUBLE)
      -- arc will be drawn inside the rectangle defined with x1, y1, w, h
      require
         w > 0;
         h > 0;
         valid_drawable

   fill_arc_radius (x, y, r1, r2: INTEGER; angle1, angle2: DOUBLE)
      -- arc will be drawn using (x, y) as center and r1/r2 as
      -- horizontal/vertical radius
      require
         r1 > 0;
         r2 > 0;
         valid_drawable

   put_string (s: UNICODE_STRING; x, y: INTEGER)
      require
         s /= Void;
         valid_drawable

   valid_drawable: BOOLEAN



end of DRAW_KIT