home *** CD-ROM | disk | FTP | other *** search
/ Virtual Reality Zone / VRZONE.ISO / mac / PC / PCGLOVE / GLOVE / OBJGLV.ZIP / SRC / WINACTOR.CPP < prev    next >
C/C++ Source or Header  |  1993-05-11  |  4KB  |  176 lines

  1. //
  2. // WinActor.cpp:
  3. //    Implementation of classes TDataDialog and WinGraphicsActor.
  4. //    Example use of Object Glove.
  5. //
  6. // Purpose:
  7. //    Outputs graphics and text in Windows.
  8. //
  9. // Compatibility:
  10. //    Windows only!
  11. //
  12. // Copyright 1993   Mark Thomas Pflaging
  13. //
  14. // Date:    3/22/93 (Release 3.0)     
  15. //
  16. #include "WinActor.hpp"
  17. #include <math.h>
  18. #include "winres.h"
  19.  
  20. HDC WinPolygon::DC;
  21.  
  22. PTDialog winGraphicsActor::InfoScreen = NULL;
  23.  
  24. static int getmaxcolor()
  25. {
  26.     return 256;
  27. }
  28.  
  29. void winGraphicsActor::eraseGlove()
  30. {
  31.     // erase old box.
  32.     RECT temprect = { newRect.left, newRect.top, newRect.right, newRect.bottom};
  33.     InvalidateRect(where.HWindow, &temprect, TRUE);
  34.     if (leaveTrails) return;
  35.     temprect.left = oldData.left;
  36.     temprect.top = oldData.top;
  37.     temprect.right = oldData.right;
  38.     temprect.bottom = oldData.bottom;
  39.     InvalidateRect(where.HWindow, &temprect, TRUE);
  40. }
  41.  
  42. void winGraphicsActor::Paint(HDC DC)
  43. {
  44.     if (gloveActive) {
  45.         where.setupHDC(DC, currentColor);
  46.             Rectangle(DC, newRect.left, newRect.top, newRect.right, newRect.bottom);
  47.             ((Win_PolySpace *)poly_space)->WinDrawAll(DC);
  48.         where.releaseHDC(DC);
  49.     }
  50. }
  51.  
  52. // draw square cursor
  53. void winGraphicsActor::drawGlove(gloveDriver &gd)
  54. {
  55.     RECT size;
  56.         GetClientRect(where.HWindow, &size);
  57.         XYZ temprect;
  58.     temprect.scaleToGlove(gd, size.right, size.bottom);
  59.  
  60.     // prevent redundant drawing.
  61.     if ((temprect == oldData) && (gd.getFingers() == oldFingers) &&
  62.        (gd.getKeys() == -1))
  63.         return;
  64.  
  65.     if (((temprect.right - temprect.left) > 2) && ((temprect.bottom - temprect.top) > 2)) {
  66.         newRect = temprect;
  67.         newRect.displayGlove(gd, *this);
  68.         eraseGlove();
  69.         oldData = newRect;         // save pos'n for next erase
  70.         oldFingers = gd.getFingers();
  71.         drawn = 0;
  72.     }
  73. }
  74.  
  75. void winGraphicsActor::Process(gloveDriver& gd)
  76. {
  77.         if (gloveActive)
  78.             drawGlove(gd);    // animate glove cursor
  79. /****
  80.         if (handActive)
  81.             drawFingers(gd, instance);    // draw the nonmoving "hand"
  82. ****/
  83.         if (infoActive)
  84.             infoDisplay(gd);
  85. }
  86.  
  87. void winGraphicsActor::displayHelp()
  88. {
  89. }
  90.  
  91. #pragma argsused
  92. void winGraphicsActor::infoErase(int start)
  93. {
  94. }
  95.  
  96. void winGraphicsActor::displayGestures()
  97. {
  98.     gact.displayDataBox();
  99. }
  100.  
  101. void winGraphicsActor::clearGestures()
  102. {
  103.     gact.closeDataBox();
  104. }
  105.  
  106. void winGraphicsActor::infoDisplay(gloveDriver & gd)
  107. {
  108.     if (DataPlace1) DataPlace1->infoDisplay(gd);
  109. }
  110.  
  111. void winGraphicsActor::Init(InitFile & ini)
  112. {
  113.     drawn = 2;
  114.     xx = 0;
  115.     keyDown = False;
  116.  
  117.     if (!getInstance()) {
  118.     }
  119.     currentColor = ini.find(title, "startColor", -1);
  120.     fillMode = ini.find(title, "fillMode", 0);
  121.     upIncrement = (int)sqrt((double)(getmaxcolor() + 1));
  122.     if (currentColor == -1) currentColor = getmaxcolor();
  123. }
  124.  
  125. winGraphicsActor::winGraphicsActor(InitFile & ini, TDemoWindow & arg, winGestureActor & garg) :
  126.     graphicsActor(ini, *(new Win_PolySpace)), where(arg), gact(garg)
  127. {
  128.     Init(ini);
  129. }
  130.  
  131. winGraphicsActor::winGraphicsActor(InitFile & ini, TDemoWindow & arg, ButtonGestSet &buttons, winGestureActor & garg) :
  132.     graphicsActor(ini, *(new Win_PolySpace), buttons), where(arg), gact(garg)
  133. {
  134.     Init(ini);
  135. }
  136.  
  137. TDataDialog::TDataDialog(PTWindowsObject AParent, int ResourceID, PTModule AModule) :
  138.         TDialog(AParent, ID_GLOVE_DATA_1 + ResourceID * 100, AModule),
  139.         old_X(0), old_Y(0), old_Z(0), old_Rotation(-1), old_Keys(-2),
  140.         old_Thumb(-1), old_Index(-1), old_Middle(-1), old_Ring(-1)
  141. {
  142.     X_Spot = new TStatic(this, ID_X_1 + ResourceID * 100, 5);
  143.     Y_Spot = new TStatic(this, ID_Y_1 + ResourceID * 100, 5);
  144.     Z_Spot = new TStatic(this, ID_Z_1 + ResourceID * 100, 5);
  145.     Rotation_Spot = new TStatic(this, ID_ROTATION_1 + ResourceID * 100, 5);
  146.     Keys_Spot = new TStatic(this, ID_KEYS_1 + ResourceID * 100, 5);
  147.     Thumb_Spot = new TStatic(this, ID_THUMB_1 + ResourceID * 100, 5);
  148.     Index_Spot = new TStatic(this, ID_INDEX_1 + ResourceID * 100, 5);
  149.     Middle_Spot = new TStatic(this, ID_MIDDLE_1 + ResourceID * 100, 5);
  150.     Ring_Spot = new TStatic(this, ID_RING_1 + ResourceID * 100, 5);
  151. }
  152.  
  153. #define update(variable)            \
  154.     val = gd.get##variable();        \
  155.     if (val != old_##variable) {        \
  156.         itoa(val, temp, 10);        \
  157.         variable##_Spot->SetText(temp);    \
  158.         old_##variable = val;        \
  159.     }
  160.  
  161. void TDataDialog::infoDisplay(gloveDriver & gd)
  162. {
  163.     char temp[18];
  164.         char val;
  165.  
  166.     update(X);
  167.     update(Y);
  168.     update(Z);
  169.     update(Rotation);
  170.     update(Keys);
  171.         update(Thumb);
  172.     update(Index);
  173.     update(Middle);
  174.     update(Ring);
  175. }
  176.