home *** CD-ROM | disk | FTP | other *** search
/ Carousel / CAROUSEL.cdr / mactosh / lang / skel_azt.sha / myscroll.c < prev    next >
C/C++ Source or Header  |  1986-07-08  |  2KB  |  67 lines

  1.  
  2. /*
  3.  *    myscroll.c -- called by TrackControl for mouse click in page or
  4.  *        arrow parts of a scrollbar
  5.  *        NOTE:  the global rectangle r must be the visible
  6.  *                region of the window, as noted in checkscroll() and
  7.  *                scroll().
  8.  */
  9.  
  10. #include <quickdraw.h>
  11. #include <control.h>
  12. #include <textedit.h>
  13.  
  14. pascal void
  15. myscroll(mc, pc)
  16. ControlHandle    mc;    /* "my" control (which control) */
  17. int                pc;    /* which part code is clicked this time
  18.                      * (the global, part, tells which part code was
  19.                      * clicked originally)
  20.                      */
  21. {
  22.     short                amount;
  23.     short                atom;
  24.     long                dlr;        /* to ignore result from Delay */
  25.     extern    TEHandle    hTE;
  26.     extern    short        part;        /* control part */
  27.     extern    Rect        r;
  28.     short                start;
  29.     extern    int            swi;        /* scroll window index */
  30.     Boolean                up;
  31.     extern    Boolean        vertical;    /* indicates which scroll bar */
  32.  
  33.     up = pc == inUpButton || pc == inPageUp;
  34.     start = GetCtlValue(mc);
  35.  
  36.     if ((up && start > GetCtlMin(mc)) ||
  37.       (!up && start < GetCtlMax(mc)) && part == pc) {
  38.         if (!hTE || swi != 1)
  39.             atom = 1;
  40.         else {
  41.             atom = (*hTE)->lineHeight;
  42.             if (!vertical)
  43.                 atom >>= 1;
  44.         };
  45.         amount = up ? -1 : 1;
  46.         if (pc == inPageUp || pc == inPageDown) {
  47.             atom *= amount;
  48.             if (vertical)
  49.                 amount *= r.bottom - r.top;
  50.             else
  51.                 amount *= r.right - r.left;
  52.             amount -= atom;
  53.         }
  54.         else /* in XXButton */
  55.             amount *= atom;
  56.         if (up && (start + amount) < GetCtlMin(mc))
  57.             amount = GetCtlMin(mc) - start;
  58.         if (!up && (start + amount) > GetCtlMax(mc))
  59.             amount = GetCtlMax(mc) - start;
  60.         if (amount != 0) {
  61.             SetCtlValue(mc, start + amount);
  62.             scroll();
  63.             Delay(8L, &dlr);        /* de-bounce mouse button */
  64.         };
  65.     };
  66. } /* end of myscroll */
  67.