QuickDraw/QuickDraw.p

419 lines
13 KiB
OpenEdge ABL
Executable File

UNIT QuickDraw;
{ Copyright 1983 Apple Computer Inc. }
{ Written by Bill Atkinson }
INTERFACE
CONST srcCopy = 0; { the 16 transfer modes }
srcOr = 1;
srcXor = 2;
srcBic = 3;
notSrcCopy = 4;
notSrcOr = 5;
notSrcXor = 6;
notSrcBic = 7;
patCopy = 8;
patOr = 9;
patXor = 10;
patBic = 11;
notPatCopy = 12;
notPatOr = 13;
notPatXor = 14;
notPatBic = 15;
{ QuickDraw color separation constants }
normalBit = 0; { normal screen mapping }
inverseBit = 1; { inverse screen mapping }
redBit = 4; { RGB additive mapping }
greenBit = 3;
blueBit = 2;
cyanBit = 8; { CMYBk subtractive mapping }
magentaBit = 7;
yellowBit = 6;
blackBit = 5;
blackColor = 33; { colors expressed in these mappings }
whiteColor = 30;
redColor = 205;
greenColor = 341;
blueColor = 409;
cyanColor = 273;
magentaColor = 137;
yellowColor = 69;
picLParen = 0; { standard picture comments }
picRParen = 1;
TYPE QDByte = -128..127;
QDPtr = ^QDByte; { blind pointer }
QDHandle = ^QDPtr; { blind handle }
Str255 = String[255];
Pattern = PACKED ARRAY[0..7] OF 0..255;
Bits16 = ARRAY[0..15] OF INTEGER;
VHSelect = (v,h);
GrafVerb = (frame,paint,erase,invert,fill);
StyleItem = (bold,italic,underline,outline,shadow,condense,extend);
Style = SET OF StyleItem;
FontInfo = RECORD
ascent: INTEGER;
descent: INTEGER;
widMax: INTEGER;
leading: INTEGER;
END;
Point = RECORD CASE INTEGER OF
0: (v: INTEGER;
h: INTEGER);
1: (vh: ARRAY[VHSelect] OF INTEGER);
END;
Rect = RECORD CASE INTEGER OF
0: (top: INTEGER;
left: INTEGER;
bottom: INTEGER;
right: INTEGER);
1: (topLeft: Point;
botRight: Point);
END;
BitMap = RECORD
baseAddr: QDPtr;
rowBytes: INTEGER;
bounds: Rect;
END;
Cursor = RECORD
data: Bits16;
mask: Bits16;
hotSpot: Point;
END;
PenState = RECORD
pnLoc: Point;
pnSize: Point;
pnMode: INTEGER;
pnPat: Pattern;
END;
PolyHandle = ^PolyPtr;
PolyPtr = ^Polygon;
Polygon = RECORD
polySize: INTEGER;
polyBBox: Rect;
polyPoints: ARRAY[0..0] OF Point;
END;
RgnHandle = ^RgnPtr;
RgnPtr = ^Region;
Region = RECORD
rgnSize: INTEGER; { rgnSize = 10 for rectangular }
rgnBBox: Rect;
{ plus more data if not rectangular }
END;
PicHandle = ^PicPtr;
PicPtr = ^Picture;
Picture = RECORD
picSize: INTEGER;
picFrame: Rect;
{ plus byte codes for picture content }
END;
QDProcsPtr = ^QDProcs;
QDProcs = RECORD
textProc: QDPtr;
lineProc: QDPtr;
rectProc: QDPtr;
rRectProc: QDPtr;
ovalProc: QDPtr;
arcProc: QDPtr;
polyProc: QDPtr;
rgnProc: QDPtr;
bitsProc: QDPtr;
commentProc: QDPtr;
txMeasProc: QDPtr;
getPicProc: QDPtr;
putPicProc: QDPtr;
END;
GrafPtr = ^GrafPort;
GrafPort = RECORD
device: INTEGER;
portBits: BitMap;
portRect: Rect;
visRgn: RgnHandle;
clipRgn: RgnHandle;
bkPat: Pattern;
fillPat: Pattern;
pnLoc: Point;
pnSize: Point;
pnMode: INTEGER;
pnPat: Pattern;
pnVis: INTEGER;
txFont: INTEGER;
txFace: Style;
txMode: INTEGER;
txSize: INTEGER;
spExtra: LongInt;
fgColor: LongInt;
bkColor: LongInt;
colrBit: INTEGER;
patStretch: INTEGER;
picSave: QDHandle;
rgnSave: QDHandle;
polySave: QDHandle;
grafProcs: QDProcsPtr;
END;
VAR thePort: GrafPtr;
white: Pattern;
black: Pattern;
gray: Pattern;
ltGray: Pattern;
dkGray: Pattern;
arrow: Cursor;
screenBits: BitMap;
randSeed: LongInt;
{ GrafPort Routines }
PROCEDURE InitGraf (globalPtr: QDPtr);
PROCEDURE OpenPort (port: GrafPtr);
PROCEDURE InitPort (port: GrafPtr);
PROCEDURE ClosePort (port: GrafPtr);
PROCEDURE SetPort (port: GrafPtr);
PROCEDURE GetPort (VAR port: GrafPtr);
PROCEDURE GrafDevice (device: INTEGER);
PROCEDURE SetPortBits(bm: BitMap);
PROCEDURE PortSize (width,height: INTEGER);
PROCEDURE MovePortTo (leftGlobal,topGlobal: INTEGER);
PROCEDURE SetOrigin (h,v: INTEGER);
PROCEDURE SetClip (rgn: RgnHandle);
PROCEDURE GetClip (rgn: RgnHandle);
PROCEDURE ClipRect (r: Rect);
PROCEDURE BackPat (pat: Pattern);
{ Cursor Routines }
PROCEDURE InitCursor;
PROCEDURE SetCursor(crsr: Cursor);
PROCEDURE HideCursor;
PROCEDURE ShowCursor;
PROCEDURE ObscureCursor;
{ Line Routines }
PROCEDURE HidePen;
PROCEDURE ShowPen;
PROCEDURE GetPen (VAR pt: Point);
PROCEDURE GetPenState(VAR pnState: PenState);
PROCEDURE SetPenState(pnState: PenState);
PROCEDURE PenSize (width,height: INTEGER);
PROCEDURE PenMode (mode: INTEGER);
PROCEDURE PenPat (pat: Pattern);
PROCEDURE PenNormal;
PROCEDURE MoveTo (h,v: INTEGER);
PROCEDURE Move (dh,dv: INTEGER);
PROCEDURE LineTo (h,v: INTEGER);
PROCEDURE Line (dh,dv: INTEGER);
{ Text Routines }
PROCEDURE TextFont (font: INTEGER);
PROCEDURE TextFace (face: Style);
PROCEDURE TextMode (mode: INTEGER);
PROCEDURE TextSize (size: INTEGER);
PROCEDURE SpaceExtra (extra: LongInt);
PROCEDURE DrawChar (ch: char);
PROCEDURE DrawString (s: Str255);
PROCEDURE DrawText (textBuf: QDPtr; firstByte,byteCount: INTEGER);
FUNCTION CharWidth (ch: CHAR): INTEGER;
FUNCTION StringWidth (s: Str255): INTEGER;
FUNCTION TextWidth (textBuf: QDPtr; firstByte,byteCount: INTEGER): INTEGER;
PROCEDURE GetFontInfo (VAR info: FontInfo);
{ Point Calculations }
PROCEDURE AddPt (src: Point; VAR dst: Point);
PROCEDURE SubPt (src: Point; VAR dst: Point);
PROCEDURE SetPt (VAR pt: Point; h,v: INTEGER);
FUNCTION EqualPt (pt1,pt2: Point): BOOLEAN;
PROCEDURE ScalePt (VAR pt: Point; fromRect,toRect: Rect);
PROCEDURE MapPt (VAR pt: Point; fromRect,toRect: Rect);
PROCEDURE LocalToGlobal (VAR pt: Point);
PROCEDURE GlobalToLocal (VAR pt: Point);
{ Rectangle Calculations }
PROCEDURE SetRect (VAR r: Rect; left,top,right,bottom: INTEGER);
FUNCTION EqualRect (rect1,rect2: Rect): BOOLEAN;
FUNCTION EmptyRect (r: Rect): BOOLEAN;
PROCEDURE OffsetRect (VAR r: Rect; dh,dv: INTEGER);
PROCEDURE MapRect (VAR r: Rect; fromRect,toRect: Rect);
PROCEDURE InsetRect (VAR r: Rect; dh,dv: INTEGER);
FUNCTION SectRect (src1,src2: Rect; VAR dstRect: Rect): BOOLEAN;
PROCEDURE UnionRect (src1,src2: Rect; VAR dstRect: Rect);
FUNCTION PtInRect (pt: Point; r: Rect): BOOLEAN;
PROCEDURE Pt2Rect (pt1,pt2: Point; VAR dstRect: Rect);
{ Graphical Operations on Rectangles }
PROCEDURE FrameRect (r: Rect);
PROCEDURE PaintRect (r: Rect);
PROCEDURE EraseRect (r: Rect);
PROCEDURE InvertRect (r: Rect);
PROCEDURE FillRect (r: Rect; pat: Pattern);
{ RoundRect Routines }
PROCEDURE FrameRoundRect (r: Rect; ovWd,ovHt: INTEGER);
PROCEDURE PaintRoundRect (r: Rect; ovWd,ovHt: INTEGER);
PROCEDURE EraseRoundRect (r: Rect; ovWd,ovHt: INTEGER);
PROCEDURE InvertRoundRect (r: Rect; ovWd,ovHt: INTEGER);
PROCEDURE FillRoundRect (r: Rect; ovWd,ovHt: INTEGER; pat: Pattern);
{ Oval Routines }
PROCEDURE FrameOval (r: Rect);
PROCEDURE PaintOval (r: Rect);
PROCEDURE EraseOval (r: Rect);
PROCEDURE InvertOval (r: Rect);
PROCEDURE FillOval (r: Rect; pat: Pattern);
{ Arc Routines }
PROCEDURE FrameArc (r: Rect; startAngle,arcAngle: INTEGER);
PROCEDURE PaintArc (r: Rect; startAngle,arcAngle: INTEGER);
PROCEDURE EraseArc (r: Rect; startAngle,arcAngle: INTEGER);
PROCEDURE InvertArc (r: Rect; startAngle,arcAngle: INTEGER);
PROCEDURE FillArc (r: Rect; startAngle,arcAngle: INTEGER; pat: Pattern);
PROCEDURE PtToAngle (r: Rect; pt: Point; VAR angle: INTEGER);
{ Polygon Routines }
FUNCTION OpenPoly: PolyHandle;
PROCEDURE ClosePoly;
PROCEDURE KillPoly (poly: PolyHandle);
PROCEDURE OffsetPoly (poly: PolyHandle; dh,dv: INTEGER);
PROCEDURE MapPoly (poly: PolyHandle; fromRect,toRect: Rect);
PROCEDURE FramePoly (poly: PolyHandle);
PROCEDURE PaintPoly (poly: PolyHandle);
PROCEDURE ErasePoly (poly: PolyHandle);
PROCEDURE InvertPoly (poly: PolyHandle);
PROCEDURE FillPoly (poly: PolyHandle; pat: Pattern);
{ Region Calculations }
FUNCTION NewRgn: RgnHandle;
PROCEDURE DisposeRgn(rgn: RgnHandle);
PROCEDURE CopyRgn (srcRgn,dstRgn: RgnHandle);
PROCEDURE SetEmptyRgn(rgn: RgnHandle);
PROCEDURE SetRectRgn(rgn: RgnHandle; left,top,right,bottom: INTEGER);
PROCEDURE RectRgn (rgn: RgnHandle; r: Rect);
PROCEDURE OpenRgn;
PROCEDURE CloseRgn (dstRgn: RgnHandle);
PROCEDURE OffsetRgn (rgn: RgnHandle; dh,dv: INTEGER);
PROCEDURE MapRgn (rgn: RgnHandle; fromRect,toRect: Rect);
PROCEDURE InsetRgn (rgn: RgnHandle; dh,dv: INTEGER);
PROCEDURE SectRgn (srcRgnA,srcRgnB,dstRgn: RgnHandle);
PROCEDURE UnionRgn (srcRgnA,srcRgnB,dstRgn: RgnHandle);
PROCEDURE DiffRgn (srcRgnA,srcRgnB,dstRgn: RgnHandle);
PROCEDURE XorRgn (srcRgnA,srcRgnB,dstRgn: RgnHandle);
FUNCTION EqualRgn (rgnA,rgnB: RgnHandle): BOOLEAN;
FUNCTION EmptyRgn (rgn: RgnHandle): BOOLEAN;
FUNCTION PtInRgn (pt: Point; rgn: RgnHandle): BOOLEAN;
FUNCTION RectInRgn (r: Rect; rgn: RgnHandle): BOOLEAN;
{ Graphical Operations on Regions }
PROCEDURE FrameRgn (rgn: RgnHandle);
PROCEDURE PaintRgn (rgn: RgnHandle);
PROCEDURE EraseRgn (rgn: RgnHandle);
PROCEDURE InvertRgn (rgn: RgnHandle);
PROCEDURE FillRgn (rgn: RgnHandle; pat: Pattern);
{ Graphical Operations on BitMaps }
PROCEDURE ScrollRect(dstRect: Rect; dh,dv: INTEGER; updateRgn: rgnHandle);
PROCEDURE CopyBits (srcBits,dstBits: BitMap;
srcRect,dstRect: Rect;
mode: INTEGER;
maskRgn: RgnHandle);
{ Picture Routines }
FUNCTION OpenPicture(picFrame: Rect): PicHandle;
PROCEDURE ClosePicture;
PROCEDURE DrawPicture(myPicture: PicHandle; dstRect: Rect);
PROCEDURE PicComment(kind,dataSize: INTEGER; dataHandle: QDHandle);
PROCEDURE KillPicture(myPicture: PicHandle);
{ The Bottleneck Interface: }
PROCEDURE SetStdProcs(VAR procs: QDProcs);
PROCEDURE StdText (count: INTEGER; textAddr: QDPtr; numer,denom: Point);
PROCEDURE StdLine (newPt: Point);
PROCEDURE StdRect (verb: GrafVerb; r: Rect);
PROCEDURE StdRRect (verb: GrafVerb; r: Rect; ovWd,ovHt: INTEGER);
PROCEDURE StdOval (verb: GrafVerb; r: Rect);
PROCEDURE StdArc (verb: GrafVerb; r: Rect; startAngle,arcAngle: INTEGER);
PROCEDURE StdPoly (verb: GrafVerb; poly: PolyHandle);
PROCEDURE StdRgn (verb: GrafVerb; rgn: RgnHandle);
PROCEDURE StdBits (VAR srcBits: BitMap; VAR srcRect,dstRect: Rect;
mode: INTEGER; maskRgn: RgnHandle);
PROCEDURE StdComment (kind,dataSize: INTEGER; dataHandle: QDHandle);
FUNCTION StdTxMeas (count: INTEGER; textAddr: QDPtr;
VAR numer,denom: Point; VAR info: FontInfo): INTEGER;
PROCEDURE StdGetPic (dataPtr: QDPtr; byteCount: INTEGER);
PROCEDURE StdPutPic (dataPtr: QDPtr; byteCount: INTEGER);
{ Misc Utility Routines }
FUNCTION GetPixel (h,v: INTEGER): BOOLEAN;
FUNCTION Random: INTEGER;
PROCEDURE StuffHex (thingptr: QDPtr; s:Str255);
PROCEDURE ForeColor (color: LongInt);
PROCEDURE BackColor (color: LongInt);
PROCEDURE ColorBit (whichBit: INTEGER);
IMPLEMENTATION
{$I QuickDraw2.text }