Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!swrinde!elroy.jpl.nasa.gov!lll-winken!sun-barr!newstop!exodus!booga.Eng.Sun.COM!siegel From: siegel@booga.Eng.Sun.COM (Josh Siegel) Newsgroups: comp.windows.news Subject: TNT 2.0: Fade between two images Message-ID: <12526@exodus.Eng.Sun.COM> Date: 30 Apr 91 17:06:59 GMT Sender: news@exodus.Eng.Sun.COM Lines: 106 This programs fades between two images. It is very CPU intensive while generating the images when you first look at them. == % Written by Josh Siegel (siegel@sun.com) % % This is "slow" in some parts but compaired to what % is really slowing us down... % /bf (OPENWINHOME) getenv (/demo/images/bf.im8) append readcanvas def /lady (OPENWINHOME) getenv (/demo/images/mandrill.im8) append readcanvas def /MyCanvas ClassCanvas dictbegin /tempcan null def /cans 11 array def /prev_value 0 def dictend classbegin /magiccan 256 256 1 [ 1.0 0 0 1.0 0 0 ] null buildimage def /minsize {256 256} def /Paint { prev_value /prev_value null def /Painter self send } def /Update_view { pop cvi /Painter self send } def /Painter { % val => - dup prev_value ne { dup /prev_value exch def gsave dup getcans not { % Set the filter magiccan setcanvas 10 div setgray clippath fill % Paint the first image on tempcan setcanvas initmatrix clippath pathbbox scale pop pop lady imagecanvas initmatrix true magiccan imagepath currentpath clippath pathbbox scale pop pop setpath clip bf imagecanvas } if can setcanvas tempcan imagecanvas grestore } { pop } ifelse } def /getcans { % num => bool dup cans exch get dup null ne { exch pop /tempcan exch store true } { pop gsave framebuffer setcanvas initmatrix /tempcan framebuffer newcanvas store tempcan /Retained true put [1 0 0 1 0 0 ] setmatrix 0 0 256 256 rectpath tempcan reshapecanvas tempcan setcanvas cans exch tempcan put false grestore } ifelse } def classend def /can framebuffer /new MyCanvas send def /win can framebuffer /new ClassBaseWindow send def /place win send /new ClassEventMgr send /activate win send /map win send /pan2 /Calculated framebuffer /new ClassPanel send def /win2 pan2 framebuffer /new ClassBaseWindow send def /slider2 framebuffer /new ClassHSlider send def can /settarget slider2 send /Update_view /setpreviewer slider2 send /Update_view /setnotifier slider2 send 0 10 /setrange slider2 send /minsize { 128 30 } /promote slider2 send /preferredsize { 128 30 } /promote slider2 send true /setendboxes slider2 send 1 /settickmarks slider2 send {cvi} /setnormalizer slider2 send /slider2 slider2 [/Center { /Center PARENT POSITION} ] /addclient pan2 send /place win2 send win2 /addsubwindow win send /map win2 send