mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
	
	
		
			120 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			120 lines
		
	
	
	
		
			2.7 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.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) | ||
|  | 
 |