home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 4 / FreshFish_May-June1994.bin / bbs / cbm / os-include.lha / os-include / intuition / screens.h < prev    next >
C/C++ Source or Header  |  1993-10-15  |  23KB  |  662 lines

  1. #ifndef INTUITION_SCREENS_H
  2. #define INTUITION_SCREENS_H TRUE
  3. /*
  4. **  $VER: screens.h 38.25 (15.2.93)
  5. **  Includes Release 40.15
  6. **
  7. **  The Screen and NewScreen structures and attributes
  8. **
  9. **  (C) Copyright 1985-1993 Commodore-Amiga, Inc.
  10. **        All Rights Reserved
  11. */
  12.  
  13. #ifndef EXEC_TYPES_H
  14. #include <exec/types.h>
  15. #endif
  16.  
  17. #ifndef GRAPHICS_GFX_H
  18. #include <graphics/gfx.h>
  19. #endif
  20.  
  21. #ifndef GRAPHICS_CLIP_H
  22. #include <graphics/clip.h>
  23. #endif
  24.  
  25. #ifndef GRAPHICS_VIEW_H
  26. #include <graphics/view.h>
  27. #endif
  28.  
  29. #ifndef GRAPHICS_RASTPORT_H
  30. #include <graphics/rastport.h>
  31. #endif
  32.  
  33. #ifndef GRAPHICS_LAYERS_H
  34. #include <graphics/layers.h>
  35. #endif
  36.  
  37. #ifndef UTILITY_TAGITEM_H
  38. #include <utility/tagitem.h>
  39. #endif
  40.  
  41. /*
  42.  * NOTE:  intuition/iobsolete.h is included at the END of this file!
  43.  */
  44.  
  45. /* ======================================================================== */
  46. /* === DrawInfo ========================================================= */
  47. /* ======================================================================== */
  48.  
  49. /* This is a packet of information for graphics rendering.  It originates
  50.  * with a Screen, and is gotten using GetScreenDrawInfo( screen );
  51.  */
  52.  
  53. /* You can use the Intuition version number to tell which fields are
  54.  * present in this structure.
  55.  *
  56.  * DRI_VERSION of 1 corresponds to V37 release.
  57.  * DRI_VERSION of 2 corresponds to V39, and includes three new pens
  58.  *    and the dri_CheckMark and dri_AmigaKey fields.
  59.  *
  60.  * Note that sometimes applications need to create their own DrawInfo
  61.  * structures, in which case the DRI_VERSION won't correspond exactly
  62.  * to the OS version!!!
  63.  */
  64. #define DRI_VERSION    (2)
  65.  
  66. struct DrawInfo
  67. {
  68.     UWORD    dri_Version;    /* will be  DRI_VERSION            */
  69.     UWORD    dri_NumPens;    /* guaranteed to be >= 9        */
  70.     UWORD    *dri_Pens;    /* pointer to pen array            */
  71.  
  72.     struct TextFont    *dri_Font;    /* screen default font        */
  73.     UWORD    dri_Depth;    /* (initial) depth of screen bitmap    */
  74.  
  75.     struct {      /* from DisplayInfo database for initial display mode    */
  76.     UWORD    X;
  77.     UWORD    Y;
  78.     }        dri_Resolution;
  79.  
  80.     ULONG    dri_Flags;        /* defined below        */
  81. /* New for V39: dri_CheckMark, dri_AmigaKey. */
  82.     struct Image    *dri_CheckMark;    /* pointer to scaled checkmark image
  83.                      * Will be NULL if DRI_VERSION < 2
  84.                      */
  85.     struct Image    *dri_AmigaKey;    /* pointer to scaled Amiga-key image
  86.                      * Will be NULL if DRI_VERSION < 2
  87.                      */
  88.     ULONG    dri_Reserved[5];    /* avoid recompilation ;^)    */
  89. };
  90.  
  91. #define DRIF_NEWLOOK    0x00000001    /* specified SA_Pens, full treatment */
  92.  
  93. /* rendering pen number indexes into DrawInfo.dri_Pens[]    */
  94. #define DETAILPEN     (0x0000)    /* compatible Intuition rendering pens    */
  95. #define BLOCKPEN     (0x0001)    /* compatible Intuition rendering pens    */
  96. #define TEXTPEN         (0x0002)    /* text on background            */
  97. #define SHINEPEN     (0x0003)    /* bright edge on 3D objects        */
  98. #define SHADOWPEN     (0x0004)    /* dark edge on 3D objects        */
  99. #define FILLPEN         (0x0005)    /* active-window/selected-gadget fill    */
  100. #define FILLTEXTPEN     (0x0006)    /* text over FILLPEN            */
  101. #define BACKGROUNDPEN     (0x0007)    /* always color 0            */
  102. #define HIGHLIGHTTEXTPEN (0x0008)    /* special color text, on background    */
  103. /* New for V39, only present if DRI_VERSION >= 2: */
  104. #define BARDETAILPEN     (0x0009)    /* text/detail in screen-bar/menus */
  105. #define BARBLOCKPEN     (0x000A)    /* screen-bar/menus fill */
  106. #define BARTRIMPEN     (0x000B)    /* trim under screen-bar */
  107.  
  108. #define NUMDRIPENS     (0x000C)
  109.  
  110.  
  111. /* New for V39:  It is sometimes useful to specify that a pen value
  112.  * is to be the complement of color zero to three.  The "magic" numbers
  113.  * serve that purpose:
  114.  */
  115. #define PEN_C3        0xFEFC        /* Complement of color 3 */
  116. #define PEN_C2        0xFEFD        /* Complement of color 2 */
  117. #define PEN_C1        0xFEFE        /* Complement of color 1 */
  118. #define PEN_C0        0xFEFF        /* Complement of color 0 */
  119.  
  120. /* ======================================================================== */
  121. /* === Screen ============================================================= */
  122. /* ======================================================================== */
  123.  
  124. /* VERY IMPORTANT NOTE ABOUT Screen->BitMap.  In the future, bitmaps
  125.  * will need to grow.  The embedded instance of a bitmap in the screen
  126.  * will no longer be large enough to hold the whole description of
  127.  * the bitmap.
  128.  *
  129.  * YOU ARE STRONGLY URGED to use Screen->RastPort.BitMap in place of
  130.  * &Screen->BitMap whenever and whereever possible.
  131.  */
  132.  
  133. struct Screen
  134. {
  135.     struct Screen *NextScreen;        /* linked list of screens */
  136.     struct Window *FirstWindow;        /* linked list Screen's Windows */
  137.  
  138.     WORD LeftEdge, TopEdge;        /* parameters of the screen */
  139.     WORD Width, Height;            /* parameters of the screen */
  140.  
  141.     WORD MouseY, MouseX;        /* position relative to upper-left */
  142.  
  143.     UWORD Flags;            /* see definitions below */
  144.  
  145.     UBYTE *Title;            /* null-terminated Title text */
  146.     UBYTE *DefaultTitle;        /* for Windows without ScreenTitle */
  147.  
  148.     /* Bar sizes for this Screen and all Window's in this Screen */
  149.     /* Note that BarHeight is one less than the actual menu bar
  150.      * height.    We're going to keep this in V36 for compatibility,
  151.      * although V36 artwork might use that extra pixel
  152.      *
  153.      * Also, the title bar height of a window is calculated from the
  154.      * screen's WBorTop field, plus the font height, plus one.
  155.      */
  156.     BYTE BarHeight, BarVBorder, BarHBorder, MenuVBorder, MenuHBorder;
  157.     BYTE WBorTop, WBorLeft, WBorRight, WBorBottom;
  158.  
  159.     struct TextAttr *Font;        /* this screen's default font       */
  160.  
  161.     /* the display data structures for this Screen */
  162.     struct ViewPort ViewPort;        /* describing the Screen's display */
  163.     struct RastPort RastPort;        /* describing Screen rendering       */
  164.     struct BitMap BitMap;        /* SEE WARNING ABOVE!           */
  165.     struct Layer_Info LayerInfo;    /* each screen gets a LayerInfo    */
  166.  
  167.     /* Only system gadgets may be attached to a screen.
  168.      *    You get the standard system Screen Gadgets automatically
  169.      */
  170.     struct Gadget *FirstGadget;
  171.  
  172.     UBYTE DetailPen, BlockPen;        /* for bar/border/gadget rendering */
  173.  
  174.     /* the following variable(s) are maintained by Intuition to support the
  175.      * DisplayBeep() color flashing technique
  176.      */
  177.     UWORD SaveColor0;
  178.  
  179.     /* This layer is for the Screen and Menu bars */
  180.     struct Layer *BarLayer;
  181.  
  182.     UBYTE *ExtData;
  183.  
  184.     UBYTE *UserData;    /* general-purpose pointer to User data extension */
  185.  
  186.     /**** Data below this point are SYSTEM PRIVATE ****/
  187. };
  188.  
  189.  
  190. /* --- FLAGS SET BY INTUITION --------------------------------------------- */
  191. /* The SCREENTYPE bits are reserved for describing various Screen types
  192.  * available under Intuition.
  193.  */
  194. #define SCREENTYPE    0x000F    /* all the screens types available    */
  195. /* --- the definitions for the Screen Type ------------------------------- */
  196. #define WBENCHSCREEN    0x0001    /* identifies the Workbench screen    */
  197. #define PUBLICSCREEN    0x0002    /* public shared (custom) screen    */
  198. #define CUSTOMSCREEN    0x000F    /* original custom screens        */
  199.  
  200. #define SHOWTITLE    0x0010    /* this gets set by a call to ShowTitle() */
  201.  
  202. #define BEEPING        0x0020    /* set when Screen is beeping (private)    */
  203.  
  204. #define CUSTOMBITMAP    0x0040    /* if you are supplying your own BitMap */
  205.  
  206. #define SCREENBEHIND    0x0080    /* if you want your screen to open behind
  207.                  * already open screens
  208.                  */
  209. #define SCREENQUIET    0x0100    /* if you do not want Intuition to render
  210.                  * into your screen (gadgets, title)
  211.                  */
  212. #define SCREENHIRES    0x0200    /* do not use lowres gadgets  (private)    */
  213.  
  214. #define NS_EXTENDED    0x1000        /* ExtNewScreen.Extension is valid    */
  215. /* V36 applications can use OpenScreenTagList() instead of NS_EXTENDED    */
  216.  
  217. #define AUTOSCROLL    0x4000    /* screen is to autoscoll        */
  218.  
  219. /* New for V39: */
  220. #define PENSHARED    0x0400    /* Screen opener set {SA_SharePens,TRUE} */
  221.  
  222.  
  223.  
  224.  
  225. #define STDSCREENHEIGHT -1    /* supply in NewScreen.Height        */
  226. #define STDSCREENWIDTH -1    /* supply in NewScreen.Width        */
  227.  
  228. /*
  229.  * Screen attribute tag ID's.  These are used in the ti_Tag field of
  230.  * TagItem arrays passed to OpenScreenTagList() (or in the
  231.  * ExtNewScreen.Extension field).
  232.  */
  233.  
  234. /* Screen attribute tags.  Please use these versions, not those in
  235.  * iobsolete.h.
  236.  */
  237.  
  238. #define SA_Dummy    (TAG_USER + 32)
  239. /*
  240.  * these items specify items equivalent to fields in NewScreen
  241.  */
  242. #define SA_Left        (SA_Dummy +