home *** CD-ROM | disk | FTP | other *** search
- /*
- * Zoom.c - Rectangle zooming routine
- *
- * 24 Dec 93
- * - Added some timing delay to loop so zooming doesn't zip so fast on
- * faster processors. This probably needs some fine tuning.
- */
-
- # include "BlobMgr.h"
-
-
- /*
- * Zooming parameters. zoomSteps is the number of steps in the
- * interpolative series. It must not be zero. zoomShow is the number
- * of steps that show at any one time in the series. It must be less
- * than or equal to zoomSteps.
- */
-
- # define zoomSteps 10
- # define zoomShow 3
-
-
- /*
- * BMgrZoomRect() zooms a dotted rectangle from r1 to r2. The effect is
- * transparent (screen no different afterwards). The shape of the zoomed
- * rectangles changes for smooth interpolation.
- */
-
- pascal void
- BMgrZoomRect (Rect *r1, Rect *r2)
- {
- short r1left, r1top;
- short hDiff, vDiff, widDiff, htDiff;
- short l, t, r, b;
- short rWid, rHt;
- short i, j;
- Rect zoomRect[zoomSteps];
- PenState ps;
- long ticks;
-
- r1left = r1->left; /* these two statements make code shorter and */
- r1top = r1->top; /* impervious to mem mgr if rects passed by handle */
- hDiff = r2->left - r1left; /* positive if moving to right */
- vDiff = r2->top - r1top; /* positive if moving down */
- rWid = r1->right - r1left;
- rHt = r1->bottom - r1top;
- widDiff = (r2->right - r2->left) - rWid;
- htDiff = (r2->bottom - r2->top) - rHt;
- /* set pen gray, mode xor */
- GetPenState (&ps); /* save current pen state */
- PenPat (gray);
- PenMode (patXor);
- for (i = 0; i < zoomSteps; ++i)
- {
- j = i + 1;
- l = r1left + (hDiff * j) / zoomSteps;
- t = r1top + (vDiff * j) / zoomSteps;
- r = l + rWid + (widDiff * j) / zoomSteps;
- b = t + rHt + (htDiff * j) / zoomSteps;
- SetRect (&zoomRect[i], l, t, r, b);
- FrameRect (&zoomRect[i]); /* draw in xor */
- if (i >= zoomShow)
- FrameRect (&zoomRect[i-zoomShow]);
- ticks = TickCount () + 1;
- while ((i % 3) == 0 && TickCount () < ticks) {}
- }
- for (i = zoomSteps - zoomShow; i < zoomSteps; ++i)
- {
- FrameRect (&zoomRect[i]);
- ticks = TickCount () + 1;
- while ((i % 3) == 0 && TickCount () < ticks) {}
- }
- /* set pen normal */
- SetPenState (&ps); /* restore pen state */
- }
-