Intuition Library Reference¶
intuition.library is the AmigaOS GUI subsystem — windows, screens, gadgets, menus, requesters, and the BOOPSI object system. It is the second most-used library after exec.
BOOPSI — the V36+ object model¶
BOOPSI (Basic Object Oriented Programming System for Intuition) is the foundation of all V36+ GUI objects. Windows, screens, and gadgets are all BOOPSI objects.
APTR NewObjectA(struct IClass *classPtr, STRPTR classID, struct TagItem *tags);
void DisposeObject(APTR object);
ULONG SetAttrsA(APTR object, struct TagItem *tags);
ULONG GetAttr(ULONG attrID, APTR object, ULONG *storage);
Custom classes — create your own BOOPSI classes (e.g., custom gadgets):
struct IClass *MakeClass(STRPTR classID, STRPTR superClassID,
struct IClass *superClassPtr, ULONG instanceDataSize, ULONG flags);
void AddClass(struct IClass *classPtr); /* make public */
void RemoveClass(struct IClass *classPtr);
void FreeClass(struct IClass *classPtr);
Subclassing pattern: MakeClass() → implement OM_NEW, OM_DISPOSE, OM_SET, OM_GET, and your custom method IDs in a dispatcher function → AddClass() if public. Always call the superclass method first (DoSuperMethodA()), then add your behavior.
Opening windows and screens¶
V36+ uses tag-based APIs:
struct Window *OpenWindowTags(struct NewWindow *nw, Tag tag1, ...);
struct Screen *OpenScreenTags(struct NewScreen *ns, Tag tag1, ...);
Key window tags: WA_Left, WA_Top, WA_Width, WA_Height, WA_Title, WA_IDCMP (which input events), WA_Flags, WA_CustomScreen, WA_PubScreenName, WA_NewLookMenus (V39).
Key screen tags: SA_Left, SA_Top, SA_Width, SA_Height, SA_Title, SA_DisplayID (mode ID), SA_Depth, SA_Type (CUSTOMSCREEN, WBENCHSCREEN).
IDCMP — the input event model¶
Each window has an IDCMP port that delivers IntuiMessage events. You choose which events to receive via the WA_IDCMP flag:
| IDCMP Flag | Event |
|---|---|
IDCMP_VANILLAKEY |
Keyboard (ASCII) |
IDCMP_RAWKEY |
Keyboard (raw scancode) |
IDCMP_MOUSEBUTTONS |
Mouse button up/down |
IDCMP_MOUSEMOVE |
Mouse movement |
IDCMP_GADGETUP / IDCMP_GADGETDOWN |
Gadget interaction |
IDCMP_MENUPICK |
Menu item selected |
IDCMP_CLOSEWINDOW |
Close gadget |
IDCMP_SIZEVERIFY / IDCMP_NEWSIZE |
Window resize |
IDCMP_REFRESHWINDOW |
Window needs redraw |
IDCMP_INTUITICKS |
Periodic timer (~every 0.5s) |
IDCMP_ACTIVEWINDOW / IDCMP_INACTIVEWINDOW |
Focus change |
Event loop pattern:
struct IntuiMessage *msg;
while ((msg = (struct IntuiMessage *)GetMsg(win->UserPort)))
{
switch (msg->Class)
{
case IDCMP_CLOSEWINDOW: running = FALSE; break;
case IDCMP_GADGETUP: /* handle gadget */ break;
case IDCMP_MENUPICK: /* handle menu */ break;
}
ReplyMsg((struct Message *)msg);
}
Wait(1 << win->UserPort->mp_SigBit | ...);
Always ReplyMsg() every message you GetMsg().
Classic vs. BOOPSI gadgets¶
- Classic gadgets (
struct Gadget, pre-V36):AddGadget(),RemoveGadget(),ModifyProp(). Limited. - BOOPSI gadgets (V36+): created via
NewObject()with a class pointer. Support methods, attributes, subclassing. The modern way.
GadTools (see GadTools Library Reference) provides higher-level gadget creation on top of BOOPSI.
Screens and public screens¶
A public screen (CUSTOMSCREEN with SA_PubSnap) can be shared by multiple applications. Other apps open windows on it via WA_PubScreenName. LockPubScreen(name) gets a reference; UnlockPubScreen() releases it.
GetScreenDrawInfo(screen) / FreeScreenDrawInfo() — get screen rendering info (pen colors, font, display mode). Always paired.
Status: Outdated (V47, AmigaOS 3.2) —
DrawInfoversion.DRI_VERSIONis now 3 (was 2 for V39),NUMDRIPENSis 13 (was 12) with a newBARCONTOURPEN, and the struct gains adri_Screenbackpointer. Code that hard-codesNUMDRIPENSor assumesDRI_VERSION == 2must be updated. See AmigaOS 3.2 — What Changed for Developers.
AmigaOS 3.2 (V47) intuition additions¶
For OS 3.2 targets, Intuition gained several features (full list in AmigaOS 3.2 — What Changed for Developers):
- Iconify gadget:
WA_IconifyGadget,TRUE(WA_Dummy + 0x60) adds a hide gadget; it sendsIDCMP_CloseWindowwithmsg->Code == 1(hide) vs0(close). - Native scrollwheel support (V47.26), shift-click zoom = maximize,
GA_Underscore/GA_ActivateKeyhotkeys,MIF_SHIFTCOMMSEQ(0x0800) shift-shortcuts. SA_OpenBorderlets windows drag partly off-screen.ShowWindow()/HideWindow()reimplemented (V50-derived);IntuitionControlA()is a new multi-purpose entry point.- New sysiclass images (
MENUSUB,FRAME_PROPBORDER, etc.) andOSERR_NORTGBITMAP(10) fromOpenScreenon RTG bitmap failure.
Window refresh¶
When a window is damaged (covered/uncovered), Intuition sends IDCMP_REFRESHWINDOW. Use BeginRefresh() / EndRefresh():
case IDCMP_REFRESHWINDOW:
BeginRefresh(win);
/* redraw damaged areas */
EndRefresh(win, TRUE);
break;
BeginRefresh() locks layers and sets up a restricted clip for efficient repainting. See Intuition Layer Locking — don't call Intuition functions inside BeginRefresh/EndRefresh (it holds a layer lock).
Screen buffers (double buffering)¶
struct ScreenBuffer *AllocScreenBuffer(screen, bitMap, flags);
ChangeScreenBuffer(screen, sb);
FreeScreenBuffer(sb);
Enables double-buffered screen display for flicker-free animation. DBUF_INFO from AllocDBufInfo() (graphics.library) for synchronized buffer swaps at vertical blank.
See Also¶
- ReAction GUI Toolkit
- Intuition Layer Locking and Deadlocks
- GadTools Library Reference
- Graphics Library Reference
- AmigaOS 3.2 — What Changed for Developers
Sources: Commodore-Amiga / ESCOM AG, intuition.library Autodoc (1985-1996); Hyperion Entertainment, NDK 3.2 intuition RelNotes (2016-2021).
Raw: raw/intuition/intuition-library.md; raw/architecture/os-3.2-release-notes.md; raw/intuition/intuition-rkm.md
Updated: 2026-08-09
Updated: 2026-08-04