def adjust(self, oldbounds): if self._isdefault: old = Qd.InsetRect(oldbounds, -4, -4) new = Qd.InsetRect(self._bounds, -4, -4) Qd.EraseRect(old) self.GetWindow().InvalWindowRect(old) self.GetWindow().InvalWindowRect(new) ControlWidget.adjust(self, oldbounds)
def draw(self, visRgn = None): if self._visible: Qd.FrameRect(self._bounds) Qd.EraseRect(Qd.InsetRect(self._bounds, 1, 1)) l, t, r, b = self._bounds l = l + 2 t = t + 3 pictframe = (l, t, l + 10, t + 10) Qd.DrawPicture(_arrowright, pictframe)
def _redraw(self, rgn=None): ## if rgn == None: ## rgn = self.wid.GetWindowPort().visRgn Qd.SetPort(self.wid) if not self.image_data: Qd.EraseRect(self.rect) else: self._redrawimage(self.rect, self.image_data) Qd.FrameRect(self.rect)
def show(self, onoff): self._visible = onoff for w in self._widgets: w.show(onoff) if self._parentwindow is not None and self._parentwindow.wid is not None: self.SetPort() if onoff: self.draw() else: Qd.EraseRect(self._bounds)
def adjust(self, oldbounds): self.SetPort() self._control.HideControl() self._control.MoveControl(self._bounds[0], self._bounds[1]) self._control.SizeControl(self._bounds[2] - self._bounds[0], self._bounds[3] - self._bounds[1]) if self._visible: Qd.EraseRect(self._bounds) self._control.ShowControl() self.GetWindow().ValidWindowRect(self._bounds)
def set(self, text): if not self.ted: self.temptext = text else: self.ted.WEUseText(Res.Resource(text)) self.ted.WECalText() self.SetPort() viewrect, destrect = self._calctextbounds() self.ted.WESetViewRect(viewrect) self.ted.WESetDestRect(destrect) rgn = Qd.NewRgn() Qd.RectRgn(rgn, viewrect) Qd.EraseRect(viewrect) self.draw(rgn) self.updatescrollbars() self.textchanged(1)
def setdrawingmode(self, onoff): if onoff: self.drawingmode = self.drawingmode - 1 if self.drawingmode == 0 and self._list is not None: self._list.LSetDrawingMode(1) if self._visible: bounds = l, t, r, b = Qd.InsetRect(self._bounds, 1, 1) cl, ct, cr, cb = self._list.LRect((0, len(self.items) - 1)) if cb < b: self.SetPort() Qd.EraseRect((l, cb, cr, b)) self._list.LUpdate( self._parentwindow.wid.GetWindowPort().visRgn) self.GetWindow().ValidWindowRect(bounds) else: if self.drawingmode == 0 and self._list is not None: self._list.LSetDrawingMode(0) self.drawingmode = self.drawingmode + 1
def redraw(self, ctl, part): try: Qd.SetPort(self.wid) Qd.RGBBackColor((0xffff, 0xffff, 0xffff)) if self._background_image: self._redrawimage(self.rect, self._background_image) else: Qd.EraseRect(self.rect) Qd.RGBForeColor((0x7fff, 0x7fff, 0x7fff)) Qd.FrameRect(self.rect) for r in self.otherrects: Qd.RGBForeColor((0x0, 0x7fff, 0x7fff)) Qd.FrameRect(r) self.drawourrect() except: import traceback, sys exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_exception(exc_type, exc_value, None) traceback.print_tb(exc_traceback)
def _initgworld(self): old_port, old_dev = Qdoffs.GetGWorld() try: movie_w = self.videodescr['width'] movie_h = self.videodescr['height'] movie_rect = (0, 0, movie_w, movie_h) self.gworld = Qdoffs.NewGWorld(32, movie_rect, None, None, QDOffscreen.keepLocal) self.pixmap = self.gworld.GetGWorldPixMap() Qdoffs.LockPixels(self.pixmap) Qdoffs.SetGWorld(self.gworld.as_GrafPtr(), None) Qd.EraseRect(movie_rect) self.movie.SetMovieGWorld(self.gworld.as_GrafPtr(), None) self.movie.SetMovieBox(movie_rect) self.movie.SetMovieActive(1) self.movie.MoviesTask(0) self.movie.SetMoviePlayHints(QuickTime.hintsHighQuality, QuickTime.hintsHighQuality) # XXXX framerate finally: Qdoffs.SetGWorld(old_port, old_dev)
def listDefDraw(self, selected, cellRect, theCell, dataOffset, dataLen, theList): savedPort = Qd.GetPort() Qd.SetPort(theList.GetListPort()) savedClip = Qd.NewRgn() Qd.GetClip(savedClip) Qd.ClipRect(cellRect) savedPenState = Qd.GetPenState() Qd.PenNormal() Qd.EraseRect(cellRect) #draw the cell if it contains data ascent, descent, leading, size, hm = Fm.FontMetrics() linefeed = ascent + descent + leading if dataLen: left, top, right, bottom = cellRect data = theList.LGetCell(dataLen, theCell) lines = data.split("\r") line1 = lines[0] if len(lines) > 1: line2 = lines[1] else: line2 = "" Qd.MoveTo(int(left + 4), int(top + ascent)) Qd.DrawText(line1, 0, len(line1)) if line2: Qd.MoveTo(int(left + 4), int(top + ascent + linefeed)) Qd.DrawText(line2, 0, len(line2)) Qd.PenPat("\x11\x11\x11\x11\x11\x11\x11\x11") bottom = top + theList.cellSize[1] Qd.MoveTo(left, bottom - 1) Qd.LineTo(right, bottom - 1) if selected: self.listDefHighlight(selected, cellRect, theCell, dataOffset, dataLen, theList) #restore graphics environment Qd.SetPort(savedPort) Qd.SetClip(savedClip) Qd.DisposeRgn(savedClip) Qd.SetPenState(savedPenState)
def click(self, point, modifiers): if not self._enabled: return if self._debugger and self.pt_in_breaks(point): self.breakhit(point, modifiers) elif self._debugger: bl, bt, br, bb = self._getbreakrect() Qd.EraseRect((bl, bt, br - 1, bb)) TextEditor.click(self, point, modifiers) self.drawbreakpoints() else: TextEditor.click(self, point, modifiers) if self.ted.WEGetClickCount() >= 3: # select block with our indent lines = string.split(self.get(), '\r') selstart, selend = self.ted.WEGetSelection() lineno = self.ted.WEOffsetToLine(selstart) tabs = 0 line = lines[lineno] while line[tabs:] and line[tabs] == '\t': tabs = tabs + 1 tabstag = '\t' * tabs fromline = 0 toline = len(lines) if tabs: for i in range(lineno - 1, -1, -1): line = lines[i] if line[:tabs] <> tabstag: fromline = i + 1 break for i in range(lineno + 1, toline): line = lines[i] if line[:tabs] <> tabstag: toline = i - 1 break selstart, dummy = self.ted.WEGetLineRange(fromline) dummy, selend = self.ted.WEGetLineRange(toline) self.ted.WESetSelection(selstart, selend)
self.ted.WEFeatureFlag(WASTEconst.weFInhibitRecal, 1) selstart, selend = self.ted.WEGetSelection() self.ted.WESetSelection(0, self.ted.WEGetTextLength()) self.ted.WESetStyle(WASTEconst.weDoFace, (0, 0, 0, (0, 0, 0))) self.ted.WESetStyle( WASTEconst.weDoFace | WASTEconst.weDoColor | WASTEconst.weDoFont | WASTEconst.weDoSize, (fontid, style, size, color)) self.ted.WEFeatureFlag(WASTEconst.weFInhibitRecal, 0) self.ted.WECalText() self.ted.WESetSelection(selstart, selend) finally: if readonly: self.ted.WEFeatureFlag(WASTEconst.weFReadOnly, 1) viewrect = self.ted.WEGetViewRect() Qd.EraseRect(viewrect) self.ted.WEUpdate(self._parentwindow.wid.GetWindowPort().visRgn) self.selectionchanged() self.updatescrollbars() def adjust(self, oldbounds): self.SetPort() # Note: if App.DrawThemeEditTextFrame is ever used, it will be necessary # to unconditionally outset the invalidated rectangles, since Appearance # frames are drawn outside the bounds. if self._selected and self._parentwindow._hasselframes: self.GetWindow().InvalWindowRect(Qd.InsetRect(oldbounds, -3, -3)) self.GetWindow().InvalWindowRect(Qd.InsetRect( self._bounds, -3, -3)) else: self.GetWindow().InvalWindowRect(oldbounds)
"""VerySimplePlayer converted to python
# A minimal text editor.
class EditText(Wbase.SelectableWidget, _ScrollWidget): """A text edit widget, mainly for simple entry fields.""" def __init__(self, possize, text="", callback=None, inset=(3, 3), fontsettings=None, tabsettings=(32, 0), readonly=0): if fontsettings is None: import W fontsettings = W.getdefaultfont() Wbase.SelectableWidget.__init__(self, possize) self.temptext = text self.ted = None self.selection = None self.oldselection = None self._callback = callback self.changed = 0 self.selchanged = 0 self._selected = 0 self._enabled = 1 self.wrap = 1 self.readonly = readonly self.fontsettings = fontsettings self.tabsettings = tabsettings if type(inset) <> TupleType: self.inset = (inset, inset) else: self.inset = inset def open(self): if not hasattr(self._parent, "_barx"): self._parent._barx = None if not hasattr(self._parent, "_bary"): self._parent._bary = None self._calcbounds() self.SetPort() viewrect, destrect = self._calctextbounds() flags = self._getflags() self.ted = waste.WENew(destrect, viewrect, flags) self.ted.WEInstallTabHooks() self.ted.WESetAlignment(WASTEconst.weFlushLeft) self.setfontsettings(self.fontsettings) self.settabsettings(self.tabsettings) self.ted.WEUseText(Res.Resource(self.temptext)) self.ted.WECalText() if self.selection: self.setselection(self.selection[0], self.selection[1]) self.selection = None else: self.selview() self.temptext = None self.updatescrollbars() self.bind("pageup", self.scrollpageup) self.bind("pagedown", self.scrollpagedown) self.bind("top", self.scrolltop) self.bind("bottom", self.scrollbottom) self.selchanged = 0 def close(self): self._parent._barx = None self._parent._bary = None self.ted = None self.temptext = None Wbase.SelectableWidget.close(self) def textchanged(self, all=0): self.changed = 1 def selectionchanged(self): self.selchanged = 1 self.oldselection = self.getselection() def gettabsettings(self): return self.tabsettings def settabsettings(self, (tabsize, tabmode)): self.tabsettings = (tabsize, tabmode) if hasattr(self.ted, "WESetTabSize"): port = self._parentwindow.wid.GetWindowPort() if tabmode: (font, style, size, color) = self.getfontsettings() savesettings = GetPortFontSettings(port) SetPortFontSettings(port, (font, style, size)) tabsize = Qd.StringWidth(' ' * tabsize) SetPortFontSettings(port, savesettings) tabsize = max(tabsize, 1) self.ted.WESetTabSize(tabsize) self.SetPort() Qd.EraseRect(self.ted.WEGetViewRect()) self.ted.WEUpdate(port.visRgn)
'''
def main(): print 'hello world' # XXXX # skip the toolbox initializations, already done # XXXX Should use gestalt here to check for quicktime version Qt.EnterMovies() # Get the movie file fss = EasyDialogs.AskFileForOpen( wanted=File.FSSpec) # Was: QuickTime.MovieFileType if not fss: sys.exit(0) # Open the window bounds = (175, 75, 175 + 160, 75 + 120) theWindow = Win.NewCWindow(bounds, fss.as_tuple()[2], 0, 0, -1, 1, 0) # XXXX Needed? SetGWorld((CGrafPtr)theWindow, nil) Qd.SetPort(theWindow) # Get the movie theMovie = loadMovie(fss) # Relocate to (0, 0) bounds = theMovie.GetMovieBox() bounds = 0, 0, bounds[2] - bounds[0], bounds[3] - bounds[1] theMovie.SetMovieBox(bounds) # Create a controller theController = theMovie.NewMovieController(bounds, QuickTime.mcTopLeftMovie) # Get movie size and update window parameters rv, bounds = theController.MCGetControllerBoundsRect() theWindow.SizeWindow(bounds[2], bounds[3], 0) # XXXX or [3] [2]? Qt.AlignWindow(theWindow, 0) theWindow.ShowWindow() # XXXX MCDoAction(theController, mcActionSetGrowBoxBounds, &maxBounds) theController.MCDoAction(QuickTime.mcActionSetKeysEnabled, '1') # XXXX MCSetActionFilterWithRefCon(theController, movieControllerEventFilter, (long)theWindow) done = 0 while not done: gotone, evt = Evt.WaitNextEvent(0xffff, 0) (what, message, when, where, modifiers) = evt ## print what, message, when, where, modifiers # XXXX if theController.MCIsPlayerEvent(evt): continue if what == Events.mouseDown: part, whichWindow = Win.FindWindow(where) if part == Windows.inGoAway: done = whichWindow.TrackGoAway(where) elif part == Windows.inDrag: Qt.DragAlignedWindow(whichWindow, where, (0, 0, 4000, 4000)) elif what == Events.updateEvt: whichWindow = Win.WhichWindow(message) if not whichWindow: # Probably the console window. Print something, hope it helps. print 'update' else: Qd.SetPort(whichWindow) whichWindow.BeginUpdate() Qd.EraseRect(whichWindow.GetWindowPort().GetPortBounds()) whichWindow.EndUpdate()
def do_update(self, wid, event): Qd.EraseRect(wid.GetWindowPort().GetPortBounds()) self.ted.TEUpdate(wid.GetWindowPort().GetPortBounds()) self.updatescrollbars()
def _render_one(self, entry): cmd = entry[0] if cmd == 'clear': if self._bgcolor != None: r = self._getredrawguarantee(skipclear=1) if r: r2 = Qd.NewRgn() Qd.RectRgn(r2, self._window.qdrect()) Qd.DiffRgn(r2, r, r2) Qd.EraseRgn(r2) Qd.DisposeRgn(r) Qd.DisposeRgn(r2) else: Qd.EraseRect(self._window.qdrect()) elif cmd == 'fg': self._setfgcolor(entry[1]) elif cmd == 'font': entry[1]._setfont(self._render_grafport) elif cmd == 'text': x, y, w, h = self._convert_coordinates(entry[1:5]) if not self._render_overlaprgn((x, y - h, x + w, y)): return Qd.MoveTo(x, y) # XXXX Incorrect for long strings: Qd.DrawText(entry[5], 0, len(entry[5])) elif cmd == 'icon': icon = entry[2] if icon == None: return rect = self._convert_coordinates(entry[1]) if not self._render_overlaprgn(rect): return x0, y0, x1, y1 = rect if x1 - x0 < ICONSIZE_PXL: leftextra = (ICONSIZE_PXL - (x1 - x0)) / 2 x0 = x0 + leftextra x1 = x0 + ICONSIZE_PXL if y1 - y0 < ICONSIZE_PXL: topextra = (ICONSIZE_PXL - (y1 - y0)) / 2 y0 = y0 + topextra y1 = y0 + ICONSIZE_PXL Icn.PlotCIcon((x0, y0, x1, y1), icon) elif cmd == 'image': mask, image, srcx, srcy, coordinates, w, h, units = entry[1:] dstx, dsty = self._convert_coordinates(coordinates[:2], units=units) dstrect = dstx, dsty, dstx + w, dsty + h if not self._render_overlaprgn(dstrect): return w = dstrect[2] - dstrect[0] h = dstrect[3] - dstrect[1] srcrect = srcx, srcy, srcx + w, srcy + h self._setblackwhitecolors() clip = self._window._mac_getclip() if mask: # XXXX We should also take note of the clip here. Qd.CopyMask(image[0], mask[0], self._render_grafport.GetPortBitMapForCopyBits(), srcrect, srcrect, dstrect) else: Qd.CopyBits(image[0], self._render_grafport.GetPortBitMapForCopyBits(), srcrect, dstrect, QuickDraw.srcCopy + QuickDraw.ditherCopy, clip) self._restorecolors() elif cmd == 'line': color = entry[1] points = entry[2] self._setfgcolor(color) x, y = self._convert_coordinates(points[0]) Qd.MoveTo(x, y) for np in points[1:]: x, y = self._convert_coordinates(np) Qd.LineTo(x, y) self._restorecolors() elif cmd == '3dhline': color1, color2, x0, x1, y = entry[1:] fgcolor = self._render_grafport.rgbFgColor self._setfgcolor(color1) x0, y0 = self._convert_coordinates((x0, y)) x1, y1 = self._convert_coordinates((x1, y)) if not self._render_overlaprgn((x0, y0, x1, y1 + 1)): return Qd.MoveTo(x0, y0) Qd.LineTo(x1, y1) self._setfgcolor(color2) Qd.MoveTo(x0, y0 + 1) Qd.LineTo(x1, y1 + 1) self._setfgcolor(fgcolor) self._restorecolors() elif cmd == 'box': rect = self._convert_coordinates(entry[1]) if not self._render_overlaprgn(rect): return Qd.FrameRect(rect) elif cmd == 'fbox': color = entry[1] units = entry[3] rect = self._convert_coordinates(entry[2], units) if not self._render_overlaprgn(rect): return self._setfgcolor(color) Qd.PaintRect(rect) self._restorecolors() elif cmd == 'linewidth': Qd.PenSize(entry[1], entry[1]) elif cmd == 'fpolygon': polyhandle = self._polyhandle(entry[2], cliprgn=self._render_cliprgn) if not polyhandle: return self._setfgcolor(entry[1]) Qd.PaintPoly(polyhandle) self._restorecolors() elif cmd == '3dbox': rect = self._convert_coordinates(entry[2]) if not self._render_overlaprgn(rect): return l, t, r, b = rect cl, ct, cr, cb = entry[1] clt = _colormix(cl, ct) ctr = _colormix(ct, cr) crb = _colormix(cr, cb) cbl = _colormix(cb, cl) ## print '3Dbox', (l, t, r, b) # DBG ## print 'window', self._window.qdrect() # DBG # l, r, t, b are the corners l3 = l + SIZE_3DBORDER t3 = t + SIZE_3DBORDER r3 = r - SIZE_3DBORDER b3 = b - SIZE_3DBORDER # draw left side self._setfgcolor(cl) polyhandle = self._polyhandle([(l, t), (l3, t3), (l3, b3), (l, b)], conv=0) if polyhandle: Qd.PaintPoly(polyhandle) # draw top side self._setfgcolor(ct) polyhandle = self._polyhandle([(l, t), (r, t), (r3, t3), (l3, t3)], conv=0) if polyhandle: Qd.PaintPoly(polyhandle) # draw right side self._setfgcolor(cr) polyhandle = self._polyhandle([(r3, t3), (r, t), (r, b), (r3, b3)], conv=0) if polyhandle: Qd.PaintPoly(polyhandle) # draw bottom side self._setfgcolor(cb) polyhandle = self._polyhandle([(l3, b3), (r3, b3), (r, b), (l, b)], conv=0) if polyhandle: Qd.PaintPoly(polyhandle) # draw topleft self._setfgcolor(clt) Qd.PaintRect((l, t, l3, t3)) # draw topright self._setfgcolor(ctr) Qd.PaintRect((r3, t, r, t3)) # draw botright self._setfgcolor(crb) Qd.PaintRect((r3, b3, r, b)) # draw leftbot self._setfgcolor(cbl) Qd.PaintRect((l, b3, l3, b)) self._restorecolors() elif cmd == 'diamond': rect = self._convert_coordinates(entry[1]) if not self._render_overlaprgn(rect): return x, y, x1, y1 = rect w = x1 - x h = y1 - y Qd.MoveTo(x, y + h / 2) Qd.LineTo(x + w / 2, y) Qd.LineTo(x + w, y + h / 2) Qd.LineTo(x + w / 2, y + h) Qd.LineTo(x, y + h / 2) elif cmd == 'fdiamond': rect = self._convert_coordinates(entry[2]) if not self._render_overlaprgn(rect): return x, y, x1, y1 = rect w = x1 - x h = y1 - y self._setfgcolor(entry[1]) polyhandle = self._polyhandle([(x, y + h / 2), (x + w / 2, y), (x + w, y + h / 2), (x + w / 2, y + h), (x, y + h / 2)]) if polyhandle: Qd.PaintPoly(polyhandle) self._restorecolors() elif cmd == '3ddiamond': rect = self._convert_coordinates(entry[2]) if not self._render_overlaprgn(rect): return l, t, r, b = rect cl, ct, cr, cb = entry[1] w = r - l h = b - t r = l + w b = t + h x = l + w / 2 y = t + h / 2 n = int(3.0 * w / h + 0.5) ll = l + n tt = t + 3 rr = r - n bb = b - 3 self._setfgcolor(cl) polyhandle = self._polyhandle([(l, y), (x, t), (x, tt), (ll, y)], conv=0) if polyhandle: Qd.PaintPoly(polyhandle) self._setfgcolor(ct) polyhandle = self._polyhandle([(x, t), (r, y), (rr, y), (x, tt)], conv=0) if polyhandle: Qd.PaintPoly(polyhandle) self._setfgcolor(cr) polyhandle = self._polyhandle([(r, y), (x, b), (x, bb), (rr, y)], conv=0) if polyhandle: Qd.PaintPoly(polyhandle) self._setfgcolor(cb) polyhandle = self._polyhandle([(l, y), (ll, y), (x, bb), (x, b)], conv=0) if polyhandle: Qd.PaintPoly(polyhandle) self._restorecolors() elif cmd == 'arrow': color = entry[1] src = entry[2] dst = entry[3] x0, y0, x1, y1, points = self._arrowdata(src, dst) if not self._render_overlaprgn((x0, y0, x1, y1)): return self._setfgcolor(color) Qd.MoveTo(x0, y0) Qd.LineTo(x1, y1) polyhandle = self._polyhandle(points) if polyhandle: Qd.PaintPoly(polyhandle) self._restorecolors() else: raise 'Unknown displaylist command', cmd self._dbg_did = self._dbg_did + 1
def readFrame(inputMovieName, outputImageName, frameNumber): try: os.unlink(outputImageName) # delete the existing outputImageName, if it exists except: pass try: Qt.EnterMovies() fd = Qt.OpenMovieFile(inputMovieName, 0) movie, junk1, junk2 = Qt.NewMovieFromFile(fd, 0, 0) try: videotrack = movie.GetMovieIndTrackType(1, QuickTime.VisualMediaCharacteristic, QuickTime.movieTrackCharacteristic) videomedia = videotrack.GetTrackMedia() except Qt.Error: videotrack = videomedia = None if videotrack: x0, y0, x1, y1 = movie.GetMovieBox() width, height = x1-x0, y1-y0 old_port, old_dev = Qdoffs.GetGWorld() try: movie_rect = (0, 0, width, height) gworld = Qdoffs.NewGWorld(32, movie_rect, None, None, QDOffscreen.keepLocal) pixmap = gworld.GetGWorldPixMap() Qdoffs.LockPixels(pixmap) Qdoffs.SetGWorld(gworld.as_GrafPtr(), None) Qd.EraseRect(movie_rect) movie.SetMovieGWorld(gworld.as_GrafPtr(), None) movie.SetMovieBox(movie_rect) movie.SetMovieActive(1) movie.MoviesTask(0) movie.SetMoviePlayHints(QuickTime.hintsHighQuality, QuickTime.hintsHighQuality) finally: Qdoffs.SetGWorld(old_port, old_dev) # finished with Quicktime initialization QTSearchFlags = QuickTime.nextTimeMediaSample|QuickTime.nextTimeEdgeOK startTime, frameDuration = videomedia.GetMediaNextInterestingTime(QTSearchFlags, 0, 1.0) # startTime is time at start of movie (start offset) # frameDuration is the number of video time units that pass each frame (in videotimescale units) if debug: print "frameDuration", frameDuration movieDuration = videotrack.GetTrackDuration() # in movietimescale units if debug: print "movieDuration", movieDuration movietimescale = movie.GetMovieTimeScale() if debug: print "movietimescale", movietimescale videotimescale = videomedia.GetMediaTimeScale() if debug: print "videotimescale", videotimescale movieDurationSeconds = float(movieDuration) / movietimescale if debug: print "movieDurationSeconds", movieDurationSeconds frameLengthSeconds = float(frameDuration) / videotimescale if debug: print "frameLengthSeconds", frameLengthSeconds, "(inverse)", 1.0/frameLengthSeconds totalFrames = movieDurationSeconds / frameLengthSeconds if debug: print "totalFrames", totalFrames, "(rounded)", int(round(totalFrames)) frames = int(round(totalFrames)) if debug: print "reading frame", frameNumber, "at videotime", startTime+frameNumber*frameDuration timestamp = videomedia.GetMediaNextInterestingTimeOnly(QTSearchFlags, startTime+frameNumber*frameDuration, 1) if timestamp < 0: raise "Quicktime error", "error %s, frame search failed at videotime %s" % (timestamp,startTime+frameNumber*frameDuration) moviecurtime, junk1, junk2 = Qt.ConvertTimeScale((timestamp, videotimescale, None), movietimescale) # I don't know why this time adjustment is needed, but it sometimes seeks to the wrong frame without it movieframetime, junk1, junk2 = Qt.ConvertTimeScale((frameDuration, videotimescale, None), movietimescale) if debug: print "movieframetime", movieframetime if movieframetime > 1: moviecurtime += 1 movie.SetMovieTimeValue(moviecurtime) movie.MoviesTask(0) # shuffle the offscreen PixMap data, because it may have funny stride values and alpha channel rowbytes = Qdoffs.GetPixRowBytes(pixmap) start = 0 rv = [] for i in range(height): nextline = Qdoffs.GetPixMapBytes(pixmap, start, width*4) for j in range(width): rgb = nextline[4*j+1:4*j+4] # skip alpha plane data at nextline[4*j] rv.append(rgb) start = start + rowbytes data = string.join(rv, '') if debug: print "timestamp found", timestamp, "length of image data", len(data) videomedia = videotrack = movie = None # this is required to deallocate memory except Exception, err: writeError(outputImageName, err.__str__())
def myDrawCell(self, onlyHilite, selected, cellRect, theCell, dataOffset, dataLen, theList): savedPort = Qd.GetPort() Qd.SetPort(theList.GetListPort()) savedClip = Qd.NewRgn() Qd.GetClip(savedClip) Qd.ClipRect(cellRect) savedPenState = Qd.GetPenState() Qd.PenNormal() l, t, r, b = cellRect if not onlyHilite: Qd.EraseRect(cellRect) ascent, descent, leading, size, hm = Fm.FontMetrics() linefeed = ascent + descent + leading if dataLen >= 6: data = theList.LGetCell(dataLen, theCell) iconId, indent, tab = struct.unpack("hhh", data[:6]) try: key, value = data[6:].split("\t", 1) except ValueError: # bogus data, at least don't crash. indent = 0 tab = 0 iconId = 0 key = "" value = data[6:] if iconId: try: theIcon = Icn.GetCIcon(iconId) except Icn.Error: pass else: rect = (0, 0, 16, 16) rect = Qd.OffsetRect(rect, l, t) rect = Qd.OffsetRect(rect, 0, (theList.cellSize[1] - (rect[3] - rect[1])) / 2) Icn.PlotCIcon(rect, theIcon) if len(key) >= 0: cl, ct, cr, cb = cellRect vl, vt, vr, vb = self._viewbounds cl = vl + PICTWIDTH + indent cr = vl + tab if cr > vr: cr = vr if cl < cr: drawTextCell(key, (cl, ct, cr, cb), ascent, theList) cl = vl + tab cr = vr if cl < cr: drawTextCell(value, (cl, ct, cr, cb), ascent, theList) #elif dataLen != 0: # drawTextCell("???", 3, cellRect, ascent, theList) else: return # we have bogus data # draw nice dotted line l, t, r, b = cellRect l = self._viewbounds[0] + tab r = l + 1; if not (theList.cellSize[1] & 0x01) or (t & 0x01): myPat = "\xff\x00\xff\x00\xff\x00\xff\x00" else: myPat = "\x00\xff\x00\xff\x00\xff\x00\xff" Qd.PenPat(myPat) Qd.PenMode(QuickDraw.srcCopy) Qd.PaintRect((l, t, r, b)) Qd.PenNormal() if selected or onlyHilite: l, t, r, b = cellRect l = self._viewbounds[0] + PICTWIDTH r = self._viewbounds[2] Qd.PenMode(hilitetransfermode) Qd.PaintRect((l, t, r, b)) # restore graphics environment Qd.SetPort(savedPort) Qd.SetClip(savedClip) Qd.DisposeRgn(savedClip) Qd.SetPenState(savedPenState)
# Video file reader, using QuickTime