change behaviour so that external code will receive a struct BitMap to operate with.
[aros:aros.git] / AROS / workbench / devs / monitors / Compositor / compositor_intern.h
1 #ifndef _COMPOSITOR_INTERN_H
2 #define _COMPOSITOR_INTERN_H
3
4 /*
5     Copyright © 2010-2013, The AROS Development Team. All rights reserved.
6     $Id$
7 */
8
9 #include "compositor.h"
10
11 #include <exec/nodes.h>
12 #include <exec/lists.h>
13 #include <exec/semaphores.h>
14 #include <graphics/gfx.h>
15
16 struct StackBitMapNode
17 {
18     struct MinNode              n;
19     OOP_Object                  *bm;
20     struct Region               *screenregion;
21     struct Rectangle            screenvisiblerect;      /* Visible part */
22     SIPTR                       leftedge;               /* Offset */
23     SIPTR                       topedge;
24     IPTR                        sbmflags;
25     struct Hook                 *prealphacomphook;
26 };
27
28 // sbmflags bits 0 to 3 are reserved for the normal compositing flags.
29 #define STACKNODEB_VISIBLE       16
30 #define STACKNODEF_VISIBLE       (1 << STACKNODEB_VISIBLE)
31 #define STACKNODEB_DISPLAYABLE   17
32 #define STACKNODEF_DISPLAYABLE   (1 << STACKNODEB_DISPLAYABLE)
33
34 struct HIDDCompositorData
35 {
36     struct GfxBase              *GraphicsBase;
37     struct IntuitionBase        *IntuitionBase;
38
39     ULONG                       capabilities;
40     ULONG                       flags;
41
42     /* Bitmap to which all screen bitmaps are composited. Height/Width always 
43        matches visible mode */
44     OOP_Object                  *displaybitmap;
45     OOP_Object                  *intermedbitmap;
46
47     /* Pointer to actuall screen bitmap, result of last HIDD_Gfx_Show().
48        Needed for graphics.library only. */
49     OOP_Object                  *screenbitmap;
50
51     /* Pointer to top bitmap on stack */
52     OOP_Object                  *topbitmap;
53
54     struct Rectangle            displayrect;     /* Dimensions of currently visible mode         */
55     struct Region               *alpharegion;
56
57     struct MinList              bitmapstack;
58     struct SignalSemaphore      semaphore;
59
60     struct Hook                 *backfillhook;
61
62     OOP_Object                  *gfx;           /* GFX driver object                            */
63     OOP_Object                  *fb;            /* Framebuffer bitmap (if present)              */
64     OOP_Object                  *gc;            /* GC object used for drawing operations        */
65
66     ULONG                       displayid;
67     HIDDT_ModeID                displaymode;    /* ModeID of currently visible mode             */
68     UBYTE                       displaydepth;
69
70     struct Hook                 defaultbackfill;
71     BOOL                        modeschanged;   /* TRUE if new top bitmap has different mode than current displaymode */
72 };
73
74 #define COMPSTATEB_HASALPHA     0
75 #define COMPSTATEF_HASALPHA     (1 << COMPSTATEB_HASALPHA)
76
77 #define METHOD(base, id, name) \
78   base ## __ ## id ## __ ## name (OOP_Class *cl, OOP_Object *o, struct p ## id ## _ ## name *msg)
79
80 #define LOCK_COMPOSITOR_READ       { ObtainSemaphoreShared(&compdata->semaphore); }
81 #define LOCK_COMPOSITOR_WRITE      { ObtainSemaphore(&compdata->semaphore); }
82 #define UNLOCK_COMPOSITOR          { ReleaseSemaphore(&compdata->semaphore); }
83
84 extern OOP_AttrBase HiddCompositorAttrBase;
85 extern const struct OOP_InterfaceDescr Compositor_ifdescr[];
86
87 #endif /* _COMPOSITOR_INTERN_H */