GliderPRO/Sources/Marquee.c

1 line
12 KiB
C
Raw Permalink Normal View History

//============================================================================ //---------------------------------------------------------------------------- // Marquee.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Marquee.h" #include "Objects.h" #include "ObjectEdit.h" #include "RectUtils.h" #define kMarqueePatListID 128 #define kHandleSideLong 9 void DrawGliderMarquee (void); void DrawMarquee (void); marquee theMarquee; Rect marqueeGliderRect; Boolean gliderMarqueeUp; extern Cursor handCursor, vertCursor, horiCursor, diagCursor; extern Rect leftStartGliderSrc; //============================================================== Functions //-------------------------------------------------------------- DoMarquee void DoMarquee (void) { if ((!theMarquee.active) || (theMarquee.paused)) return; SetPortWindowPort(mainWindow); PenMode(patXor); PenPat(&theMarquee.pats[theMarquee.index]); DrawMarquee(); theMarquee.index++; if (theMarquee.index >= kNumMarqueePats) theMarquee.index = 0; PenPat(&theMarquee.pats[theMarquee.index]); DrawMarquee(); PenNormal(); } //-------------------------------------------------------------- StartMarquee void StartMarquee (Rect *theRect) { if (theMarquee.active) StopMarquee(); if (objActive == kNoObjectSelected) return; SetPortWindowPort(mainWindow); theMarquee.bounds = *theRect; theMarquee.active = true; theMarquee.paused = false; theMarquee.handled = false; PenMode(patXor); PenPat(&theMarquee.pats[theMarquee.index]); DrawMarquee(); PenNormal(); SetCoordinateHVD(theMarquee.bounds.left, theMarquee.bounds.top, -1); } //-------------------------------------------------------------- StartMarqueeHandled void StartMarqueeHandled (Rect *theRect, short direction, short dist) { if (theMarquee.active) StopMarquee(); if (objActive == kNoObjectSelected) return; SetPortWindowPort(mainWindow); theMarquee.bounds = *theRect; theMarquee.active = true; theMarquee.paused = false; theMarquee.handled = true; QSetRect(&theMarquee.handle, 0, 0, kHandleSideLong, kHandleSideLong); QOffsetRect(&theMarquee.handle, kHandleSideLong / -2, kHandleSideLong / -2); switch (direction) { case kAbove: QOffsetRect(&theMarquee.handle, theMarquee.bounds.left, theMarquee.bounds.top); QOffsetRect(&theMarquee.handle, HalfRectWide(&theMarquee.bounds), -dist); break; case kToRight: QOffsetRect(&theMarquee.handle, theMarquee.bounds.right, theMarquee.bounds.top); QOffsetRect(&theMarquee.handle, dist, HalfRectTall(&theMarquee.bounds)); break; case kBelow: QOffsetRect(&theMarquee.handle, theMarquee.bounds.left, theMarquee.bounds.bottom); QOffsetRect(&theMarquee.handle, HalfRectWide(&theMarquee.bounds), dist); break; case kToLeft: QOffsetRect(&theMarquee.handle, theMarquee.bounds.left, theMarquee.bounds.top); QOffsetRect(&theMarquee.handle, -dist, HalfRectTall(&theMarquee.bounds)); break; case kBottomCorner: QOffsetRect(&theMarquee.handle, theMarquee.bounds.right, theMarquee.bounds.bottom); break; case kTopCorner: QOffsetRect(&theMarquee.handle, theMarquee.bounds.right, theMarquee.bounds.top); break; } theMarquee.direction = direction; theMarquee.dist = dist; PenMode(patXor); PenPat(&theMarquee.pats[theMarquee.index]); DrawMarquee(); PenNormal(); SetCoordinateHVD(theMarquee.bounds.left, theMarquee.bounds.top, dist); } //-------------------------------------------------------------- StopMarquee void StopMarquee (void) { if (gliderMarqueeUp) { DrawGliderMarquee(); gliderMarqueeUp = false; } if (!theMarquee.active) return; SetPortWindowPort(mainWindow); PenMode(patXor); PenPat(&theMarquee.pats[theMarquee.index]); DrawMarquee(); PenNormal(); theMarquee.active = false; SetCoordinateHVD(-1, -1, -1); } //-------------------------------------------------------------- PauseMarquee void PauseMarquee (