1 #ifndef INTUITION_INTUITION_H
    2 #define INTUITION_INTUITION_H
    3 
    4 /*
    5 	intuition definitions
    6 
    7 	Copyright (C) 2002-2025 The MorphOS Development Team, All Rights Reserved.
    8 */
    9 
   10 #ifndef EXEC_TYPES_H
   11 # include <exec/types.h>
   12 #endif
   13 
   14 #ifndef GRAPHICS_GFX_H
   15 # include <graphics/gfx.h>
   16 #endif
   17 
   18 #ifndef GRAPHICS_CLIP_H
   19 # include <graphics/clip.h>
   20 #endif
   21 
   22 #ifndef GRAPHICS_VIEW_H
   23 # include <graphics/view.h>
   24 #endif
   25 
   26 #ifndef GRAPHICS_RASTPORT_H
   27 # include <graphics/rastport.h>
   28 #endif
   29 
   30 #ifndef GRAPHICS_LAYERS_H
   31 # include <graphics/layers.h>
   32 #endif
   33 
   34 #ifndef GRAPHICS_TEXT_H
   35 # include <graphics/text.h>
   36 #endif
   37 
   38 #ifndef EXEC_PORTS_H
   39 # include <exec/ports.h>
   40 #endif
   41 
   42 #ifndef DEVICES_INPUTEVENT_H
   43 # include <devices/inputevent.h>
   44 #endif
   45 
   46 #ifndef UTILITY_TAGITEM_H
   47 # include <utility/tagitem.h>
   48 #endif
   49 
   50 #pragma pack(2)
   51 
   52 
   53 struct Menu
   54 {
   55 	struct Menu     *NextMenu;
   56 	WORD             LeftEdge, TopEdge;
   57 	WORD             Width, Height;
   58 	UWORD            Flags;
   59 	BYTE            *MenuName;
   60 	struct MenuItem *FirstItem;
   61 
   62 	WORD             JazzX, JazzY, BeatX, BeatY;
   63 };
   64 
   65 
   66 #define MENUENABLED  0x0001
   67 #define MIDRAWN      0x0100
   68 
   69 
   70 struct MenuItem
   71 {
   72 	struct MenuItem *NextItem;
   73 	WORD             LeftEdge, TopEdge;
   74 	WORD             Width, Height;
   75 	UWORD            Flags;
   76 
   77 	LONG             MutualExclude;
   78 
   79 	APTR             ItemFill;
   80 
   81 	APTR             SelectFill;
   82 
   83 	BYTE             Command;
   84 
   85 	struct MenuItem *SubItem;
   86 
   87 	UWORD            NextSelect;
   88 };
   89 
   90 
   91 #define CHECKIT      0x0001
   92 #define ITEMTEXT     0x0002
   93 #define COMMSEQ      0x0004
   94 #define MENUTOGGLE   0x0008
   95 #define ITEMENABLED  0x0010
   96 
   97 #define HIGHFLAGS    0x00C0
   98 #define HIGHIMAGE    0x0000
   99 #define HIGHCOMP     0x0040
  100 #define HIGHBOX      0x0080
  101 #define HIGHNONE     0x00C0
  102 
  103 #define CHECKED      0x0100
  104 
  105 #define ISDRAWN      0x1000
  106 #define HIGHITEM     0x2000
  107 #define MENUTOGGLED  0x4000
  108 
  109 
  110 struct Requester
  111 {
  112 	struct Requester *OlderRequest;
  113 	WORD              LeftEdge, TopEdge;
  114 	WORD              Width, Height;
  115 	WORD              RelLeft, RelTop;
  116 
  117 	struct Gadget    *ReqGadget;
  118 	struct Border    *ReqBorder;
  119 	struct IntuiText *ReqText;
  120 	UWORD             Flags;
  121 
  122 	UBYTE             BackFill;
  123 	struct Layer     *ReqLayer;
  124 	UBYTE             ReqPad1[32];
  125 
  126 	struct BitMap    *ImageBMap;
  127 	struct Window    *RWindow;
  128 
  129 	struct Image     *ReqImage;
  130 	UBYTE             ReqPad2[32];
  131 };
  132 
  133 
  134 #define POINTREL       0x0001
  135 #define PREDRAWN       0x0002
  136 #define NOISYREQ       0x0004
  137 #define SIMPLEREQ      0x0010
  138 #define USEREQIMAGE    0x0020
  139 #define NOREQBACKFILL  0x0040
  140 
  141 #define REQOFFWINDOW   0x1000
  142 #define REQACTIVE      0x2000
  143 #define SYSREQUEST     0x4000
  144 #define DEFERREFRESH   0x8000
  145 
  146 
  147 struct Gadget
  148 {
  149 	struct Gadget    *NextGadget;
  150 
  151 	WORD              LeftEdge, TopEdge;
  152 	WORD              Width, Height;
  153 
  154 	UWORD             Flags;
  155 	UWORD             Activation;
  156 
  157 	UWORD             GadgetType;
  158 	APTR              GadgetRender;
  159 	APTR              SelectRender;
  160 
  161 	struct IntuiText *GadgetText;
  162 	LONG              MutualExclude;
  163 	APTR              SpecialInfo;
  164 
  165 	UWORD             GadgetID;
  166 	APTR              UserData;
  167 };
  168 
  169 
  170 struct ExtGadget
  171 {
  172 	struct ExtGadget *NextGadget;
  173 	WORD              LeftEdge, TopEdge;
  174 	WORD              Width, Height;
  175 	UWORD             Flags;
  176 	UWORD             Activation;
  177 	UWORD             GadgetType;
  178 	APTR              GadgetRender;
  179 	APTR              SelectRender;
  180 	struct IntuiText *GadgetText;
  181 	LONG              MutualExclude;
  182 	APTR              SpecialInfo;
  183 	UWORD             GadgetID;
  184 	APTR              UserData;
  185 
  186 	ULONG             MoreFlags;
  187 	WORD              BoundsLeftEdge;
  188 	WORD              BoundsTopEdge;
  189 	WORD              BoundsWidth;
  190 	WORD              BoundsHeight;
  191 };
  192 
  193 
  194 #define GFLG_GADGHIGHBITS  0x0003
  195 #define GFLG_GADGHCOMP     0x0000
  196 #define GFLG_GADGHBOX      0x0001
  197 #define GFLG_GADGHIMAGE    0x0002
  198 #define GFLG_GADGHNONE     0x0003
  199 #define GFLG_GADGIMAGE     0x0004
  200 
  201 #define GFLG_RELBOTTOM     0x0008
  202 #define GFLG_RELRIGHT      0x0010
  203 #define GFLG_RELWIDTH      0x0020
  204 #define GFLG_RELHEIGHT     0x0040
  205 
  206 #define GFLG_RELSPECIAL    0x4000
  207 #define GFLG_SELECTED      0x0080
  208 #define GFLG_DISABLED      0x0100
  209 
  210 #define GFLG_LABELMASK     0x3000
  211 #define GFLG_LABELITEXT    0x0000
  212 #define GFLG_LABELSTRING   0x1000
  213 #define GFLG_LABELIMAGE    0x2000
  214 
  215 #define GFLG_TABCYCLE      0x0200
  216 #define GFLG_STRINGEXTEND  0x0400
  217 #define GFLG_IMAGEDISABLE  0x0800
  218 
  219 #define GFLG_EXTENDED      0x8000
  220 
  221 
  222 #define GACT_RELVERIFY     0x0001
  223 #define GACT_IMMEDIATE     0x0002
  224 #define GACT_ENDGADGET     0x0004
  225 #define GACT_FOLLOWMOUSE   0x0008
  226 
  227 #define GACT_RIGHTBORDER   0x0010
  228 #define GACT_LEFTBORDER    0x0020
  229 #define GACT_TOPBORDER     0x0040
  230 #define GACT_BOTTOMBORDER  0x0080
  231 #define GACT_BORDERSNIFF   0x8000
  232 
  233 #define GACT_TOGGLESELECT  0x0100
  234 #define GACT_BOOLEXTEND    0x2000
  235 
  236 #define GACT_STRINGLEFT    0x0000
  237 #define GACT_STRINGCENTER  0x0200
  238 #define GACT_STRINGRIGHT   0x0400
  239 #define GACT_LONGINT       0x0800
  240 #define GACT_ALTKEYMAP     0x1000
  241 #define GACT_STRINGEXTEND  0x2000
  242 
  243 #define GACT_ACTIVEGADGET  0x4000
  244 
  245 
  246 #define GTYP_GADGETTYPE    0xFC00
  247 
  248 #define GTYP_SCRGADGET     0x4000
  249 #define GTYP_GZZGADGET     0x2000
  250 #define GTYP_REQGADGET     0x1000
  251 
  252 #define GTYP_SYSGADGET     0x8000
  253 #define GTYP_SYSTYPEMASK   0x00F0
  254 
  255 #define GTYP_SIZING        0x0010
  256 #define GTYP_WDRAGGING     0x0020
  257 #define GTYP_SDRAGGING     0x0030
  258 #define GTYP_WDEPTH        0x0040
  259 #define GTYP_SDEPTH        0x0050
  260 #define GTYP_WZOOM         0x0060
  261 #define GTYP_SUNUSED       0x0070
  262 #define GTYP_CLOSE         0x0080
  263 
  264 /* V50 SYSGADGET types */
  265 #define GTYP_WDRAGGING2    0x0090 /* GTYP_WDRAGGING2 gadgets only send IDCMP_GADGETDOWN, this one also sends IDCMP_GADGETUP*/
  266 
  267 #define GTYP_WUPFRONT      GTYP_WDEPTH
  268 #define GTYP_SUPFRONT      GTYP_SDEPTH
  269 #define GTYP_WDOWNBACK     GTYP_WZOOM
  270 #define GTYP_SDOWNBACK     GTYP_SUNUSED
  271 
  272 #define GTYP_GTYPEMASK     0x0007
  273 
  274 #define GTYP_BOOLGADGET    0x0001
  275 #define GTYP_GADGET0002    0x0002
  276 #define GTYP_PROPGADGET    0x0003
  277 #define GTYP_STRGADGET     0x0004
  278 #define GTYP_CUSTOMGADGET  0x0005
  279 
  280 
  281 #define GMORE_BOUNDS        0x00000001L
  282 #define GMORE_GADGETHELP    0x00000002L
  283 #define GMORE_SCROLLRASTER  0x00000004L
  284 
  285 
  286 struct BoolInfo
  287 {
  288 	UWORD  Flags;
  289 	UWORD *Mask;
  290 	ULONG  Reserved;
  291 };
  292 
  293 #define BOOLMASK  0x0001
  294 
  295 
  296 struct PropInfo
  297 {
  298 	UWORD Flags;
  299 
  300 	UWORD HorizPot;
  301 	UWORD VertPot;
  302 
  303 	UWORD HorizBody;
  304 	UWORD VertBody;
  305 
  306 	UWORD CWidth;
  307 	UWORD CHeight;
  308 	UWORD HPotRes, VPotRes;
  309 	UWORD LeftBorder;
  310 	UWORD TopBorder;
  311 };
  312 
  313 
  314 #define AUTOKNOB        0x0001
  315 #define FREEHORIZ       0x0002
  316 #define FREEVERT        0x0004
  317 #define PROPBORDERLESS  0x0008
  318 #define KNOBHIT         0x0100
  319 #define PROPNEWLOOK     0x0010
  320 
  321 #define KNOBHMIN  6
  322 #define KNOBVMIN  4
  323 #define MAXBODY   0xFFFF
  324 #define MAXPOT    0xFFFF
  325 
  326 
  327 struct StringInfo
  328 {
  329 	UBYTE               *Buffer;
  330 	UBYTE               *UndoBuffer;
  331 	WORD                 BufferPos;
  332 	WORD                 MaxChars;
  333 	WORD                 DispPos;
  334 
  335 	WORD                 UndoPos;
  336 	WORD                 NumChars;
  337 	WORD                 DispCount;
  338 	WORD                 CLeft, CTop;
  339 
  340 	struct StringExtend *Extension;
  341 
  342 	LONG                 LongInt;
  343 
  344 	struct KeyMap       *AltKeyMap;
  345 };
  346 
  347 
  348 struct IntuiText
  349 {
  350 	UBYTE             FrontPen, BackPen;
  351 	UBYTE             DrawMode;
  352 	WORD              LeftEdge;
  353 	WORD              TopEdge;
  354 	struct TextAttr  *ITextFont;
  355 	UBYTE            *IText;
  356 	struct IntuiText *NextText;
  357 };
  358 
  359 
  360 struct Border
  361 {
  362 	WORD           LeftEdge, TopEdge;
  363 	UBYTE          FrontPen, BackPen;
  364 	UBYTE          DrawMode;
  365 	BYTE           Count;
  366 	WORD          *XY;
  367 	struct Border *NextBorder;
  368 };
  369 
  370 
  371 struct Image
  372 {
  373 	WORD          LeftEdge;
  374 	WORD          TopEdge;
  375 	WORD          Width;
  376 	WORD          Height;
  377 	WORD          Depth;
  378 	UWORD        *ImageData;
  379 
  380 	UBYTE         PlanePick, PlaneOnOff;
  381 
  382 	struct Image *NextImage;
  383 };
  384 
  385 
  386 struct IntuiMessage
  387 {
  388 	struct Message       ExecMessage;
  389 
  390 	ULONG                Class;
  391 	UWORD                Code;
  392 	UWORD                Qualifier;
  393 	APTR                 IAddress;
  394 
  395 	WORD                 MouseX, MouseY;
  396 	ULONG                Seconds, Micros;
  397 
  398 	struct Window       *IDCMPWindow;
  399 
  400 	struct IntuiMessage *SpecialLink;
  401 };
  402 
  403 
  404 struct ExtIntuiMessage
  405 {
  406 	struct IntuiMessage eim_IntuiMessage;
  407 	struct TabletData  *eim_TabletData;
  408 };
  409 
  410 
  411 #define IDCMP_SIZEVERIFY        0x00000001
  412 #define IDCMP_NEWSIZE           0x00000002
  413 #define IDCMP_REFRESHWINDOW     0x00000004
  414 #define IDCMP_MOUSEBUTTONS      0x00000008
  415 #define IDCMP_MOUSEMOVE         0x00000010
  416 #define IDCMP_GADGETDOWN        0x00000020
  417 #define IDCMP_GADGETUP          0x00000040
  418 #define IDCMP_REQSET            0x00000080
  419 #define IDCMP_MENUPICK          0x00000100
  420 #define IDCMP_CLOSEWINDOW       0x00000200
  421 #define IDCMP_RAWKEY            0x00000400
  422 #define IDCMP_REQVERIFY         0x00000800
  423 #define IDCMP_REQCLEAR          0x00001000
  424 #define IDCMP_MENUVERIFY        0x00002000
  425 #define IDCMP_NEWPREFS          0x00004000
  426 #define IDCMP_DISKINSERTED      0x00008000
  427 #define IDCMP_DISKREMOVED       0x00010000
  428 #define IDCMP_WBENCHMESSAGE     0x00020000
  429 #define IDCMP_ACTIVEWINDOW      0x00040000
  430 #define IDCMP_INACTIVEWINDOW    0x00080000
  431 #define IDCMP_DELTAMOVE         0x00100000
  432 #define IDCMP_VANILLAKEY        0x00200000
  433 #define IDCMP_INTUITICKS        0x00400000
  434 #define IDCMP_IDCMPUPDATE       0x00800000
  435 #define IDCMP_MENUHELP          0x01000000
  436 #define IDCMP_CHANGEWINDOW      0x02000000
  437 #define IDCMP_GADGETHELP        0x04000000
  438 
  439 #define IDCMP_MOUSEHOVER        0x08000000 /* v50 */
  440 #define IDCMP_MOUSEOBJECTMUI    0x40000000 /* special idcmp message created by MUI */
  441 
  442 #define IDCMP_LONELYMESSAGE     0x80000000
  443 
  444 
  445 #define CWCODE_MOVESIZE   0x0000
  446 #define CWCODE_DEPTH      0x0001
  447 
  448 #define MENUHOT          0x0001
  449 #define MENUCANCEL       0x0002
  450 #define MENUWAITING      0x0003
  451 
  452 #define OKOK             MENUHOT
  453 #define OKABORT          0x0004
  454 #define OKCANCEL         MENUCANCEL
  455 
  456 #define WBENCHOPEN       0x0001
  457 #define WBENCHCLOSE      0x0002
  458 
  459 #define HOVERSTART       0x0001 /* v50 */
  460 #define HOVERSTOP        0x0002 /* v50 */
  461 
  462 struct IBox
  463 {
  464 	WORD Left;
  465 	WORD Top;
  466 	WORD Width;
  467 	WORD Height;
  468 };
  469 
  470 
  471 struct Window
  472 {
  473 	struct Window       *NextWindow;
  474 
  475 	WORD                 LeftEdge, TopEdge;
  476 	WORD                 Width, Height;
  477 
  478 	WORD                 MouseY, MouseX;
  479 
  480 	WORD                 MinWidth, MinHeight;
  481 	UWORD                MaxWidth, MaxHeight;
  482 
  483 	ULONG                Flags;
  484 
  485 	struct Menu         *MenuStrip;
  486 
  487 	UBYTE               *Title;
  488 
  489 	struct Requester    *FirstRequest;
  490 
  491 	struct Requester    *DMRequest;
  492 
  493 	WORD                 ReqCount;
  494 
  495 	struct Screen       *WScreen;
  496 	struct RastPort     *RPort;
  497 
  498 	BYTE                 BorderLeft, BorderTop, BorderRight, BorderBottom;
  499 	struct RastPort     *BorderRPort;
  500 
  501 	struct Gadget       *FirstGadget;
  502 
  503 	struct Window       *Parent, *Descendant;
  504 
  505 	UWORD               *Pointer;
  506 	BYTE                 PtrHeight;
  507 	BYTE                 PtrWidth;
  508 	BYTE                 XOffset, YOffset;
  509 
  510 	ULONG                IDCMPFlags;
  511 	struct MsgPort      *UserPort, *WindowPort;
  512 	struct IntuiMessage *MessageKey;
  513 
  514 	UBYTE                DetailPen, BlockPen;
  515 
  516 	struct Image        *CheckMark;
  517 
  518 	UBYTE               *ScreenTitle;
  519 
  520 	WORD                 GZZMouseX;
  521 	WORD                 GZZMouseY;
  522 	WORD                 GZZWidth;
  523 	WORD                 GZZHeight;
  524 
  525 	UBYTE               *ExtData;
  526 
  527 	BYTE                *UserData;
  528 
  529 	struct Layer        *WLayer;
  530 
  531 	struct TextFont     *IFont;
  532 
  533 	ULONG                MoreFlags;
  534 };
  535 
  536 
  537 #define WFLG_SIZEGADGET      0x00000001
  538 #define WFLG_DRAGBAR         0x00000002
  539 #define WFLG_DEPTHGADGET     0x00000004
  540 #define WFLG_CLOSEGADGET     0x00000008
  541 
  542 #define WFLG_SIZEBRIGHT      0x00000010
  543 #define WFLG_SIZEBBOTTOM     0x00000020
  544 
  545 #define WFLG_REFRESHBITS     0x000000C0
  546 #define WFLG_SMART_REFRESH   0x00000000
  547 #define WFLG_SIMPLE_REFRESH  0x00000040
  548 #define WFLG_SUPER_BITMAP    0x00000080
  549 #define WFLG_OTHER_REFRESH   0x000000C0
  550 
  551 #define WFLG_BACKDROP        0x00000100
  552 
  553 #define WFLG_REPORTMOUSE     0x00000200
  554 
  555 #define WFLG_GIMMEZEROZERO   0x00000400
  556 
  557 #define WFLG_BORDERLESS      0x00000800
  558 
  559 #define WFLG_ACTIVATE        0x00001000
  560 
  561 #define WFLG_RMBTRAP         0x00010000
  562 #define WFLG_NOCAREREFRESH   0x00020000
  563 
  564 #define WFLG_NW_EXTENDED     0x00040000
  565 
  566 #define WFLG_NEWLOOKMENUS    0x00200000
  567 
  568 #define WFLG_WINDOWACTIVE    0x00002000
  569 #define WFLG_INREQUEST       0x00004000
  570 #define WFLG_MENUSTATE       0x00008000
  571 #define WFLG_WINDOWREFRESH   0x01000000
  572 #define WFLG_WBENCHWINDOW    0x02000000
  573 #define WFLG_WINDOWTICKED    0x04000000
  574 
  575 #define WFLG_VISITOR         0x08000000
  576 #define WFLG_ZOOMED          0x10000000
  577 #define WFLG_HASZOOM         0x20000000
  578 
  579 
  580 #define DEFAULTMOUSEQUEUE  (5)
  581 
  582 
  583 struct NewWindow
  584 {
  585 	WORD           LeftEdge, TopEdge;
  586 	WORD           Width, Height;
  587 
  588 	UBYTE          DetailPen, BlockPen;
  589 	ULONG          IDCMPFlags;
  590 	ULONG          Flags;
  591 	struct Gadget *FirstGadget;
  592 
  593 	struct Image  *CheckMark;
  594 
  595 	UBYTE         *Title;
  596 	struct Screen *Screen;
  597 	struct BitMap *BitMap;
  598 
  599 	WORD           MinWidth, MinHeight;
  600 	UWORD          MaxWidth, MaxHeight;
  601 
  602 	UWORD          Type;
  603 };
  604 
  605 struct ExtNewWindow
  606 {
  607 	WORD            LeftEdge, TopEdge;
  608 	WORD            Width, Height;
  609 
  610 	UBYTE           DetailPen, BlockPen;
  611 	ULONG           IDCMPFlags;
  612 	ULONG           Flags;
  613 	struct Gadget  *FirstGadget;
  614 
  615 	struct Image   *CheckMark;
  616 
  617 	UBYTE          *Title;
  618 	struct Screen  *Screen;
  619 	struct BitMap  *BitMap;
  620 
  621 	WORD            MinWidth, MinHeight;
  622 	UWORD           MaxWidth, MaxHeight;
  623 
  624 	UWORD           Type;
  625 
  626 	struct TagItem *Extension;
  627 };
  628 
  629 
  630 #define WA_Dummy                              (TAG_USER + 99)
  631 #define WA_Left         /* ISG */             (WA_Dummy + 1)
  632 #define WA_Top          /* ISG */             (WA_Dummy + 2)
  633 #define WA_Width        /* ISG */             (WA_Dummy + 3)
  634 #define WA_Height       /* ISG */             (WA_Dummy + 4)
  635 #define WA_DetailPen    /* I* */              (WA_Dummy + 5)
  636 #define WA_BlockPen     /* I* */              (WA_Dummy + 6)
  637 #define WA_IDCMP        /* ISG */             (WA_Dummy + 7)
  638 #define WA_Flags        /* I** */             (WA_Dummy + 8)
  639 #define WA_Gadgets      /* I** */             (WA_Dummy + 9)
  640 #define WA_Checkmark    /* I** */             (WA_Dummy + 10)
  641 #define WA_Title        /* I** */             (WA_Dummy + 11)
  642 #define WA_ScreenTitle  /* I** */             (WA_Dummy + 12)
  643 #define WA_CustomScreen /* I** */             (WA_Dummy + 13)
  644 #define WA_SuperBitMap  /* I** */             (WA_Dummy + 14)
  645 #define WA_MinWidth     /* ISG */             (WA_Dummy + 15)
  646 #define WA_MinHeight    /* ISG */             (WA_Dummy + 16)
  647 #define WA_MaxWidth     /* ISG */             (WA_Dummy + 17)
  648 #define WA_MaxHeight    /* ISG */             (WA_Dummy + 18)
  649 
  650 #define WA_InnerWidth   /* ISG */             (WA_Dummy + 19)
  651 #define WA_InnerHeight  /* ISG */             (WA_Dummy + 20)
  652 #define WA_PubScreenName  /* I** */           (WA_Dummy + 21)
  653 #define WA_PubScreen      /* I** */           (WA_Dummy + 22)
  654 #define WA_PubScreenFallBack  /* I** */       (WA_Dummy + 23)
  655 #define WA_WindowName   /* I** */             (WA_Dummy + 24)
  656 #define WA_Colors       /* I** */             (WA_Dummy + 25)
  657 #define WA_Zoom         /* I*G */             (WA_Dummy + 26)
  658 #define WA_MouseQueue   /* I** */             (WA_Dummy + 27)
  659 #define WA_BackFill     /* I** */             (WA_Dummy + 28)
  660 #define WA_RptQueue     /* I** */             (WA_Dummy + 29)
  661 
  662 #define WA_SizeGadget   /* I** */             (WA_Dummy + 30)
  663 #define WA_DragBar      /* I** */             (WA_Dummy + 31)
  664 #define WA_DepthGadget  /* I** */             (WA_Dummy + 32)
  665 #define WA_CloseGadget  /* I** */             (WA_Dummy + 33)
  666 #define WA_Backdrop     /* I** */             (WA_Dummy + 34)
  667 #define WA_ReportMouse  /* I** */             (WA_Dummy + 35)
  668 #define WA_NoCareRefresh /* I** */            (WA_Dummy + 36)
  669 #define WA_Borderless   /* I** */             (WA_Dummy + 37)
  670 #define WA_Activate     /* I** */             (WA_Dummy + 38)
  671 #define WA_RMBTrap      /* I** */             (WA_Dummy + 39)
  672 #define WA_WBenchWindow /* I** */             (WA_Dummy + 40)
  673 #define WA_SimpleRefresh /* I** */            (WA_Dummy + 41)
  674 #define WA_SmartRefresh /* I** */             (WA_Dummy + 42)
  675 #define WA_SizeBRight   /* I** */             (WA_Dummy + 43)
  676 #define WA_SizeBBottom  /* I** */             (WA_Dummy + 44)
  677 
  678 #define WA_AutoAdjust   /* I** */             (WA_Dummy + 45)
  679 #define WA_GimmeZeroZero /* I** */            (WA_Dummy + 46)
  680 
  681 #define WA_MenuHelp     /* I** */             (WA_Dummy + 47)
  682 #define WA_NewLookMenus /* I** */             (WA_Dummy + 48)
  683 #define WA_AmigaKey     /* I** */             (WA_Dummy + 49)
  684 #define WA_NotifyDepth  /* I** */             (WA_Dummy + 50)
  685 
  686 #define WA_Pointer      /* IS* */             (WA_Dummy + 52)
  687 #define WA_BusyPointer  /* ISG */             (WA_Dummy + 53)
  688 #define WA_PointerDelay /* IS* */             (WA_Dummy + 54)
  689 #define WA_TabletMessages /* I** */           (WA_Dummy + 55)
  690 #define WA_HelpGroup    /* I** */             (WA_Dummy + 56)
  691 #define WA_HelpGroupWindow /* I** */          (WA_Dummy + 57)
  692 
  693 /* new OpenWindowTags tags (added some padding there) */
  694 
  695 /* V50 */
  696 
  697 
  698 #define WA_ExtraTitlebarGadgets /* I** */       (WA_Dummy + 151)
  699 
  700 /* ULONG flag field to indicate window titlebar gadgets
  701 ** your app wants to use. Those are built-in in sysiclass
  702 ** and use intuition skins system.
  703 ** You'll be notified with normal IDCMP_GADGETUP when one
  704 ** of those gadgets get pressed.
  705 */
  706 
  707 #define WA_ExtraGadgetsStartID /* I** */        (WA_Dummy + 152)
  708 
  709 /* All the extra gadgets have the Gadget ID's set to
  710 ** ETI_Dummy + gadget id value (defined below). Set this tag
  711 ** if you want to change ETI_Dummy value for your gadgets.
  712 ** (for example when those ID's are already in use)
  713 */
  714 
  715 /* instead of using WA_ExtraTitlebarGadgets... */
  716 #define WA_ExtraGadget_Iconify /* IS* */        (WA_Dummy + 153)
  717 #define WA_ExtraGadget_Lock    /* IS* */        (WA_Dummy + 154)
  718 #define WA_ExtraGadget_MUI     /* IS* */        (WA_Dummy + 155)
  719 #define WA_ExtraGadget_PopUp   /* IS* */        (WA_Dummy + 156)
  720 #define WA_ExtraGadget_Snapshot /* IS* */       (WA_Dummy + 157)
  721 #define WA_ExtraGadget_Jump    /* IS* */        (WA_Dummy + 158)
  722 
  723 #define WA_SkinInfo            /* I** */        (WA_Dummy + 159)
  724 
  725 /* Intuition skins system usualy enchances window size when
  726 ** SIZEIMAGE width/height forces non-std border sizes.
  727 ** If your app already knows about the border sizes (GetSkinInfo)
  728 ** please add this tag to your OpenWindow call. This will switch
  729 ** off window size adjustment.
  730 ** ti_Data should point to SkinInfo struct allocated by GetSkinInfo.
  731 ** IMPORTANT: passing WA_SkinInfo tag to OpenWindowTags means
  732 ** that your app IS Skin compilant. Expect windows with non
  733 ** standard titlebar height, etc when you pass it (also with NULL
  734 ** tag->ti_Data!)
  735 */
  736 
  737 #define WA_TransparentRegion    /* I** */       (WA_Dummy + 160)
  738 
  739 /* Installs the provided region as a transparent region in window's layer.
  740 ** Best solution for fixed size windows. Setting WA_TransparentRegion clears
  741 ** previously set WA_TransparentRegionHook!
  742 **
  743 ** For more information please refer to intuition/TransparencyControl() autodoc.
  744 */
  745 
  746 #define WA_TransparentRegionHook /* I** */      (WA_Dummy + 161)
  747 
  748 /* Installs the provided transparent region hook. The hook is called whenever
  749 ** window's layer needs updating (usualy on resize). The hook is called with
  750 ** window pointer in A2 and struct TransparencyMessage * in A1 registers.
  751 ** Setting this tag clears previously set WA_TransparentRegion!
  752 **
  753 ** For more information please refer to intuition/TransparencyControl() autodoc.
  754 */
  755 
  756 #define WA_UserPort              /* I*G */       (WA_Dummy + 162)
  757 /* Please note that ModifyIDCMP(win,NULL) WILL NOT FREE userport
  758 ** when you use WA_UserPort!!! It will also NOT create a new msg
  759 ** port later!!! Keep in mind that ModifyIDCMP(win,NULL) will
  760 ** clear win->UserPort, but NOT free it - you need to store it and
  761 ** free manually! CloseWindow() doesn't free the port as well.
  762 ** IMPORTANT: remember that you need to reply all messages before
  763 ** the msg port was detached from all your windows!
  764 */
  765 
  766 /* V51 */
  767 
  768 #define WA_ToolbarWindow /* I** */              (WA_Dummy + 163) 
  769 /* Toolbar windows are windows that cannot be activated. They react
  770 ** fine on IDCMP_MOUSEBUTTONS, IDCMP_MOUSEMOVE, IDCMP_INTUITICKS, but
  771 ** only on those. The one and only supported intuition gadget is a
  772 ** GTYP_WDRAGGING(2) gadget, rest will be ignored. Toolbar windows
  773 ** are _always_ borderless.
  774 */
  775 
  776 #define WA_PointerType /* ISG */                (WA_Dummy + 164) 
  777 /* Use one of intuition's built-in pointers in your window. There's
  778 ** basicly everything an app should need there - please avoid using
  779 ** custom pointers when possible.
  780 */
  781 
  782 #define WA_FrontWindow  /* I** */               (WA_Dummy + 165) 
  783 /* Window stays always on front of other windows.
  784 */
  785 
  786 #define WA_Parent       /* I*G */               (WA_Dummy + 166) 
  787 /* struct Window *. Makes the new window a child window of the one
  788 ** passed in ti_Data. Useful for popup windows - you can set
  789 ** child window position relatively to parent top/leftedge, child
  790 ** windows are also depth arranged with their parent
  791 ** windows, but NOT dragged (you need to care about this yourself).
  792 */
  793 
  794 
  795 #define WA_Opacity /* ISG */                    (WA_Dummy + 168)
  796 /* ULONG. A 32bit opacity value. Use 0xFFFFFFFF for full visibility.
  797 ** NOTES: GZZ windows are not supported */
  798 
  799 #define WA_HasAlpha /* ISG */                   (WA_Dummy + 169)
  800 /* BOOL. Set to TRUE to make the window use the alpha data of it's
  801 ** buffer as window's opacity level
  802 ** NOTES: GZZ windows are not supported */
  803 
  804 
  805 #define WA_SizeNumerator /* ISG */              (WA_Dummy + 171)
  806 #define WA_SizeDenominator /* ISG */            (WA_Dummy + 172)
  807 #define WA_SizeExtraWidth /* ISG */             (WA_Dummy + 173)
  808 #define WA_SizeExtraHeight /* ISG */            (WA_Dummy + 174)
  809 /* ULONG. The four attributes define how the window should act when
  810 ** the user resizes it. This allows to define an aspect ratio in
  811 ** which the window will be resized. ExtraWidth/Height attributes
  812 ** specify the total size of the area which the aspect ratio resize
  813 ** should not include (toolbars, window borders, etc).
  814 ** To disable aspect resizing, set the Numerator and Denominator to 1.
  815 ** Setting aspect resize doesn't resize the window or change it's 
  816 ** size limits - you have to do it yourself. */
  817 
  818 #define WA_HitLevel /* ISG */                   (WA_Dummy + 175)
  819 /* ULONG. Defines the maximum opacity value to which the window
  820 ** will not be clickable. Unlike WA_Opacity, the value is in the
  821 ** 0-255 range. WA_HitLevel,0 will make the window clickable if
  822 ** it's opacity is != 0. Use 255 to make a fully visible window
  823 ** ignore mouse clicks, hovering, etc */
  824 
  825 #define WA_ShadowTop    /* ISG */               (WA_Dummy + 176)
  826 #define WA_ShadowLeft   /* ISG */               (WA_Dummy + 177)
  827 #define WA_ShadowRight  /* ISG */               (WA_Dummy + 178)
  828 #define WA_ShadowBottom /* ISG */               (WA_Dummy + 179)
  829 /* BOOL. Some skins might support window shadows in certain display
  830 ** modes (depending on the hardware). In such case all windows with
  831 ** a window border will be given a shadow. You can query if the
  832 ** shadow is on with those attributes (to disable your own fake shadows,
  833 ** etc). Set any of the tags above to false to disable a certain
  834 ** part of the shadow. Set any of the tags above to true to force
  835 ** shadows in a borderless window */
  836 
  837 #define WA_VisibleOnMaximize /* ISG */          (WA_Dummy + 180)
  838 /* BOOL. When maximizing windows, intuition will take the windows
  839 ** with this tag on into the account and substract them from the
  840 ** area the maximized window will cover. Do note that intuition will
  841 ** not take windows that are not touching any screen border into the
  842 ** account. You should generally let user decide if he wants this
  843 ** functionality or not */
  844 
  845 #define WA_Unicode /* I*G */                    (WA_Dummy + 181)
  846 /* BOOL. If set to true, the window menu titles are assumed to be
  847 ** encoded in UTF-8. Defaults to FALSE. */
  848 
  849 #define WA_RealtimeLayer /* I** */              (WA_Dummy + 182)
  850 /* BOOL. If set to true, the window's layers will be realtime.
  851 ** OpenWindow will fail if the screen isn't composited. Window must
  852 ** be a borderless one. */
  853 
  854 #define WA_LockMouseToScreen /* ISG */          (WA_Dummy + 183)
  855 /* BOOL. If set to true, mouse will be prevented from leaving the
  856 ** screen in a multi-display setup. Ignored unless the window has
  857 ** successfully called WM_ObtainEvents */
  858 
  859 /* window methods */
  860 #define WM_Dummy WA_Dummy
  861 
  862 #define WM_OpenMenu                             (WM_Dummy + 1)
  863 /* void. Makes intuition open a menu for the window the method was
  864 ** called on. Does nothing if there is no menu or the system
  865 ** is busy. Will fail silently if the menu did not open */
  866 
  867 #define WM_ObtainEvents                         (WM_Dummy + 2)
  868 /* BOOL. Obtains the events for the screen the window is at.
  869 ** This is an equivalent of installing your own, high priority
  870 ** inputhandler to capture input events. All IDCMPs will
  871 ** be sent to your window. Clicking outside of your window
  872 ** will not send events to other windows or cause their activation.
  873 ** Intuition menus will not be opened. The mouse pointer will use
  874 ** whatever your window has set, even if your window was not
  875 ** active when you obtained the pointer. Use this solely for the
  876 ** purpose of letting user pick a window, mark some area for
  877 ** snapshoting, etc. Will return FALSE if another window
  878 ** currently owns the events or your window already owns them.
  879 ** If the method returns true, you are the pointer owner and
  880 ** MUST match the call with WM_ReleaseEvents after you are done.
  881 ** For security reasons, if your application crashes or refuses
  882 ** to reply to IDCMP messages, the event ownership might be
  883 ** silently revoked. If a new window opens or gets activated
  884 ** while you have the ownership, it will be revoked and you
  885 ** will receive an IDCMP_INACTIVEWINDOW idcmp (even if your window
  886 ** is still active or was inactive before obtaining the pointer).
  887 ** The IDCMPS that your window will actually capture are:
  888 ** IDCMP_MOUSEMOVE, IDCMP_MOUSEBUTTON, IDCMP_RAWKEY,
  889 ** IDCMP_VANILLAKEY, IDCMP_INTUITICKS */
  890 
  891 #define WM_ReleaseEvents                        (WM_Dummy + 3)
  892 /* void. Releases the events obtained with WM_ObtainEvents. You MUST
  893 ** always call it after WM_ObtainEvents returned TRUE. It is safe
  894 ** to call it in case your events ownership was revoked by the
  895 ** system */
  896 
  897 
  898 #define HC_GADGETHELP  (1)
  899 
  900 
  901 #pragma pack()
  902 
  903 #ifndef INTUITION_SCREENS_H
  904 # include <intuition/screens.h>
  905 #endif
  906 
  907 #ifndef INTUITION_PREFERENCES_H
  908 # include <intuition/preferences.h>
  909 #endif
  910 
  911 #pragma pack(2)
  912 
  913 
  914 struct Remember
  915 {
  916 	struct Remember *NextRemember;
  917 	ULONG            RememberSize;
  918 	UBYTE           *Memory;
  919 };
  920 
  921 
  922 struct ColorSpec
  923 {
  924 	WORD  ColorIndex;
  925 	UWORD Red;
  926 	UWORD Green;
  927 	UWORD Blue;
  928 };
  929 
  930 struct EasyStruct
  931 {
  932 	ULONG  es_StructSize;
  933 	ULONG  es_Flags;
  934 	UBYTE *es_Title;
  935 	UBYTE *es_TextFormat;
  936 	UBYTE *es_GadgetFormat;
  937 };
  938 
  939 
  940 #define MENUNUM(n)                  ((n) & 0x1F)
  941 #define ITEMNUM(n)                  (((n) >> 5) & 0x003F)
  942 #define SUBNUM(n)                   (((n) >> 11) & 0x001F)
  943 
  944 #define SHIFTMENU(n)                ((n) & 0x1F)
  945 #define SHIFTITEM(n)                (((n) & 0x3F) << 5)
  946 #define SHIFTSUB(n)                 (((n) & 0x1F) << 11)
  947 
  948 #define FULLMENUNUM(menu,item,sub)  (SHIFTSUB(sub) | SHIFTITEM(item) | SHIFTMENU(menu))
  949 
  950 #define SRBNUM(n)                   (0x08 - ((n) >> 4))
  951 #define SWBNUM(n)                   (0x08 - ((n) & 0x0F))
  952 #define SSBNUM(n)                   (0x01 + ((n) >> 4))
  953 #define SPARNUM(n)                  ((n) >> 4)
  954 #define SHAKNUM(n)                  ((n) & 0x0F)
  955 
  956 
  957 #define NOMENU    0x001F
  958 #define NOITEM    0x003F
  959 #define NOSUB     0x001F
  960 #define MENUNULL  0xFFFF
  961 
  962 
  963 #define FOREVER  for(;;)
  964 #ifdef __GNUC__
  965 # define SIGN(x)  ({typeof(x) __tmpx__ = (x); ((__tmpx__) > 0) - ((__tmpx__) < 0);})
  966 #else /* __GNUC__ */
  967 # define SIGN(x)  (((x) > 0) - ((x) < 0))
  968 #endif /* __GNUC__ */
  969 #define NOT      !
  970 
  971 
  972 #define CHECKWIDTH     19
  973 #define COMMWIDTH      27
  974 #define LOWCHECKWIDTH  13
  975 #define LOWCOMMWIDTH   16
  976 
  977 
  978 #define ALERT_TYPE      0x80000000
  979 #define RECOVERY_ALERT  0x00000000
  980 #define DEADEND_ALERT   0x80000000
  981 
  982 
  983 #define AUTOFRONTPEN   0
  984 #define AUTOBACKPEN    1
  985 #define AUTODRAWMODE   JAM2
  986 #define AUTOLEFTEDGE   6
  987 #define AUTOTOPEDGE    3
  988 #define AUTOITEXTFONT  NULL
  989 #define AUTONEXTTEXT   NULL
  990 
  991 
  992 #define SELECTUP    (IECODE_LBUTTON | IECODE_UP_PREFIX)
  993 #define SELECTDOWN  (IECODE_LBUTTON)
  994 #define MENUUP      (IECODE_RBUTTON | IECODE_UP_PREFIX)
  995 #define MENUDOWN    (IECODE_RBUTTON)
  996 #define MIDDLEUP    (IECODE_MBUTTON | IECODE_UP_PREFIX)
  997 #define MIDDLEDOWN  (IECODE_MBUTTON)
  998 #define ALTLEFT     (IEQUALIFIER_LALT)
  999 #define ALTRIGHT    (IEQUALIFIER_RALT)
 1000 #define AMIGALEFT   (IEQUALIFIER_LCOMMAND)
 1001 #define AMIGARIGHT  (IEQUALIFIER_RCOMMAND)
 1002 #define AMIGAKEYS   (AMIGALEFT | AMIGARIGHT)
 1003 
 1004 #define CURSORUP         0x4C
 1005 #define CURSORLEFT       0x4F
 1006 #define CURSORRIGHT      0x4E
 1007 #define CURSORDOWN       0x4D
 1008 #define KEYCODE_Q        0x10
 1009 #define KEYCODE_Z        0x31
 1010 #define KEYCODE_X        0x32
 1011 #define KEYCODE_V        0x34
 1012 #define KEYCODE_B        0x35
 1013 #define KEYCODE_N        0x36
 1014 #define KEYCODE_M        0x37
 1015 #define KEYCODE_LESS     0x38
 1016 #define KEYCODE_GREATER  0x39
 1017 
 1018 
 1019 #define TABLETA_Dummy        (TAG_USER + 0x3A000)
 1020 #define TABLETA_TabletZ      (TABLETA_Dummy + 1)
 1021 #define TABLETA_RangeZ       (TABLETA_Dummy + 2)
 1022 #define TABLETA_AngleX       (TABLETA_Dummy + 3)
 1023 #define TABLETA_AngleY       (TABLETA_Dummy + 4)
 1024 #define TABLETA_AngleZ       (TABLETA_Dummy + 5)
 1025 #define TABLETA_Pressure     (TABLETA_Dummy + 6)
 1026 #define TABLETA_ButtonBits   (TABLETA_Dummy + 7)
 1027 #define TABLETA_InProximity  (TABLETA_Dummy + 8)
 1028 #define TABLETA_ResolutionX  (TABLETA_Dummy + 9)
 1029 #define TABLETA_ResolutionY  (TABLETA_Dummy + 10)
 1030 
 1031 
 1032 struct TabletData
 1033 {
 1034 	UWORD           td_XFraction, td_YFraction;
 1035 	ULONG           td_TabletX, td_TabletY;
 1036 	ULONG           td_RangeX, td_RangeY;
 1037 
 1038 	struct TagItem *td_TagList;
 1039 };
 1040 
 1041 
 1042 struct TabletHookData
 1043 {
 1044 	struct Screen *thd_Screen;
 1045 
 1046 	ULONG          thd_Width;
 1047 	ULONG          thd_Height;
 1048 
 1049 	LONG           thd_ScreenChanged;
 1050 };
 1051 
 1052 
 1053 #pragma pack()
 1054 
 1055 #ifndef INTUITION_IOBSOLETE_H
 1056 # include <intuition/iobsolete.h>
 1057 #endif
 1058 
 1059 #endif /* INTUITION_INTUITION_H */