Spiffy Color 1 (code)
Volume Number: 6>replyPtr Issue Number: 11>replyPtr$ Column Tag: Color WorkshopÄ< .Related Info: Color Quickdraw Memory Manager>replyPtrz !Spiffy Color Demo (code) >replyPtr &By John A. Love, III, Springfield, VA>replyPtr Û>replyPtr Listing: rotScrollSubs.p>replyPtrË:UNIT rotScrollSubs; { Thanks, Dan Weston !!!!! }>replyPtr destFSSpecPtr INTERFACE>fixBtnName USES>replyPtr (2Palettes, rotGlobals, rotMiscSubs, OffScreenSubs;>fixBtnName*1PROCEDURE ScrollText (myText: QDPtr; box: Rect);>replyPtr >PROCEDURE Scroll (ctl: ControlHandle; part: INTEGER; Pt: Point);>fixBtnName@3FUNCTION DrawMyControl (ctl: ControlHandle): BOOLEAN;>replyPtr 4FUNCTION ScrollHoriz (windPtr: WindowPtr): ControlHandle;>fixBtnNameV3FUNCTION ScrollVert (windPtr: WindowPtr): ControlHandle;>replyPtr (PROCEDURE ScrollShow (windPtr: WindowPtr);>fixBtnNamel(PROCEDURE ScrollHide (windPtr: WindowPtr);>fixBtnNamew+PROCEDURE InvalidScroll (windPtr: WindowPtr);>replyPtr )PROCEDURE ValidScroll (windPtr: WindowPtr);>replyPtr *PROCEDURE ScrollResize (windPtr: WindowPtr);>fixBtnName (PROCEDURE SetMaxCtls (windPtr: WindowPtr);>fixBtnName *PROCEDURE SetCtlsToMin (windPtr: WindowPtr);>fixBtnName VAR>fixBtnName( window: WindowPtr;>replyPtr (VertOrHoriz: LONGINT;>fixBtnName (oldCtlValue: INTEGER;>fixBtnNameÂ(stillThere: INTEGER;>replyPtr (temp: Rect;applicationIMPLEMENTATION>replyPtr
:= box.right - bufWidth;aliasesU(IF x0 < box.left THENaliases`({ Needed ONLY for very short strings. }aliasesk6leftJustify := TRUE;>replyPtr (IF leftJustify THENaliases 6x0 := box.left;aliases { y0 := box.bottom - 7; }>replyPtr (MoveTo(x0, y0);aliases ()DrawText(textBuf, firstChar, charCount);>replyPtr (lastChar := lastChar + 1;aliases(IF lastChar <= ORD(textLen) THEN aliasesŸ(${ Haven’t reached end of string. }aliases‰6 GOTO 400;aliases˙(8IF leftJustify THEN { We’ve reached the left edge. }alias6 GOTO 300;alias{ Not to left edge yet. }alias1(#bufWidth := bufWidth + widthSpace;>replyPtr<(6Delay(10, finalTicks); { ... otherwise too quick. }aliasG( GOTO 200;alias]{ At left edge. }aliash300:>replyPtrs(
ntrol := ourControl^^.nextControl;event (#END; { WHILE ourControl <> NIL }>replyPtr (ScrollHoriz := ourControl;>replyPtrEND; { ScrollHoriz }>replyPtr‡3FUNCTION ScrollVert (windPtr: WindowPtr): ControlHandle;>replyPtrÎ(VAReventˆ6ourControl: ControlHandle;etiquette BEGINetiquette(-ourControl := WindowPeek(windPtr)^.controlList;>replyPtr"(WHILE ourControl <> NIL DO>replyPtr-(BEGINetiquette860IF ourControl^^.contrlRFcon = vertScrollID THENetiquetteCCLEAVE;>replyPtrN6(ourControl := ourControl^^.nextControl;etiquetteY(END; { WHILE }>replyPtro(ScrollVert := ourControl;etiquettezEND; { ScrollVert }etiquette ){ ------------------------------------ }>replyPtr { Hello, or GoodBye: }>replyPtr ){ ------------------------------------ }>replyPtr (PROCEDURE ScrollShow (windPtr: WindowPtr);etiquette (VARetiquette6ctlHndl: ControlHandle;>replyPtr BEGINetiquette›( ctlHndl := ScrollVert(windPtr);etiquetteÛ(8IF DrawMyControl(ctlHndl) THEN {Tests for NIL ctlHndl.}etiquette[TOKEN:54]ShowControl(ctlHndl);fSSpec { ---------- }>replyPtr(!ctlHndl := ScrollHoriz(windPtr);>replyPtr(;fSSpec*(IF DrawMyControl(ctlHndl) THEN>replyPtr56ShowControl(ctlHndl);fSSpec@END; { ScrollShow }fSSpecV(PROCEDURE ScrollHide (windPtr: WindowPtr);fSSpeca(VARfSSpecl6ctlHndl: ControlHandle;>replyPtrwBEGINfSSpec ( ctlHndl := ScrollVert(windPtr);fSSpec (IF DrawMyControl(ctlHndl) THEN>replyPtr 6HideControl(ctlHndl);fSSpec { ---------- }>replyPtr (!ctlHndl := ScrollHoriz(windPtr);>replyPtr(;fSSpec(IF DrawMyControl(ctlHndl) THEN>replyPtr 6HideControl(ctlHndl);fSSpecÂEND; { ScrollHide }fSSpecDestFSSpecPtr {folderG---------------------------------------------------------------------l>replyPtr!------------------------------ }>replyPtr
obals, rotMiscSubs, OffscreenSubs,thereÂrotScrollSubs, rotWindowSubs;>replyPtr/[Missing image]LABELthereResource 100;>replyPtr03{ ---------------------------------------------- }>replyPtr0
p)));>replyPtrIkQ9rotBitMapPtr2 := BitMapPtr(NewClearPtr(SIZEOF(BitMap)));>replyPtrIvQ9rotBitMapPtr3 := BitMapPtr(NewClearPtr(SIZEOF(BitMap)));>replyPtrI Q9rotBitMapPtr4 := BitMapPtr(NewClearPtr(SIZEOF(BitMap)));>replyPtrI CEND; { ELSE }I CrotBitMap1 := rotBitMapPtr1^;I CrotBitMap2 := rotBitMapPtr2^;I CrotBitMap3 := rotBitMapPtr3^;ICrotBitMap4 := rotBitMapPtr4^;IŸ1 { -------------------------------------- }>replyPtrI‰ { Draw off-screen ... }IÔ1 { -------------------------------------- }>replyPtrI˙CClipRect(kFullPICTrect);>replyPtrJ6 { Eliminate all stray matter. }JCEraseRect(kFullPICTrect);JC+DrawPicture(monsterPicHdl, kFullPICTrect);>replyPtrJ17 { -------------------------------------------- }>replyPtrJ<# { Back to “Square 1” ... }>replyPtrJG7 { -------------------------------------------- }>replyPtrJRCToOnScreen;J]CClipRect(kWindPICTrect);>replyPtrJs? { ---------------------------------------------------- }>replyPtrJ~% { Now, for the fun stuff ... }>replyPtrJ ? { ---------------------------------------------------- }>replyPtrJ 6+{ So funny colorization doesn’t happen. }>replyPtrJ CBackColor(whiteColor);>replyPtrJ CForeColor(blackColor);>replyPtrJ & { Black-and-white TOOOOO fast !! }J) toooooFast := aMac2 & (colorDepth = 1);>replyPtrJ C*err := RotateBits(offBitMap, rotBitMap1);J·CErrorOut(1, offBitMap, err);>replyPtrJÏCIF colorDepth > 1 THEN>replyPtrJ˜Q.BlockMove(Ptr(@rotBitMap1), Ptr(rotPixMap1^),KSIZEOF(BitMap));>replyPtrKCEraseRect(kWindPICTrect);KCcopyRect := rotBitMap1.bounds;>replyPtrK#CIF colorDepth = 1 THEN>replyPtrK.Q5CopyBits(rotBitMap1, onBWScreen^.portBits, copyRect,>replyPtrK9copyRect, srcCopy, NIL)KDCELSE>replyPtrKOQCopyBits(BitMapPtr(rotPixMap1^)^,KZABitMapPtr(onCScreen^.portPixMap^)^, copyRect, copyRect, srcCopy,>replyPtrKeNIL);KpCIF toooooFast THEN>replyPtrK{QDelay(90, finalTicks);>replyPtrK { +++++ }K C+err := RotateBits(rotBitMap1, rotBitMap2);>replyPtrK CErrorOut(2, rotBitMap1, err);K CIF colorDepth > 1 THEN>replyPtrK Q.BlockMove(Ptr(@rotBitMap2), Ptr(rotPixMap2^),KSIZEOF(BitMap));>replyPtrK CEraseRect(kWindPICTrect);KfiCcopyRect := rotBitMap2.bounds;>replyPtrKÈCIF colorDepth = 1 THEN>replyPtrKÙQ5CopyBits(rotBitMap2, onBWScreen^.portBits, copyRect,>replyPtrKcopyRect, srcCopy, NIL)L CELSE>replyPtrLQCopyBits(BitMapPtr(rotPixMap2^)^,L ABitMapPtr(onCScreen^.portPixMap^)^, copyRect, copyRect, srcCopy,>replyPtrL+NIL);L6CIF toooooFast THEN>replyPtrLAQDelay(90, finalTicks);>replyPtrLW { +++++ }LbC+err := RotateBits(rotBitMap2, rotBitMap3);>replyPtrLmCErrorOut(3, rotBitMap2, err);LxCIF colorDepth > 1 THEN>replyPtrL Q.BlockMove(Ptr(@rotBitMap3), Ptr(rotPixMap3^),L SIZEOF(BitMap));>replyPtrL CEraseRect(kWindPICTrect);L CcopyRect := rotBitMap3.bounds;>replyPtrL CIF colorDepth = 1 THEN>replyPtrL Q5CopyBits(rotBitMap3, onBWScreen^.portBits, copyRect,>replyPtrLcopyRect, srcCopy, NIL)L CELSE>replyPtrL€QCopyBits(BitMapPtr(rotPixMap3^)^,LÊABitMapPtr(onCScreen^.portPixMap^)^, copyRect, copyRect, srcCopy,>replyPtrLNIL);L[TOKEN:67]IF toooooFast THEN>replyPtrMQDelay(90, finalTicks);>replyPtrM { +++++ }M(C+err := RotateBits(rotBitMap3, rotBitMap4);>replyPtrM3CErrorOut(4, rotBitMap3, err);M>CIF colorDepth > 1 THEN>replyPtrMIQ.BlockMove(Ptr(@rotBitMap4), Ptr(rotPixMap4^),MTSIZEOF(BitMap));>replyPtrM_CEraseRect(kWindPICTrect);MjCcopyRect := rotBitMap4.bounds;>replyPtrM IF colorDepth = 1 THEN>replyPtrM Q5CopyBits(rotBitMap4, onBWScreen^.portBits, copyRect,>replyPtrM copyRect, srcCopy, NIL)M CELSE>replyPtrM QCopyBits(BitMapPtr(rotPixMap4^)^,M ABitMapPtr(onCScreen^.portPixMap^)^, copyRect, copyRect, srcCopy,>replyPtrMNIL);M C.myRotHdl4 := RecoverHandle(rotBitMap4.baseAddr);M„Q{ The last straggler ... }>replyPtrM CHUnlock(myRotHdl4);M˘CDisposHandle(myRotHdl4);N {NA-------------------------------------------------------------- }>replyPtrN%+ { Now, wasn’t that neat, folks !! }>replyPtrN0 {N;A-------------------------------------------------------------- }>replyPtrNF100:>replyPtrNQCIF colorDepth > 1 THEN>replyPtrN\CBEGINNgQDisposHandle(Handle(ourCTHandle));NrQDisposPixMap(rotPixMap1);N}QDisposPixMap(rotPixMap2);N QDisposPixMap(rotPixMap3);N QDisposPixMap(rotPixMap4);N C