Skip to content

Latest commit

 

History

History
411 lines (340 loc) · 13.1 KB

File metadata and controls

411 lines (340 loc) · 13.1 KB
#ifndef INTUITION_SCREENS_H
#define INTUITION_SCREENS_H TRUE
/*
**  $Filename: intuition/screens.h $
**  $Release: 2.04 Includes, V37.4 $
**  $Revision: 36.36 $
**  $Date: 91/10/07 $
**
**  The Screen and NewScreen structures and attributes
**
**  (C) Copyright 1985-1999 Amiga, Inc.
**	    All Rights Reserved
*/

#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif

#ifndef GRAPHICS_GFX_H
#include <graphics/gfx.h>
#endif

#ifndef GRAPHICS_CLIP_H
#include <graphics/clip.h>
#endif

#ifndef GRAPHICS_VIEW_H
#include <graphics/view.h>
#endif

#ifndef GRAPHICS_RASTPORT_H
#include <graphics/rastport.h>
#endif

#ifndef GRAPHICS_LAYERS_H
#include <graphics/layers.h>
#endif

#ifndef UTILITY_TAGITEM_H
#include <utility/tagitem.h>
#endif

/*
* NOTE:  intuition/iobsolete.h 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 );
*/

/* If you find dri_Version >= DRI_VERSION, you know this structure
* has at least the fields defined in this version of the include file
*/
#define RI_VERSION	(1)	/* obsolete, will be removed		*/
#define DRI_VERSION	(1)

struct DrawInfo
{
UWORD	dri_Version;	/* will be  DRI_VERSION			*/
UWORD	dri_NumPens;	/* guaranteed to be >= numDrIPens	*/
UWORD	*dri_Pens;	/* pointer to pen array			*/

struct TextFont	*dri_Font;	/* screen default font		*/
UWORD	dri_Depth;	/* (initial) depth of screen bitmap	*/

struct {	  /* from DisplayInfo database for initial display mode	*/
UWORD	X;
UWORD	Y;
}		dri_Resolution;

ULONG	dri_Flags;		/* defined below		*/
ULONG	dri_Reserved[7];	/* avoid recompilation ;^)	*/
};

#define DRIF_NEWLOOK	0x00000001	/* specified SA_Pens, full treatment */

/* rendering pen number indexes into DrawInfo.dri_Pens[]	*/
#define DETAILPEN	 (0x0000)	/* compatible Intuition rendering pens	*/
#define BLOCKPEN	 (0x0001)	/* compatible Intuition rendering pens	*/
#define TEXTPEN		 (0x0002)	/* text on background			*/
#define SHINEPEN	 (0x0003)	/* bright edge on 3D objects		*/
#define SHADOWPEN	 (0x0004)	/* dark edge on 3D objects		*/
#define FILLPEN		 (0x0005)	/* active-window/selected-gadget fill	*/
#define FILLTEXTPEN	 (0x0006)	/* text over FILLPEN			*/
#define BACKGROUNDPEN	 (0x0007)	/* always color 0			*/
#define HIGHLIGHTTEXTPEN (0x0008)	/* special color text, on background	*/

#define NUMDRIPENS	 (0x0009)


/* ======================================================================== */
/* === Screen ============================================================= */
/* ======================================================================== */
struct Screen
{
struct Screen *NextScreen;		/* linked list of screens */
struct Window *FirstWindow;		/* linked list Screen's Windows */

WORD LeftEdge, TopEdge;		/* parameters of the screen */
WORD Width, Height;			/* parameters of the screen */

WORD MouseY, MouseX;		/* position relative to upper-left */

UWORD Flags;			/* see definitions below */

UBYTE *Title;			/* null-terminated Title text */
UBYTE *DefaultTitle;		/* for Windows without ScreenTitle */

/* Bar sizes for this Screen and all Window's in this Screen */
/* Note that BarHeight is one less than the actual menu bar
* height.	We're going to keep this in V36 for compatibility,
* although V36 artwork might use that extra pixel
*
* Also, the title bar height of a window is calculated from the
* screen's WBorTop field, plus the font height, plus one.
*/
BYTE BarHeight, BarVBorder, BarHBorder, MenuVBorder, MenuHBorder;
BYTE WBorTop, WBorLeft, WBorRight, WBorBottom;

struct TextAttr *Font;		/* this screen's default font	   */

/* the display data structures for this Screen */
struct ViewPort ViewPort;		/* describing the Screen's display */
struct RastPort RastPort;		/* describing Screen rendering	   */
struct BitMap BitMap;		/* extra copy of RastPort BitMap   */
struct Layer_Info LayerInfo;	/* each screen gets a LayerInfo    */

/* Only system gadgets may be attached to a screen.
*	You get the standard system Screen Gadgets automatically
*/
struct Gadget *FirstGadget;

UBYTE DetailPen, BlockPen;		/* for bar/border/gadget rendering */

/* the following variable(s) are maintained by Intuition to support the
* DisplayBeep() color flashing technique
*/
UWORD SaveColor0;

/* This layer is for the Screen and Menu bars */
struct Layer *BarLayer;

UBYTE *ExtData;

UBYTE *UserData;	/* general-purpose pointer to User data extension */

/**** Data below this point are SYSTEM PRIVATE ****/
};


/* --- FLAGS SET BY INTUITION --------------------------------------------- */
/* The SCREENTYPE bits are reserved for describing various Screen types
* available under Intuition.
*/
#define SCREENTYPE	0x000F	/* all the screens types available	*/
/* --- the definitions for the Screen Type ------------------------------- */
#define WBENCHSCREEN	0x0001	/* identifies the Workbench screen	*/
#define PUBLICSCREEN	0x0002	/* public shared (custom) screen	*/
#define CUSTOMSCREEN	0x000F	/* original custom screens		*/

#define SHOWTITLE	0x0010	/* this gets set by a call to ShowTitle() */

#define BEEPING		0x0020	/* set when Screen is beeping (private)	*/

#define CUSTOMBITMAP	0x0040	/* if you are supplying your own BitMap */

#define SCREENBEHIND	0x0080	/* if you want your screen to open behind
* already open screens
*/
#define SCREENQUIET	0x0100	/* if you do not want Intuition to render
* into your screen (gadgets, title)
*/
#define SCREENHIRES	0x0200	/* do not use lowres gadgets  (private)	*/

#define NS_EXTENDED	0x1000		/* ExtNewScreen.Extension is valid	*/
/* V36 applications can use OpenScreenTagList() instead of NS_EXTENDED	*/

#define AUTOSCROLL	0x4000	/* screen is to autoscoll		*/

#define STDSCREENHEIGHT -1	/* supply in NewScreen.Height		*/
#define STDSCREENWIDTH -1	/* supply in NewScreen.Width		*/

/*
* 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.
*/

#define SA_Dummy	(TAG_USER + 32)
/*
* these items specify items equivalent to fields in NewScreen
*/
#define SA_Left		(SA_Dummy + 0x0001)
#define SA_Top		(SA_Dummy + 0x0002)
#define SA_Width	(SA_Dummy + 0x0003)
#define SA_Height	(SA_Dummy + 0x0004)
/* traditional screen positions	and dimensions	*/
#define SA_Depth	(SA_Dummy + 0x0005)
/* screen bitmap depth				*/
#define SA_DetailPen	(SA_Dummy + 0x0006)
/* serves as default for windows, too		*/
#define SA_BlockPen	(SA_Dummy + 0x0007)
#define SA_Title	(SA_Dummy + 0x0008)
/* default screen title				*/
#define SA_Colors	(SA_Dummy + 0x0009)
/* ti_Data is an array of struct ColorSpec,
* terminated by ColorIndex = -1.  Specifies
* initial screen palette colors.
*/
#define SA_ErrorCode	(SA_Dummy + 0x000A)
/* ti_Data points to LONG error code (values below)*/
#define SA_Font		(SA_Dummy + 0x000B)
/* equiv. to NewScreen.Font			*/
#define SA_SysFont	(SA_Dummy + 0x000C)
/* Selects one of the preferences system fonts:
*	0 - old DefaultFont, fixed-width
*	1 - WB Screen preferred font
*/
#define SA_Type		(SA_Dummy + 0x000D)
/* equiv. to NewScreen.Type			*/
#define SA_BitMap	(SA_Dummy + 0x000E)
/* ti_Data is pointer to custom BitMap.  This
* implies type of CUSTOMBITMAP
*/
#define SA_PubName	(SA_Dummy + 0x000F)
/* presence of this tag means that the screen
* is to be a public screen.  Please specify
* BEFORE the two tags below
*/
#define SA_PubSig	(SA_Dummy + 0x0010)
#define SA_PubTask	(SA_Dummy + 0x0011)
/* Task ID and signal for being notified that
* the last window has closed on a public screen.
*/
#define SA_DisplayID	(SA_Dummy + 0x0012)
/* ti_Data is new extended display ID from
* <graphics/displayinfo.h>.
*/
#define SA_DClip	(SA_Dummy + 0x0013)
/* ti_Data points to a rectangle which defines
* screen display clip region
*/
#define SA_Overscan	(SA_Dummy + 0x0014)
/* was S_STDDCLIP.  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).
* If you use this, you shouldn't specify
* SA_DClip.  SA_Overscan is for "standard"
* overscan dimensions, SA_DClip is for
* your custom numeric specifications.
*/
#define SA_Obsolete1	(SA_Dummy + 0x0015)
/* obsolete S_MONITORNAME			*/

/** booleans **/
#define SA_ShowTitle	(SA_Dummy + 0x0016)
/* boolean equivalent to flag SHOWTITLE		*/
#define SA_Behind	(SA_Dummy + 0x0017)
/* boolean equivalent to flag SCREENBEHIND	*/
#define SA_Quiet	(SA_Dummy + 0x0018)
/* boolean equivalent to flag SCREENQUIET	*/
#define SA_AutoScroll	(SA_Dummy + 0x0019)
/* boolean equivalent to flag AUTOSCROLL	*/
#define SA_Pens		(SA_Dummy + 0x001A)
/* pointer to ~0 terminated UWORD array, as
* found in struct DrawInfo
*/
#define SA_FullPalette	(SA_Dummy + 0x001B)
/* 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()
*/

/* this is an obsolete tag included only for compatibility with V35
* interim release for the A2024 and Viking monitors
*/
#ifndef NSTAG_EXT_VPMODE
#define NSTAG_EXT_VPMODE (TAG_USER | 1)
#endif


/* OpenScreen error codes, which are returned in the (optional) LONG
* pointed to by ti_Data for the SA_ErrorCode tag item
*/
#define OSERR_NOMONITOR	(1)	/* named monitor spec not available	*/
#define OSERR_NOCHIPS	(2)	/* you need newer custom chips		*/
#define OSERR_NOMEM	(3)	/* couldn't get normal memory		*/
#define OSERR_NOCHIPMEM	(4)	/* couldn't get chipmem			*/
#define OSERR_PUBNOTUNIQUE (5)	/* public screen name already used	*/
#define OSERR_UNKNOWNMODE (6)	/* don't recognize mode asked for	*/

/* ======================================================================== */
/* === NewScreen ========================================================== */
/* ======================================================================== */
/* note: to use the Extended field, you must use the
* new ExtNewScreen structure, below
*/
struct NewScreen
{
WORD LeftEdge, TopEdge, Width, Height, Depth;  /* screen dimensions */

UBYTE DetailPen, BlockPen;	/* for bar/border/gadget rendering	*/

UWORD ViewModes;		/* the Modes for the ViewPort (and View) */

UWORD Type;			/* the Screen type (see defines above)	*/

struct TextAttr *Font;	/* this Screen's default text attributes */

UBYTE *DefaultTitle;	/* the default title for this Screen	*/

struct Gadget *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 Type field 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
*/
struct BitMap *CustomBitMap;
};

/*
* For compatibility reasons, we need a new structure for extending
* NewScreen.  Use this structure is you need to use the new Extension
* field.
*
* NOTE: V36-specific applications should use the
* OpenScreenTagList( newscreen, tags ) version of OpenScreen().
* Applications that want to be V34-compatible as well may safely use the
* ExtNewScreen structure.  Its tags will be ignored by V34 Intuition.
*
*/
struct ExtNewScreen
{
WORD LeftEdge, TopEdge, Width, Height, Depth;
UBYTE DetailPen, BlockPen;
UWORD ViewModes;
UWORD Type;
struct TextAttr *Font;
UBYTE *DefaultTitle;
struct Gadget *Gadgets;
struct BitMap *CustomBitMap;

struct TagItem	*Extension;
/* more specification data, scanned if
* NS_EXTENDED is set in NewScreen.Type
*/
};

/* === Overscan Types ===	*/
#define OSCAN_TEXT	(1)	/* entirely visible	*/
#define OSCAN_STANDARD	(2)	/* just past edges	*/
#define OSCAN_MAX	(3)	/* as much as possible	*/
#define OSCAN_VIDEO	(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.
*
* Never change one of these.
*/

struct PubScreenNode	{
struct Node		psn_Node;	/* ln_Name is screen name */
struct Screen	*psn_Screen;
UWORD		psn_Flags;	/* below		*/
WORD		psn_Size;	/* includes name buffer	*/
WORD		psn_VisitorCount; /* how many visitor windows */
struct Task		*psn_SigTask;	/* who to signal when visitors gone */
UBYTE		psn_SigBit;	/* which signal	*/
};

#define PSNF_PRIVATE	(0x0001)

/* NOTE: Due to a bug in NextPubScreen(), make sure your buffer
* actually has MAXPUBSCREENNAME+1 characters in it!
*/
#define MAXPUBSCREENNAME	(139)	/* names no longer, please	*/

/* pub screen modes	*/
#define SHANGHAI	0x0001	/* put workbench windows on pub screen */
#define POPPUBSCREEN	0x0002	/* pop pub screen to front when visitor opens */


/* Include obsolete identifiers: */
#ifndef INTUITION_IOBSOLETE_H
#include <intuition/iobsolete.h>
#endif

#endif