#ifndef __INC_POS_PLAYER_CLIP_H
#define __INC_POS_PLAYER_CLIP_H
/*******************************************************************
 Includes Release 24
 (C) Copyright 1995-1997 proDAD
     All Rights Reserved

 $AUT Holger Burkarth
 $DAT >>Clip.h<<   24 Jan 1997    09:38:26 - (C) ProDAD
*******************************************************************/
#ifndef __INC_POS_PEXEC_LIST_H
#include <pExec/List.h>
#endif
#ifndef __INC_POS_PLAYER_RECT_H
#include <pLayer/Rect.h>
#endif
#ifndef __INC_POS_PLAYER_REGION_H
#include <pLayer/Region.h>
#endif
#ifndef __INC_POS_PEXEC_SEMA_H
#include <pExec/Sema.h>
#endif



/*----------------------------------
-----------------------------------*/
struct pOS_ClipRect
{
  struct pOS_Node      cr_Node;       /* kompatiebel zu (struct pOS_RegionRectangle) */
  struct pOS_Rectangle cr_Bounds;     /* bounds of cliprect */
  struct pOS_GfxMap   *cr_GfxMap;     /* */
};



/*----------------------------------
pOS_LockHideLayer(), pOS_UnlockHideLayer()
-----------------------------------*/
struct pOS_LayerHide
{
  struct pOS_List          lyh_ClipList;
  const struct pOS_Region *lyh_Region;
  UBYTE                    lyh_Mode;  /* 0x01 = LAYERF_InRefMode, 0x02 = Quick */
  UBYTE                    lyh_Cnt;
};



/*----------------------------------
-----------------------------------*/
struct pOS_LayerClip
{
  struct pOS_LayerHide lyc_Hide;
  UBYTE                lyc_Reserved[32];
};




/*----------------------------------
-----------------------------------*/
struct pOS_Layer
{
  struct pOS_ExNode     ly_Node;
  struct pOS_Layer     *ly_Parent;
  struct pOS_Layer     *ly_Next;        /* nur im Child-Verbund */
  struct pOS_Layer     *ly_Child;       /* First Child */
  struct pOS_Semaphore  ly_Lock;
  struct pOS_Rectangle  ly_Bounds;
  struct pOS_Rectangle  ly_ChildBounds; /* echte Maße, ohne das Clipping von Parent */
  struct pOS_Region     ly_DamageList;  /* list of rectangles to refresh through */
  struct pOS_LayerInfo *ly_LayerInfo;   /* (home) points to head of the list */
  ULONG                 ly_Flags;       /* (enum pOS_LayerFlags) */
  struct pOS_RastPort  *ly_RP;
  struct pOS_List       ly_VisClipList; /* List of visible clips */
  struct pOS_List       ly_SupClipList; /* List of super clips */
  SWORD                 ly_ScrollX;     /* wird zu jeder Zeichenoperation addiert */
  SWORD                 ly_ScrollY;
  struct pOS_GfxMap    *ly_SupGfxMap;
  struct pOS_Window    *ly_Win;         /* home link for intui (private) */

/** SYSTEM-PRIVATE-DATAS **/
};


/*\
*** Nach BeginRefresh() ist in ly_Flags das LAYERF_InRefMode-Bit gesetzt.
*** Gleichzeitig zeigt das LAYERF_DamageLst-Bit, daß die ly_DamageList-List
*** mit ly_DamUseList getauscht wurde. Progs, die auf diese Daten zurückgreifen,
*** müssen ly_DamUseList verwenden, da zur gleichen Zeit ly_DamageList genullt wird.
\*/






/*----------------------------------
-----------------------------------*/
struct pOS_LayerInfo
{
  struct pOS_ExNode    li_Node;
  struct pOS_ExList    li_List;   /* (pOS_Layer*) List */
  struct pOS_Semaphore li_Lock;
  struct pOS_GfxMap   *li_GfxMap;
  UWORD                li_Flags;

/** SYSTEM-PRIVATE-DATAS **/

};




/*----------------------------------
  BOOL (*cb_Code)(_R_A0 const pOS_Callback*,_R_A1 const pOS_LayerHookData*);
-----------------------------------*/
struct pOS_LayerHookData
{
  struct pOS_RastPort  *lyhd_RastPort;
  struct pOS_LayerInfo *lyhd_LayerInfo;
  struct pOS_Layer     *lyhd_Layer;
  SLONG                 lyhd_OriginX, lyhd_OriginY;
  struct pOS_Rectangle  lyhd_Bounds;
  UWORD                 lyhd_Flags;      /* (enum pOS_LayerHookFlags) */
  struct pOS_GfxMap    *lyhd_GfxMap;
};


enum pOS_LayerHookFlags /* lyhd_Flags */
{
  LAYERHOOKF_FirstDraw  =0x0001,        /* erster Durchlauf */
  LAYERHOOKF_Border     =0x0002         /* Border zeichnen  */
};







enum pOS_LayerFlags /* ly_Flags */
{
  LAYERF_Simple=        0x0001,
  LAYERF_Smart=         0x0002,
  LAYERF_Super=         0x0004,
  LAYERF_NoCLTS=        0x0010,   /* no pOS_CopyLayerToSup() */
  LAYERF_DrawInLy=      0x000020, /* es wurde gezeichnet => wichtig für SuperBM */
  LAYERF_Refresh=       0x000080,
  LAYERF_InRefMode=     0x000100, /* Begin-Refresh */
  LAYERF_DamageLst=     0x000200, /* pflegt die Damage-List */
  LAYERF_2thDamLst=     0x000400, /* ly_DamUseList wurde gebildet */
  LAYERF_RembDamLst=    0x000800, /* ly_DamRememberList wird verwendet */
  LAYERF_FixChWidth=    0x001000, /* Kind-Width ist an Parent gebunden */
  LAYERF_FixChHeight=   0x002000, /* Kind-Height ist an Parent gebunden */
  LAYERF_SaveVCList=    0x004000, /* SaveVisClipList ist belegt */
  LAYERF_FixChLeft=     0x008000, /* Kind-Left wird an Parent-Right gebunden */
  LAYERF_FixChTop=      0x010000, /* Kind-Top wird an Parent-Bottom gebunden */
  LAYERF_SzDamgHoriz=   0x020000, /* eine horizontale Größenänderung macht den
                                  ** gesamten Layer ungültig
                                  */
  LAYERF_SzDamgVert=    0x040000  /* =>LAYERF_SzDamgHoriz (vert) */
};



#endif
