home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / Effect library / Demo ƒ / Demo code ƒ / demo.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-01-12  |  12.3 KB  |  272 lines  |  [TEXT/KAHL]

  1. /**********************************************************************\
  2.  
  3. File:        demo.c
  4.  
  5. Purpose:    This module handles demo initialization/shutdown and a
  6.             dispatch for the graphic effects and fades.
  7.  
  8.  
  9. MSG Demo -- graphic effects demonstration program
  10. Copyright (C) 1992-4 Mark Pilgrim & Dave Blumenthal
  11.  
  12. This program is free software; you can redistribute it and/or modify
  13. it under the terms of the GNU General Public License as published by
  14. the Free Software Foundation; either version 2 of the License, or
  15. (at your option) any later version.
  16.  
  17. This program is distributed in the hope that it will be useful,
  18. but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20. GNU General Public License for more details.
  21.  
  22. You should have received a copy of the GNU General Public License
  23. along with this program in a file named "GNU General Public License".
  24. If not, write to the Free Software Foundation, 675 Mass Ave,
  25. Cambridge, MA 02139, USA.
  26.  
  27. \**********************************************************************/
  28.  
  29. #include "demo.h"
  30. #include "demo crash.h"
  31. #include "demo graphics.h"
  32. #include "wipe headers.h"
  33. #include "reversed wipe headers.h"
  34. #include "fade headers.h"
  35. #include "reversed fade headers.h"
  36. #include "program globals.h"
  37. #include "msg graphics.h"
  38. #include "msg prefs.h"
  39.  
  40. unsigned char    gIsReversed;
  41. unsigned char    gWhichPict;
  42. int                gWipeStatus;
  43. int                gWhichWipe;
  44. int                gLastWipe;
  45.  
  46. void InitProgram(void)
  47. {
  48.     InitProgramGraphics();
  49.     gWhichWipe=0;
  50.     OpenTheWindow(kMainWindow);
  51. }
  52.  
  53. void ProgramKeyEvent(char keyPressed)
  54. {
  55. }
  56.  
  57. void ProgramEvent()
  58. {
  59. }
  60.  
  61. void ShutDownProgram(void)
  62. {
  63.     ShutDownProgramGraphics();
  64. }
  65.  
  66. void DoFullScreenFade(int whichWipe, Boolean savePrefs)
  67. {
  68.     Rect            theRect;
  69.     int                oldMenuBarHeight;
  70.  
  71.     ObscureCursor();
  72.     oldMenuBarHeight=GetMBarHeight();
  73.     MBarHeight=0;
  74.     DrawMenuBar();
  75.     SetPort(WMgrPort);
  76.     theRect=WMgrPort->portRect;
  77.     
  78.     gWhichWipe=whichWipe;
  79.     FadeDispatch(theRect);
  80.     RestoreScreen(oldMenuBarHeight);    
  81.     gLastWipe=gWhichWipe;
  82.     gWhichWipe=0;
  83.     if (savePrefs)
  84.         SaveThePrefs();
  85. }
  86.  
  87. void FadeDispatch(Rect theRect)
  88. {
  89.     if (gIsReversed)
  90.     {
  91.         switch (gWhichWipe)
  92.         {
  93.             case 1:        BoxInFade(theRect, &black);                        break;
  94.             case 2:        RandomFade(theRect, &black);                    break;
  95. //            case 3:        SpiralGyra can't be easily reversed.
  96.             case 4:        CircularFadeReversed(theRect, &black);            break;
  97. //            case 5:        CasteWipeRight can't be a fade.
  98.             case 6:        FourCornerFadeReversed(theRect, &black);        break;
  99.             case 7:        BoxOutFade(theRect, &black);                    break;
  100. //            case 8:        RippleWipeReversed can't be a fade.
  101. //            case 9:        DissolveWipe can't easily be a fade.
  102.             case 10:    DiagonalFadeDownRight(theRect, &black);            break;
  103. //            case 11:    CasteWipeDown can't be a fade.
  104.             case 12:    HilbertFadeReversed(theRect, &black);            break;
  105.             case 13:    SlideFadeReversed(theRect, &black);                break;
  106.             case 14:    SkipalineFade(theRect, &black);                    break;
  107.             case 15:    SkipalineLRFade(theRect, &black);                break;
  108.             case 16:    ScissorsFadeReversed(theRect, &black);            break;
  109.             case 17:    RescueRaidersFadeReversed(theRect, &black);        break;
  110.             case 18:    FourCenteredFadeReversed(theRect, &black);        break;
  111.             case 19:    TwoCornerFadeReversed(theRect, &black);            break;
  112.             case 20:    CircleInFade(theRect, &black);                    break;
  113.             case 21:    CircleOutFade(theRect, &black);                    break;
  114. //            case 22:    CircleSerendipity can't be easily reversed.
  115. //            case 23:    CircleBulge can't be easily reversed.
  116.             case 24:    CornerCircleFadeReversed(theRect, &black);        break;
  117.             case 25:    FullScrollLeftFade(theRect, &black);            break;
  118.             case 26:    FullScrollUpFade(theRect, &black);                break;
  119.             case 27:    MrDoFadeReversed(theRect, &black);                break;
  120.             case 28:    MrDoOutdoneFadeReversed(theRect, &black);        break;
  121. //            case 29:    SplitScrollUD can't be reversed.
  122. //            case 30:    FourCornerScroll can't be reversed.
  123.             case 31:    HalvesScrollFadeReversed(theRect, &black);        break;
  124.             case 32:    PourScrollFadeReversed(theRect, &black);        break;
  125.             default:    MrDoOutdoneFadeReversed(theRect, &black);        break;
  126.         }
  127.     }
  128.     else
  129.     {
  130.         switch(gWhichWipe)
  131.         {
  132.             case 1:        BoxOutFade(theRect, &black);                    break;
  133.             case 2:        RandomFade(theRect, &black);                    break;
  134.             case 3:        SpiralGyraFade(theRect, &black);                break;
  135.             case 4:        CircularFade(theRect, &black);                    break;
  136. //            case 5:        CasteWipeRL can't be a fade.
  137.             case 6:        FourCornerFade(theRect, &black);                break;
  138.             case 7:        BoxInFade(theRect, &black);                        break;
  139. //            case 8:        RippleWipe can't be a fade.
  140. //            case 9:        DissolveWipe can't easily be a fade.
  141.             case 10:    DiagonalFade(theRect, &black);                    break;
  142. //            case 11:    CasteWipe can't be a fade.
  143.             case 12:    HilbertFade(theRect, &black);                    break;
  144.             case 13:    SlideFade(theRect, &black);                        break;
  145.             case 14:    SkipalineFade(theRect, &black);                    break;
  146.             case 15:    SkipalineLRFade(theRect, &black);                break;
  147.             case 16:    ScissorsFade(theRect, &black);                    break;
  148.             case 17:    RescueRaidersFade(theRect, &black);                break;
  149.             case 18:    FourCornerCenteredFade(theRect, &black);        break;
  150.             case 19:    TwoCornerFade(theRect, &black);                    break;
  151.             case 20:    CircleOutFade(theRect, &black);                    break;
  152.             case 21:    CircleInFade(theRect, &black);                    break;
  153.             case 22:    CircleSerendipityFade(theRect, &black);            break;
  154.             case 23:    CircleBulgeFade(theRect, &black);                break;
  155.             case 24:    CornerCircleFade(theRect, &black);                break;
  156.             case 25:    FullScrollLRFade(theRect, &black);                break;
  157.             case 26:    FullScrollUDFade(theRect, &black);                break;
  158.             case 27:    MrDoFade(theRect, &black);                        break;
  159.             case 28:    MrDoOutdoneFade(theRect, &black);                break;
  160.             case 29:    SplitScrollUDFade(theRect, &black);                break;
  161.             case 30:    FourCornerScrollFade(theRect, &black);            break;
  162.             case 31:    HalvesScrollFade(theRect, &black);                break;
  163.             case 32:    PourScrollFade(theRect, &black);                break;
  164.             default:    MrDoOutdoneFade(theRect, &black);                break;
  165.         }
  166.     }
  167. }
  168.  
  169. void WipeDispatch(GrafPtr myGrafPtr)
  170. {
  171.     Rect            theRect;
  172.     
  173.     ObscureCursor();
  174.  
  175.     gWhichPict = !gWhichPict;
  176.     theRect=gTheWindow[kMainWindow]->portRect;
  177.     
  178.     if ((gWipeStatus==kFadesPlusEffects) || (gWipeStatus==kFadesPlusReverseEffects))
  179.         FadeDispatch(theRect);
  180.     if (gWipeStatus==kFadesPlusReverseEffects)
  181.         gIsReversed=!gIsReversed;
  182.     
  183.     if (gIsReversed)
  184.     {
  185.         switch(gWhichWipe)
  186.         {
  187.             case 1:        BoxInWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  188.             case 2:        RandomWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  189. //            case 3:        SpiralGyra can't be easily reversed.
  190.             case 3:        CopyBits(&(myGrafPtr->portBits), &(((GrafPtr)(gTheWindow[kMainWindow]))->portBits), &theRect, &theRect, 0, 0L);    break;
  191.             case 4:        CircularWipeReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  192.             case 5:        CasteWipeRight(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  193.             case 6:        FourCornerReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  194.             case 7:        BoxOutWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  195.             case 8:        RippleWipeReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  196.             case 9:        DissolveWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  197.             case 10:    DiagonalWipeDownRight(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  198.             case 11:    CasteWipeDown(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  199.             case 12:    HilbertWipeReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  200.             case 13:    SlideWipeReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  201.             case 14:    Skipaline(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  202.             case 15:    SkipalineLR(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  203.             case 16:    ScissorsReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);                break;
  204.             case 17:    RescueRaidersReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);        break;
  205.             case 18:    FourCornerCenteredReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);    break;
  206.             case 19:    TwoCornerReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  207.             case 20:    CircleIn(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  208.             case 21:    CircleOut(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);                break;
  209. //            case 22:    CircleSerendipity can't be easily reversed.
  210.             case 22:    CopyBits(&(myGrafPtr->portBits), &(((GrafPtr)(gTheWindow[kMainWindow]))->portBits), &theRect, &theRect, 0, 0L);    break;
  211. //            case 23:    CircleBulge can't be easily reversed.
  212.             case 23:    CopyBits(&(myGrafPtr->portBits), &(((GrafPtr)(gTheWindow[kMainWindow]))->portBits), &theRect, &theRect, 0, 0L);    break;
  213.             case 24:    CornerCircleReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);        break;
  214.             case 25:    FullScrollLeft(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  215.             case 26:    FullScrollUp(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  216.             case 27:    MrDoReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);                    break;
  217.             case 28:    MrDoOutdoneReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  218. //            case 29:    SplitScrollUD can't be reversed.
  219.             case 29:    CopyBits(&(myGrafPtr->portBits), &(((GrafPtr)(gTheWindow[kMainWindow]))->portBits), &theRect, &theRect, 0, 0L);    break;
  220. //            case 30:    FourCornerScroll can't be reversed.
  221.             case 30:    CopyBits(&(myGrafPtr->portBits), &(((GrafPtr)(gTheWindow[kMainWindow]))->portBits), &theRect, &theRect, 0, 0L);    break;
  222.             case 31:    HalvesScrollReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  223.             case 32:    PourScrollReversed(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  224.         }
  225.     }
  226.     else
  227.     {
  228.         switch(gWhichWipe)
  229.         {
  230.             case 1:        BoxOutWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  231.             case 2:        RandomWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  232.             case 3:        SpiralGyra(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  233.             case 4:        CircularWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  234.             case 5:        CasteWipeRL(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  235.             case 6:        FourCorner(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  236.             case 7:        BoxInWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  237.             case 8:        RippleWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  238.             case 9:        DissolveWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  239.             case 10:    DiagonalWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  240.             case 11:    CasteWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  241.             case 12:    HilbertWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  242.             case 13:    SlideWipe(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  243.             case 14:    Skipaline(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  244.             case 15:    SkipalineLR(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  245.             case 16:    Scissors(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);                break;
  246.             case 17:    RescueRaiders(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);        break;
  247.             case 18:    FourCornerCentered(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);    break;
  248.             case 19:    TwoCorner(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  249.             case 20:    CircleOut(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  250.             case 21:    CircleIn(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);                break;
  251.             case 22:    CircleSerendipity(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);    break;
  252.             case 23:    CircleBulge(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  253.             case 24:    CornerCircle(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  254.             case 25:    FullScrollLR(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  255.             case 26:    FullScrollUD(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  256.             case 27:    MrDo(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);                    break;
  257.             case 28:    MrDoOutdone(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  258.             case 29:    SplitScrollUD(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);        break;
  259.             case 30:    FourCornerScroll(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);        break;
  260.             case 31:    HalvesScroll(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  261.             case 32:    PourScroll(myGrafPtr, (GrafPtr)gTheWindow[kMainWindow], theRect);            break;
  262.         }
  263.     }
  264.     
  265.     if (gWipeStatus==kFadesPlusReverseEffects)
  266.         gIsReversed=!gIsReversed;
  267.     
  268.     gLastWipe=gWhichWipe;
  269.     gWhichWipe=0;
  270.     SaveThePrefs();
  271. }
  272.