home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 2
/
goldfish_vol2_cd1.bin
/
gnu
/
os-include
/
intuition
/
screens.i
< prev
next >
Wrap
Text File
|
1993-10-15
|
20KB
|
566 lines
IFND INTUITION_SCREENS_I
INTUITION_SCREENS_I SET 1
**
** $VER: screens.i 38.25 (15.2.93)
** Includes Release 40.15
**
** The Screen and NewScreen structures and attributes
**
** (C) Copyright 1985-1993 Commodore-Amiga, Inc.
** All Rights Reserved
**
IFND EXEC_TYPES_I
INCLUDE "exec/types.i"
ENDC
IFND GRAPHICS_GFX_I
INCLUDE "graphics/gfx.i"
ENDC
IFND GRAPHICS_CLIP_I
INCLUDE "graphics/clip.i"
ENDC
IFND GRAPHICS_VIEW_I
INCLUDE "graphics/view.i"
ENDC
IFND GRAPHICS_RASTPORT_I
INCLUDE "graphics/rastport.i"
ENDC
IFND GRAPHICS_LAYERS_I
INCLUDE "graphics/layers.i"
ENDC
IFND UTILITY_TAGITEM_I
INCLUDE "utility/tagitem.i"
ENDC
*
* NOTE: intuition/iobsolete.i is included at the END of this file!
*
; ========================================================================
; === DrawInfo =========================================================
; ========================================================================
* This is a packet of information for graphics rendering. It originates
* with a Screen, and is gotten using GetScreenDrawInfo( screen );
* You can use the Intuition version number to tell which fields are
* present in this structure.
*
* DRI_VERSION of 1 corresponds to V37 release.
* DRI_VERSION of 2 corresponds to V39, and includes three new pens
* and the dri_CheckMark and dri_AmigaKey fields.
*
* Note that sometimes applications need to create their own DrawInfo
* structures, in which case the DRI_VERSION won't correspond exactly
* to the OS version!!!
DRI_VERSION EQU 2
STRUCTURE DrawInfo,0
UWORD dri_Version ; will be DRI_VERSION
UWORD dri_NumPens ; guaranteed to be >= 9
APTR dri_Pens ; pointer to pen array
APTR dri_Font ; screen default font
UWORD dri_Depth ; (initial) depth of screen bitmap
; from DisplayInfo database for initial display mode
UWORD dri_ResolutionX
UWORD dri_ResolutionY
ULONG dri_Flags
; New for V39: dri_CheckMark, dri_AmigaKey
APTR dri_CheckMark ; pointer to scaled checkmark image
; Will be NULL if DRI_VERSION < 2
APTR dri_AmigaKey ; pointer to scaled Amiga-key image
; Will be NULL if DRI_VERSION < 2
STRUCT dri_longreserved,20
DRIF_NEWLOOK EQU $00000001 ; specified SA_Pens, full treatment
DRIB_NEWLOOK EQU 0
; rendering pen number indexes into DrawInfo.dri_Pens[]
ENUM
EITEM DETAILPEN ; compatible Intuition rendering pens
EITEM BLOCKPEN,
EITEM TEXTPEN ; text on background (pen = 0)
EITEM SHINEPEN ; bright edge on bas-relief
EITEM SHADOWPEN ; dark edge
EITEM FILLPEN ; active window fill
EITEM FILLTEXTPEN ; text over FILLPEN
EITEM BACKGROUNDPEN ; always color 0
EITEM HIGHLIGHTTEXTPEN ; highlighted text, against BACKGROUNDPEN
; New for V39, only present if DRI_VERSION >= 2:
EITEM BARDETAILPEN ; text/detail in screen-bar/menus
EITEM BARBLOCKPEN ; screen-bar/menus fill
EITEM BARTRIMPEN ; trim under menu-bar
EITEM NUMDRIPENS
* New for V39: It is sometimes useful to specify that a pen value
* is to be the complement of color zero to three. The "magic" numbers
* serve that purpose:
PEN_C3 EQU $FEFC ; Complement of color 3
PEN_C2 EQU $FEFD ; Complement of color 2
PEN_C1 EQU $FEFE ; Complement of color 1
PEN_C0 EQU $FEFF ; Complement of color 0
; ========================================================================
; === Screen =============================================================
; ========================================================================
* VERY IMPORTANT NOTE ABOUT Screen->BitMap. In the future, bitmaps
* will need to grow. The embedded instance of a bitmap in the screen
* will no longer be large enough to hold the whole description of
* the bitmap.
*
* YOU ARE STRONGLY URGED to use Screen->RastPort.BitMap in place of
* &Screen->BitMap whenever and whereever possible.
STRUCTURE Screen,0
APTR sc_NextScreen ; linked list of screens
APTR sc_FirstWindow ; linked list Screen's Windows
WORD sc_LeftEdge ; parameters of the screen
WORD sc_TopEdge ; parameters of the screen
WORD sc_Width
WORD sc_Height
WORD sc_MouseY ; position relative to upper-left
WORD sc_MouseX ; position relative to upper-left
WORD sc_Flags ; see definitions below
APTR sc_Title ; null-terminated Title text
APTR sc_DefaultTitle ; for Windows without ScreenTitle
; Bar sizes for this Screen and all Window's in this Screen
BYTE sc_BarHeight
BYTE sc_BarVBorder
BYTE sc_BarHBorder
BYTE sc_MenuVBorder
BYTE sc_MenuHBorder
BYTE sc_WBorTop
BYTE sc_WBorLeft
BYTE sc_WBorRight
BYTE sc_WBorBottom
BYTE sc_KludgeFill00 ; This is strictly for word-alignment
; the display data structures for this Screen
APTR sc_Font ; this screen's default font
STRUCT sc_ViewPort,vp_SIZEOF ; describing the Screen's display
STRUCT sc_RastPort,rp_SIZEOF ; describing Screen rendering
STRUCT sc_BitMap,bm_SIZEOF ; SEE WARNING ABOVE!
STRUCT sc_LayerInfo,li_SIZEOF ; each screen gets a LayerInfo
APTR sc_FirstGadget
BYTE sc_DetailPen ; for bar/border/gadget rendering
BYTE sc_BlockPen ; for bar/border/gadget rendering
; the following variable(s) are maintained by Intuition to support the
; DisplayBeep() color flashing technique
WORD sc_SaveColor0
; This layer is for the Screen and Menu bars
APTR sc_BarLayer ; was "BarLayer"
APTR sc_ExtData
APTR sc_UserData ; general-purpose pointer to User data
LABEL sc_SIZEOF ; actually, you have no business talking about
; or relying on the size of a screen structure
; --- FLAGS SET BY INTUITION -------------------------------------------------
; The SCREENTYPE bits are reserved for describing various Screen types
; available under Intuition.
SCREENTYPE EQU $000F ; all the screens types available
; --- the definitions for the Screen Type ------------------------------------
WBENCHSCREEN EQU $0001 ; identifies the Workbench screen
PUBLICSCREEN EQU $0002 ; public shared (custom) screen
CUSTOMSCREEN EQU $000F ; for that special look
SHOWTITLE EQU $0010 ; this gets set by a call to ShowTitle()
BEEPING EQU $0020 ; set when Screen is beeping
CUSTOMBITMAP EQU $0040 ; if you are supplying your own BitMap
SCREENBEHIND EQU $0080 ; if you want your screen to open behind
; already open screens
SCREENQUIET EQU $0100 ; if you do not want Intuition to render
; into your screen (gadgets, title)
SCREENHIRES EQU $0200 ; do not use lowres gadgets (set by intuition)
STDSCREENHEIGHT EQU -1 ; supply in NewScreen.Height
STDSCREENWIDTH EQU -1 ; supply in NewScreen.Width
NS_EXTENDED EQU $1000 ; means ns_Extenion is valid
AUTOSCROLL EQU $4000 ; automatic scrolling of large raster
* New for V39:
PENSHARED EQU $0400 ; Screen opener set {SA_SharePens,TRUE}
* Screen attribute tag ID's. These are used in the ti_Tag field of
* TagItem arrays passed to OpenScreenTagList() (or in the
* ExtNewScreen.Extension field).
* Screen attribute tags. Please use these versions, not those in
* iobsolete.h.
ENUM TAG_USER+33
*
* these items specify items equivalent to fields in NewScreen
EITEM SA_Left ; traditional screen positions and dimensions
EITEM SA_Top
EITEM SA_Width
EITEM SA_Height
EITEM SA_Depth ; screen bitmap depth
EITEM SA_DetailPen ; serves as default for windows, too
EITEM SA_BlockPen
EITEM SA_Title ; default screen title
EITEM SA_Colors ; ti_Data is an array of struct ColorSpec,
; terminated by ColorIndex = -1. Specifies
; initial screen palette colors.
; Also see SA_Colors32 for use under V39.
EITEM SA_ErrorCode ; ti_Data points to LONG error code (values below)
EITEM SA_Font ; equiv. to NewScreen.Font
EITEM SA_SysFont ; Selects one of the preferences system fonts:
; 0 - old DefaultFont, fixed-width
; 1 - WB Screen preferred font
EITEM SA_Type ; ti_Data is PUBLICSCREEN or CUSTOMSCREEN. For other
; fields of NewScreen.Type, see individual tags,
; eg. SA_Behind, SA_Quiet.
EITEM SA_BitMap ; ti_Data is pointer to custom BitMap. This
; implies type of CUSTOMBITMAP
EITEM SA_PubName ; presence of this tag means that the screen
; is to be a public screen. Please specify
; BEFORE the two tags below
EITEM SA_PubSig
EITEM SA_PubTask ; Task ID and signal for being notified that
; the last window has closed on a public screen.
EITEM SA_DisplayID ; ti_Data is new extended display ID from
; <graphics/displayinfo.i> (V37) or from
; <graphics/modeid.i> (V39 and up)
EITEM SA_DClip ; ti_Data points to a rectangle which defines
; screen display clip region
EITEM SA_Overscan ; Set to one of the OSCAN_
; specifiers below to get a system standard
; overscan region for your display clip,
; screen dimensions (unless otherwise specified),
; and automatically centered position (partial
; support only so far).
EITEM SA_Obsolete1 ; obsolete S_MONITORNAME
* booleans *
EITEM SA_ShowTitle ; boolean equivalent to flag SHOWTITLE
EITEM SA_Behind ; boolean equivalent to flag SCREENBEHIND
EITEM SA_Quiet ; boolean equivalent to flag SCREENQUIET
EITEM SA_AutoScroll ; boolean equivalent to flag AUTOSCROLL
EITEM SA_Pens ; array as in DrawInfo, terminated by -1
EITEM SA_FullPalette ; boolean: initialize color table to entire
; preferences palette (32 for V36), rather
; than compatible pens 0-3, 17-19, with
; remaining palette as returned by GetColorMap()
EITEM SA_ColorMapEntries ; New for V39:
; Allows you to override the number of entries
; in the ColorMap for your screen. Intuition
; normally allocates (1<<depth) or 32, whichever
; is more, but you may require even more if you
; use certain V39 graphics.library features
; (eg. palette-banking).
EITEM SA_Parent ; New for V39:
; ti_Data is a pointer to a "parent" screen to
; attach this one to. Attached screens slide
; and depth-arrange together.
EITEM SA_Draggable ; New for V39:
; Boolean tag allowing non-draggable screens.
; Do not use without good reason!
; (Defaults to TRUE).
EITEM SA_Exclusive ; New for V39:
; Boolean tag allowing screens that won't share
; the display. Use sparingly! Starting with 3.01,
; attached screens may be SA_Exclusive. Setting
; SA_Exclusive for each screen will produce an
; exclusive family. (Defaults to FALSE).
EITEM SA_SharePens ; New for V39:
; For those pens in the screen's DrawInfo->dri_Pens,
; Intuition obtains them in shared mode (see
; graphics.library/ObtainPen()). For compatibility,
; Intuition obtains the other pens of a public
; screen as PEN_EXCLUSIVE. Screens that wish to
; manage the pens themselves should generally set
; this tag to TRUE. This instructs Intuition to
; leave the other pens unallocated.
EITEM SA_BackFill ; New for V39:
; provides a "backfill hook" for your screen's
; Layer_Info.
; See layers.library/InstallLayerInfoHook()
EITEM SA_Interleaved ; New for V39:
; Boolean tag requesting that the bitmap
; allocated for you be interleaved.
; (Defaults to FALSE).
EITEM SA_Colors32 ; New for V39:
; Tag to set the screen's initial palette colors
; at 32 bits-per-gun. ti_Data is a pointer
; to a table to be passed to the
; graphics.library/LoadRGB32() function.
; This format supports both runs of color
; registers and sparse registers. See the
; autodoc for that function for full details.
; Any color set here has precedence over
; the same register set by SA_Colors.
EITEM SA_VideoControl ; New for V39:
; ti_Data is a pointer to a taglist that Intuition
; will pass to graphics.library/VideoControl(),
; upon opening the screen.
EITEM SA_FrontChild ; New for V39:
; ti_Data is a pointer to an already open screen
; that is to be the child of the screen being
; opened. The child screen will be moved to the
; front of its family.
EITEM SA_BackChild ; New for V39:
; ti_Data is a pointer to an already open screen
; that is to be the child of the screen being
; opened. The child screen will be moved to the
; back of its family.
EITEM SA_LikeWorkbench ; New for V39:
; Set ti_Data to 1 to request a screen which
; is just like the Workbench. This gives
; you the same screen mode, depth, size,
; colors, etc., as the Workbench screen.
EITEM SA_Reserved ; Reserved for private Intuition use
EITEM SA_MinimizeISG ; New for V40:
; For compatibility, Intuition always ensures
; that the inter-screen gap is at least three
; non-interlaced lines. If your application
; would look best with the smallest possible
; inter-screen gap, set ti_Data to TRUE.
; If you use the new graphics VideoControl()
; VC_NoColorPaletteLoad tag for your screen's
; ViewPort, you should also set this tag.
* OpenScreen error codes, which are returned in the (optional) LONG
* pointed to by ti_Data for the SA_ErrorCode tag item
OSERR_NOMONITOR EQU (1) ; named monitor spec not available
OSERR_NOCHIPS EQU (2) ; you need newer custom chips
OSERR_NOMEM EQU (3) ; couldn't get normal memory
OSERR_NOCHIPMEM EQU (4) ; couldn't get chipmem
OSERR_PUBNOTUNIQUE EQU (5) ; public screen name already used
OSERR_UNKNOWNMODE EQU (6) ; don't recognize mode asked for
OSERR_TOODEEP EQU (7) ; Screen deeper than HW supports
OSERR_ATTACHFAIL EQU (8) ; Failed to attach screens
OSERR_NOTAVAILABLE EQU (9) ; Mode not available for other reason
; ========================================================================
; === NewScreen ==========================================================
; ========================================================================
; NOTE: to use Extension field, you need to use ExtNewScreen, below
STRUCTURE NewScreen,0
WORD ns_LeftEdge ; initial Screen dimensions
WORD ns_TopEdge ; initial Screen dimensions
WORD ns_Width ; initial Screen dimensions
WORD ns_Height ; initial Screen dimensions
WORD ns_Depth ; initial Screen dimensions
BYTE ns_DetailPen ; default rendering pens (for Windows too)
BYTE ns_BlockPen ; default rendering pens (for Windows too)
WORD ns_ViewModes ; display "modes" for this Screen
WORD ns_Type ; Intuition Screen Type specifier
APTR ns_Font ; default font for Screen and Windows
APTR ns_DefaultTitle ; Title when Window doesn't care
APTR ns_Gadgets ; UNUSED: Leave this NULL
; if you are opening a CUSTOMSCREEN and already have a BitMap
; that you want used for your Screen, you set the flags CUSTOMBITMAP in
; the Types variable and you set this variable to point to your BitMap
; structure. The structure will be copied into your Screen structure,
; after which you may discard your own BitMap if you want
APTR ns_CustomBitMap
LABEL ns_SIZEOF
; For compatibility reasons, we need a new structure for extending
; NewScreen. Use this structure is you need to use the new Extension
; field.
; NOTE WELL: this structure may be extended again in the future.
;Writing code which depends on its size is not allowed.
STRUCTURE ExtNewScreen,ns_SIZEOF
APTR ens_Extension ; struct TagItem *
; more specification data, scanned if
; NS_EXTENDED is set in ns_Type
LABEL ens_SIZEOF
* === Overscan Types ===
OSCAN_TEXT EQU 1 ; entirely visible
OSCAN_STANDARD EQU 2 ; just past edges
OSCAN_MAX EQU 3 ; as much as possible
OSCAN_VIDEO EQU 4 ; even more than is possible
* === Public Shared Screen Node ===
* This is the representative of a public shared screen.
* This is an internal data structure, but some functions may
* present a copy of it to the calling application. In that case,
* be aware that the screen pointer of the structure can NOT be
* used safely, since there is no guarantee that the referenced
* screen will remain open and a valid data structure.
STRUCTURE PubScreenNode,LN_SIZE
APTR psn_Screen ; pointer to screen itself
UWORD psn_Flags ; below
WORD psn_Size ; includes name buffer size
WORD psn_VisitorCount ; how many visitor windows
APTR psn_SigTask ; who to signal when visitors gone
UBYTE psn_SigBit ; which signal
UBYTE psn_Pad1 ; word align
LABEL psn_SIZEOF
* psn_Flags values
PSNF_PRIVATE EQU $0001
* NOTE: Due to a bug in NextPubScreen(), make sure your buffer
* actually has MAXPUBSCREENNAME+1 characters in it!
MAXPUBSCREENNAME EQU 139 ; names no longer, please
; pub screen modes
SHANGHAI EQU $0001 ; put workbench windows on pub screen
POPPUBSCREEN EQU $0002 ; pop pub screen to front when visitor opens
* New for V39: Intuition has new screen depth-arrangement and movement
* functions called ScreenDepth() and ScreenPosition() respectively.
* These functions permit the old behavior of ScreenToFront(),
* ScreenToBack(), and MoveScreen(). ScreenDepth() also allows
* independent depth control of attached screens. ScreenPosition()
* optionally allows positioning screens even though they were opened
* {SA_Draggable,FALSE}.
* For ScreenDepth(), specify one of SDEPTH_TOFRONT or SDEPTH_TOBACK,
* and optionally also SDEPTH_INFAMILY.
*
* NOTE: ONLY THE OWNER OF THE SCREEN should ever specify
* SDEPTH_INFAMILY. Commodities, "input helper" programs,
* or any other program that did not open a screen should never
* use that flag. (Note that this is a style-behavior
* requirement; there is no technical requirement that the
* task calling this function need be the task which opened
* the screen).
SDEPTH_TOFRONT EQU 0 ; Bring screen to front
SDEPTH_TOBACK EQU 1 ; Send screen to back
SDEPTH_INFAMILY EQU 2 ; Move an attached screen with
; respect to other screens of
; its family
* Here's an obsolete name equivalent to SDEPTH_INFAMILY:
SDEPTH_CHILDONLY EQU SDEPTH_INFAMILY
* For ScreenPosition(), specify one of SPOS_RELATIVE, SPOS_ABSOLUTE,
* or SPOS_MAKEVISIBLE to describe the kind of screen positioning you
* wish to perform:
*
* SPOS_RELATIVE: The x1 and y1 parameters to ScreenPosition() describe
* the offset in coordinates you wish to move the screen by.
* SPOS_ABSOLUTE: The x1 and y1 parameters to ScreenPosition() describe
* the absolute coordinates you wish to move the screen to.
* SPOS_MAKEVISIBLE: (x1,y1)-(x2,y2) describes a rectangle on the
* screen which you would like autoscrolled into view.
*
* You may additionally set SPOS_FORCEDRAG along with any of the
* above. Set this if you wish to reposition an {SA_Draggable,FALSE}
* screen that you opened.
*
* NOTE: ONLY THE OWNER OF THE SCREEN should ever specify
* SPOS_FORCEDRAG. Commodities, "input helper" programs,
* or any other program that did not open a screen should never
* use that flag.
SPOS_RELATIVE EQU 0 ; Coordinates are relative
SPOS_ABSOLUTE EQU 1 ; Coordinates are expressed as
; absolutes, not relatives.
SPOS_MAKEVISIBLE EQU 2 ; Coordinates describe a box on
; the screen you wish to be
; made visible by autoscrolling
SPOS_FORCEDRAG EQU 4 ; Move non-draggable screen
* New for V39: Intuition supports double-buffering in screens,
* with friendly interaction with menus and certain gadgets.
* For each buffer, you need to get one of these structures
* from the AllocScreenBuffer() call. Never allocate your
* own ScreenBuffer structures!
*
* The sb_DBufInfo field is for your use. See the graphics.library
* AllocDBufInfo() autodoc for details.
STRUCTURE ScreenBuffer,0
APTR sb_BitMap ; BitMap of this buffer
APTR sb_DBufInfo ; DBufInfo for this buffer
LABEL sb_SIZEOF
* These are the flags that may be passed to AllocScreenBuffer().
SB_SCREEN_BITMAP EQU 1
SB_COPY_BITMAP EQU 2
* Include obsolete identifiers:
IFND INTUITION_IOBSOLETE_I
INCLUDE "intuition/iobsolete.i"
ENDC
ENDC