DEFINITION FOR LIBRARY MODULE Layers ;

FROM SYSTEM	IMPORT ADDRESS ;
FROM Graphics	IMPORT Layer_InfoPtr, LayerPtr, RastPortPtr, ClipRectPtr,
		       BitMapPtr, RegionPtr, RectanglePtr ;

FROM Utility	IMPORT HookPtr ;
FROM Exec	IMPORT LibraryPtr ;

VAR
  LayersBase : LibraryPtr ;

PROCEDURE InitLayers( li : Layer_InfoPtr ) ;

PROCEDURE CreateUpfrontLayer( li : Layer_InfoPtr ;
			      bm : BitMapPtr ;
			      x0, y0, x1, y1 : LONGINT ;
			      flags : BITSET ;
			      bm2   : BitMapPtr ) : LayerPtr ;

PROCEDURE CreateBehindLayer( li : Layer_InfoPtr ;
			     bm : BitMapPtr ;
			     x0, y0, x1, y1 : LONGINT ;
			     flags : BITSET ;
			     bm2   : BitMapPtr ) : LayerPtr ;

PROCEDURE UpfrontLayer( dummy : LONGINT ; layer : LayerPtr ) : LONGINT ;
PROCEDURE BehindLayer( dummy : LONGINT ; layer : LayerPtr ) : LONGINT ;

PROCEDURE MoveLayer( dummy : LONGINT ;
		     layer : LayerPtr ;
		     dx,dy : LONGINT ) : LONGINT ;

PROCEDURE SizeLayer( dummy : LONGINT ;
		     layer : LayerPtr ;
		     dx,dy : LONGINT ) : LONGINT ;

PROCEDURE ScrollLayer( dummy : LONGINT ;
		       layer : LayerPtr ;
		       dx,dy : LONGINT ) ;

PROCEDURE BeginUpdate( l : LayerPtr ) : LONGINT ;
PROCEDURE EndUpdate( layer : LayerPtr ; flag : BOOLEAN ) ;
PROCEDURE DeleteLayer( dummy : LONGINT ; layer : LayerPtr ) : LONGINT ;
PROCEDURE LockLayer( dummy : LONGINT ; layer : LayerPtr ) ;
PROCEDURE UnlockLayer( layer : LayerPtr ) ;
PROCEDURE LockLayers( li : Layer_InfoPtr ) ;
PROCEDURE UnlockLayers( li : Layer_InfoPtr ) ;
PROCEDURE LockLayerInfo( li : Layer_InfoPtr ) ;

PROCEDURE SwapBitsRastPortClipRect( rp : RastPortPtr ; cr : ClipRectPtr );

PROCEDURE WhichLayer( li : Layer_InfoPtr ; x , y : LONGINT ) : LayerPtr ;
PROCEDURE UnlockLayerInfo( li : Layer_InfoPtr ) ;
PROCEDURE NewLayerInfo( ) : Layer_InfoPtr ;
PROCEDURE DisposeLayerInfo( li : Layer_InfoPtr ) ;
PROCEDURE FattenLayerInfo( li : Layer_InfoPtr ) : LONGINT ;
PROCEDURE ThinLayerInfo( li : Layer_InfoPtr ) ;

PROCEDURE MoveLayerInFrontOf( layer_to_move,other_layer : LayerPtr ) : LONGINT ;

PROCEDURE InstallClipRegion( layer  : LayerPtr ;
			     region : RegionPtr ) : RegionPtr ;

PROCEDURE MoveSizeLayer( layer : LayerPtr ;
			 dx, dy, dw, dh : LONGINT ) : LONGINT ;

PROCEDURE CreateUpfrontHookLayer( li : Layer_InfoPtr ;
			      bm : BitMapPtr ;
			      x0, y0, x1, y1 : LONGINT ;
			      flags : BITSET ;
			      hook  : HookPtr ;
			      bm2   : BitMapPtr ) : LayerPtr ;

PROCEDURE CreateBehindHookLayer( li : Layer_InfoPtr ;
			     bm : BitMapPtr ;
			     x0, y0, x1, y1 : LONGINT ;
			     flags : BITSET ;
			     hook  : HookPtr ;
			     bm2   : BitMapPtr ) : LayerPtr ;

PROCEDURE InstallLayerHook( layer : LayerPtr ; hook : HookPtr ) : HookPtr ;

(*--- functions in V39 or higher (Release 3) ---*)

PROCEDURE InstallLayerInfoHook( li : Layer_InfoPtr ; hook : HookPtr ): HookPtr ;
PROCEDURE SortLayerCR( layer : LayerPtr ; dx, dy : LONGINT ) ;

PROCEDURE DoHookClipRects( hook  : HookPtr ;
			   rport : RastPortPtr ;
			   rect  : RectanglePtr ) ;

END Layers.

