//============================================================ //============================================================ //== == //== About Dialog Routines == //== == //============================================================ //============================================================ //======================================================== Includes #include "About.h" #include "UnivUtilities.h" //======================================================== Local Vars static RgnHandle okayButtRgn; static Rect okayButtonBounds, mainPICTBounds; static Boolean okayButtIsHiLit, clickedDownInOkay; //======================================================== Procedures //======================================================== HiLiteOkayButton void HiLiteOkayButton (void) { PicHandle thePict; if (!okayButtIsHiLit) { thePict = GetPicture(kOkayButtPICTHiLit); if (thePict != kNilPointer) { DrawPicture(thePict, &okayButtonBounds); ReleaseResource((Handle)thePict); okayButtIsHiLit = TRUE; } } } //======================================================== UnHiLiteOkayButton void UnHiLiteOkayButton (void) { PicHandle thePict; if (okayButtIsHiLit) { thePict = GetPicture(kOkayButtPICTNotHiLit); if (thePict != kNilPointer) { DrawPicture(thePict, &okayButtonBounds); ReleaseResource((Handle)thePict); okayButtIsHiLit = FALSE; } } } //======================================================== UpdateMainPict void UpdateMainPict (DialogPtr theDialog) { PicHandle thePict; BeginUpdate((GrafPtr)theDialog); DrawDialog((GrafPtr)theDialog); if (isColor) thePict = GetPicture(kAboutColorPICT); else thePict = GetPicture(kAboutBandWPICT); if (thePict != kNilPointer) { DrawPicture(thePict, &mainPICTBounds); ReleaseResource((Handle)thePict); } EndUpdate((GrafPtr)theDialog); } //======================================================== AboutFilter pascal Boolean AboutFilter (DialogPtr theDialog, EventRecord *theEvent, short *itemHit) { Point mousePt; long dummyLong; if (Button() && clickedDownInOkay) { GetMouse(&mousePt); if(PtInRgn(mousePt, okayButtRgn)) HiLiteOkayButton(); else UnHiLiteOkayButton(); } switch (theEvent->what) { case keyDown: switch ((theEvent->message) & charCodeMask) { case kReturnKeyASCII: case kEnterKeyASCII: HiLiteOkayButton(); Delay(8, &dummyLong); UnHiLiteOkayButton(); *itemHit = buttItemOkay; return(TRUE); break; default: return(FALSE); } break; case mouseDown: mousePt = theEvent->where; GlobalToLocal(&mousePt); if(PtInRgn(mousePt, okayButtRgn)) { clickedDownInOkay = TRUE; return(FALSE); } else return(FALSE); break; case mouseUp: mousePt = theEvent->where; GlobalToLocal(&mousePt); if(PtInRgn(mousePt, okayButtRgn) && clickedDownInOkay) { UnHiLiteOkayButton(); *itemHit = buttItemOkay; return(TRUE); } else { clickedDownInOkay = FALSE; return(FALSE); } break; case updateEvt: UpdateMainPict(theDialog); theEvent->what = nullEvent; return(FALSE); break; default: return(FALSE); break; } } //======================================================== DoAbout void DoAbout (void) { DialogPtr aboutDialog; Str255 longVersion; StringPtr messagePtr; VersRecHndl version; Handle itemHandle; Rect itemRect; short itemType, itemHit; CenterDialog(rAboutDialogID); // Call our universal centering routine if (doZooms) ZoomOutDialogRect(rAboutDialogID); aboutDialog = GetNewDialog(rAboutDialogID, kNilPointer, kPutInFront); if (aboutDialog == kNilPointer) return; SetPort((GrafPtr)aboutDialog); // Bring up the dialog ShowWindow((GrafPtr)aboutDialog); ParamText("\p", "\p", "\p", "\p"); #if kDemoVersion ParamText("\pDEMO COPY", "\p", "\p", "\p"); #endif // Get version info from 'vers' resource version = (VersRecHndl)GetResource('vers', 1); if (version != kNilPointer) { messagePtr = (StringPtr)(((unsigned long) &(**version).shortVersion[1]) + ((**version).shortVersion[0])); BlockMove((Ptr)messagePtr, &longVersion, ((unsigned char) *messagePtr) + 1); GetDItem(aboutDialog, textItemVers, &itemType, &itemHandle, &itemRect); SetIText(itemHandle, longVersion); // Modify text item to show vers } GetDItem(aboutDialog, buttItemOkay, &itemType, &itemHandle, &okayButtonBounds); okayButtRgn = NewRgn(); // Create diagonal button region OpenRgn(); MoveTo(okayButtonBounds.left + 1, okayButtonBounds.top + 45); Line(44, -44); Line(16, 16); Line(-44, 44); Line(-16, -16); CloseRgn(okayButtRgn); okayButtIsHiLit = FALSE; // Initially, button is not hilit clickedDownInOkay = FALSE; // Initially, didn't click in okay button GetDItem(aboutDialog, pictItemMain, &itemType, &itemHandle, &mainPICTBounds); UpdateMainPict(aboutDialog); do // Loop until user wants to exit { ModalDialog(AboutFilter, &itemHit); } while (itemHit != buttItemOkay); DisposeRgn(okayButtRgn); // Clean up! DisposDialog(aboutDialog); }