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

  1.  
  2. /*
  3.  *    resize.c -- handle a mouse click and drag in the grow box of this
  4.  *                window
  5.  */
  6.  
  7. #include <quickdraw.h>
  8. #include <control.h>
  9. #include <textedit.h>
  10. #include <window.h>
  11.  
  12. #include "def.h"
  13.  
  14. void
  15. resize(i, pt)
  16. int        i;        /* index of window pointer */
  17. Point    pt;        /* location of mouse down in grow box */
  18. {
  19.     extern    Rect            grafr;
  20.     extern    TEHandle        hTE;
  21.     extern    ControlHandle    hscroll[NWINDOWS];
  22.     extern    Rect            r;
  23.     extern    Point            tlp[NWINDOWS];
  24.     extern    ControlHandle    vscroll[NWINDOWS];
  25.     extern    Rect            wgrowr;
  26.     extern    WindowPtr        wp[NWINDOWS];
  27.     Point                    newpt;
  28.     long                    newsize;
  29.     Point                    oldpt;
  30.     
  31.     newsize = GrowWindow(wp[i], pass(pt), &wgrowr);
  32.     BlockMove(&newsize, &newpt, (long)sizeof(Point));
  33.     if (!newpt.v && !newpt.h) /* no change in window size */
  34.         return;
  35.  
  36.     /*    invalidate old scrollbar areas before SizeWindow */
  37.  
  38.     BlockMove(&wp[i]->portRect, &r, (long)sizeof(Rect));
  39.     r.left = r.right - 16;
  40.     InvalRect(&r);
  41.     BlockMove(&wp[i]->portRect, &r, (long)sizeof(Rect));
  42.     r.top = r.bottom - 16;
  43.     InvalRect(&r);
  44.     /*                    width */
  45.     SizeWindow (wp[i], (short)(newsize & 0xFFFF),
  46.         /*    height */
  47.         (short)((newsize >> 16) & 0xFFFF), TRUE);
  48.  
  49.     /*    invalidate new scrollbar areas after SizeWindow */
  50.  
  51.     BlockMove(&wp[i]->portRect, &r, (long)sizeof(Rect));
  52.     r.left = r.right - 16;
  53.     InvalRect(&r);
  54.     BlockMove(&wp[i]->portRect, &r, (long)sizeof(Rect));
  55.     r.top = r.bottom - 16;
  56.     InvalRect(&r);
  57.     BlockMove(&wp[i]->portRect, &r, (long)sizeof(Rect));
  58.     r.bottom -= 15;
  59.     r.right -= 15;
  60.     if (i == 1 && hTE) {
  61.         (*hTE)->viewRect.left = r.left;
  62.         (*hTE)->viewRect.top = r.top;
  63.         (*hTE)->viewRect.right = r.right - 1;
  64.         (*hTE)->viewRect.bottom = r.bottom - 1;
  65.     }
  66.     else if (i == 0) {
  67.  
  68.         /*    if the window has gone beyond the bottom edge, or beyond
  69.          *    the right edge, of the picture, scroll so that the 
  70.          *    picture comes to the edge of the window
  71.          */
  72.  
  73.         if ((tlp[0].h + r.right - 16) > grafr.right)
  74.             SetCtlValue(hscroll[0], grafr.right - r.right + r.left);
  75.         if ((tlp[0].v + r.top) > grafr.bottom)
  76.             SetCtlValue(vscroll[0], grafr.bottom - r.bottom + r.top);
  77.     };
  78.     checkscroll(i);
  79.     drawscroll(i);
  80. } /* end of resize */
  81.