/Mac/Demo/imgbrowse/imgbrowse.py

http://unladen-swallow.googlecode.com/ · Python · 115 lines · 92 code · 17 blank · 6 comment · 6 complexity · 52a05d8af4fc47d0da2b5636f7d5130a MD5 · raw file

  1. """imgbrowse - Display pictures using img"""
  2. import FrameWork
  3. import EasyDialogs
  4. from Carbon import Res
  5. from Carbon import Qd
  6. from Carbon import QuickDraw
  7. from Carbon import Win
  8. #ifrom Carbon mport List
  9. import struct
  10. import img
  11. import imgformat
  12. import mac_image
  13. # Where is the picture window?
  14. LEFT=200
  15. TOP=64
  16. MINWIDTH=64
  17. MINHEIGHT=64
  18. MAXWIDTH=320
  19. MAXHEIGHT=320
  20. def main():
  21. print 'hello world'
  22. imgbrowse()
  23. class imgbrowse(FrameWork.Application):
  24. def __init__(self):
  25. # First init menus, etc.
  26. FrameWork.Application.__init__(self)
  27. self.lastwin = None
  28. # Finally, go into the event loop
  29. self.mainloop()
  30. def makeusermenus(self):
  31. self.filemenu = m = FrameWork.Menu(self.menubar, "File")
  32. self.openitem = FrameWork.MenuItem(m, "Open...", "O", self.opendoc)
  33. self.infoitem = FrameWork.MenuItem(m, "Info", "I", self.info)
  34. self.quititem = FrameWork.MenuItem(m, "Quit", "Q", self.quit)
  35. def quit(self, *args):
  36. self._quit()
  37. def opendoc(self, *args):
  38. pathname = EasyDialogs.AskFileForOpen() # Any file type
  39. if not pathname:
  40. return
  41. bar = EasyDialogs.ProgressBar('Reading and converting...')
  42. try:
  43. rdr = img.reader(imgformat.macrgb16, pathname)
  44. except img.error, arg:
  45. EasyDialogs.Message(repr(arg))
  46. return
  47. w, h = rdr.width, rdr.height
  48. bar.set(10)
  49. data = rdr.read()
  50. del bar
  51. pixmap = mac_image.mkpixmap(w, h, imgformat.macrgb16, data)
  52. self.showimg(w, h, pixmap, data)
  53. def showimg(self, w, h, pixmap, data):
  54. win = imgwindow(self)
  55. win.open(w, h, pixmap, data)
  56. self.lastwin = win
  57. def info(self, *args):
  58. if self.lastwin:
  59. self.lastwin.info()
  60. class imgwindow(FrameWork.Window):
  61. def open(self, width, height, pixmap, data):
  62. self.pixmap = pixmap
  63. self.data = data
  64. self.pictrect = (0, 0, width, height)
  65. bounds = (LEFT, TOP, LEFT+width, TOP+height)
  66. self.wid = Win.NewCWindow(bounds, "Picture", 1, 0, -1, 1, 0)
  67. self.do_postopen()
  68. def do_update(self, *args):
  69. pass
  70. currect = self.fitrect()
  71. print 'PICT:', self.pictrect
  72. print 'WIND:', currect
  73. print 'ARGS:', (self.pixmap, self.wid.GetWindowPort().GetPortBitMapForCopyBits(), self.pictrect,
  74. currect, QuickDraw.srcCopy, None)
  75. self.info()
  76. Qd.CopyBits(self.pixmap, self.wid.GetWindowPort().GetPortBitMapForCopyBits(), self.pictrect,
  77. currect, QuickDraw.srcCopy, None)
  78. def fitrect(self):
  79. """Return self.pictrect scaled to fit in window"""
  80. graf = self.wid.GetWindowPort()
  81. screenrect = graf.GetPortBounds()
  82. picwidth = self.pictrect[2] - self.pictrect[0]
  83. picheight = self.pictrect[3] - self.pictrect[1]
  84. if picwidth > screenrect[2] - screenrect[0]:
  85. factor = float(picwidth) / float(screenrect[2]-screenrect[0])
  86. picwidth = picwidth / factor
  87. picheight = picheight / factor
  88. if picheight > screenrect[3] - screenrect[1]:
  89. factor = float(picheight) / float(screenrect[3]-screenrect[1])
  90. picwidth = picwidth / factor
  91. picheight = picheight / factor
  92. return (screenrect[0], screenrect[1], screenrect[0]+int(picwidth),
  93. screenrect[1]+int(picheight))
  94. def info(self):
  95. graf = self.wid.GetWindowPort()
  96. bits = graf.GetPortBitMapForCopyBits()
  97. mac_image.dumppixmap(bits.pixmap_data)
  98. main()