1 #ifndef INTUITION_INTERN_H
2 #define INTUITION_INTERN_H
5 Copyright © 1995-2015, The AROS Development Team. All rights reserved.
6 Copyright © 2001-2013, The MorphOS Development Team. All Rights Reserved.
10 #ifndef AROS_LIBCALL_H
11 # include <aros/libcall.h>
14 # include <aros/atomic.h>
16 #ifndef EXEC_EXECBASE_H
17 # include <exec/execbase.h>
19 #ifndef EXEC_SEMAPHORES_H
20 # include <exec/semaphores.h>
23 # include <exec/tasks.h>
26 # include <exec/ports.h>
28 #ifndef EXEC_INTERRUPTS_H
29 # include <exec/interrupts.h>
35 # include <exec/types.h>
38 # include <exec/lists.h>
40 #ifndef GRAPHICS_GFXBASE_H
41 # include <graphics/gfxbase.h>
43 #ifndef GRAPHICS_RASTPORT_H
44 # include <graphics/rastport.h>
46 #ifndef GRAPHICS_REGIONS_H
47 # include <graphics/regions.h>
49 #ifndef GRAPHICS_CLIP_H
50 # include <graphics/clip.h>
52 #ifndef GRAPHICS_TEXT_H
53 # include <graphics/text.h>
55 #ifndef INTUITION_INTUITION_H
56 # include <intuition/intuition.h>
58 #ifndef INTUITION_INTUITIONBASE_H
59 # include <intuition/intuitionbase.h>
61 #ifndef INTUITION_CLASSES_H
62 # include <intuition/classes.h>
64 #ifndef INTUITION_CGHOOKS_H
65 # include <intuition/cghooks.h>
67 #ifndef INTUITION_SGHOOKS_H
68 # include <intuition/sghooks.h>
70 #ifndef INTUITION_SCREENS_H
71 # include <intuition/screens.h>
73 #ifndef PREFS_ICONTROL_H
74 # include <prefs/icontrol.h>
77 #include <prefs/input.h>
79 #ifndef CLIB_ALIB_PROTOS_H
80 # include <clib/alib_protos.h>
82 #ifdef INTUITION_NOTIFY_SUPPORT
83 # include <libraries/screennotify.h>
84 # include <libraries/notifyintuition.h>
89 #include "intuition_debug.h"
90 #include "inputhandler_actions.h"
93 #include "intuition_customize.h"
94 #include "intuition_internmos.h"
95 #include "intuition_extend.h"
98 #include "requesters.h"
100 /* Needed for aros_print_not_implemented macro */
101 #include <aros/debug.h>
103 #include <aros/asmcall.h>
106 #define ASSERT_VALID_PTR_ROMOK(ptr) \
108 if (TypeOfMem((APTR)ptr)) \
111 struct Task *me = FindTask(NULL); \
113 if (((IPTR)(ptr) >= (IPTR)me->tc_SPLower) && ((IPTR)(ptr) < (IPTR)me->tc_SPUpper)) \
116 bug("[intuition] Invalid pointer value %p at %s, line %u\n", ptr, __FILE__, __LINE__); \
119 #define ASSERT_VALID_PTR_ROMOK(ptr)
122 // FIXME: seems only used for RefreshWindowTitles() ? -> better names
123 // FIXME: what are the correct values?
124 #define NO_DOUBLEBUFFER (0)
125 #define DOUBLEBUFFER (1)
129 # define USE_OPAQUESIZE 1
131 # define USE_OPAQUESIZE 0
134 /* This definition turns on compatibility mode where sprite colors
135 are allocated on hi- and truecolor screens also. This may be needed
136 if some software relies on this allocation. AROS itself currently does
138 #define ALWAYS_ALLOCATE_SPRITE_COLORS */
141 void dprintf(char *, ...) __attribute__ ((format (printf
, 1, 2)));
142 void * memclr(APTR
, ULONG
);
146 void * memclr(APTR
, ULONG
);
147 #define bzero(a,b) memclr(a,b)
148 #else /* __MORPHOS__ */
149 #define memclr(a,b) bzero(a,b)
150 #endif /* __MORPHOS__ */
153 * min()/max() without macro side effects.
156 ({typeof(a) _a = (a); \
157 typeof(b) _b = (b); \
161 ({typeof(a) _a = (a); \
162 typeof(b) _b = (b); \
165 #define EXTENDWORD(x) x = (LONG)((WORD)x);
166 #define EXTENDUWORD(x) x = (ULONG)((UWORD)x);
168 /* SANITY CHECK MACRO */
169 //#define DEBUG_SANITYCHECK
171 #ifdef DEBUG_SANITYCHECK
172 #define SANITY_CHECK(x) if (!((IPTR)x)) {dprintf("Losing sanity in %s line %d\n",__FILE__,__LINE__); return;};
173 #define SANITY_CHECKR(x,v) if (!((IPTR)x)) {dprintf("Losing sanity in %s line %d\n",__FILE__,__LINE__); return v;};
175 #define SANITY_CHECK(x) if (!((IPTR)x)) return;
176 #define SANITY_CHECKR(x,v) if (!((IPTR)x)) return v;
181 #define MENUS_BACKFILL TRUE
183 #define MENUS_AMIGALOOK(base) ((GetPrivIBase(base)->IControlPrefs.ic_Flags & ICF_3DMENUS) == 0)
186 #define MENULOOK_3D 0
187 #define MENULOOK_CLASSIC 1
189 #define MENUS_UNDERMOUSE(base) (GetPrivIBase(base)->IControlPrefs.ic_Flags & ICF_POPUPMENUS)
190 #define MENUS_TITLEPULL(base) ((GetPrivIBase(base)->IControlPrefs.ic_Flags & ICF_PULLDOWNTITLEMENUS) != 0)
192 #define AVOID_WINBORDERERASE(base) \
193 (GetPrivIBase(base)->IControlPrefs.ic_Flags & ICF_AVOIDWINBORDERERASE)
198 #define FRAME_SIZE(base) (GetPrivIBase(base)->FrameSize)
200 #define FRAMESIZE_THIN 0 /* 1:1 thin */
201 #define FRAMESIZE_MEDRES 1 /* 2:1 medres like AmigaOS */
202 #define FRAMESIZE_THICK 2 /* 1:1 thick */
204 #define SQUARE_WIN_GADGETS 1
205 #define WIN_GADGETS_KEEP_ASPECT /* Default non-decorated gadgets keep aspect if scaled */
208 /* FIXME: possibly enable this, once gadtools has been updated */
210 #define GADTOOLSCOMPATIBLE
211 //enables some gadtools-weirdo-code, MUST be set in both gadtools & intui to work!!!
214 #define ILOCKCHECK(a) ((a->task) && (a->task == IBase->IBaseLock->ss_Owner))
217 //#define USEGETIPREFS
220 /* simpleref layers have gadgets redrawn when app calls beginrefresh() */
221 //#define BEGINUPDATEGADGETREFRESH
222 //#define DAMAGECACHE
224 #define USEWINDOWLOCK
226 # ifdef WINDOWLOCKDEBUG
227 # define LOCKWINDOW {ObtainSemaphore(&IBase->WindowLock);dprintf("%s/%ld: obtained windowlock\n",__FILE__,__LINE__);};
228 # define UNLOCKWINDOW {ReleaseSemaphore(&IBase->WindowLock);dprintf("%s/%ld: released windowlock\n",__FILE__,__LINE__);};
229 # define ATTEMPTWINDOWLOCK AttemptSemaphore(&IBase->WindowLock)
231 # define LOCKWINDOW ObtainSemaphore(&IBase->WindowLock);
232 # define UNLOCKWINDOW ReleaseSemaphore(&IBase->WindowLock);
233 # define ATTEMPTWINDOWLOCK AttemptSemaphore(&IBase->WindowLock)
238 #define ATTEMPTWINDOWLOCK
240 /* jDc: do NOT disable this! */
242 #define USEGADGETLOCK
244 #define LOCKGADGET(base) ObtainSemaphore(&GetPrivIBase(base)->GadgetLock);
245 #define UNLOCKGADGET(base) ReleaseSemaphore(&GetPrivIBase(base)->GadgetLock);
246 #define LOCKWINDOWLAYERS(w) ;
247 #define UNLOCKWINDOWLAYERS(w) ;
251 #define LOCKWINDOWLAYERS(w) LockLayerInfo(&w->WScreen->LayerInfo); \
252 if (((struct IntWindow *)(w))->borderlayer) {LockLayer(0,((struct IntWindow *)(w))->borderlayer);}; \
253 if (((struct IntWindow *)(w))->wlayer) {LockLayer(0,((struct IntWindow *)(w))->wlayer);};
254 #define UNLOCKWINDOWLAYERS(w) if (((struct IntWindow *)(w))->wlayer) {UnlockLayer(((struct IntWindow *)(w))->wlayer);}; \
255 if (((struct IntWindow *)(w))->borderlayer) {UnlockLayer(((struct IntWindow *)(w))->borderlayer);} \
256 UnlockLayerInfo(&w->WScreen->LayerInfo);
259 #define WLAYER(w) (((struct IntWindow *)(w))->wlayer)
260 #define BLAYER(w) (((struct IntWindow *)(w))->borderlayer)
262 //#define TIMEVALWINDOWACTIVATION
264 /* If PROP_RENDER_OPTIMIZATION is set to 1, propgadget code tries to optimize rendering
265 during prop gadget knob movement. Only area of the propgadget that is affected by
266 prop gadget knob movement is re-rendered.
268 Unfortunately this can fail with some programs, like DOpus 4.x text viewer */
270 #define PROP_RENDER_OPTIMIZATION 0
272 #define SINGLE_SETPOINTERPOS_PER_EVENTLOOP 1
274 #ifndef LIFLG_SUPPORTS_OFFSCREEN_LAYERS
275 /* Defined in <graphics/layers.h>, but apparently not on MorphOS. */
276 # define LIFLG_SUPPORTS_OFFSCREEN_LAYERS 2
279 #define INTUITIONNAME "intuition.library"
280 #define MENUBARLABELCLASS "menubarlabelclass"
282 #define DEFPUBSCREEN TRUE
284 #define USE_NEWDISPLAYBEEP 1
286 #define TITLEBUFFERLEN 255
288 #define USE_IDCMPUPDATE_MESSAGECACHE 0
291 #if INCLUDE_VERSION < 50
293 /********************************************************************************/
294 /* imageclass.h AROS extensions */
296 #define SYSIA_WithBorder IA_FGPen /* default: TRUE */
297 #define SYSIA_Style IA_BGPen /* default: SYSISTYLE_NORMAL */
299 #define SYSISTYLE_NORMAL 0
300 #define SYSISTYLE_GADTOOLS 1 /* to get arrow images in gadtools look */
302 /********************************************************************************/
303 /* gadgetclass.h AROS extenstions */
305 /* This method is invoked to learn about the sizing requirements of your class,
306 before an object is created. This is AROS specific. */
310 STACKED ULONG MethodID
; /* GM_DOMAIN */
311 STACKED
struct GadgetInfo
*gpd_GInfo
; /* see <intuition/cghooks.h> */
312 STACKED
struct RastPort
*gpd_RPort
; /* RastPort to calculate dimensions for. */
313 STACKED LONG gpd_Which
; /* see below */
314 STACKED
struct IBox gpd_Domain
; /* Resulting domain. */
315 STACKED
struct TagItem
*gpd_Attrs
; /* Additional attributes. None defined,
319 /********************************************************************************/
322 #define GDOMAIN_MINIMUM 0 /* Calculate minimum size. */
323 #define GDOMAIN_NOMINAL 1 /* Calculate nominal size. */
324 #define GDOMAIN_MAXIMUM 2 /* Calculate maximum size. */
326 #endif /* INCLUDE_VERSION < 50 */
327 #endif /* ifdef __MORPHOS__ */
329 /********************************************************************************/
330 #define GM_MOVETEST 8
331 /* this method is used by our draggad to tell if it's OK to move the mouse when window
332 is near screen boundaries and offscreen is disabled. msg = gpInput*/
334 #define MOVETEST_MOVE 0
335 #define MOVETEST_ADJUSTPOS 1
337 /* ObtainGIRPort must install a 0 clipregion and
338 set scrollx/scrolly of layer to 0. Since this
339 will be restored only when ReleaseGIRPort is
340 called, we must backup the orig values somewhere */
344 struct Region
*clipregion
;
354 #define IP_OLDOVERSCAN 3
355 #define IP_OLDICONTROL 4
356 #define IP_OLDPOINTER 7
357 #define IP_OLDPALETTE 8
360 #define IP_SCREENMODE 1
361 #define IP_FONT 101//2
362 #define IP_ICONTROL 102//4
363 #define IP_POINTER 103//7
364 #define IP_PTRCOLOR 104//8
365 #define IP_PALETTE 105
366 #define IP_IACTIONS 20
367 #define IP_IEXTENSIONS 21
368 #define IP_INPUTEXT 22
372 struct IScreenModePrefs
381 struct IIControlPrefs
387 UBYTE ic_FrontToBack
;
394 #include <intuition/iprefs.h>
405 #define COLORTABLEENTRIES 11
410 #define RESOURCELIST_HASHSIZE 32 /* Smaller hash for memory limited m68k */
412 #define RESOURCELIST_HASHSIZE 256
415 #define RESOURCE_WINDOW 1
416 #define RESOURCE_SCREEN 2
425 /* Internal Screen Notification Data */
426 struct IntScreenNotify
429 struct MsgPort
*port
;
430 struct Task
*sigtask
;
439 struct IntIntuitionBase
441 struct IntuitionBase Base
;
443 WORD _MinXMouse
,_MaxXMouse
; /* Old 1.3 Base entries*/
444 WORD _MinYMouse
,_MaxYMouse
; /* Old 1.3 Base entries*/
445 ULONG _StartSecs
,_StartMicros
; /* Old 1.3 Base entries*/
446 char *SystemRequestTitle
; /* written by locale as it seems..what a crappy interface*/
447 char *WorkbenchTitle
; /* written by locale as it seems..what a crappy interface*/
450 * safety pad for intuitionbase accesses
451 * probably needs to be smarter
456 /* Put local shit here, invisible for the user */
458 struct Library
*MUIMasterBase
;
461 struct DosLibrary
*DOSBase
;
462 struct LayersBase
*LayersBase
;
463 struct Library
*UtilityBase
;
464 struct GfxBase
*GfxBase
;
465 struct Library
*OOPBase
;
466 struct Library
*KeymapBase
;
468 struct Library
*InputBase
;
469 struct Library
*TimerBase
;
470 struct MsgPort
*TimerMP
;
471 struct timerequest
*TimerIO
;
473 struct MsgPort
*WorkBenchMP
;
474 struct Screen
*WorkBench
;
475 struct SignalSemaphore
*IBaseLock
;
476 struct SignalSemaphore ViewLordLock
;
478 /* Intuition input handlers replyport. This one is set
479 int rom/inputhandler.c/InitIIH()
481 struct MsgPort
*IntuiReplyPort
;
482 struct MinList
*IntuiActionQueue
;
483 struct IOStdReq
*InputIO
;
484 struct MsgPort
*InputMP
;
486 /* Intuition Screennotify Replyport if SNOTIFY_WAIT_REPLY is specified */
488 struct MsgPort
*ScreenNotifyReplyPort
;
490 BOOL InputDeviceOpen
;
491 struct Interrupt
*InputHandler
;
493 struct Hook
*GlobalEditHook
;
494 /* The default global edit hook */
495 struct Hook DefaultEditHook
;
497 struct Screen
*DefaultPubScreen
;
498 struct SignalSemaphore PubScrListLock
;
499 struct MinList PubScreenList
;
500 UWORD pubScrGlobalMode
;
502 struct SignalSemaphore ScreenNotificationListLock
;
503 struct List ScreenNotificationList
;
505 struct SignalSemaphore GadgetLock
;
506 struct SignalSemaphore MenuLock
;
507 struct SignalSemaphore WindowLock
;
508 struct SignalSemaphore IntuiActionLock
;
509 struct SignalSemaphore InputHandlerLock
;
510 struct LayerContext BackupLayerContext
;
512 struct IClass
*dragbarclass
;
513 struct IClass
*sizebuttonclass
;
514 struct IClass
*windowsysiclass
;
515 struct IClass
*screenclass
;
519 struct Preferences DefaultPreferences
;
520 struct Preferences ActivePreferences
;
522 struct MsgPort
*MenuHandlerPort
;
525 struct TextFont
*ScreenFont
;
526 struct TextFont
*TopazFont
;
528 /* Dos function DisplayError() before intuition.library patched it */
529 APTR OldDisplayErrorFunc
;
531 struct SignalSemaphore ClassListLock
;
532 struct MinList ClassList
;
533 struct IClass RootClass
;
536 struct ViewExtra
*ViewLordExtra
;
543 ULONG
*SmallMenuPool
;
547 struct IScreenModePrefs
*ScreenModePrefs
;
548 struct IIControlPrefs IControlPrefs
;
550 struct IAction
*IControlActions
;
551 struct IControlExtensions IControlExtensions
;
552 ULONG NumIControlActions
;
553 struct InputPrefsExt InputPrefsExt
;
555 struct IClass
*pointerclass
;
556 Object
*DefaultPointer
;
558 UWORD DriPens2
[NUMDRIPENS
];
559 UWORD DriPens4
[NUMDRIPENS
];
560 UWORD DriPens8
[NUMDRIPENS
];
561 struct Color32 Colors
[COLORTABLEENTRIES
];
565 struct IntScreen
*MenuVerifyScreen
;
569 struct SignalSemaphore DataTypesSem
;
570 struct Library
*DataTypesBase
; /* should be opened ONLY by int_InitCustomChanges!*/
574 ULONG LastClickMicro
; /* for doubleclick to front */
575 ULONG LastMenuDownSecs
;
576 ULONG LastMenuDownMicro
; /* for auto sticky/non-sticky menus */
577 ULONG DoubleClickCounter
;
578 ULONG DoubleClickButton
;
581 struct Hook transphook
; /* hook for windows with intui transp */
582 struct Hook notransphook
; /* hook for windows with no additional transp (borderless,etc) */
584 #ifdef INTUITION_NOTIFY_SUPPORT
585 struct Library
*ScreenNotifyBase
;
586 struct Library
*NotifyIntuitionBase
;
589 struct RastPort DoGadgetMethodRP
;
590 struct GadgetInfo DoGadgetMethodGI
;
592 struct SignalSemaphore ScrDecorSem
;
593 struct IClass
*ScrDecorClass
;
594 struct TagItem
*ScrDecorTags
;
595 struct SignalSemaphore MenuDecorSem
;
596 struct IClass
*MenuDecorClass
;
597 struct TagItem
*MenuDecorTags
;
598 struct SignalSemaphore WinDecorSem
;
599 struct IClass
*WinDecorClass
;
600 struct TagItem
*WinDecorTags
;
602 struct List Decorations
;
603 struct NewDecorator
*Decorator
;
609 #if USE_NEWDISPLAYBEEP
613 WORD prop_clickoffset_x
, prop_clickoffset_y
;
615 struct MinList ResourceList
[RESOURCELIST_HASHSIZE
];
617 /* Menu Look Settings */
620 Object
*ActiveMonitor
;
623 OOP_AttrBase HiddAttrBase
;
624 OOP_AttrBase HiddGfxAttrBase
;
625 OOP_AttrBase HiddBitMapAttrBase
;
626 OOP_AttrBase HiddPixFmtAttrBase
;
627 OOP_AttrBase HiddSyncAttrBase
;
629 OOP_MethodID ib_HiddGfxBase
;
630 OOP_MethodID ib_HiddBitMapBase
;
632 struct IClass
*monitorclass
;
633 struct MinList MonitorList
;
634 struct SignalSemaphore MonitorListSem
;
636 struct Interrupt ShutdownHandler
;
641 struct ExtSprite
*sprite
;
642 WORD xoffset
, yoffset
;
646 struct SharedPointer
*CreateSharedPointer(struct ExtSprite
*, int, int, struct IntuitionBase
*);
647 void ObtainSharedPointer(struct SharedPointer
*, struct IntuitionBase
*);
648 void ReleaseSharedPointer(struct SharedPointer
*, struct IntuitionBase
*);
650 #ifdef INTUITION_NOTIFY_SUPPORT
651 void sn_DoNotify(ULONG type
, APTR value
, struct Library
*_ScreenNotifyBase
);
655 * Private version of DrawInfo.
656 * We keep compatibility with original structure plus use some
657 * private extensions.
658 * The whole structure is rewritten in order to simplify MorphOS code merging.
660 struct IntuitionCustomize
;
667 struct TextFont
*dri_Font
;
675 struct Image
*dri_CheckMark
;
676 struct Image
*dri_AmigaKey
;
677 /* The following two fields are compatible with AmigaOS v4 */
678 struct Screen
*dri_Screen
;
679 struct IntuitionCustomize
*dri_Customize
;
680 /* Private extensions begin */
681 ULONG
*dri_Colors
; /* MorphOS-compatible, unused (yet) */
682 IPTR dri_Reserved
[2]; /* Remaining reserved fields */
685 /* Private dri_Flags */
686 #define DRIF_DIRECTCOLOR (1L << 16)
688 #define LOCK_WINDECOR(IntuitionBase) ObtainSemaphore(&((struct IntIntuitionBase *)(IntuitionBase))->WinDecorSem);
689 #define LOCKSHARED_WINDECOR(IntuitionBase) ObtainSemaphoreShared(&((struct IntIntuitionBase *)(IntuitionBase))->WinDecorSem);
690 #define UNLOCK_WINDECOR(IntuitionBase) ReleaseSemaphore(&((struct IntIntuitionBase *)(IntuitionBase))->WinDecorSem);
692 #define LOCK_SCRDECOR(IntuitionBase) ObtainSemaphore(&((struct IntIntuitionBase *)(IntuitionBase))->ScrDecorSem);
693 #define LOCKSHARED_SCRDECOR(IntuitionBase) ObtainSemaphoreShared(&((struct IntIntuitionBase *)(IntuitionBase))->ScrDecorSem);
694 #define UNLOCK_SCRDECOR(IntuitionBase) ReleaseSemaphore(&((struct IntIntuitionBase *)(IntuitionBase))->ScrDecorSem);
696 #define LOCK_MENUDECOR(IntuitionBase) ObtainSemaphore(&((struct IntIntuitionBase *)(IntuitionBase))->MenuDecorSem);
697 #define LOCKSHARED_MENUDECOR(IntuitionBase) ObtainSemaphoreShared(&((struct IntIntuitionBase *)(IntuitionBase))->MenuDecorSem);
698 #define UNLOCK_MENUDECOR(IntuitionBase) ReleaseSemaphore(&((struct IntIntuitionBase *)(IntuitionBase))->MenuDecorSem);
702 BOOL UseGammaControl
;
711 struct Screen Screen
;
714 struct HashNode hashnode
;
715 struct IntDrawInfo DInfo
;
717 struct TTextAttr textattr
;
718 ULONG textattrtags
[3];
719 UWORD Pens
[NUMDRIPENS
];
720 struct PubScreenNode
*pubScrNode
;
723 struct Layer
*rootLayer
;
724 struct Hook
*preAlphaCompHook
;
725 #if !USE_NEWDISPLAYBEEP
726 ULONG DisplayBeepColor0
[3];
727 struct Window
*DisplayBeepWindow
;
731 struct MonitorSpec
*Monitor
;
733 Object
*IMonitorNode
;
734 struct SharedPointer
*Pointer
;
737 struct Window
*MenuVerifyActiveWindow
;
738 int MenuVerifyTimeOut
;
739 int MenuVerifyMsgCount
;
740 ULONG MenuVerifySeconds
;
741 ULONG MenuVerifyMicros
;
742 ULONG DecorUserBufferSize
;
743 IPTR DecorUserBuffer
;
745 Object
*MenuDecorObj
;
747 struct NewDecorator
*Decorator
;
749 struct BitMap
*AllocatedBitMap
;
750 struct DBufInfo
*RestoreDBufInfo
;
755 struct SkinInfo SkinInfo
;
756 struct RastPort
*TitlebarBufferRP
;
757 struct Window
*TitlebarBufferWin
;
758 ULONG TitlebarWinWidth
;
759 ULONG TitlebarWinActive
;
761 struct GammaControl GammaControl
;
765 #if USE_NEWDISPLAYBEEP
766 UBYTE BeepingCounter
;
770 void UpdateScreenBitMap(struct Screen
*s
, struct IntuitionBase
*IntuitionBase
);
772 #define GetPrivScreen(s) ((struct IntScreen *)s)
773 #define IS(x) ((struct IntScreen *)x)
776 #define SF_IsParent (0x0001)
777 #define SF_IsChild (0x0002)
778 #define SF_InvisibleBar (0x0004)
779 #define SF_AppearingBar (0x0008)
780 #define SF_Draggable (0x0020) /* Screen can be dragged */
781 #define SF_ComposeAbove (0x0100) /* Composition capabilities */
782 #define SF_ComposeBelow (0x0200)
783 #define SF_ComposeLeft (0x0400)
784 #define SF_ComposeRight (0x0800)
786 #define SF_VertCompose (SF_ComposeAbove|SF_ComposeBelow)
787 #define SF_HorCompose (SF_ComposeLeft |SF_ComposeRight)
788 #define SF_Compose (SF_ComposeAbove|SF_ComposeBelow|SF_ComposeLeft|SF_ComposeRight)
790 struct IntIntuiMessage
792 struct ExtIntuiMessage eimsg
;
795 ** The following field is needed, because in case of IDCMP_RAWKEY
796 ** IntuiMessage->IAddress is a pointer to this data, not the data
797 ** itself (which is the case for IDCMP_VANILLAKEY)
803 #define INT_INTUIMESSAGE(x) ((struct IntIntuiMessage *)(x))
807 /*extern struct IntuitionBase * IntuitionBase;*/
809 #define IW(window) ((struct IntWindow *) (window))
811 #define GetPubIBase(ib) ((struct IntuitionBase *)(ib))
812 #define GetPrivIBase(ib) ((struct IntIntuitionBase *)(ib))
813 #define IBase GetPrivIBase(IntuitionBase)
815 /* FIXME: Remove these #define xxxBase hacks
816 Do not use this in new code !
821 #define MUIMasterBase (GetPrivIBase(IntuitionBase)->MUIMasterBase)
825 /* struct Utilitybase is used in the following file so include it
826 before defining Utilitybase
828 #include <proto/utility.h>
830 /* stegerg: one can have sysgadgets outside of window border! All sysgadgets in window
831 border must have set GACT_???BORDER and, if they are in a gzz window, also
834 #define IS_GZZ_GADGET(gad) (((gad)->GadgetType) & GTYP_GZZGADGET)
836 #define IS_BORDER_GADGET(gad) (IS_GZZ_GADGET(gad) || \
837 ((gad)->Activation & (GACT_RIGHTBORDER|GACT_LEFTBORDER|GACT_TOPBORDER|GACT_BOTTOMBORDER)))
839 #define IS_SYS_GADGET(gad) (((gad)->GadgetType) & GTYP_SYSTYPEMASK)
841 #define IS_BOOPSI_GADGET(gad) (((gad)->GadgetType & GTYP_GTYPEMASK) == GTYP_CUSTOMGADGET)
843 /*#define IS_BORDER_GADGET(gad) \
844 (((gad->GadgetType) & GTYP_SYSGADGET) \
845 || ((gad)->Activation & (GACT_RIGHTBORDER|GACT_LEFTBORDER|GACT_TOPBORDER|GACT_BOTTOMBORDER))) */
847 #define IS_REQ_GADGET(gad) ((gad)->GadgetType & GTYP_REQGADGET)
849 #define IS_SCREEN_GADGET(gad) ((gad)->GadgetType & GTYP_SCRGADGET)
851 #define SET_GI_RPORT(gi, w, req, gad) \
852 (gi)->gi_RastPort = (IS_SCREEN_GADGET(gad) ? \
853 ((gi)->gi_Screen->BarLayer ? (gi)->gi_Screen->BarLayer->rp : NULL) : \
854 (IS_BORDER_GADGET(gad) ? (w)->BorderRPort : \
855 ((req) ? ((req)->ReqLayer->rp) : (w)->RPort)) \
859 #define REFRESHGAD_BOOPSI 1 /* boopsi gadgets */
860 #define REFRESHGAD_BORDER 2 /* gadgets in window border */
861 #define REFRESHGAD_REL 4 /* gadgets with GFLG_RELRIGHT, GFLG_RELBOTTOM,GFLG_RELWIDTH, GFLG_RELHEIGHT */
862 #define REFRESHGAD_RELS 8 /* GFLG_RELSPECIAL gadgets */
863 #define REFRESHGAD_TOPBORDER 16 /* used by setwindowtitle */
864 #define REFRESHGAD_NOGADTOOLS 32 /* used in some cases for _mustbe_ */
866 #define SYSGADGET_ACTIVE (iihdata->ActiveSysGadget != NULL)
868 VOID
int_refreshglist(struct Gadget
*gadgets
, struct Window
*window
,
869 struct Requester
*requester
, LONG numGad
, LONG mustbe
, LONG mustnotbe
,
870 struct IntuitionBase
*IntuitionBase
);
872 VOID
int_RefreshWindowFrame(struct Window
*window
, LONG mustbe
, LONG mustnotbe
,
874 struct IntuitionBase
*IntuitionBase
);
876 #define int_refreshwindowframe(a,b,c,d) int_RefreshWindowFrame(a,b,c,0,d);
878 struct RethinkDisplayActionMsg
880 struct IntuiActionMsg msg
;
885 void int_RethinkDisplay(struct RethinkDisplayActionMsg
*msg
,struct IntuitionBase
*IntuitionBase
);
887 /* Keep the system gadgets in the same order than the original intuition,
888 * some programs make bad asumptions about that...
906 #define SYSGAD(w, idx) (((struct IntWindow *)(w))->sysgads[idx])
910 struct Window window
;
912 Object
*sysgads
[NUM_SYSGADS
];
913 struct Image
*AmigaKey
;
914 struct Image
*Checkmark
;
915 struct Image
*SubMenuImage
;
916 struct Window
*menulendwindow
;
918 struct HashNode hashnode
;
920 /* When the Zoom gadget is pressed the window will have the
921 dimensions stored here. The old dimensions are backed up here
928 /* max. number of mousemove events to send to this window */
931 /* act. number of mousemove events sent to this window */
932 WORD num_mouseevents
;
934 /* max. number of repeated IDCMP_RAWKEY, IDCMP_VANILLAKEY and IDCMP_IDCMPUPDATE
935 messages to send to this window */
938 /* act. number of repeated IDCMP_RAWKEY, IDCMP_VANILLAKEY and IDCMP_IDCMPUPDATE
939 messages sent to this window */
940 WORD num_repeatevents
;
942 #if USE_IDCMPUPDATE_MESSAGECACHE
943 /* number of unreplied IDCMP_IDCMPUPDATE messages sent to window
944 used in few hacks :) */
945 WORD num_idcmpupdate
;
948 WORD sizeimage_width
;
949 WORD sizeimage_height
;
959 ULONG extrabuttonsid
; /* replaces ETI_Dummy if apps wishes it */
961 ULONG titlepos
; /* used by titlebar pattern fill stuff */
968 struct Region
*transpregion
;
969 struct Hook
*usertransphook
;
970 struct Region
*usertranspregion
;
974 struct Region
*trashregion
;
976 char titlebuffer
[TITLEBUFFERLEN
+1];
978 #if USE_IDCMPUPDATE_MESSAGECACHE
979 struct IntuiMessage
*messagecache
; //for idcmpupdate cache
982 struct Layer
*wlayer
;
983 struct Layer
*borderlayer
;
985 struct timeval lastmsgsent
;
986 struct timeval lastmsgreplied
;
988 #ifdef TIMEVALWINDOWACTIVATION
989 struct timeval activationtime
;
993 struct Hook custombackfill
;
996 struct Hook DefaultWindowShapeHook
;
998 struct Region
*OutlineShape
;
999 ULONG DecorUserBufferSize
;
1000 IPTR DecorUserBuffer
;
1003 #define SPFLAG_ICONIFIED 1
1004 #define SPFLAG_NOICONIFY 2
1005 #define SPFLAG_SKININFO 4
1006 #define SPFLAG_LAYERREFRESH 8
1007 #define SPFLAG_TRANSPHOOK 16
1008 #define SPFLAG_LAYERRESIZED 32
1009 #define SPFLAG_USERPORT 64
1010 #define SPFLAG_IAMDEAD 128
1011 #define SPFLAG_CLOSING 256 //used with iamdead
1012 #define SPFLAG_WANTBUFFER 512
1014 #define HELPF_ISHELPGROUP 1
1015 #define HELPF_GADGETHELP 2
1017 #define IS_NOCAREREFRESH(win) (((win)->Flags & WFLG_NOCAREREFRESH) ? TRUE : FALSE)
1018 #define IS_DOCAREREFRESH(win) (((win)->Flags & WFLG_NOCAREREFRESH) ? FALSE : TRUE )
1019 #define IS_SIMPLEREFRESH(win) (((win)->Flags & WFLG_SIMPLE_REFRESH) ? TRUE : FALSE)
1020 #define IS_GZZWINDOW(win) (((win)->Flags & WFLG_GIMMEZEROZERO) ? TRUE : FALSE)
1023 /* Flag definitions for MoreFlags */
1025 #define WMFLG_NOTIFYDEPTH (1 << 0) /* Window wants notification when
1026 it's depth arranged */
1028 #define WMFLG_DO_UNLOCKPUBSCREEN (1 << 1)
1029 #define WMFLG_MENUHELP (1 << 2)
1030 #define WMFLG_POINTERDELAY (1 << 3)
1031 #define WMFLG_TABLETMESSAGES (1 << 4)
1033 // FIXME: ehm... this one should die a horrible death!
1034 #define WMFLG_IAMMUI (1 << 5)
1036 struct IntScreenBuffer
1038 struct ScreenBuffer sb
;
1043 /* Driver prototypes */
1045 extern int intui_init (struct IntuitionBase
*);
1046 extern int intui_open (struct IntuitionBase
*);
1047 extern void intui_close (struct IntuitionBase
*);
1048 extern void intui_expunge (struct IntuitionBase
*);
1049 extern int intui_GetWindowSize (void);
1050 extern void intui_WindowLimits (struct Window
* window
, WORD MinWidth
, WORD MinHeight
, UWORD MaxWidth
, UWORD MaxHeight
);
1051 extern void intui_ActivateWindow (struct Window
*);
1052 extern BOOL
intui_ChangeWindowBox (struct Window
* window
, WORD x
, WORD y
,
1053 WORD width
, WORD height
);
1054 extern void intui_CloseWindow (struct Window
*, struct IntuitionBase
*);
1055 extern void intui_MoveWindow (struct Window
* window
, WORD dx
, WORD dy
);
1056 extern int intui_OpenWindow (struct Window
*, struct IntuitionBase
*,
1057 struct BitMap
* SuperBitMap
, struct Hook
*backfillhook
,
1058 struct Region
* shape
, struct Hook
* shapehook
,
1059 struct Layer
* parent
, ULONG visible
);
1060 extern void intui_SetWindowTitles (struct Window
*, CONST_STRPTR
, CONST_STRPTR
);
1061 extern void intui_RefreshWindowFrame(struct Window
*win
);
1062 extern struct Window
*intui_FindActiveWindow(struct InputEvent
*ie
, struct IntuitionBase
*IntuitionBase
);
1063 extern void intui_ScrollWindowRaster(struct Window
* win
, WORD dx
, WORD dy
, WORD xmin
,
1064 WORD ymin
, WORD xmax
, WORD ymax
,
1065 struct IntuitionBase
* IntuitionBase
);
1067 /* wbtasktalk protos */
1069 ULONG
TellWBTaskToCloseWindows(struct IntuitionBase
*IntuitionBase
);
1070 ULONG
TellWBTaskToOpenWindows(struct IntuitionBase
*IntuitionBase
);
1072 /* intuition_misc protos */
1073 extern void SetDisplayDefaults(struct IntuitionBase
* IntuitionBase
);
1074 extern void LoadDefaultPreferences(struct IntuitionBase
* IntuitionBase
);
1075 Object
* CreateStdSysImage(WORD which
, WORD preferred_height
, struct Screen
*scr
,
1076 struct DrawInfo
*dri
, struct IntuitionBase
*IntuitionBase
);
1077 extern void CheckRectFill(struct RastPort
*rp
, WORD x1
, WORD y1
, WORD x2
, WORD y2
, struct IntuitionBase
* IntuitionBase
);
1078 extern BOOL
CreateWinSysGadgets(struct Window
*w
, struct IntuitionBase
*IntuitionBase
);
1079 extern VOID
KillWinSysGadgets(struct Window
*w
, struct IntuitionBase
*IntuitionBase
);
1080 extern void CreateScreenBar(struct Screen
*scr
, struct IntuitionBase
*IntuitionBase
);
1081 extern void KillScreenBar(struct Screen
*scr
, struct IntuitionBase
*IntuitionBase
);
1082 extern void RenderScreenBar(struct Screen
*scr
, BOOL refresh
, struct IntuitionBase
*IntuitionBase
);
1083 extern void UpdateMouseCoords(struct Window
*win
);
1084 extern WORD
SubtractRectFromRect(struct Rectangle
*a
, struct Rectangle
*b
, struct Rectangle
*destrectarray
);
1086 AROS_UFP3(BOOL
, DefaultWindowShapeFunc
,
1087 AROS_UFPA(struct Hook
*, hook
, A0
),
1088 AROS_UFPA(struct Layer
*, lay
, A2
),
1089 AROS_UFPA(struct ShapeHookMsg
*, msg
, A1
));
1091 extern LONG
CalcResourceHash(APTR resource
);
1092 extern void AddResourceToList(APTR resource
, UWORD resourcetype
, struct IntuitionBase
*IntuitionBase
);
1093 extern void RemoveResourceFromList(APTR resource
, UWORD resourcetype
, struct IntuitionBase
*IntuitionBase
);
1094 extern BOOL
ResourceExisting(APTR resource
, UWORD resourcetype
, struct IntuitionBase
*IntuitionBase
);
1095 void FireScreenNotifyMessage(IPTR data
, ULONG flag
, struct IntuitionBase
*IntuitionBase
);
1096 void FireScreenNotifyMessageCode(IPTR data
, ULONG flag
, ULONG code
, struct IntuitionBase
*IntuitionBase
);
1099 extern void MySetPointerPos(struct IntuitionBase
*IntuitionBase
);
1100 extern BOOL
ResetPointer(struct IntuitionBase
*IntuitionBase
);
1101 extern void ActivateMonitor(Object
*newmonitor
, WORD x
, WORD y
, struct IntuitionBase
*IntuitionBase
);
1102 extern struct Screen
*FindFirstScreen(Object
*monitor
, struct IntuitionBase
*IntuitionBase
);
1103 extern struct RastPort
*MyCreateRastPort(struct IntuitionBase
*IntuitionBase
);
1104 extern struct RastPort
*MyCloneRastPort(struct IntuitionBase
*IntuitionBase
, struct RastPort
*rp
);
1105 extern void MyFreeRastPort(struct IntuitionBase
*IntuitionBase
, struct RastPort
*rp
);
1106 struct TextFont
*SafeReopenFont(struct IntuitionBase
*, struct TextFont
**);
1107 extern Object
*MakePointerFromPrefs(struct IntuitionBase
*, struct Preferences
*);
1108 extern Object
*MakePointerFromData(struct IntuitionBase
*, const UWORD
*, int, int, int, int);
1109 void InstallPointer(struct IntuitionBase
*, UWORD
, Object
**, Object
*);
1110 void SetPointerColors(struct IntuitionBase
*IntuitionBase
);
1111 struct IClass
*InitITextIClass (struct IntuitionBase
* IntuitionBase
);
1112 struct Gadget
*DoActivateGadget(struct Window
*win
, struct Requester
*req
, struct Gadget
*gad
,
1113 struct IntuitionBase
*IntuitionBase
);
1114 VOID
DoGMLayout(struct Gadget
*glist
, struct Window
*win
, struct Requester
*req
,
1115 UWORD numgad
, BOOL initial
, struct IntuitionBase
*IntuitionBase
);
1116 BOOL
ih_fire_intuimessage(struct Window
* w
, ULONG Class
, UWORD Code
, APTR IAddress
,
1117 struct IntuitionBase
*IntuitionBase
);
1118 void NotifyDepthArrangement(struct Window
*w
, struct IntuitionBase
*IntuitionBase
);
1122 void int_PrintIText(struct RastPort
* rp
, struct IntuiText
* iText
,
1123 LONG leftOffset
, LONG topOffset
, BOOL ignore_attributes
,
1124 struct IntuitionBase
*IntuitionBase
);
1126 /* Private extra functions */
1127 void *FindMonitorNode(ULONG modeid
, struct IntuitionBase
*IntuitionBase
);
1128 void *FindBestMonitorNode(void *family
, const char *name
, ULONG modeid
, struct IntuitionBase
*IntuitionBase
);
1129 void *FindBest3dMonitor(void *family
, struct IntuitionBase
*IntuitionBase
);
1130 ULONG
FindBestModeID(const char *name
, ULONG depth
, ULONG width
, ULONG height
, struct IntuitionBase
*IntuitionBase
);
1132 AROS_INTP(ShutdownScreenHandler
);
1135 BOOL
IsLayerHiddenBySibling(struct Layer
*layer
, BOOL xx
);
1136 LONG
IsLayerVisible(struct Layer
*layer
);
1139 void SetupGInfo(struct GadgetInfo
*gi
, struct Window
*win
, struct Requester
*req
,
1140 struct Gadget
*gad
, struct IntuitionBase
*IntuitionBase
);
1142 IPTR
Custom_DoMethodA(struct IntuitionBase
*, struct Gadget
*, Msg
);
1148 #define DoMethodA(x, ...) (REG_A6=(LONG)IntuitionBase, DoMethodA(x, __VA_ARGS__))
1151 #define HAS_CHILDREN(w) (NULL != w->firstchild)
1154 #define DeinitRastPort(rp) ((void)0)
1156 #define CreateRastPort() MyCreateRastPort(IntuitionBase)
1157 #define CloneRastPort(rp) MyCloneRastPort(IntuitionBase, rp)
1158 #define FreeRastPort(rp) MyFreeRastPort(IntuitionBase, rp)
1160 /* Replacement for dos.library/DisplayError() */
1161 AROS_UFP3(LONG
, Intuition_DisplayError
,
1162 AROS_UFPA(STRPTR
, formatStr
, A0
),
1163 AROS_UFPA(ULONG
, IDCMPFlags
, D0
),
1164 AROS_UFPA(APTR
, args
, A1
));
1166 #define POINTERA_SharedPointer 0x80039010
1169 #define dprintf kprintf
1172 #define DEBUG_ACTIVATEGADGET(x) ;
1173 #define DEBUG_ACTIVATEWINDOW(x) ;
1174 #define DEBUG_ADDCLASS(x) ;
1175 #define DEBUG_ADDGADGET(x) ;
1176 #define DEBUG_ADDGLIST(x) ;
1177 #define DEBUG_ALLOCINTUIMESSAGE(x) ;
1178 #define DEBUG_ALLOCSCREENBUFFER(x) ;
1179 #define DEBUG_ALOHAWORKBENCH(x) ;
1180 #define DEBUG_CHANGEWINDOWBOX(x) ;
1181 #define DEBUG_CLOSESCREEN(x) ;
1182 #define DEBUG_CLOSEWINDOW(x) ;
1183 #define DEBUG_CLOSEWORKBENCH(x) ;
1184 #define DEBUG_DISPOSEOBJECT(x) ;
1185 #define DEBUG_DOGADGETMETHOD(x) ;
1186 #define DEBUG_DRAWBORDER(x) ;
1187 #define DEBUG_FINDCLASS(x) ;
1188 #define DEBUG_FREEICDATA(x) ;
1189 #define DEBUG_FREEINTUIMESSAGE(x) ;
1190 #define DEBUG_FREESCREENBUFFER(x) ;
1191 #define DEBUG_FREESCREENDRAWINFO(x) ;
1192 #define DEBUG_GADGETMOUSE(x) ;
1193 #define DEBUG_GETATTR(x) ;
1194 #define DEBUG_GETDEFAULTPUBSCREEN(x) ;
1195 #define DEBUG_GETDEFPREFS(x) ;
1196 #define DEBUG_GETGADGETIBOX(x) ;
1197 #define DEBUG_GETPREFS(x) ;
1198 #define DEBUG_GETSCREENDATA(x) ;
1199 #define DEBUG_GETSCREENDRAWINFO(x) ;
1200 #define DEBUG_HIDEWINDOW(x) ;
1201 #define DEBUG_OPEN(x) ;
1202 #define DEBUG_CLOSE(x) ;
1203 #define DEBUG_INPUTEVENT(x) ;
1204 #define DEBUG_INTREFRESHGLIST(x) ;
1205 #define DEBUG_INTUITEXTLENGTH(x) ;
1206 #define DEBUG_LENDMENUS(x) ;
1207 #define DEBUG_LOCKPUBSCREEN(x) ;
1208 #define DEBUG_MAKECLASS(x) ;
1209 #define DEBUG_MODIFYIDCMP(x) ;
1210 #define DEBUG_NEWOBJECT(x) ;
1211 #define DEBUG_NEXTOBJECT(x) ;
1212 #define DEBUG_OBTAINGIRPORT(x) ;
1213 #define DEBUG_OFFGADGET(x) ;
1214 #define DEBUG_OFFMENU(x) ;
1215 #define DEBUG_ONGADGET(x) ;
1216 #define DEBUG_ONMENU(x) ;
1217 #define DEBUG_OPENSCREEN(x) ;
1218 #define DEBUG_OPENSCREENTAGLIST(x) ;
1219 #define DEBUG_OPENWINDOW(x) ;
1220 #define DEBUG_OPENWINDOWTAGLIST(x) ;
1221 #define DEBUG_OPENWORKBENCH(x) ;
1222 #define DEBUG_POINTER(x) ;
1223 #define DEBUG_PRINTITEXT(x) ;
1224 #define DEBUG_QUERYOVERSCAN(x) ;
1225 #define DEBUG_REFRESH(x) ;
1226 #define DEBUG_RELEASEGIRPORT(x) ;
1227 #define DEBUG_REMEMBER(x) ;
1228 #define DEBUG_REMOVEGLIST(x) ;
1229 #define DEBUG_REPORTMOUSE(x) ;
1230 #define DEBUG_REQUEST(x) ;
1231 #define DEBUG_SCROLLWINDOWRASTER(x) ;
1232 #define DEBUG_SENDINTUIMESSAGE(x) ;
1233 #define DEBUG_SETATTRS(x) ;
1234 #define DEBUG_SETGADGETATTRS(x) ;
1235 #define DEBUG_SETPOINTER(x) ;
1236 #define DEBUG_SHOWWINDOW(x) ;
1237 #define DEBUG_UNLOCKPUBSCREEN(x) ;
1238 #define DEBUG_WINDOWLIMITS(x) ;
1239 #define DEBUG_WINDOWTOBACK(x) ;
1240 #define DEBUG_WINDOWTOFRONT(x) ;
1241 #define DEBUG_ZIPWINDOW(x) ;
1242 #define DEBUG_VISITOR(x) ;
1243 #define DEBUG_WORKBENCH(x) ;
1244 #define DEBUG_LOCKPUBSCREENLIST(x) ;
1245 #define DEBUG_UNLOCKPUBSCREENLIST(x) ;
1246 #define DEBUG_RETHINKDISPLAY(x) ;
1248 #ifdef NO_RUNTIME_DEBUG
1250 #define DEBUG_INIT(x) ;
1251 #define DEBUG_SETIPREFS(x) ;
1252 #define DEBUG_SETPREFS(x) ;
1256 #define DEBUG_INIT(x) if (SysBase->ex_DebugFlags & EXECDEBUGF_INIT) x;
1257 #define DEBUG_SETIPREFS(x) if (SysBase->ex_DebugFlags & EXECDEBUGF_INIT) x;
1258 #define DEBUG_SETPREFS(x) if (SysBase->ex_DebugFlags & EXECDEBUGF_INIT) x;
1263 * Private data structures of the classes defined by intuition.library
1270 struct TagItem
*ic_Mapping
;
1271 struct TagItem
*ic_CloneTags
;
1272 ULONG ic_LoopCounter
;
1278 struct MinList memberlist
;
1284 /* render bevel only with no fill? */
1287 /* inverted bevel pens? */
1300 struct DrawInfo
*dri
;
1301 struct Image
*frame
;
1316 struct ExtGadget EG
;
1323 /* We use a propinfo structure, because we use the same routines
1324 for intuition propgadtets and in propgclass */
1326 struct PropInfo propinfo
;
1328 /* A little kludge: since the HandleMouseMove function
1329 wants dx/dy and not absolute mouse coords, we
1330 have to remember the last ones */
1335 /* One only have to store total or visble, and use some other
1336 formulas than those in the RKRM:L, but for
1337 code simplicity I store them all. */
1338 UWORD top
, visible
, total
;
1341 struct BBox
*old_knobbox
;
1342 struct Hook
*DisplayHook
;
1348 struct StringInfo StrInfo
;
1349 struct StringExtend StrExtend
;
1356 struct MinList memberlist
;
1357 struct Gadget
*activegad
;
1363 /* Current left- and topedge of moving window. Ie when the user releases
1364 the LMB after a windowdrag, the window's new coords will be (curleft, curtop)
1370 /* The current x and y coordinates relative to curleft/curtop */
1374 /* Whether the dragframe is currently drawn or erased */
1377 /* Used to tell GM_GOINACTIVE whether the drag was canceled or not */
1380 /* Used to tell GM_GOINACTIVE whether UnlockLayer() or not */
1381 BOOL drag_layerlock
;
1382 #ifdef USEGADGETLOCK
1383 BOOL drag_gadgetlock
;
1384 BOOL drag_inputhandlerlock
;
1386 BOOL drag_refreshed
;
1388 /* Rastport to use during update */
1389 struct RastPort
*rp
;
1391 UQUAD lasteventtime
;
1396 #ifdef USEWINDOWLOCK
1397 /* used to prevent windows from opening/closing while user drags a window */
1398 BOOL drag_windowlock
;
1401 struct Task
*movetask
;
1405 /* SizeButtonClass */
1406 struct sizebutton_data
1409 /* The current width and height of the rubber band frame */
1415 /* holds original sizes */
1421 /* the offset of the mouse pointer to the rubber band frame*/
1425 /* Whether the dragframe is currently drawn or erased */
1428 /* Used to tell GM_GOINACTIVE whether the drag was canceled or not */
1431 /* Used to tell GM_GOINACTIVE whether UnlockLayer() or not */
1432 BOOL drag_layerlock
;
1433 #ifdef USEGADGETLOCK
1434 BOOL drag_gadgetlock
;
1435 BOOL drag_inputhandlerlock
;
1438 BOOL drag_refreshed
;
1440 /* Rastport to use during update */
1441 struct RastPort
*rp
;
1443 UQUAD lasteventtime
;
1445 #ifdef USEWINDOWLOCK
1446 /* used to prevent windows from opening/closing while user drags a window */
1447 BOOL drag_windowlock
;
1458 /* MenuBarLabelClass */
1459 struct MenuBarLabelData
1461 struct DrawInfo
*dri
;
1467 struct SharedPointer
*shared_pointer
;
1471 struct windecor_data
1473 ULONG userbuffersize
;
1477 struct scrdecor_data
1479 ULONG userbuffersize
;
1482 /* MenuDecorClass */
1483 struct menudecor_data
1485 ULONG userbuffersize
;
1488 #endif /* INTUITION_INTERN_H */