/* sMOVIElines.c - function to smooth scroll horizontal lines up through a view. M. J. Round. 7 - Oct - 1989. */ /* See sMOVIEtext.c for an explanation of how this works. */ #include "sMOVIE.h" extern int maxfontheight,abort_prog; extern int mousemonitor(void); extern int maxwidth; extern int delay; /* delay between each pixel scroll */ extern int ypos; /* y posn of previous text base */ extern struct View v; /* view to be smooth scrolled */ extern struct RastPort rp; /* rastport to write text to */ void smoothlines (number,length,xpos,apen,bpen) short number; /* number of lines to draw */ short length; /* length of line (in pixels) */ short xpos; /* x position to start line (in pixels) */ BYTE apen; /* foreground (ink colour) pen */ BYTE bpen; /* background (paper colour) pen */ { int j,hipos,jump; register int i; WORD *ryoffset; ryoffset = &(v.ViewPort->RasInfo->RyOffset); jump = v.ViewPort->DHeight + maxfontheight; SetDrMd(&rp,JAM1); for(i=0; i < number; i++) { /* each pass scrolls one pixel */ if (!abort_prog) abort_prog = mousemonitor(); else break; if (ypos >= (rp.BitMap->Rows - 6)) { ypos -= jump; *ryoffset -= jump; } hipos = ypos - jump; Move (&rp,0,ypos); if (xpos) { SetAPen(&rp,bpen); Draw (&rp,xpos,ypos); } SetAPen (&rp,apen); Draw (&rp,xpos+length,ypos); if (xpos+length < maxwidth-1) { SetAPen (&rp,bpen); Draw (&rp,maxwidth-1,ypos); } if((hipos >= 0) && (*ryoffset >= hipos)) { Move (&rp,0,hipos); if (xpos) { SetAPen(&rp,bpen); Draw (&rp,xpos,hipos); } SetAPen (&rp,apen); Draw (&rp,xpos+length,hipos); if (xpos+length < maxwidth-1) { SetAPen (&rp,bpen); Draw (&rp,maxwidth-1,hipos); } } ++(*ryoffset); MakeVPort(&v, v.ViewPort); MrgCop(&v); for (j=0; j