import os import Qd import Win import Qt, QuickTime import W import macfs import Evt, Events _moviesinitialized = 0 def EnterMovies(): global _moviesinitialized if not _moviesinitialized: Qt.EnterMovies() _moviesinitialized = 1 class Movie(W.Widget): def __init__(self, possize): EnterMovies() self.movie = None self.running = 0 W.Widget.__init__(self, possize) def adjust(self, oldbounds): self.SetPort() Win.InvalRect(oldbounds) Win.InvalRect(self._bounds) self.calcmoviebox() def set(self, path_or_fss, start = 0): self.SetPort() if self.movie: #Win.InvalRect(self.movie.GetMovieBox()) Qd.PaintRect(self.movie.GetMovieBox()) if type(path_or_fss) == type(''): path = path_or_fss fss = macfs.FSSpec(path) else: path = path_or_fss.as_pathname() fss = path_or_fss self.movietitle = os.path.basename(path) movieResRef = Qt.OpenMovieFile(fss, 1) self.movie, dummy, dummy = Qt.NewMovieFromFile(movieResRef, 0, QuickTime.newMovieActive) self.moviebox = self.movie.GetMovieBox() self.calcmoviebox() Qd.ObscureCursor() # XXX does this work at all? self.movie.GoToBeginningOfMovie() if start: self.movie.StartMovie() self.running = 1 else: self.running = 0 self.movie.MoviesTask(0) def get(self): return self.movie def getmovietitle(self): return self.movietitle def start(self): if self.movie: Qd.ObscureCursor() self.movie.StartMovie() self.running = 1 def stop(self): if self.movie: self.movie.StopMovie() self.running = 0 def rewind(self): if self.movie: self.movie.GoToBeginningOfMovie() def calcmoviebox(self): if not self.movie: return ml, mt, mr, mb = self.moviebox wl, wt, wr, wb = widgetbox = self._bounds mheight = mb - mt mwidth = mr - ml wheight = wb - wt wwidth = wr - wl if (mheight * 2 < wheight) and (mwidth * 2 < wwidth): scale = 2 elif mheight > wheight or mwidth > wwidth: scale = min(float(wheight) / mheight, float(wwidth) / mwidth) else: scale = 1 mwidth, mheight = mwidth * scale, mheight * scale ml, mt = wl + (wwidth - mwidth) / 2, wt + (wheight - mheight) / 2 mr, mb = ml + mwidth, mt + mheight self.movie.SetMovieBox((ml, mt, mr, mb)) def idle(self, *args): if self.movie: if not self.movie.IsMovieDone() and self.running: Qd.ObscureCursor() while 1: self.movie.MoviesTask(0) gotone, event = Evt.EventAvail(Events.everyEvent) if gotone or self.movie.IsMovieDone(): break elif self.running: box = self.movie.GetMovieBox() self.SetPort() Win.InvalRect(box) self.movie = None self.running = 0 def draw(self, visRgn = None): if self._visible: Qd.PaintRect(self._bounds) if self.movie: self.movie.UpdateMovie() self.movie.MoviesTask(0)