Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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)
Example #4
0
 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)
Example #5
0
 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)
Example #6
0
File: Wtext.py Project: mmrvka/xbmc
 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)
Example #7
0
 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
Example #8
0
 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)
Example #10
0
    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)
Example #11
0
File: Wtext.py Project: mmrvka/xbmc
 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)
Example #12
0
File: Wtext.py Project: mmrvka/xbmc
            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)
Example #13
0
"""VerySimplePlayer converted to python
Example #14
0
# A minimal text editor.
Example #15
0
File: Wtext.py Project: mmrvka/xbmc
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)
Example #16
0
'''
Example #17
0
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()
Example #18
0
 def do_update(self, wid, event):
     Qd.EraseRect(wid.GetWindowPort().GetPortBounds())
     self.ted.TEUpdate(wid.GetWindowPort().GetPortBounds())
     self.updatescrollbars()
Example #19
0
    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
Example #20
0
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__())
Example #21
0
    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)
Example #22
0
# Video file reader, using QuickTime