[cairo-commit] [cairo-www] src/cookbook src/download.mdwn

Carl Worth cworth at freedesktop.org
Mon Jul 9 03:29:50 PDT 2007


 src/cookbook/win32quickstart.mdwn |  167 ++++++++++++++++++++++++++++++++++++++
 src/download.mdwn                 |    2 
 2 files changed, 168 insertions(+), 1 deletion(-)

New commits:
commit 97a6f54d7aa5fd1729d84ab2c625565c1c8c29b5
Author: akw <akw at thinkwiki.org>
Date:   Mon Jul 9 03:29:50 2007 -0700

    fixed typo

diff --git a/src/cookbook/win32quickstart.mdwn b/src/cookbook/win32quickstart.mdwn
new file mode 100644
index 0000000..f023a06
--- /dev/null
+++ b/src/cookbook/win32quickstart.mdwn
@@ -0,0 +1,167 @@
+[[meta title="Win32 Quickstart"]]
+Back to [[cookbook]]
+
+# Python
+The following is a minimal windows application that uses cairo. It has double buffering and uses the PyWin32 library.
+
+    from win32api import *
+    try:
+        from winxpgui import *
+    except ImportError:
+        from win32gui import *
+        
+    import win32con
+    import sys, os
+    import cairo
+    
+    def WebColour(sCol):
+        #print sCol
+        ic = [int(sCol[i:i+2], 16)/255.0 for i in range(1, 7, 2)]
+        #print ic
+        return ic
+    
+    def roundedRectangle(cr,x,y,w,h,radius_x=5,radius_y=5):
+        #from mono moonlight aka mono silverlight
+        #test limits (without using multiplications)
+        # http://graphics.stanford.edu/courses/cs248-98-fall/Final/q1.html
+        ARC_TO_BEZIER = 0.55228475
+        if radius_x > w - radius_x:
+            radius_x = w / 2
+        if radius_y > h - radius_y:
+            radius_y = h / 2
+    
+        #approximate (quite close) the arc using a bezier curve
+        c1 = ARC_TO_BEZIER * radius_x
+        c2 = ARC_TO_BEZIER * radius_y
+    
+        cr.new_path();
+        cr.move_to ( x + radius_x, y)
+        cr.rel_line_to ( w - 2 * radius_x, 0.0)
+        cr.rel_curve_to ( c1, 0.0, radius_x, c2, radius_x, radius_y)
+        cr.rel_line_to ( 0, h - 2 * radius_y)
+        cr.rel_curve_to ( 0.0, c2, c1 - radius_x, radius_y, -radius_x, radius_y)
+        cr.rel_line_to ( -w + 2 * radius_x, 0)
+        cr.rel_curve_to ( -c1, 0, -radius_x, -c2, -radius_x, -radius_y)
+        cr.rel_line_to (0, -h + 2 * radius_y)
+        cr.rel_curve_to (0.0, -c2, radius_x - c1, -radius_y, radius_x, -radius_y)
+        cr.close_path ()
+    
+    
+    class MainWindow(object):
+        def __init__(self):        
+            message_map = {
+                    win32con.WM_DESTROY: self.OnDestroy,
+                    win32con.WM_PAINT: self.OnPaint,
+                    win32con.WM_SETCURSOR: self.OnCursor,
+                    win32con.WM_ERASEBKGND: self.OnBackgroundErase,
+                    win32con.WM_LBUTTONDOWN: self.OnClick,
+                    win32con.WM_KEYUP: self.OnKey,
+                    #win32con.WM_COMMAND: self.OnCommand,
+                    #win32con.WM_USER+20 : self.OnTaskbarNotify,
+                    # owner-draw related handlers.
+                    #win32con.WM_MEASUREITEM: self.OnMeasureItem,
+                    #win32con.WM_DRAWITEM: self.OnDrawItem,
+            }
+            # Register the Window class.
+            wc = WNDCLASS()
+            hinst = wc.hInstance = GetModuleHandle(None)
+            self.hinst = hinst
+            wc.lpszClassName = "CairoWindow"
+            wc.lpfnWndProc = message_map # could also specify a wndproc.
+            classAtom = RegisterClass(wc)
+            # Create the Window.
+            style = win32con.WS_THICKFRAME | win32con.WS_MAXIMIZEBOX | win32con.WS_MINIMIZEBOX | win32con.WS_SYSMENU | win32con.WS_VISIBLE
+            self.hwnd = CreateWindow( classAtom, "Cairo is the greatest thing!", style, \
+                    0, 0, 550, 350, \
+                    0, 0, hinst, None)
+            UpdateWindow(self.hwnd)
+            
+            
+        def OnKey(self, hWnd, msg, wParam, lparam):
+            if wParam == 38: #up
+                print "up"
+            elif wParam == 40: #down
+                print "down"
+            
+        def OnClick(self, hWnd, msg, wparam, lparam):
+            x = LOWORD(lparam)
+            y = HIWORD(lparam) 
+                    
+        def Render(self):
+            try:
+                InvalidateRect(self.hwnd, None, True)
+                return True
+            except:
+                print "That didn't work"
+                return False
+    
+        def OnPaint(self, hWnd, msg, wparam, lparam):   
+            hdc, ps = BeginPaint(hWnd)
+            rc = GetClientRect(hWnd)
+            left, top, right, bottom = rc            
+            
+            width = right - left
+            height = bottom - top
+            x = left
+            y = top 
+            
+            _buffer = CreateCompatibleDC(hdc) 
+            #Double Buffer Stage 1
+            hBitmap = CreateCompatibleBitmap(hdc,width,height)
+            hOldBitmap = SelectObject(_buffer, hBitmap )
+            
+            
+            surf = cairo.Win32Surface(_buffer)
+            ctx = cairo.Context(surf) 
+            
+            ctx.set_source_rgb(1,1,1)
+            ctx.paint()
+            
+            
+            roundedRectangle(ctx, 50, 50, 250, 250, 10, 10)
+            clr = WebColour("#F0FEE9")        
+            ctx.set_source_rgb(clr[0],clr[1],clr[2])
+            ctx.fill_preserve()
+            clr = WebColour("#B3FF8D")        
+            ctx.set_source_rgb(clr[0],clr[1],clr[2])
+            ctx.stroke()        
+                
+            ctx.set_source_rgb(0,0,0)
+            ctx.select_font_face("Arial",cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
+            ctx.set_font_size(10)    
+    
+            txt = "Cairo is the greatest thing!"
+                
+            ctx.move_to(5,10)        
+            ctx.show_text(txt)
+            
+            surf.finish()
+            
+            BitBlt(hdc,0, 0, width,  height,
+              _buffer, x, y, win32con.SRCCOPY) 
+            
+            SelectObject( _buffer, hOldBitmap ) 
+            DeleteObject( hBitmap ) 
+            DeleteDC( _buffer )               
+            
+            EndPaint(hWnd,ps)        
+            
+        def OnCursor(self, hwnd, msg, wparam, lparam):
+            #IDC_HAND = 32649
+            #IDC_ARROW
+            cur_normal = LoadCursor(0, win32con.IDC_ARROW)
+            SetCursor(cur_normal)
+            
+        def OnBackgroundErase(self, hwnd, msg, wparam, lparam):
+            return False
+    
+            
+        def OnDestroy(self, hwnd, msg, wparam, lparam):
+            #nid = (self.hwnd, 0)
+            #Shell_NotifyIcon(NIM_DELETE, nid)
+            PostQuitMessage(0) # Terminate the app. 
+            print "Exited."
+               
+            
+    w=MainWindow()
+    PumpMessages()
diff --git a/src/download.mdwn b/src/download.mdwn
index a00bc90..e67dd36 100644
--- a/src/download.mdwn
+++ b/src/download.mdwn
@@ -20,7 +20,7 @@ the header files installed as well may require asking for a -dev or
 
 For Debian and Debian derivatives including Ubuntu:
 
-	sudo apt-get-install libcairo2-dev
+	sudo apt-get install libcairo2-dev
 
 For Fedora:
 


More information about the cairo-commit mailing list