2 Copyright © 1995-2007, The AROS Development Team. All rights reserved.
3 Copyright © 2001-2003, The MorphOS Development Team. All Rights Reserved.
7 #include <proto/layers.h>
8 #include <proto/graphics.h>
9 #include "intuition_intern.h"
10 #include "inputhandler_actions.h"
11 #include "inputhandler_support.h"
14 # include "renderwindowframe.h"
17 /*****************************************************************************
20 #include <proto/intuition.h>
22 AROS_LH1(void, BeginRefresh
,
25 AROS_LHA(struct Window
*, window
, A0
),
28 struct IntuitionBase
*, IntuitionBase
, 59, Intuition
)
31 Initializes optimized refreshing. It restricts redrawing to areas which
32 need refreshing after a window has been moved or has changed size.
35 window - window which needs refreshing
40 Only simple graphics.library functions are allowed between
41 BeginRefresh() and EndRefresh().
43 BeginRefresh()/EndRefresh() should always be called when an
44 IDCMP_REFRESHWINDWOW message happens.
47 somewhere in your window's event handling loop:
49 case IDCMP_REFRESHWINDWOW:
50 BeginRefresh(mywindow);
51 EndRefresh(mywindow, TRUE);
61 *****************************************************************************/
65 ULONG mode
= NO_DOUBLEBUFFER
;
67 #ifdef BEGINUPDATEGADGETREFRESH
68 BOOL gadgetrefresh
= FALSE
;
71 DEBUG_REFRESH(dprintf("BeginRefresh: Window 0x%lx\n", window
));
75 //jDc: makes sure we've got 1 refresing window at a time
76 LockLayerInfo(&window
->WScreen
->LayerInfo
);
78 /* Find out whether it's a GimmeZeroZero window with an extra layer to lock */
80 LockLayer(0, BLAYER(window
));
82 /* jDc: in actual implementation border layer is created as the 1st one. this means it's added to
83 ** screens layer semaphore list at the end (layers use AddTail), so here we also need to lock it
84 ** as 1st one, otherwise we run into a deadlock with LockLayers() !!!
87 LockLayer(0, WLAYER(window
));
89 /* jDc: in current opaque implementation the damaged regions are added to
90 ** window's internal damage list and matched against actual damage here
93 if (IW(window
)->specialflags
& SPFLAG_WANTBUFFER
) mode
= DOUBLEBUFFER
;
95 /* I don't think I ever have to update the BorderRPort's layer */
96 if (!BeginUpdate(WLAYER(window
)))
98 EndUpdate(WLAYER(window
), FALSE
);
100 //dprintf("%s :BeginUpdate returned FALSE!->Aborting BeginUpdate()\n",__FUNCTION__);
104 /* jDc: because with opaque move window borders/gadgets are not refreshed to
105 ** speed things up we do this here - this reduces cpu time spent in inputhandler
108 /* let the user know that we're currently doing a refresh */
109 AROS_ATOMIC_OR(window
->Flags
, WFLG_WINDOWREFRESH
);