summaryrefslogtreecommitdiff
path: root/example
diff options
context:
space:
mode:
authorJeff Armstrong <jeffrey.armstrong@approximatrix.com>2011-07-30 13:34:22 -0400
committerJeff Armstrong <jeffrey.armstrong@approximatrix.com>2011-07-30 13:34:22 -0400
commit024a2c85d087fa2b90e20923eeb351a637eca97e (patch)
treeffaabb5a773c9724096b8118cb2504806ac5fc86 /example
parent91e322ca508df43b9d5498b0f48839a79177ac90 (diff)
downloadgempy-024a2c85d087fa2b90e20923eeb351a637eca97e.tar.gz
gempy-024a2c85d087fa2b90e20923eeb351a637eca97e.zip
Monochrome png viewing example now generally works. Slight mods to the AES code.
Diffstat (limited to 'example')
-rw-r--r--example/pngview.py326
1 files changed, 197 insertions, 129 deletions
diff --git a/example/pngview.py b/example/pngview.py
index d53e166..e24ddee 100644
--- a/example/pngview.py
+++ b/example/pngview.py
@@ -1,130 +1,198 @@
-import gem
-import gem.vdi
-
-import sys
-
-import png
-
-# Taken from resource headers
-MENU = 0
-M_ABOUT = 7
-M_QUIT = 16
-ABOUT = 1
-B_ABOUT_OK = 1
-
-def redraw(window,data):
-
- window.begin_update()
- vh = window.graphics_handle()
-
- rgbdata = data[2]
-
- wrect = window.get_work_rect()
-
- for r in window.get_invalid_rectangles():
- todraw = window.intersect_work_area(r)
- if todraw is not None:
- gem.vdi.vs_clip(vh, True, todraw)
- image_y = 0
- for r in rgbdata:
- image_x = 0
-
- pvalue = 0
- pcount = 0
- for c in r:
-
- pvalue = pvalue + c
- pcount = pcount + 1
-
- if pcount == 3:
-
- pvalue = pvalue / 3
-
- if c > pvalue:
- gem.vdi.vsf_color(vh,0)
- else:
- gem.vdi.vsf_color(vh,1)
- x = wrect[0] + image_x
- y = wrect[1] + image_y
- gem.vdi.bar(vh,(x,y,1,1))
- image_x = image_x + 1
- #if image_x > data[0]:
- # raise RuntimeError("Point {0} exceeds limit {1}".format(image_x,data[0]))
- pcount = 0
- pvalue = 0
-
- image_y = image_y + 1
-
- gem.vdi.vs_clip(vh, False, todraw)
-
- window.end_update()
-
-class AppMessageEvent(gem.MessageEvent):
- def __init__(self,app):
- gem.MessageEvent.__init__(self)
-
- self.app = app
- self.window = app.windows[0]
-
- def handle_menu(self, item, title=None):
- if item == M_QUIT:
- self.app.send_message((gem.WM_CLOSED, 0, 0, self.window.id))
-
- elif item == M_ABOUT:
- dlg = self.app.get_resource_address(gem.R_TREE,ABOUT)
- self.app.draw_tree(dlg,2)
- self.app.form_do(dlg)
-
- if title is not None:
- self.app.set_menu_state(title)
-
- def process(self):
-
- # First call the super's process()
- gem.MessageEvent.process(self)
-
- if self.message == gem.WM_CLOSED:
- self.app.event_processing = False
-
- elif self.message == gem.WM_TOPPED:
- self.window.top()
-
- elif self.message == gem.WM_MOVED or self.message == gem.WM_SIZED:
- rect = (self.get_word(4),self.get_word(5),self.get_word(6),self.get_word(7))
- self.window.resize(rect)
-
- elif self.message == gem.WM_REDRAW:
- redraw(self.window,self.app.data)
-
- # Menu handling
- elif self.message == gem.MN_SELECTED:
- self.handle_menu(self.get_word(4),title=self.get_word(3))
-
-def start_app(filename):
-
- reader = png.Reader(filename)
- data = reader.asRGB8()
-
- app = gem.Application()
- app.load_resource("simple.rsc")
- app.set_menu(MENU)
-
- app.data = data
-
- w = app.new_window((0,10,data[0],data[1]),filename,
- type=gem.NAME|gem.MOVER|gem.CLOSER)
-
- app.message_event = AppMessageEvent(app)
-
- app.event_loop()
-
- app.destroy()
-
-
-if __name__ == "__main__":
- print("Simple PNG Viewer for GEM")
- if len(sys.argv) < 2:
- print("Usage: {0} <png filename>".format(sys.argv[0]))
- else:
- print("Now processing {0}".format(sys.argv[1]))
+import gem
+import gem.vdi
+
+import sys
+
+import png
+
+# Taken from resource headers
+MENU = 0
+M_ABOUT = 7
+M_QUIT = 16
+ABOUT = 1
+B_ABOUT_OK = 1
+
+class PictureWindow(gem.Window):
+ def __init__(self,app,filename,wh,data):
+ gem.Window.__init__(self, type=gem.NAME|gem.CLOSER|gem.MOVER)
+
+ self.set_name(filename)
+ self.data = data
+
+ self.open((10,10,wh[0],wh[1]+10))
+
+ def draw(self):
+
+ self.begin_update()
+ vh = self.graphics_handle()
+
+ wrect = self.get_work_rect()
+
+ for rect in self.get_invalid_rectangles():
+ todraw = self.intersect_work_area(rect)
+ if todraw is not None:
+ gem.vdi.vs_clip(vh, True, todraw)
+ image_y = 0
+ for r in self.data:
+ image_x = 0
+
+ for c in r:
+
+ if c > 128:
+ gem.vdi.vsf_color(vh,0)
+ else:
+ gem.vdi.vsf_color(vh,1)
+ x = wrect[0] + image_x
+ y = wrect[1] + image_y
+ gem.vdi.bar(vh,(x,y,1,1))
+ image_x = image_x + 1
+
+ image_y = image_y + 1
+
+ gem.vdi.vs_clip(vh, False, todraw)
+
+ self.end_update()
+
+class LoadingWindow(gem.Window):
+ def __init__(self,app,filename):
+ gem.Window.__init__(self, type=gem.NAME|gem.CLOSER)
+
+ self.set_name("Loading "+filename)
+
+ self.reader = png.Reader(filename)
+ self.raw_data = self.reader.asRGBA8()
+
+ self.data = []
+ self.done = False
+ self.row = 0
+
+ #self.load_thread = threading.Thread(target=self.load)
+ #self.load_thread.start()
+
+ def load(self):
+ rgbdata = self.raw_data[2]
+
+ for r in rgbdata:
+ self.row = self.row + 1
+
+ pvalue = 0
+ pcount = 0
+
+ row = []
+ for c in r:
+ if pcount < 3:
+ pvalue = pvalue + c
+ pcount = pcount + 1
+
+ if pcount == 4:
+ pvalue = pvalue / 3
+
+ row.append(pvalue)
+
+ #if image_x > data[0]:
+ # raise RuntimeError("Point {0} exceeds limit {1}".format(image_x,data[0]))
+ pcount = 0
+ pvalue = 0
+
+ self.data.append(row)
+ self.draw()
+
+ self.done = True
+ self.close()
+ #self.app.send_message((0,self.app.id,0,gem.WM_CLOSED))
+
+ def draw(self):
+ wrect = self.get_work_rect()
+
+ vh = self.graphics_handle()
+ self.begin_update()
+
+ for r in self.get_invalid_rectangles():
+ todraw = self.intersect_work_area(r)
+ if todraw is not None:
+ gem.vdi.vs_clip(vh, True, todraw)
+
+ w = wrect[2]*self.row/self.raw_data[1]
+
+ gem.vdi.vsf_color(vh,0)
+ gem.vdi.bar(vh,(wrect[0],wrect[1],w,wrect[3]))
+
+ gem.vdi.vsf_color(vh,1)
+ gem.vdi.bar(vh,(wrect[0]+w,wrect[1],wrect[2]-w,wrect[3]))
+
+ gem.vdi.vs_clip(vh, False, todraw)
+
+ self.end_update()
+
+class AppMessageEvent(gem.MessageEvent):
+ def __init__(self,app,window):
+ gem.MessageEvent.__init__(self)
+
+ self.app = app
+ self.window = window
+
+ def handle_menu(self, item, title=None):
+ if item == M_QUIT:
+ self.app.send_message((gem.WM_CLOSED, 0, 0, self.window.id))
+
+ elif item == M_ABOUT:
+ dlg = self.app.get_resource_address(gem.R_TREE,ABOUT)
+ self.app.draw_tree(dlg,2)
+ self.app.form_do(dlg)
+
+ if title is not None:
+ self.app.set_menu_state(title)
+
+ def process(self):
+
+ # First call the super's process()
+ gem.MessageEvent.process(self)
+
+ if self.message == gem.WM_CLOSED:
+ self.app.event_processing = False
+
+ elif self.message == gem.WM_TOPPED:
+ self.window.top()
+
+ elif self.message == gem.WM_MOVED or self.message == gem.WM_SIZED:
+ rect = (self.get_word(4),self.get_word(5),self.get_word(6),self.get_word(7))
+ self.window.resize(rect)
+
+ elif self.message == gem.WM_REDRAW:
+ self.window.draw()
+
+ # Menu handling
+ elif self.message == gem.MN_SELECTED:
+ self.handle_menu(self.get_word(4),title=self.get_word(3))
+
+
+def start_app(filename):
+
+ app = gem.Application()
+ app.load_resource("simple.rsc")
+ app.set_menu(MENU)
+
+ wload = LoadingWindow(app,filename)
+ app.windows.append(wload)
+ wload.open((10,10,250,50))
+ wload.load()
+ #app.message_event = AppMessageEvent(app,wload)
+
+ #app.event_loop()
+
+ wpic = PictureWindow(app,filename,(wload.raw_data[0],wload.raw_data[1]),wload.data)
+ app.windows.append(wpic)
+ app.message_event = AppMessageEvent(app,wpic)
+
+ app.event_loop()
+
+ app.destroy()
+
+
+if __name__ == "__main__":
+ print("Simple PNG Viewer for GEM")
+ if len(sys.argv) < 2:
+ print("Usage: {0} <png filename>".format(sys.argv[0]))
+ else:
+ print("Now processing {0}".format(sys.argv[1]))
start_app(sys.argv[1]) \ No newline at end of file