[futurebasic] Re: [FB] Scrolling Gworlds

Message: < previous - next > : Reply : Subscribe : Cleanse
Home   : March 2001 : Group Archive : Group : All Groups

From: Ian Mann <i.mann@...>
Date: Sat, 10 Mar 2001 11:36:23 +0800
Hi,

I have got code for taking a pict resource and scrolling it - up down -
side to side, and bouncing it or looping it.

Is this any use if so, it's probably half a dozen functions - and a few
globals

Regards

Ian

PS

Actual scrolling follows..

clear local
dim err%, Result%, ht%, NewHt%
dim Rect0 as rect
dim tRect as rect
dim bRect as rect
dim @ PixMapHndl&, OldGW&, OldDev&
dim MPtr&, CPtr&
dim a$
LOCAL FN RollMovie (MovHandle&)
fn HLock (MovHandle&)
MPtr& = [MovHandle&]
select case MPtr&.mvMovieDirection%
case _mvRunTopBottom
offsetrect (MPtr&.mvCutRect,0,MPtr&.mvMoviePage%)
case _mvRunLeftRight
offsetrect (MPtr&.mvCutRect,MPtr&.mvMoviePage%,0)
end select
err% = fn sectrect (MPtr&.mvCutRect, MPtr&.mvResPictRect,Rect0)
Result% = fn equalrect (Rect0,MPtr&.mvCutRect)
long if Result% = _False and (MPtr&.mvMovieCycle% = _mvBounceMovie or
MPtr&.mvMovieCycle% = _mvStopMovie)
select case MPtr&.mvMovieDirection%
case _mvRunTopBottom
offsetrect (MPtr&.mvCutRect,0,-MPtr&.mvMoviePage%)
case _mvRunLeftRight
offsetrect (MPtr&.mvCutRect,-MPtr&.mvMoviePage%,0)
end select
select case MPtr&.mvMovieCycle%
case _mvBounceMovie
MPtr&.mvMoviePage% = MPtr&.mvMoviePage% * (-1)
case _mvStopMovie
MPtr&.mvMovieRun% = _False
end select
end if
long if fn emptyrect (Rect0)' its popped off the edge
MPtr&.mvCutRect;8 = MPtr&.mvCopyRect
Result% = _True
end if
CALL GETGWORLD(OldGW&,OldDev&)
CALL SETGWORLD(MPtr&.mvCopyGW&,MPtr&.mvCopyDev&)
if (fn LockPixels (fn GetGWorldPixmap (MPtr&.mvResPictGW&)) <> _true)
then stop "Error in Pixel Lock"
if (fn LockPixels (fn GetGWorldPixmap (MPtr&.mvCopyGW&)) <> _true) then
stop "Error in Pixel Lock"
eraserect (MPtr&.mvCopyRect)
long if Result% = _True' everything is OK
CALL COPYBITS(#MPtr&.mvResPictGW&+2,#MPtr&.mvCopyGW&+2,MPtr&.mvCutRect
,MPtr&.mvCopyRect,_srcCopy,0)
xelse' hard labour
tRect;8 = @Rect0
offsetrect (tRect,-tRect.left%, -tRect.top%)
CALL
COPYBITS(#MPtr&.mvResPictGW&+2,#MPtr&.mvCopyGW&+2,Rect0,tRect,_srcCopy,0)

select case MPtr&.mvMovieDirection%
case _mvRunTopBottom
Rect0.bottom% = MPtr&.mvCopyRect.bottom% - (tRect.bottom% - tRect.top%)
Rect0.top% = 0
tRect.bottom% = MPtr&.mvCopyRect.bottom%' - tRect.bottom%
tRect.top% = tRect.bottom% - Rect0.bottom%
case _mvRunLeftRight
Rect0.right% = MPtr&.mvCopyRect.right% - (tRect.right% - tRect.left%)
Rect0.left% = 0
tRect.right% = MPtr&.mvCopyRect.right%' - tRect.bottom%
tRect.left% = tRect.right% - Rect0.right%
end select
CALL
COPYBITS(#MPtr&.mvResPictGW&+2,#MPtr&.mvCopyGW&+2,Rect0,tRect,_srcCopy,0)

end if
call unLockPixels (fn GetGWorldPixmap (MPtr&.mvResPictGW&))
call unLockPixels (fn GetGWorldPixmap (MPtr&.mvCopyGW&))
CALL sETGWORLD(OldGW&,OldDev&)
END FN = MPtr&.mvMovieRun%