CVS: anygui/lib/anygui/backends dwgui.py,1.4,1.5

Robin Becker <[email protected]> Mon, 04 Nov 2002 11:47:27 -0800
Newsgroups gmane.comp.python.anygui.cvs
Message-ID <[email protected]>
Update of /cvsroot/anygui/anygui/lib/anygui/backends
In directory usw-pr-cvs1:/tmp/cvs-serv9341

Modified Files:
	dwgui.py 
Log Message:
Add primitive resource handling

Index: dwgui.py
===================================================================
RCS file: /cvsroot/anygui/anygui/lib/anygui/backends/dwgui.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** dwgui.py	3 Nov 2002 19:03:08 -0000	1.4
--- dwgui.py	4 Nov 2002 19:47:25 -0000	1.5
***************
*** 20,23 ****
--- 20,24 ----
  from anygui.Events import *
  from anygui import application
+ from anygui.Utils import log, setLogFile, logTraceback
  
  ################################################################
***************
*** 89,95 ****
  
  GetLastError = kernel32.GetLastError
! _verbose=1
  if _verbose:
-     from anygui.Utils import log, setLogFile
      setLogFile('/tmp/dbg.txt')
  
--- 90,95 ----
  
  GetLastError = kernel32.GetLastError
! _verbose=0
  if _verbose:
      setLogFile('/tmp/dbg.txt')
  
***************
*** 203,208 ****
              pass
          except:
!             import traceback
!             traceback.print_exc(1)
          return l,t,w,h
  
--- 203,207 ----
              pass
          except:
!             logTraceback(1)
          return l,t,w,h
  
***************
*** 562,565 ****
--- 561,607 ----
          pass
  
+ 
+ class Resource:
+     inline = None
+     def __init__(self,text=None,suffix='.bmp',kind='bitmap'):
+         self.text = text
+         self.suffix = suffix
+         self.kind = kind
+         self._handle = None
+ 
+     def _fn2handle(self,fn):
+         if self.kind=='bitmap':
+             try:
+                 self._handle = user32.LoadImage(0,windll.cstring(fn),
+                     IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE)
+             except:
+                 logTraceback(0)
+                 from anygui.backends.dwgui import _lastErrorMessage 
+                 log(_lastErrorMessage())
+ 
+     def handle(self):
+         if not self._handle:
+             if self.inline:
+                 import zlib, base64, tempfile, os
+                 fn = tempfile.mktemp(self.suffix)
+                 if _verbose: log('resource:','fn',fn,'kind',self.kind)
+                 open(fn,'wb').write(zlib.decompress(base64.decodestring(self.text)))
+                 try:
+                     self._fn2handle(fn)
+                 finally:
+                     os.remove(fn)
+             else:
+                 self._fn2handle(self.text)
+         if _verbose: log('resource:','-->',self._handle)
+         return self._handle
+ 
+     def __del__(self):
+         if self._handle:
+             if self.kind=='bitmap':
+                 gdi32.DeleteObject(self._handle)
+ 
+ class inlineResource(Resource):
+     inline = 1
+ 
  ##################################################################
  class ImageWrapper(ComponentWrapper):
***************
*** 569,573 ****
      def _WM_PAINT(self, hwnd, msg, wParam, lParam):
          if not self.widget: return
!         if _verbose: log('in dwImage _WM_PAINT')
          r = ComponentWrapper._WM_PAINT(self, hwnd, msg, wParam, lParam)
          self.draw()
--- 611,615 ----
      def _WM_PAINT(self, hwnd, msg, wParam, lParam):
          if not self.widget: return
!         if _verbose: log('Image _WM_PAINT self.__dict__',self.__dict__)
          r = ComponentWrapper._WM_PAINT(self, hwnd, msg, wParam, lParam)
          self.draw()
***************
*** 575,595 ****
  
      def draw(self,*arg,**kw):
!         if not self.widget: return
          dc = user32.GetDC(self.widget)
-         name = windll.cstring('/python/rlextra/distro/demo/RLImage.bmp')
-         if _verbose: log('in draw widget=%s dc=%s dim=%sx%s' % (hex(self.widget),hex(dc),self.proxy.width,self.proxy.height))
-         try:
-             bmp=user32.LoadImage(0,name,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE)
-         except:
-             import traceback
-             traceback.print_exc()
-             from anygui.backends.dwgui import _lastErrorMessage 
-             log(_lastErrorMessage())
          memdc = gdi32.CreateCompatibleDC(dc)
!         old = gdi32.SelectObject(memdc,bmp)
          gdi32.BitBlt(dc,0,0,self.proxy.width,self.proxy.height,memdc,0,0,0x00CC0020)
          gdi32.SelectObject(memdc,old)
          gdi32.DeleteDC(memdc)
!         gdi32.DeleteObject(bmp)
  
  class WindowWrapper(ContainerMixin,ComponentWrapper):
--- 617,635 ----
  
      def draw(self,*arg,**kw):
!         if _verbose: log('Image.draw',self.widget,self._image)
!         if not self.widget or not self._image: return
          dc = user32.GetDC(self.widget)
          memdc = gdi32.CreateCompatibleDC(dc)
!         if _verbose: log('Image.draw dc, memdc',dc,memdc)
!         old = gdi32.SelectObject(memdc,self._image.handle())
          gdi32.BitBlt(dc,0,0,self.proxy.width,self.proxy.height,memdc,0,0,0x00CC0020)
          gdi32.SelectObject(memdc,old)
          gdi32.DeleteDC(memdc)
! 
!     def setImage(self,image):
!         self._image = image
! 
!     def getImage(self):
!         return self._image
  
  class WindowWrapper(ContainerMixin,ComponentWrapper):



-------------------------------------------------------
This SF.net email is sponsored by: ApacheCon, November 18-21 in
Las Vegas (supported by COMDEX), the only Apache event to be
fully supported by the ASF. http://www.apachecon.com