120 lines
2.8 KiB
Python
120 lines
2.8 KiB
Python
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.InvalWindowRect(oldbounds)
|
|
Win.InvalWindowRect(self._bounds)
|
|
self.calcmoviebox()
|
|
|
|
def set(self, path_or_fss, start = 0):
|
|
self.SetPort()
|
|
if self.movie:
|
|
#Win.InvalWindowRect(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.InvalWindowRect(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)
|
|
|