home *** CD-ROM | disk | FTP | other *** search
- /**********************************************************************\
-
- File: demo.c
-
- Purpose: This module handles demo initialization/shutdown and a
- dispatch for the graphic effects and fades.
-
-
- MSG Demo -- graphic effects demonstration program
- Copyright (C) 1992-4 Mark Pilgrim & Dave Blumenthal
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program in a file named "GNU General Public License".
- If not, write to the Free Software Foundation, 675 Mass Ave,
- Cambridge, MA 02139, USA.
-
- \**********************************************************************/
-
- #include "demo.h"
- #include "demo crash.h"
- #include "demo graphics.h"
- #include "wipe headers.h"
- #include "reversed wipe headers.h"
- #include "fade headers.h"
- #include "reversed fade headers.h"
- #include "program globals.h"
- #include "msg graphics.h"
- #include "msg prefs.h"
-
- unsigned char gIsReversed;
- unsigned char gWhichPict;
- int gWipeStatus;
- int gWhichWipe;
- int gLastWipe;
-
- void InitProgram(void)
- {
- InitProgramGraphics();
- gWhichWipe=0;
- OpenTheWindow(kMainWindow);
- }
-
- void ProgramKeyEvent(char keyPressed)
- {
- }
-
- void ProgramEvent()
- {
- }
-
- void ShutDownProgram(void)
- {
- ShutDownProgramGraphics();
- }
-
- void DoFullScreenFade(int whichWipe, Boolean savePrefs)
- {
- Rect theRect;
- int oldMenuBarHeight;
-
- ObscureCursor();
- oldMenuBarHeight=GetMBarHeight();
- MBarHeight=0;
- DrawMenuBar();
- SetPort(WMgrPort);
- theRect=WMgrPort->portRect;
-
- gWhichWipe=whichWipe;
- FadeDispatch(theRect);
- RestoreScreen(oldMenuBarHeight);
- gLastWipe=gWhichWipe;
- gWhichWipe=0;
- if (savePrefs)
- SaveThePrefs();
- }
-
- void FadeDispatch(Rect theRect)
- {
- if (gIsReversed)
- {
- switch (gWhichWipe)
- {
- case 1: BoxInFade(theRect, &black); break;
- case 2: RandomFade(theRect, &black); break;
- // case 3: SpiralGyra can't be easily reversed.
- case 4: CircularFadeReversed(theRect, &black); break;
- // case 5: CasteWipeRight can't be a fade.
- case 6: FourCornerFadeReversed(theRect, &black); break;
- case 7: BoxOutFade(theRect, &black); break;
- // case 8: RippleWipeReversed can't be a fade.
- // case 9: DissolveWipe can't easily be a fade.
- case 10: DiagonalFadeDownRight(theRect, &black); break;
- // case 11: CasteWipeDown can't be a fade.
- case 12: HilbertFadeReversed(theRect, &black); break;
- case 13: SlideFadeReversed(theRect, &black); break;
- case 14: SkipalineFade(theRect, &black); break;
- case 15: SkipalineLRFade(theRect, &black); break;
- case 16: ScissorsFadeReversed(theRect, &black); break;
- case 17: RescueRaidersFadeReversed(theRect, &black); break;
- case 18: FourCenteredFadeReversed(theRect, &black); break;
- case 19: TwoCornerFadeReversed(theRect, &black); break;
- case 20: CircleInFade(theRect, &black); break;
- case 21: CircleOutFade(theRect, &black); break;
- // case 22: CircleSerendipity can't be easily reversed.
- // case 23: CircleBulge can't be easily reversed.
- case 24: CornerCircleFadeReversed(theRect, &black); break;
- case 25: FullScrollLeftFade(theRect, &black); break;
- case 26: FullScrollUpFade(theRect, &black); break;
- case 27: MrDoFadeReversed(theRect, &black); break;
- case 28: MrDoOutdoneFadeReversed(theRect, &black); break;
- // case 29: SplitScrollUD can't be reversed.
- // case 30: FourCornerScroll can't be reversed.
- case 31: HalvesScrollFadeReversed(theRect, &black); break;
- case 32: PourScrollFadeReversed(theRect, &black); break;
- default: MrDoOutdoneFadeReversed(theRect, &black); break;
- }
- }
- else
- {
- switch(gWhichWipe)
- {
- case 1: BoxOutFade(theRect, &black); break;
- case 2: RandomFade(theRect, &black); break;
- case 3: SpiralGyraFade(theRect, &black); break;
- case 4: CircularFade(theRect, &black); break;
- // case 5: CasteWipeRL can't be a fade.
- case 6: FourCornerFade(theRect, &black); break;
- case 7: BoxInFade(theRect, &black); break;
- // case 8: RippleWipe can't be a fade.
- // case 9: DissolveWipe can't easily be a fade.
- case 10: DiagonalFade(theRect, &black); break;
- // case 11: CasteWipe can't be a fade.
- case 12: HilbertFade(theRect, &black); break;
- case 13: SlideFade(theRect, &black); break;
- case 14: SkipalineFade(theRect, &black); break;
- case 15: SkipalineLRFade(theRect, &black); break;
- case 16: ScissorsFade(theRect, &black); break;
- case 17: RescueRaidersFade(theRect, &black); break;
- case 18: FourCornerCenteredFade(theRect, &black); break;
- case 19: TwoCornerFade(theRect, &black); break;
- case 20: CircleOutFade(theRect, &black); break;
- case 21: CircleInFade(theRect, &black); break;
- case 22: CircleSerendipityFade(theRect, &black); break;
- case 23: CircleBulgeFade(theRect, &black); break;
- case 24: CornerCircleFade(theRect, &black); break;
- case 25: FullScrollLRFade(theRect, &black); break;
- case 26: FullScrollUDFade(theRect, &black); break;
- case 27: MrDoFade(theRect, &black); break;
- case 28: MrDoOutdoneFade(theRect, &black); break;
- case 29: SplitScrollUDFade(theRect, &black); break;
- case 30: FourCornerScrollFade(theRect, &black); break;
- case 31: HalvesScrollFade(theRect, &black); break;
- case 32: PourScrollFade(theRect, &black); break;
- default: MrDoOutdoneFade(theRect, &black); break;
- }
- }
- }
-
- void WipeDispatch(GrafPtr myGrafPtr)
- {
- Rect theRect;
-
- ObscureCursor();
-
- gWhichPict = !gWhichPict;
- theRect=gTheWindow[kMainWindow]->portRect;
-
- if ((gWipeStatus==kFadesPlusEffects) || (gWipeStatus==kFadesPlusReverseEffects))
- FadeDispatch(theRect);
- if (gWipeStatus==kFadesPlusReverseEffects)
- gIsReversed=!gIsReversed;
-
- if (gIsReversed)
- {
- switch(gWhichWipe)
- {
- case 1: BoxInWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 2: RandomWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- // case 3: SpiralGyra can't be easily reversed.
- case 3: CopyBits(&(myGrafPtr->portBits), &(((GrafPtr)(gTheWindow[kMainWindow]))->portBits), &theRect, &theRect, 0, 0L); break;
- case 4: CircularWipeReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 5: CasteWipeRight(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 6: FourCornerReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 7: BoxOutWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 8: RippleWipeReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 9: DissolveWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 10: DiagonalWipeDownRight(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 11: CasteWipeDown(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 12: HilbertWipeReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 13: SlideWipeReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 14: Skipaline(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 15: SkipalineLR(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 16: ScissorsReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 17: RescueRaidersReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 18: FourCornerCenteredReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 19: TwoCornerReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 20: CircleIn(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 21: CircleOut(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- // case 22: CircleSerendipity can't be easily reversed.
- case 22: CopyBits(&(myGrafPtr->portBits), &(((GrafPtr)(gTheWindow[kMainWindow]))->portBits), &theRect, &theRect, 0, 0L); break;
- // case 23: CircleBulge can't be easily reversed.
- case 23: CopyBits(&(myGrafPtr->portBits), &(((GrafPtr)(gTheWindow[kMainWindow]))->portBits), &theRect, &theRect, 0, 0L); break;
- case 24: CornerCircleReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 25: FullScrollLeft(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 26: FullScrollUp(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 27: MrDoReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 28: MrDoOutdoneReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- // case 29: SplitScrollUD can't be reversed.
- case 29: CopyBits(&(myGrafPtr->portBits), &(((GrafPtr)(gTheWindow[kMainWindow]))->portBits), &theRect, &theRect, 0, 0L); break;
- // case 30: FourCornerScroll can't be reversed.
- case 30: CopyBits(&(myGrafPtr->portBits), &(((GrafPtr)(gTheWindow[kMainWindow]))->portBits), &theRect, &theRect, 0, 0L); break;
- case 31: HalvesScrollReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 32: PourScrollReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- }
- }
- else
- {
- switch(gWhichWipe)
- {
- case 1: BoxOutWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 2: RandomWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 3: SpiralGyra(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 4: CircularWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 5: CasteWipeRL(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 6: FourCorner(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 7: BoxInWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 8: RippleWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 9: DissolveWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 10: DiagonalWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 11: CasteWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 12: HilbertWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 13: SlideWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 14: Skipaline(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 15: SkipalineLR(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 16: Scissors(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 17: RescueRaiders(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 18: FourCornerCentered(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 19: TwoCorner(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 20: CircleOut(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 21: CircleIn(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 22: CircleSerendipity(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 23: CircleBulge(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 24: CornerCircle(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 25: FullScrollLR(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 26: FullScrollUD(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 27: MrDo(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 28: MrDoOutdone(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 29: SplitScrollUD(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 30: FourCornerScroll(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 31: HalvesScroll(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- case 32: PourScroll(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect); break;
- }
- }
-
- if (gWipeStatus==kFadesPlusReverseEffects)
- gIsReversed=!gIsReversed;
-
- gLastWipe=gWhichWipe;
- gWhichWipe=0;
- SaveThePrefs();
- }
-