sys7.1-doc-wip/Toolbox/BitEdit/BitEdit.p
2019-07-27 22:37:48 +08:00

220 lines
8.1 KiB
OpenEdge ABL

{__________________________________________________________________________________________________
File: BitEdit.p
Contains: xxx put contents here xxx
Written by: Craig Carper, Steve Horowitz
Copyright: © 1989-1990 by Apple Computer, Inc., all rights reserved.
Change History (most recent first):
<1+> 1/22/90 JRM update to Craig's "last" revision
<1.2> 10/16/89 CCH Incorporating changes from Craig Carper.
<1.1> 10/11/89 JSM Fixed BEDraw so that it doesn't indiscriminately call GetGDevice
and SetGDevice without checking for color.
<1.0> 8/3/89 CCH Adding to EASE for Big Bang build as PACK ID=1.
To Do:
__________________________________________________________________________________________________}
{$IFC UNDEFINED UsingIncludes}
{$SETC UsingIncludes := 0}
{$ENDC}
{$IFC NOT UsingIncludes}
UNIT BitEdit;
INTERFACE
{$ENDC}
{$IFC UNDEFINED UsingBitEdit}
{$SETC UsingBitEdit := 1}
USES Types, Memory, Quickdraw, Events, OsUtils, Scrap, Windows, ToolUtils;
CONST
{ Bit flags for BESelectFlags }
fSelectKindMask = $3; { 2-bit field determines kind of selection: }
fSelectRect = $0; { Rectangular (marquee) Selection }
fSelectLasso = $1; { Free-form (lasso) Selection }
fSelectRectLasso = $2; { Rectangular selection the collapses into lasso selection }
fSelectRectShrink = $3; { Collapse to smallest enclosing rectangle }
{ BESelectFlags extended bit values }
fSquareMarquee = $4; { Drag out a square marquee }
fDragOnAxis = $8; { Move selection vertically or horizontally only }
fDragCopy = $10; { Drag a copy instead of moving the selection }
{ Bit flags for BEDrawFlags }
fShapeLineMask = $3; { 2-bit field specifying line angle constraints: }
fLineFree = $0; { Unconstrained lines }
fLineOnAxis = $1; { Vertical or horizontal lines only }
fLineOnDiagonal = $2; { Vertical, horizontal or 45 degree lines only }
{ Bit flags for shapes }
fShapeFillMask = $3; { 2-bit field specifying border and fill options: }
fShapeFrame = $0; { Frame only }
fShapeFill = $2; { Frame and filled }
fShapeFillOnly = $3; { Filled only }
{ BEDrawFlags extended bit values for shape routines }
fShapeSymmetric = $4; { Set for square rectangles or circular ovals }
fShapeUnbounded = $8; { Set to allow dragging out shape beyond bounds of image }
TYPE
BESelectFlags = integer;
BEDrawFlags = integer;
BESelectPtr = ^BESelectRec;
BESelectRec = RECORD { Selection State }
selRect: Rect; { Rectangle for selection }
wasErased: Boolean; { was the marquee rect erased already? }
selHandle: Handle; { handle for selection bits }
selPix: PixMapHandle; { pixMap for selection bits }
selBits: BitMap; { bitMap for selection bits }
maskHandle: Handle; { handle for mask bits }
maskPix: PixMapHandle; { pixMap for mask bits }
maskBits: BitMap; { bitMap for mask bits }
edgeHandle: Handle; { handle for edge bits }
edgePix: PixMapHandle; { pixMap for edge bits }
edgeBits: BitMap; { bitMap for edge bits }
END;
BEPtr = ^BERec;
BEHandle = ^BEPtr;
BERec = RECORD
editHandle: Handle; { Handle to the bits }
editPix: PixMapHandle; { PixMap with the BE bits }
editOffset: LongInt; { Offset to bitmap in handle }
beRowBytes: integer; { rowBytes of bitmap }
beBounds: Rect; { bounds rect of bitmap }
bePixelSize: integer; { bits per pixel }
beColorTable: CTabHandle; { Handle to PixMap's color table, Nil if bitmap }
bePixPat: PixPatHandle; { color pattern for shape drawing }
bePixColor: RGBColor; { color to draw the pixels in }
beFillPat: Pattern; { fill pattern for shapes }
beEditRect: Rect; { rectangle for editing }
beViewRect: Rect; { rectangle in which we are displayed }
fatbitsSize: Point; { dimensions of the displayed fatBits pixels }
fatbitsDelta: Point; { spacing between fatBits pixels }
fatbitsPat: Pattern; { pattern for the pixels }
sibling: BEHandle; { link to this relative for updates }
beGrafPtr: GrafPtr; { GrafPort that owns me }
savePen: PenState; { saved PenState over DrawBegin/End }
savePixMap: PixMapHandle; { saved PixMap over DrawBegin/End }
saveBitMap: BitMap; { saved bitMap over DrawBegin/End }
saveClip: RgnHandle; { saved clipRgn over DrawBegin/End }
saveVis: RgnHandle; { saved visRgn over DrawBegin/End }
error: OSErr; { error result }
undoFreeze: integer; { non-zero if undo snapshot should not be altered }
realRect: Rect; { the actual exploded rectangle }
beEraserSize: Point; { Size of the eraser }
bePenSize: Point; { size of pen for shape drawing }
beDrawParm: LongInt; { State information - Internal use }
selection: BESelectRec; { Selection State }
undoSelection: BESelectRec; { Selection state for undo }
offHandle: Handle; { handle to large offscreen bits }
offPix: PixMapHandle; { pixMap for large offscreen cGrafPort }
offBits: BitMap; { bitMap for large offscreen cGrafPort }
dupHandle: Handle; { handle for shape drawing }
dupPix: PixMapHandle; { pixMap for shape drawing }
dupBits: BitMap; { bitMap for shape drawing }
undoHandle: Handle; { handle for undo bits }
undoPix: PixMapHandle; { pixMap for undo bits }
undoBits: BitMap; { bitMap for undo bits }
oldIndex: integer; { index save for marquee }
beGDevice: GDHandle; { handle to the offscreen gDevice }
active: Boolean; { true if activated }
drawEnabled: Boolean; { true if drawing enabled }
isColor: Boolean; { is this a color BitEdit record? }
marquee: Boolean; { true = marquee, false = lasso }
refCon: LongInt; { For use by client }
END;
{ Creation, activation and destruction routines }
FUNCTION BENew(editHandle: Handle; colorTable: CTabHandle; offset: LongInt; rowBytes: integer; pixelSize: integer; bounds: Rect): BEHandle;
PROCEDURE BEView(editRect: Rect; viewRect: Rect; bitsSize: Point; bitsDelta: Point; hbe: BEHandle);
PROCEDURE BEActivate(activate: Boolean; hbe: BEHandle);
PROCEDURE BEDispose(hbe: BEHandle);
{ Screen drawing and update routines }
PROCEDURE BEInvalRect(r: Rect; hbe: BEHandle);
PROCEDURE BEUpdateRect(r: Rect; hbe: BEHandle);
PROCEDURE BEDraw(r: Rect; hbe: BEHandle);
PROCEDURE BELink(hbe1: BEHandle; hbe2: BEHandle);
{ Scrap routines }
PROCEDURE BECopy(hbe: BEHandle);
PROCEDURE BECut(hbe: BEHandle);
PROCEDURE BEPaste(hbe: BEHandle);
{ Drawing routines }
PROCEDURE BEClick(pt: Point; hbe: BEHandle);
PROCEDURE BEErase(pt: Point; hbe: BEHandle);
PROCEDURE BEPaintBucket(startPt: Point; hbe: BEHandle);
PROCEDURE BELine(startPt: Point; flags: BEDrawFlags; hbe: BEHandle);
PROCEDURE BEOval(startPt: Point; flags: BEDrawFlags; hbe: BEHandle);
PROCEDURE BERect(startPt: Point; flags: BEDrawFlags; hbe: BEHandle);
PROCEDURE BERoundRect(startPt: Point; flags: BEDrawFlags; ovalWidth: integer; ovalHeight: integer; hbe: BEHandle);
{ Transformation Routines }
PROCEDURE BEFlip(vertical: Boolean; hbe: BEHandle);
PROCEDURE BERotate(hbe: BEHandle);
{ Inspection Routines }
FUNCTION BEBit(pt: Point; hbe: BEHandle): Boolean;
PROCEDURE BEColor(pt: Point; VAR rgb: RGBColor; hbe: BEHandle);
{ Selection Routines }
PROCEDURE BESelect(startPt: Point; flags: BESelectFlags; hbe: BEHandle);
PROCEDURE BESetSelect(r: Rect; hbe: BEHandle);
PROCEDURE BEClear(hbe: BEHandle);
PROCEDURE BEDuplicate(deltaPt: Point; hbe: BEHandle);
FUNCTION BENudge(deltaPt: Point; hbe: BEHandle): Boolean;
FUNCTION BEInSelection(pt: Point; hbe: BEHandle): Boolean;
FUNCTION BESelection(hbe: BEHandle): Boolean;
PROCEDURE BEKillSelection(hbe: BEHandle);
PROCEDURE BEPutSelection(hbe: BEHandle);
PROCEDURE BEIdle(hbe: BEHandle);
{ Undo Support }
PROCEDURE BEUndo(hbe: BEHandle);
PROCEDURE BEUndoBegin(hbe: BEHandle);
PROCEDURE BEUndoEnd(hbe: BEHandle);
{ Utility Routines }
FUNCTION BEGetView(pt: Point; VAR hbe: BEHandle): Boolean;
PROCEDURE BEDoDraw(draw: Boolean; hbe: BEHandle);
PROCEDURE BEPtUnXForm(VAR pt: Point; hbe: BEHandle);
PROCEDURE BEPtXForm(VAR pt: Point; hbe: BEHandle);
{ Low-level routines for do-it-yourselfers }
PROCEDURE BEBitMap(VAR bm: BitMap; hbe: BEHandle);
PROCEDURE BEPixMap(VAR bm: PixMapHandle; hbe: BEHandle);
PROCEDURE BEBounds(VAR minimalRect: Rect; hbe: BEHandle);
PROCEDURE BEDrawBegin(hbe: BEHandle);
PROCEDURE BEDrawEnd(hbe: BEHandle);
PROCEDURE BEObject(startPt: Point; drawProc: ProcPtr; flags: BEDrawFlags; hbe: BEHandle);
{$ENDC}
{ $IFC NOT UsingIncludes}
IMPLEMENTATION
{$I BitEdit.i}
END.
{ $ENDC}