mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-28 16:31:01 +00:00
905 lines
30 KiB
Plaintext
905 lines
30 KiB
Plaintext
|
;
|
|||
|
; File: RoundedWDEF.a
|
|||
|
;
|
|||
|
; Contains: The rounded window defintion procedure
|
|||
|
;
|
|||
|
; Copyright: <09> 1982-1991 by Apple Computer, Inc., all rights reserved.
|
|||
|
;
|
|||
|
; Change History (most recent first):
|
|||
|
;
|
|||
|
; <4> 8/30/91 DTY Remove a shift which prevented half of the variations from being
|
|||
|
; used. (Conditionilised for PsychoticFarmer.)
|
|||
|
; <3> 11/9/90 VL (dc) Rolled back change <2> because The Gang of Five decided
|
|||
|
; that titles should not be drawn in TrueGray.
|
|||
|
; <2> 10/30/90 VL (KSM) Title should be drawn in TrueGray when the window is
|
|||
|
; inactive.
|
|||
|
; <1.2> 8/22/89 SES Removed references to nFiles. Updated equates accordingly.
|
|||
|
; <1.1> 11/11/88 CCH Fixed Header.
|
|||
|
; <1.0> 11/9/88 CCH Adding to EASE.
|
|||
|
; <<3C>1.1> 9/23/88 CCH Got rid of inc.sum.d and empty nFiles
|
|||
|
; <1.0> 2/12/88 BBM Adding file for the first time into EASE<53>
|
|||
|
; <C700> 1/26/87 DAF Universal defproc (version 10)
|
|||
|
; <C491> 12/8/86 DAF Locked title string before drawing it (OLD BUG!)
|
|||
|
; <C424> 11/18/86 DAF Added portToMap to correct problems in cWindows.
|
|||
|
; <C407> 10/13/86 DAF changed textmode from srcBIC to srcCopy
|
|||
|
; <Cxxx> 10/6/86 DAF updated color support to use RGB calls on Beck's. Fixed goaway
|
|||
|
; mask to center mask for everyone.
|
|||
|
; 8/22/86 DLD Recoded draw goaway before DoHilite to fix Mac Plus system.
|
|||
|
; <C60> 8/22/86 DLD Recoded draw goaway before DoHilite to fix Mac Plus system.
|
|||
|
; 7/23/86 DLD Converted source to MPW.
|
|||
|
; <C59> 6/30/86 DAF added color support for nuMac
|
|||
|
; <v4> 8/7/85 EHB did variable system font height version
|
|||
|
; 7/29/85 EHB converted back to porkshop
|
|||
|
; 2/14/85 JTC named rsrc.
|
|||
|
; 1/31/85 EHB made hit-testing of GoAway box accurate
|
|||
|
; 1/11/85 JTC convert to MDS
|
|||
|
; 10/18/83 AJH made it ignore unwanted messages; new hiliting
|
|||
|
; 8/20/83 AJH made it get roundness from selector instead of refCon
|
|||
|
; 4/27/83 AJH only plot, hit-test goAway if window is active
|
|||
|
; 3/17/83 AJH Fixed D4 trash bug
|
|||
|
; 3/7/83 AJH Made it dispose the title region (bug fix)
|
|||
|
; 1/2/83 AJH Made it a "WDEF" resource
|
|||
|
; 11/15/82 AJH Added GoAway button, made content rectangular
|
|||
|
; 10/16/82 AJH Converted to QuickDraw Trap Interface
|
|||
|
;
|
|||
|
; To Do:
|
|||
|
;
|
|||
|
|
|||
|
;EASE$$$ READ ONLY COPY of file <20>RoundedWDEF.a<>
|
|||
|
; 1.2 SES 08/22/1989 Removed references to nFiles. Updated equates accordingly.
|
|||
|
; 1.1 CCH 11/11/1988 Fixed Header.
|
|||
|
; 1.0 CCH 11/ 9/1988 Adding to EASE.
|
|||
|
; OLD REVISIONS BELOW
|
|||
|
;<3B>1.1 CCH 9/23/1988 Got rid of inc.sum.d and empty nFiles
|
|||
|
; 1.0 BBM 2/12/88 Adding file for the first time into EASE<53>
|
|||
|
; END EASE MODIFICATION HISTORY
|
|||
|
|
|||
|
;
|
|||
|
;File RoundedWDEF.a
|
|||
|
;-------------------------------------------------------
|
|||
|
;
|
|||
|
; Rounded Corner Window Definition Routine "RDocProc"
|
|||
|
;
|
|||
|
; written by Andy Hertzfeld Aug 4, 1982
|
|||
|
;
|
|||
|
; <20> Apple Computer, Inc. 1982, 1983, 1984, 1985, 1986, 1987
|
|||
|
; All rights reserved.
|
|||
|
;
|
|||
|
; This file contains the window definition procedure
|
|||
|
; "RDocProc", a standard Mac window type similar to the
|
|||
|
; "DocumentProc" included in the ROM. It is indentical if
|
|||
|
; the refCon is zero, otherwise the roundness of the corners
|
|||
|
; is specified using the high 2 bytes of the window
|
|||
|
; refCon. It is intended to be linked with applications or
|
|||
|
; desk ornaments.
|
|||
|
;
|
|||
|
; Modification History:
|
|||
|
;
|
|||
|
; 16-OCt-82 AJH Converted to QuickDraw Trap Interface
|
|||
|
; 15-Nov-82 AJH Added GoAway button, made content rectangular
|
|||
|
; 02-Jan-83 AJH Made it a "WDEF" resource
|
|||
|
; 07-Mar-83 AJH Made it dispose the title region (bug fix)
|
|||
|
; 17-Mar-83 AJH Fixed D4 trash bug
|
|||
|
; 27-Apr-83 AJH only plot, hit-test goAway if window is active
|
|||
|
; 20-Aug-83 AJH made it get roundness from selector instead of refCon
|
|||
|
; 18-Oct-83 AJH made it ignore unwanted messages; new hiliting
|
|||
|
; 11-Jan-85 JTC convert to MDS
|
|||
|
; 31-Jan-85 EHB made hit-testing of GoAway box accurate
|
|||
|
; 14-Feb-85 JTC named rsrc.
|
|||
|
; 29-Jul-85 EHB converted back to porkshop
|
|||
|
;v4 7-Aug-85 EHB did variable system font height version
|
|||
|
; 23 Jul 86 DLD Converted source to MPW.
|
|||
|
; 22 Aug 86 DLD Recoded draw goaway before DoHilite to fix Mac Plus system.
|
|||
|
;
|
|||
|
;----Reno World!----------------------------------------
|
|||
|
;
|
|||
|
; <C59/30Jun86> DAF added color support for nuMac
|
|||
|
; <C60/22Aug86> DLD Recoded draw goaway before DoHilite to fix Mac Plus system.
|
|||
|
; <Cxxx/06Oct86> DAF updated color support to use RGB calls on Beck's. Fixed
|
|||
|
; goaway mask to center mask for everyone.
|
|||
|
; <C407/13Oct86> DAF changed textmode from srcBIC to srcCopy
|
|||
|
; <C424/18Nov86> DAF Added portToMap to correct problems in cWindows.
|
|||
|
; <C491/08Dec86> DAF Locked title string before drawing it (OLD BUG!)
|
|||
|
; <C700/26Jan87> DAF Universal defproc (version 10)
|
|||
|
;
|
|||
|
|
|||
|
BLANKS ON
|
|||
|
STRING ASIS
|
|||
|
|
|||
|
PRINT OFF
|
|||
|
LOAD 'StandardEqu.d'
|
|||
|
INCLUDE 'colorequ.a'
|
|||
|
PRINT ON
|
|||
|
|
|||
|
WDEF1 FUNC EXPORT
|
|||
|
|
|||
|
|
|||
|
; Stack Frame Definitions
|
|||
|
|
|||
|
WindowID EQU 14 ;
|
|||
|
message EQU 12 ;
|
|||
|
|
|||
|
WFrameSize EQU -30 ;
|
|||
|
IsColor EQU -30 ; do we have colorQD and toolbox? [boolean]
|
|||
|
Align EQU -29 ; a dead byte for IsColor
|
|||
|
SavFgCol EQU -28
|
|||
|
SavBkCol EQU -22
|
|||
|
WCTabHndl EQU -16 ;
|
|||
|
WCTabPtr EQU -12 ;
|
|||
|
WInfoRec EQU -8 ; <7Aug85>
|
|||
|
WAscent EQU -8 ; <7Aug85>
|
|||
|
WDescent EQU -6 ; <7Aug85>
|
|||
|
WHeight EQU -4 ; <7Aug85>
|
|||
|
WBoxDelta EQU -2 ; <7Aug85>
|
|||
|
|
|||
|
;
|
|||
|
; FUNCTION RDocProc( selector: INTEGER
|
|||
|
; window: WindowPtr,
|
|||
|
; message: INTEGER;
|
|||
|
; parameter: LongInt): LongInt
|
|||
|
;
|
|||
|
BRA.S @0
|
|||
|
|
|||
|
; standard header
|
|||
|
|
|||
|
DC.W 0 ; flags word
|
|||
|
DC.B 'WDEF' ; type
|
|||
|
DC.W 1 ; ID
|
|||
|
DC.W 10 ; version
|
|||
|
|
|||
|
@0
|
|||
|
LINK A6,#WFrameSize ; set up a stack frame to address parameters
|
|||
|
MOVEM.L D3-D5/A3-A4,-(SP) ; save work registers
|
|||
|
|
|||
|
; test if the message is in range
|
|||
|
|
|||
|
CMP.W #wCalcRgnMsg,message(A6) ; compare to highest value (this is highest for rdocs)<C700/26Jan87> DAF
|
|||
|
BGT OORange ; skip it, it's too high <C700/26Jan87> DAF
|
|||
|
CMP.W #wDrawMsg,message(A6) ; compare to lowest value, too <C700/26Jan87> DAF
|
|||
|
BMI OORange ; <C700/26Jan87> DAF
|
|||
|
|
|||
|
MOVE.L grafGlobals(A5),A0 ; get pointer to quickDraw globals <7Aug85>
|
|||
|
MOVE.L thePort(A0),-(SP) ; save current port on stack <7Aug85>
|
|||
|
|
|||
|
; Determine type of system. We need to know if we have color QuickDraw and a color
|
|||
|
; window manager port.
|
|||
|
|
|||
|
CMP.W #$3FFF,ROM85 ; do we have color QD?
|
|||
|
SLS IsColor(A6) ; set boolean depending on color or B&W system
|
|||
|
BHI.S @BWSys ; no, this system has B&W QD
|
|||
|
|
|||
|
; when using the wmgrCPort, it is the defproc's responsibility to reconcile
|
|||
|
; the wmgrPort and the wmgrCPort.
|
|||
|
|
|||
|
BSR UpdateCPort ; compare and update wmgrPorts, also set WMgrCPort
|
|||
|
|
|||
|
; save off the current port fore- & backcolors on color systems.
|
|||
|
|
|||
|
PEA SavFgCol(A6) ; push a pointer to save area
|
|||
|
_GetForeColor ; get the current color
|
|||
|
PEA SavBkCol(A6) ;
|
|||
|
_GetBackColor ;
|
|||
|
|
|||
|
; also, find the auxWinRec and lock it down
|
|||
|
|
|||
|
CLR.L -(SP) ; here's a space for the var handle
|
|||
|
CLR.W -(SP) ; function return here
|
|||
|
MOVE.L 14(A6),-(SP) ; push window ptr
|
|||
|
PEA 6(SP) ; a pointer to the space above
|
|||
|
_GetAuxWin ; find the auxrec
|
|||
|
ADDQ #2,SP ; pitch the boolean (it doesn't matter)
|
|||
|
MOVE.L (SP)+,A0 ; get the auxRecHandle
|
|||
|
MOVE.L (A0),A0 ; handle -> ptr
|
|||
|
MOVE.L awCTable(A0),A0 ; get the colortable handle <1.2>
|
|||
|
MOVE.L A0,WCTabHndl(A6) ; save this handle
|
|||
|
_HLock ; lock the table down in memory
|
|||
|
MOVE.L (A0),WCTabPtr(A6) ; and get a pointer too!
|
|||
|
BRA.S @CommonSys ;
|
|||
|
|
|||
|
@BWSys ; END OF A COLOR-ONLY SECTION
|
|||
|
MOVE.L WMgrPort,-(SP) ; and set port to window manager port
|
|||
|
_SetPort ;
|
|||
|
@CommonSys
|
|||
|
|
|||
|
; rdocprocs have asymmetric titles that are 19 high. Figure it so that fonts smaller
|
|||
|
; or equal to chicago get mapped to 19, and all others are made odd for good centering.
|
|||
|
|
|||
|
LEA WInfoRec(A6),A3 ; point to our info rec <7Aug85>
|
|||
|
@1 MOVE.L A3,-(SP) ; push a pointer <7Aug85>
|
|||
|
_GetFontInfo ; and get the font's info <7Aug85>
|
|||
|
MOVE.W (A3)+,D0 ; get ascent+2 <5Aug85>
|
|||
|
ADD.W (A3)+,D0 ; add descent <5Aug85>
|
|||
|
ADDQ.W #4,D0 ; get the height <5Aug85>
|
|||
|
BSET #0,D0 ; make height odd for symmetry <7Aug85>
|
|||
|
MOVEQ #19,D1 ; get 19 <26Aug85>
|
|||
|
CMP.W D1,D0 ; force height to 19 min <26Aug85>
|
|||
|
BGE.S @3 ; => not a tiny font <5Aug85>
|
|||
|
SUB.W D0,D1 ; how much less than 19 is it? <26Aug85>
|
|||
|
LSR.W #1,D1 ; used for centering tiny fonts <26Aug85>
|
|||
|
ADD.W D1,WAscent(A6) ; make the ascent "bigger" <26Aug85>
|
|||
|
MOVEQ #19,D0 ; <7Aug85>
|
|||
|
@3 MOVE.W D0,(A3)+ ; WHeight = ascent+descent+4 <7Aug85>
|
|||
|
SUB.W #13,D0 ; subtract height of box <7Aug85>
|
|||
|
LSR.W #1,D0 ; divide by 2 <7Aug85>
|
|||
|
MOVE.W D0,(A3) ; save delta to goAway box <7Aug85>
|
|||
|
|
|||
|
; fetch the parameters into registers
|
|||
|
|
|||
|
LEA 8(A6),A0 ; get ptr to first parameter
|
|||
|
MOVE.L (A0)+,D3 ; get param in D3
|
|||
|
MOVE.W (A0)+,D0 ; get message
|
|||
|
MOVE.L (A0)+,A3 ; get the window pointer
|
|||
|
MOVE.W (A0)+,D5 ; get the selector
|
|||
|
|
|||
|
;
|
|||
|
; <4> This line effectively reduced the number of possible variants by half.
|
|||
|
; Take it out for PsychoticFarmer.
|
|||
|
;
|
|||
|
|
|||
|
if CubeE then
|
|||
|
LSR #1,D5 ; only use 8 alternatives
|
|||
|
endif
|
|||
|
ASL #2,D5 ; quadruple for long index
|
|||
|
CLR.L (A0) ; clear out function result
|
|||
|
;
|
|||
|
; case out on the message number
|
|||
|
;
|
|||
|
CMP #3,D0 ; is it one we deal with?
|
|||
|
BGE.S @4 ; if not, skip
|
|||
|
|
|||
|
ASL #2,D0 ; quadruple for long index
|
|||
|
JSR GODOCPROC(D0) ; dispatch to appropriate routine
|
|||
|
;
|
|||
|
; we're done -- restore port and registers and return to caller
|
|||
|
;
|
|||
|
|
|||
|
@4
|
|||
|
TST.B IsColor(A6) ; are we on a color system?
|
|||
|
BEQ.S @NoColor2 ; if on B&W, then skip
|
|||
|
|
|||
|
PEA SavFgCol(A6) ;
|
|||
|
_RGBForeColor ;
|
|||
|
PEA SavBkCol(A6) ;
|
|||
|
_RGBBackColor ;
|
|||
|
MOVE.L WCTabHndl(A6),A0 ; unlock the colortable
|
|||
|
_HUnlock ;
|
|||
|
@NoColor2 ; END OF A COLOR-ONLY SECTION
|
|||
|
|
|||
|
_SetPort ; restore the port <7Aug85>
|
|||
|
OORange ; 'Out Of Range, of course' <C700/26Jan87> DAF
|
|||
|
MOVEM.L (SP)+,D3-D5/A3-A4 ; restore work registers
|
|||
|
UNLK A6 ; unlink stack frame
|
|||
|
MOVE.L (SP)+,A0
|
|||
|
ADD #12,SP ; strip parameters
|
|||
|
JMP (A0) ; return to caller
|
|||
|
;
|
|||
|
; DocumentProc dispatch table -- entries must be long branches!
|
|||
|
;
|
|||
|
GODOCPROC
|
|||
|
BRA DRAWDOC ; draw is message 0
|
|||
|
BRA HITDOC ; hit test is message 1
|
|||
|
BRA CALCDOC ; calc test is message 2
|
|||
|
|
|||
|
DoneDoc RTS ; nor does it need dispose call
|
|||
|
|
|||
|
|
|||
|
; utility UpdateCPort
|
|||
|
; This utility compares the pertinent fields of the wmgrPort and the wmgrCPort,
|
|||
|
; updating the wmgrCPort as necessary to match the wmgrPort.
|
|||
|
|
|||
|
UpdateCPort ; <C700/26Jan87> DAF
|
|||
|
MOVE.L WmgrCPort,-(SP) ; make the wmgrCPort the current port
|
|||
|
_SetPort ; set it
|
|||
|
|
|||
|
MOVE.L WmgrPort,A0 ; get the wmgrPort addr
|
|||
|
MOVE.L WmgrCPort,A1 ; and the wmgrCPort too
|
|||
|
|
|||
|
PEA bkPat(A0) ; push pointers to pattern for later
|
|||
|
PEA pnPat(A0) ;
|
|||
|
|
|||
|
; copy all fields from pnLoc to end of grafPort, excluding pnPixPat and fillPixPat
|
|||
|
|
|||
|
LEA pnLoc(A0),A0 ; point at source
|
|||
|
LEA pnLoc(A1),A1 ; point at dest
|
|||
|
MOVE.L (A0)+,(A1)+ ; copy pnLoc
|
|||
|
MOVE.L (A0)+,(A1)+ ; copy pnSize
|
|||
|
MOVE.W (A0)+,(A1)+ ; copy pnMode
|
|||
|
ADDQ #8,A0 ; skip pnPat (aka, pnPixPat,fillPixPat)
|
|||
|
ADDQ #8,A1 ;
|
|||
|
MOVE.W #((portRec-pnVis)/2)-1,D0 ; set up a counter (long sized)
|
|||
|
@1
|
|||
|
MOVE.W (A0)+,(A1)+ ; copy it
|
|||
|
DBRA D0,@1 ; loop
|
|||
|
|
|||
|
; now set up the patterns in the wmgrCPort (which is thePort)
|
|||
|
; the parameters were pushed before the copying loop above
|
|||
|
|
|||
|
_PenPat
|
|||
|
_BackPat
|
|||
|
|
|||
|
RTS ; <C700/26Jan87> DAF
|
|||
|
|
|||
|
|
|||
|
; SetUpColor takes a window part identifier in D0, finds the corresponding
|
|||
|
; part in the AuxWinTable (the part code is in the .value field) and returns
|
|||
|
; a pointer to its RGB on the stack. If the requested part is not found,
|
|||
|
; the first color table element is used (I'd use frameColor, but that might
|
|||
|
; not be there!). Trashes A0/D0.
|
|||
|
|
|||
|
SetUpColor
|
|||
|
MOVE.L D1,-(SP) ; save a register
|
|||
|
MOVE.L WCTabPtr(A6),A0 ; get the color table pointer
|
|||
|
MOVE.W CTSize(A0),D1 ; get the color table size
|
|||
|
MULU #8,D1 ; convert to color table index
|
|||
|
LegalIndex
|
|||
|
CMP.W CTTable+value(A0,D1),D0 ; is this the one?
|
|||
|
BEQ.S FoundIt ; if equal, then done
|
|||
|
SUB.W #8,D1 ; try the previous one
|
|||
|
BGE.S LegalIndex ; loop while index positive
|
|||
|
MOVEQ #0,D1 ; OK, use the first one
|
|||
|
FoundIt
|
|||
|
LEA CTTable+rgb(A0,D1),A0 ; get the address of the color to use
|
|||
|
MOVE.L A0,D0 ; we'll need A0 in a second
|
|||
|
MOVE.L (SP)+,D1 ; restore the register
|
|||
|
MOVE.L (SP)+,A0 ; get the return address
|
|||
|
MOVE.L D0,-(SP) ; push the rgb addr on the stack
|
|||
|
JMP (A0) ; return to caller
|
|||
|
|
|||
|
|
|||
|
PORTTOMAP ; <C424/18Nov86> DAF
|
|||
|
;----------------------------------------------------------
|
|||
|
;
|
|||
|
; Given a window pointer in A0, return the bitmap/pixmap pointer in A0
|
|||
|
|
|||
|
ADDQ #PORTBITS,A0 ;POINT TO BITMAP/PIXMAP HANDLE
|
|||
|
TST ROWBYTES(A0) ;BITMAP OR PIXMAP HANDLE?
|
|||
|
BPL.S GOTBITMAP ;=>JUST A BITMAP
|
|||
|
MOVE.L BASEADDR(A0),A0 ;ELSE GET PORT'S PIXMAP HANDLE
|
|||
|
MOVE.L (A0),A0 ;GET PIXMAP POINTER
|
|||
|
GOTBITMAP RTS
|
|||
|
|
|||
|
;
|
|||
|
; DrawDoc -- draw the document window. The windowPtr is in A3
|
|||
|
;
|
|||
|
DrawDoc
|
|||
|
TST.B WVISIBLE(A3) ; is it visible?
|
|||
|
BEQ.S DoneDoc ; if not, don't do anything
|
|||
|
;
|
|||
|
; see if its a EORGoAway call and special case it
|
|||
|
;
|
|||
|
CMP #wInGoAway,D3 ; is it a goAway call?
|
|||
|
BEQ EorGoAway ; if so, go handle it
|
|||
|
|
|||
|
;
|
|||
|
; derive the titleBar rectangle from the structRgn and keep it in TempRect
|
|||
|
;
|
|||
|
LEA TEMPRECT,A0 ; get pointer to tempRect
|
|||
|
MOVE.L STRUCTRGN(A3),A1 ; get structure region handle
|
|||
|
MOVE.L (A1),A1 ; get strucRgn pointer
|
|||
|
ADDQ #RGNBBOX,A1 ; point A1 at the bounding box
|
|||
|
MOVE.L (A1)+,(A0)+ ; copy bounding box into tempRect
|
|||
|
MOVE.L (A1),(A0)
|
|||
|
;
|
|||
|
; make bottom := top + height
|
|||
|
;
|
|||
|
MOVE -4(A0),D0 ; get top
|
|||
|
ADD.W WHeight(A6),D0 ; compute top + height <EHB 7Aug85>
|
|||
|
MOVE D0,(A0) ; update bottom
|
|||
|
;
|
|||
|
; handle the case of non-rectangular titleBar -- we must allocate a region
|
|||
|
;
|
|||
|
CLR.L -(SP) ; make space for function result
|
|||
|
_NewRgn ; allocate a region
|
|||
|
|
|||
|
MOVE.L (SP),A4 ; keep it in A4 -- and don't pop it off
|
|||
|
PEA TEMPRECT ; tempRect defines the bounding rect
|
|||
|
BSR GetRadPoint ; get the radius point in D0
|
|||
|
MOVE.L D0,-(SP) ; push the radius factor
|
|||
|
ST -(SP) ; topRound is true
|
|||
|
CLR -(SP) ; botRound is false
|
|||
|
BSR MakeRoundRegion ; make the region
|
|||
|
|
|||
|
; set the frame color first
|
|||
|
|
|||
|
TST.B IsColor(A6) ; is it color?
|
|||
|
BEQ.S @NoColor3 ; no, so skip this
|
|||
|
|
|||
|
MOVE.W #wframeColor,D0 ; get element index
|
|||
|
BSR.S SetUpColor ; get it on the stack
|
|||
|
_RGBForeColor ; and set it
|
|||
|
|
|||
|
; and do a PenNormal so that pattern and mode are OK (mostly for PaintRgn coming up) <C254/22Oct86> DAF
|
|||
|
|
|||
|
_PenNormal ; <C254/22Oct86> DAF
|
|||
|
|
|||
|
@NoColor3 ; END OF A COLOR-ONLY SECTION
|
|||
|
|
|||
|
; draw the titlebar outline
|
|||
|
|
|||
|
MOVE.L A4,-(SP) ; push the region
|
|||
|
_FrameRgn ; frame it
|
|||
|
|
|||
|
; determine the highlight state and set colors accordingly <26Apr86>
|
|||
|
|
|||
|
TST.B IsColor(A6) ; is it color?
|
|||
|
BEQ.S @NoColor4 ; no, so skip this
|
|||
|
|
|||
|
TST.B WHILITED(A3) ; is it hilited?
|
|||
|
BNE.S @8 ; <20> is highlighted, = is not highlighted
|
|||
|
MOVEQ #wTitleBarColor,D0 ; not hilited, so paint the titlebar in this color
|
|||
|
BSR.S SetUpColor ;
|
|||
|
_RGBForeColor
|
|||
|
MOVEQ #wFrameColor,D0 ; in this state, text is in frame color
|
|||
|
BSR.S SetUpColor ;
|
|||
|
BRA.S @9
|
|||
|
@8 MOVEQ #wTitleBarColor,D0 ; hilited, so paint the text in this color
|
|||
|
BSR.S SetUpColor ; (foreColor is already frameColor!)
|
|||
|
@9 _RGBBackColor
|
|||
|
|
|||
|
@NoColor4 ; END OF A COLOR-ONLY SECTION
|
|||
|
|
|||
|
; now, go on and draw the rest of the titlebar
|
|||
|
|
|||
|
MOVE.L A4,-(SP) ; push it again
|
|||
|
MOVE.L OneOne,-(SP) ; inset by 1
|
|||
|
_InsetRgn ; inset it
|
|||
|
MOVE.L A4,-(SP) ; push for erase (now paint)
|
|||
|
|
|||
|
TST.B IsColor(A6) ; is it color?
|
|||
|
BEQ.S @NoColor5 ; no, so erase
|
|||
|
_PaintRgn ; paint it
|
|||
|
BRA.S @Common5 ; and continue
|
|||
|
@NoColor5 _EraseRgn ; erase it
|
|||
|
@Common5
|
|||
|
|
|||
|
;
|
|||
|
; hilite the title bar by filling it with specified pattern
|
|||
|
;
|
|||
|
DrawTheTitle
|
|||
|
BSR DoTitleString ; draw the centered Title
|
|||
|
;
|
|||
|
; plot the goAway button, if necessary
|
|||
|
;
|
|||
|
TST.B WHilited(A3) ; if hilited window <08/22/86 DLD>
|
|||
|
BEQ.S DisposIt ; if not, don't plot goAway <08/22/86 DLD>
|
|||
|
|
|||
|
TST.B WGoAway(A3) ; is there a goaway button? <08/22/86 DLD>
|
|||
|
BEQ.S DoHilite ; if not, skip <08/22/86 DLD>
|
|||
|
|
|||
|
TST.B IsColor(A6) ; is it color?
|
|||
|
BEQ.S @NoColor6 ;
|
|||
|
MOVEQ #notSrcCopy,D1 ; plot in notsrcCopy mode <08/22/86 DLD>
|
|||
|
BRA.S @Common6 ; continue
|
|||
|
@NoColor6 MOVEQ #srcCopy,D1 ; default to srcCopy mode <08/22/86 DLD>
|
|||
|
@Common6 ; since we will invert <08/22/86 DLD>
|
|||
|
LEA GoAwaySymbol,A1 ; get the goAway symbol <08/22/86 DLD>
|
|||
|
BSR.S PlotGoAway ; draw goAway <08/22/86 DLD>
|
|||
|
|
|||
|
DoHilite
|
|||
|
TST.B IsColor(A6) ; is it B&W?
|
|||
|
BNE.S @BW1 ;
|
|||
|
|
|||
|
SUBQ #1,TempRect+Bottom ; adjust bottom
|
|||
|
PEA TEMPRECT ; push the title rect
|
|||
|
_InverRect
|
|||
|
@BW1 ; END OF A B&W-ONLY SECTION
|
|||
|
|
|||
|
DisposIt
|
|||
|
MOVE.L A4,-(SP) ; push the region handle
|
|||
|
_DisposRgn ; deallocate it
|
|||
|
;
|
|||
|
; frame the body of the window
|
|||
|
;
|
|||
|
DrawFrame
|
|||
|
TST.B IsColor(A6) ; is it color?
|
|||
|
BEQ.S @NoColor8 ;
|
|||
|
|
|||
|
MOVEQ #wFrameColor,D0 ; get the framecolor in Fore
|
|||
|
BSR SetUpColor ;
|
|||
|
_RGBForeColor
|
|||
|
@NoColor8 ; END OF A COLOR-ONLY SECTION
|
|||
|
MOVE.L STRUCTRGN(A3),-(SP) ; push the structure
|
|||
|
_FrameRgn ; frame the body
|
|||
|
RTS
|
|||
|
|
|||
|
;
|
|||
|
; BuildTBarRect builds a rectangle enclosing the titleBar in TempRect
|
|||
|
;
|
|||
|
BuildTBarRect
|
|||
|
LEA TEMPRECT,A0 ; get pointer to tempRect
|
|||
|
MOVE.L STRUCTRGN(A3),A1 ; get structure region handle
|
|||
|
MOVE.L (A1),A1 ; get strucRgn pointer
|
|||
|
ADDQ #RGNBBOX,A1 ; point A1 at the bounding box
|
|||
|
MOVE.L (A1)+,(A0) ; copy bounding box into tempRect
|
|||
|
MOVE.L (A1),4(A0)
|
|||
|
;
|
|||
|
; make bottom := top + height
|
|||
|
;
|
|||
|
MOVE Top(A0),D0 ; get top
|
|||
|
ADD.W WHeight(A6),D0 ; add in height <EHB 7Aug85>
|
|||
|
MOVE D0,Bottom(A0) ; update bottom
|
|||
|
SUBQ #1,Right(A0) ; inset right
|
|||
|
RTS ; return to caller
|
|||
|
;
|
|||
|
; EORGoAway hilites/unhilites the goAway button. It falls through into PlotGoAway
|
|||
|
;
|
|||
|
EorGoAway
|
|||
|
BSR.S BuildTBarRect ; build the bounding rect
|
|||
|
LEA GoAwaySymbol,A1 ; get the bitMap
|
|||
|
ADD.W #32,A1 ; bump to the EOR Mask
|
|||
|
MOVEQ #SrcXOR,D1 ; set EOR as the plot mode
|
|||
|
;
|
|||
|
; PlotGoAway plots the goAway button. A1 holds the symbol, D1 the plotting mode
|
|||
|
;
|
|||
|
PlotGoAway
|
|||
|
LEA TempRect,A0 ; point to temprect <7Aug85>
|
|||
|
MOVE.W WBoxDelta(A6),D0 ; get offset from top to GABox <7Aug85>
|
|||
|
ADD.W D0,(A0) ; add offset to top <7Aug85>
|
|||
|
SUBQ.W #1,(A0) ; align bitmap <7Aug85>
|
|||
|
ADDQ.W #8,2(A0) ; add margin to left <7Aug85>
|
|||
|
MOVE.L (A0)+,(A0) ; bottom/right = top/left <7Aug85>
|
|||
|
MOVEQ #16,D0 ; get a constant <7Aug85>
|
|||
|
ADD.W D0,(A0)+ ; Bottom = top + 16 <7Aug85>
|
|||
|
ADD.W D0,(A0) ; Right = Left + 16 <7Aug85>
|
|||
|
|
|||
|
MOVE D1,D0 ; set plotting mode
|
|||
|
MOVE.L #$00100010,D1
|
|||
|
BSR.S PlotSymbol ; plot it in tempRect
|
|||
|
BSR.S BuildTBarRect ; rebuild tempRect
|
|||
|
RTS
|
|||
|
|
|||
|
;
|
|||
|
; PlotSymbol -- plot the little 16 by 16 symbol bitmap pointed to by A1 into the rectangle
|
|||
|
; pointed held in TempRect. D0 holds the mode.
|
|||
|
;
|
|||
|
PlotSymbol
|
|||
|
LEA IconBitMap,A0 ; get pointer to source bitmap
|
|||
|
MOVE.L A1,(A0) ; update base address of bitMap
|
|||
|
MOVE #2,4(A0) ; update rowBytes
|
|||
|
MOVE.L #$00100010,10(A0) ; adjust boundsRect
|
|||
|
;
|
|||
|
; push parameters for CopyBits call to transfer arrow bitMap
|
|||
|
;
|
|||
|
MOVE.L A0,-(SP) ; push pointer source bitmap
|
|||
|
MOVE.L GrafGlobals(A5),A1 ; get lisaGraf global baseaddress
|
|||
|
MOVE.L THEPORT(A1),A1 ; get thePort
|
|||
|
PEA PORTBITS(A1) ; that's the destination bitmap
|
|||
|
;
|
|||
|
PEA BOUNDS(A0) ; boundsRect of bitmap is source
|
|||
|
PEA TempRect ; tempRect is the destination
|
|||
|
MOVE.W D0,-(SP) ; theMode is in D0
|
|||
|
CLR.L -(SP) ; no mask region
|
|||
|
;
|
|||
|
; transfer the bitMap (stretching as necessary...)
|
|||
|
;
|
|||
|
_CopyBits ; let Bill stretch those bits
|
|||
|
RTS ; return to caller
|
|||
|
;
|
|||
|
; DoTitleString is the common code that draws the title centered in tempRect
|
|||
|
;
|
|||
|
DoTitleString ; on entry, temprect is title rect inset by one
|
|||
|
|
|||
|
BSR BuildTBarRect ; calculate title bar rect
|
|||
|
|
|||
|
; compute indent factor based on GoAwayButton state
|
|||
|
|
|||
|
@1 MOVE.W TempRect+Right,D3 ; get right
|
|||
|
SUB.W TempRect+Left,D3 ; compute width
|
|||
|
|
|||
|
SUB.W WTITLEWIDTH(A3),D3 ; compute extra x
|
|||
|
ASR.W #1,D3 ; divide by 2
|
|||
|
;
|
|||
|
; if there's a goAway button, make sure the margin is at least 28 pixels
|
|||
|
;
|
|||
|
TST.B WGoAway(A3) ; is there a go away button
|
|||
|
BEQ.S @2 ; skip if there's not
|
|||
|
|
|||
|
TST D3 ; is it negative?
|
|||
|
BMI.S @3 ; if so, pin at 28
|
|||
|
CMP.W #28,D3 ; if goAway button, must have some margin
|
|||
|
BGT.S @2
|
|||
|
@3 MOVEQ #28,D3
|
|||
|
|
|||
|
@2 ADD TempRect+Left,D3 ; compute x position
|
|||
|
MOVE.W D3,-(SP) ; and push for MoveTo
|
|||
|
|
|||
|
MOVE.W TempRect+Top,D0 ; get top <7Aug85>
|
|||
|
ADD.W WAscent(A6),D0 ; move down to baseline <7Aug85>
|
|||
|
ADDQ.W #2,D0 ; add a little white space <7Aug85>
|
|||
|
MOVE.W D0,-(SP) ; push baseline <7Aug85>
|
|||
|
_MoveTo
|
|||
|
|
|||
|
TST.B IsColor(A6) ; is it color?
|
|||
|
BEQ.S @NoColor9 ; no, so skip
|
|||
|
|
|||
|
MOVE.W txMode(A3),-(SP) ; save the xfer mode
|
|||
|
MOVE.W #notsrcCopy,-(SP) ; set the text mode <C407/13Nov86> DAF
|
|||
|
_TextMode
|
|||
|
@NoColor9 ; END OF A COLOR-ONLY SECTION
|
|||
|
|
|||
|
; draw the string
|
|||
|
|
|||
|
MOVE.L WTITLEHANDLE(A3),A0 ; get titleHandle
|
|||
|
_HLock ; lock that puppy <C491/08Dec86> DAF
|
|||
|
MOVE.L (A0),-(SP) ; push title pointer
|
|||
|
_DrawString ; draw it
|
|||
|
MOVE.L WTITLEHANDLE(A3),A0 ; get titleHandle again <C491/08Dec86> DAF
|
|||
|
_HUnlock ; unlock it <C491/08Dec86> DAF
|
|||
|
|
|||
|
TST.B IsColor(A6) ; is it color?
|
|||
|
BEQ.S @NoColor10 ; no, so skip
|
|||
|
_TextMode ; and restore textMode <26Apr86>
|
|||
|
@NoColor10 ; END OF A COLOR-ONLY SECTION
|
|||
|
|
|||
|
DoneDString
|
|||
|
RTS ; all done drawing title...
|
|||
|
|
|||
|
;
|
|||
|
; GetRadPoint returns the radius in D0 of the round rect parameter defined
|
|||
|
; by the selector parameter
|
|||
|
;
|
|||
|
GetRadPoint
|
|||
|
MOVE.L RadiusTable(D5),D0
|
|||
|
RTS
|
|||
|
|
|||
|
RadiusTable
|
|||
|
DC.L $00100010 ; (16,16)
|
|||
|
DC.L $00040004 ; (4,4)
|
|||
|
DC.L $00060006 ; (6,6)
|
|||
|
DC.L $00080008 ; (8,8)
|
|||
|
DC.L $000A000A ; (10,10)
|
|||
|
DC.L $000C000C ; (12,12)
|
|||
|
DC.L $00140014 ; (20,20)
|
|||
|
DC.L $00180018 ; (24,24)
|
|||
|
;
|
|||
|
; MakeRoundRegion -- makes a round region given a bounding rectangle and a radius
|
|||
|
; value. Also, half round regions (top round, bottom square) are supported
|
|||
|
; by the topRound,botRound booleans
|
|||
|
;
|
|||
|
; MakeRoundRegion( theRgn:RegionHandle
|
|||
|
; theRect: Rect
|
|||
|
; xRad,yRad: INTEGER
|
|||
|
; topRound,botRound: BOOLEAN)
|
|||
|
;
|
|||
|
MakeRoundRegion ; ???? was ...Rgn
|
|||
|
LINK A6,#0 ; set up stack frame
|
|||
|
MOVE.L A3,-(SP) ; save work registers
|
|||
|
TST.L 8(A6) ; are flags both false?
|
|||
|
BEQ.S PlainRect ; if so, its just a rectangle
|
|||
|
TST.L 12(A6) ; is radius factor 0?
|
|||
|
BNE.S ComplexRect ; if not, its a round one
|
|||
|
;
|
|||
|
; optimize for the rectangular case
|
|||
|
;
|
|||
|
PlainRect
|
|||
|
MOVE.L 20(A6),-(SP) ; push region handle
|
|||
|
MOVE.L 16(A6),-(SP) ; push rectangle pointer
|
|||
|
_RectRgn ; make a rectangular region
|
|||
|
BRA.S MMRDone ; all done!
|
|||
|
;
|
|||
|
; make a region with top and bottom corners rounded
|
|||
|
;
|
|||
|
ComplexRect
|
|||
|
_HidePen ; hide the pen
|
|||
|
_OpenRgn ; start recording the region
|
|||
|
;
|
|||
|
MOVE.L 16(A6),-(SP) ; push the rectangle pointer
|
|||
|
MOVE.L 12(A6),-(SP) ; push the radius point
|
|||
|
_FrameRoundRect ; define the region
|
|||
|
MOVE.L 20(A6),-(SP) ; push region handle
|
|||
|
_CloseRgn ; assign roundRect region
|
|||
|
;
|
|||
|
_ShowPen ; enable drawing again
|
|||
|
;
|
|||
|
; now square up either the top or bottom of the region (or neither)
|
|||
|
;
|
|||
|
MOVE.L 16(A6),A0 ; get rectangle pointer
|
|||
|
TST.W 8(A6) ; examine 'botRound' flag
|
|||
|
BNE.S CheckTRound ; if true, see if top needs squaring
|
|||
|
MOVE BOTTOM(A0),D1 ; get bottom y coordinate
|
|||
|
MOVE D1,D0
|
|||
|
SUBQ #8,D0 ; compute top
|
|||
|
BRA.S SquareIt
|
|||
|
;
|
|||
|
CheckTRound
|
|||
|
TST.W 10(A6) ; examine 'topRound' flag
|
|||
|
BNE.S MMRDone ; if that true, we're done
|
|||
|
MOVE Top(A0),D0 ; get top y coordinate
|
|||
|
MOVE D0,D1
|
|||
|
ADDQ #8,D1 ; get bottom
|
|||
|
;
|
|||
|
; here we build a rect in ToolScratch that has the same X as tempRect, but centered
|
|||
|
; around the top or bottom
|
|||
|
;
|
|||
|
SquareIt
|
|||
|
LEA ToolScratch,A1 ; get pointer to dest Rect
|
|||
|
MOVE D0,(A1)+ ; update top
|
|||
|
MOVE Left(A0),(A1)+ ; copy left
|
|||
|
MOVE D1,(A1)+ ; update bottom
|
|||
|
MOVE Right(A0),(A1) ; copy right
|
|||
|
;
|
|||
|
; now make a region out of that rectangle
|
|||
|
;
|
|||
|
CLR.L -(SP) ; make space for result
|
|||
|
_NewRgn ; allocate a new region
|
|||
|
MOVE.L (SP),A3 ; keep a copy in A3
|
|||
|
PEA ToolScratch ; push the rectangle pointer
|
|||
|
_RectRgn ; make the rectangular region
|
|||
|
;
|
|||
|
; now union with the parameter region to square up the edges
|
|||
|
;
|
|||
|
MOVE.L 20(A6),-(SP) ; push destination region
|
|||
|
MOVE.L A3,-(SP) ; push square region
|
|||
|
MOVE.L 20(A6),-(SP) ; dest gets the result
|
|||
|
_UnionRgn
|
|||
|
;
|
|||
|
; all done -- deallocate the temporary region
|
|||
|
;
|
|||
|
MOVE.L A3,-(SP)
|
|||
|
_DisposRgn
|
|||
|
;
|
|||
|
MMRDone
|
|||
|
MOVE.L (SP)+,A3 ; restore work reg
|
|||
|
UNLK A6 ; unlink stack frame
|
|||
|
MOVE.L (SP)+,A0 ; get return address
|
|||
|
ADD #16,SP ; strip parameters
|
|||
|
JMP (A0) ; all done!
|
|||
|
|
|||
|
; HitDoc -- perform a hit test on the document. On entry, D3 contains the mousePoint
|
|||
|
; in global coordinates while A3 holds the window pointer
|
|||
|
;
|
|||
|
HitDoc
|
|||
|
MOVEQ #16,D4 ; keep 16 in a register to save code
|
|||
|
CLR.W -(SP) ; make room for function result
|
|||
|
MOVE.L D3,-(SP) ; push the mouse point
|
|||
|
MOVE.L CONTRGN(A3),-(SP) ; push content region handle
|
|||
|
_PtInRgn ; is the point in the content region?
|
|||
|
TST.B (SP)+ ; well, is it?
|
|||
|
BEQ.S NotInContent ; if not, go check out drag region
|
|||
|
|
|||
|
; the point is in the content region so return a '1'
|
|||
|
|
|||
|
justContent
|
|||
|
MOVEQ #wInContent,D0 ; return in content
|
|||
|
BRA.S DoneHitDoc ; go store function result and return
|
|||
|
|
|||
|
; its not in the content -- see if its in the dragRgn (content extended by titleBar)
|
|||
|
|
|||
|
NotInContent
|
|||
|
|
|||
|
CLR.W -(SP)
|
|||
|
MOVE.L D3,-(SP)
|
|||
|
MOVE.L StructRgn(A3),-(SP)
|
|||
|
_PtInRgn
|
|||
|
TST.B (SP)+
|
|||
|
BEQ.S DoneHit1
|
|||
|
|
|||
|
CLR.W -(SP) ; make room for function result
|
|||
|
MOVE.L D3,-(SP) ; push the mouse point
|
|||
|
MOVE.L ContRgn(A3),A4 ; get content region handle
|
|||
|
MOVE.L (A4),A4 ; get region ptr
|
|||
|
ADDQ #RgnBBox,A4 ; get bounding box ptr
|
|||
|
MOVE.W WHeight(A6),D0 ; get height of title bar <7Aug85>
|
|||
|
SUB.W D0,Top(A4) ; decrease by height of title bar <7Aug85>
|
|||
|
MOVE.L A4,-(SP) ; push the rect
|
|||
|
_PtInRect ; is the point in the title bar?
|
|||
|
MOVE.W WHeight(A6),D0 ; get height of title bar <7Aug85>
|
|||
|
ADD.W D0,Top(A4) ; and fix the bounding box up <7Aug85>
|
|||
|
|
|||
|
TST.B (SP)+ ; examine result
|
|||
|
BEQ.S DoneHit1 ; if not, return 0 (do nothing)
|
|||
|
|
|||
|
; see if its in leftmost 16 of drag, which is the goAway button
|
|||
|
|
|||
|
TST.B WGoAway(A3) ; is there a goAway button?
|
|||
|
BEQ.S ItsInDrag ; if not, skip
|
|||
|
TST.B WHilited(A3) ; only draw it for the active one
|
|||
|
BEQ.S ItsInDrag
|
|||
|
|
|||
|
MOVE D3,D0 ; get mousePt
|
|||
|
MOVE.L A3,A0 ; copy the windowPtr for PortToMap <C424/18Nov86> DAF
|
|||
|
BSR PortToMap ; convert it <C424/18Nov86> DAF
|
|||
|
ADD Bounds+Left(A0),D0 ; convert to local <C424/18Nov86> DAF
|
|||
|
SUB PortRect+Left(A3),D0 ; compensate for origin
|
|||
|
CMP #18,D0 ; is it too far right?
|
|||
|
BGT.S ItsInDrag ; if so, its in drag
|
|||
|
SUBQ #8,D0 ; it must be at least 8
|
|||
|
BMI.S ItsInDrag
|
|||
|
|
|||
|
MOVE.L D3,D0 ;; now check vertical
|
|||
|
SWAP D0 ;; which is high word of D3
|
|||
|
ADD.W Bounds+Top(A0),D0 ;; convert to local (A0 is still valid) <C424/18Nov86> DAF
|
|||
|
SUB.W PortRect+Top(A3),D0 ;; compensate for origin
|
|||
|
|
|||
|
; D0 is aligned with 0 as the bottom of the title bar.
|
|||
|
|
|||
|
ADD.W WBoxDelta(A6),D0 ; below box? <7Aug85>
|
|||
|
BPL.S ItsInDrag ; => yes <7Aug85>
|
|||
|
ADD.W #11,D0 ; in box? <7Aug85>
|
|||
|
BMI.S ItsInDrag ; => no <7Aug85>
|
|||
|
|
|||
|
; its in the goAway button so signal it
|
|||
|
|
|||
|
MOVEQ #wInGoAway,D0
|
|||
|
BRA.S DoneHitDoc
|
|||
|
|
|||
|
ItsInDrag
|
|||
|
MOVEQ #wInDrag,D0 ; flag in drag region
|
|||
|
DoneHitDoc
|
|||
|
MOVE.L D0,20(A6) ; update function result
|
|||
|
DoneHit1 RTS
|
|||
|
|
|||
|
|
|||
|
; CalcDoc -- calculate the structure and content regions for the window pointed
|
|||
|
; to by A3.
|
|||
|
|
|||
|
CalcDoc
|
|||
|
LEA TEMPRECT,A0 ; get a pointer to the work rectangle
|
|||
|
MOVE.L A0,-(SP) ; push for later offset
|
|||
|
MOVE.L PORTRECT(A3),(A0)+ ; copy topLeft of portRect
|
|||
|
MOVE.L PORTRECT+4(A3),(A0) ; copy botLeft of portRect
|
|||
|
|
|||
|
; offset it to global coordinates
|
|||
|
|
|||
|
MOVE.L A3,A0 ; copy window pointer <C424/18Nov86> DAF
|
|||
|
BSR PortToMap ; convert pointer, if necessary <C424/18Nov86> DAF
|
|||
|
MOVE.L BOUNDS(A0),-(SP) ; push topLeft of port.portBits.bounds <C424/18Nov86> DAF
|
|||
|
NEG 2(SP) ; negate offset
|
|||
|
NEG (SP)
|
|||
|
_OffsetRect ; offset tempRect to global coordinates
|
|||
|
|
|||
|
; make the content region square for fast updating
|
|||
|
|
|||
|
MOVE.L CONTRGN(A3),A0 ; A0 holds the content region
|
|||
|
CLR D1 ; topround is false
|
|||
|
BSR.S GOMAKERGN ; go make the region into content region
|
|||
|
|
|||
|
; now do the structure region. First correct the bounding rectangle (tempRect) for
|
|||
|
; structure instead of content
|
|||
|
|
|||
|
PEA TEMPRECT ; push a pointer to the rect
|
|||
|
MOVE.L MinusOne,-(SP) ; make 1 pixel bigger, all around
|
|||
|
_InsetRect ; make it bigger
|
|||
|
|
|||
|
MOVE.W WHeight(A6),D0 ; move up to top of window <7Aug85>
|
|||
|
SUBQ.W #1,D0 ; tweak it <7Aug85>
|
|||
|
SUB.W D0,TempRect+Top ; and set top of struct region <7Aug85>
|
|||
|
|
|||
|
MOVEQ #1,D1 ; topRound is true
|
|||
|
MOVE.L STRUCTRGN(A3),A0 ; A0 holds the structRgn pointer
|
|||
|
|
|||
|
GoMakeRgn
|
|||
|
MOVE.L A0,-(SP) ; push the region handle
|
|||
|
PEA TEMPRECT ; push bounding rectangle pointer
|
|||
|
BSR GETRADPOINT ; get the radius factor
|
|||
|
MOVE.L D0,-(SP) ; push it
|
|||
|
MOVE.W D1,-(SP) ; topRound is in D1
|
|||
|
ST -(SP) ; so is botRound
|
|||
|
BSR MakeRoundRegion ; go make the region
|
|||
|
|
|||
|
; all done with CalcDocRgns
|
|||
|
|
|||
|
RTS
|
|||
|
|
|||
|
;
|
|||
|
; BitMap for default GoAway button
|
|||
|
|
|||
|
GoAwaySymbol
|
|||
|
DC.W $0000,$0000,$7FF0,$4010
|
|||
|
DC.W $4010,$4010,$4010,$4010
|
|||
|
DC.W $4010,$4010,$4010,$4010
|
|||
|
DC.W $7FF0,$0000,$0000,$0000
|
|||
|
|
|||
|
; brand-new, centered mask <Cxxx/06Oct86> DAF
|
|||
|
|
|||
|
DC.W $0000,$0000,$7FF0,$4210
|
|||
|
DC.W $5250,$4A90,$4010,$5DD0
|
|||
|
DC.W $4010,$4A90,$5250,$4210
|
|||
|
DC.W $7FF0,$0000,$0000,$0000
|
|||
|
|
|||
|
END
|
|||
|
;
|
|||
|
|
|||
|
|
|||
|
|