1. package Tools.Paintbrushes is 
  2.  
  3.     type Paintbrush is new Tool with private; 
  4.  
  5.     function Create_Paintbrush( tile : Natural ) return A_Tool; 
  6.     pragma Postcondition( Create_Paintbrush'Result /= null ); 
  7.  
  8.     function Get_Tile( this : not null access Paintbrush'Class ) return Natural; 
  9.  
  10. private 
  11.  
  12.     type Paintbrush is new Tool with 
  13.         record 
  14.             tile      : Natural := 0; 
  15.             overTileX, 
  16.             overTileY : Integer := -1; 
  17.             overLayer : Integer := -1; 
  18.             lastFunc  : Function_Type := Primary; 
  19.         end record; 
  20.  
  21.     procedure Apply( this      : access Paintbrush; 
  22.                      func      : Function_Type; 
  23.                      modifiers : Modifiers_Array; 
  24.                      first     : Boolean; 
  25.                      world     : not null A_World; 
  26.                      worldX, 
  27.                      worldY, 
  28.                      layer     : Integer ); 
  29.  
  30.     procedure Construct( this : access Paintbrush; tile : Natural ); 
  31.  
  32. end Tools.Paintbrushes;