[mcclim-cvs] CVS mcclim/Backends/gtkairo

dlichteblau dlichteblau at common-lisp.net
Tue Dec 26 16:44:46 UTC 2006


Update of /project/mcclim/cvsroot/mcclim/Backends/gtkairo
In directory clnet:/tmp/cvs-serv14010/Backends/gtkairo

Modified Files:
	cairo.lisp ffi.lisp 
Log Message:

With Robert Strandh's permission, move gsharp/bezier.lisp into McCLIM.
	
All symbols are still in the CLIMI package and undocumented, but should
ultimately move into CLIME or a new package.

Try CLIM-FIG or gsharp to test.

	* NEWS: updated.
	
	* mcclim.asd (CLIM-BASIC): Depend on flexichain.  Added bezier.lisp
	
	* bezier.lisp: New file, from gsharp.  Postscript methods taken out.
	
	* Backends/PostScript/graphics.lisp (MEDIUM-DRAW-BEZIER-DESIGN*):
	New methods, from gsharp/bezier.lisp.
	
	* Backends/gtkairo/cairo.lisp (MEDIUM-DRAW-BEZIER-DESIGN*): New
	methods.

	* Backends/gtkairo/ffi.lisp: regenerated.
	
	* Examples/clim-fig.lisp (DRAW-FIGURE, HANDLE-DRAW-OBJECT): Added
	a bezier drawing mode.


--- /project/mcclim/cvsroot/mcclim/Backends/gtkairo/cairo.lisp	2006/12/26 12:11:04	1.1
+++ /project/mcclim/cvsroot/mcclim/Backends/gtkairo/cairo.lisp	2006/12/26 16:44:46	1.2
@@ -703,3 +703,51 @@
 	design
       (draw-design medium background)
       (draw-design medium foreground))))
+
+
+;;;; Bezier support
+
+(defmethod climi::medium-draw-bezier-design*
+    ((medium cairo-medium) (design climi::bezier-area))
+  (with-medium (medium)
+    (sync-sheet medium)
+    (sync-transformation medium)
+    (sync-ink medium (medium-ink medium))
+    (sync-clipping-region medium (medium-clipping-region medium))
+    (sync-line-style medium (medium-line-style medium))
+    (with-slots (cr) medium
+      (let ((p0 (slot-value (car (climi::segments design)) 'climi::p0)))
+	(cairo_move_to cr (df (point-x p0)) (df (point-y p0))))
+      (dolist (segment (climi::segments design))
+	(with-slots (climi::p1 climi::p2 climi::p3) segment
+	  (cairo_curve_to cr
+			  (df (point-x climi::p1)) (df (point-y climi::p1))
+			  (df (point-x climi::p2)) (df (point-y climi::p2))
+			  (df (point-x climi::p3)) (df (point-y climi::p3)))))
+      (cairo_fill cr))))
+
+(defmethod climi::medium-draw-bezier-design*
+    ((medium cairo-medium) (design climi::bezier-union))
+  (dolist (area (climi::areas design))
+    (climi::medium-draw-bezier-design* medium area)))
+
+(defmethod climi::medium-draw-bezier-design*
+    ((medium cairo-medium) (design climi::bezier-difference))
+  (dolist (area (climi::positive-areas design))
+    (climi::medium-draw-bezier-design* medium area))
+  (with-drawing-options (medium :ink +background-ink+)
+    (dolist (area (climi::negative-areas design))
+      (climi::medium-draw-bezier-design* medium area))))
+
+(defmethod climi::medium-draw-bezier-design*
+    ((medium cairo-medium) (design climi::translated-bezier-design))
+  (let ((tx (climi::translation design)))
+    (setf tx
+	  ;;
+	  ;; FIXME: needed for gsharp, doesn't make sense to me
+	  ;;
+	  (compose-transformations tx (medium-transformation medium)))
+    (climi::medium-draw-bezier-design* medium
+				       (climi::really-transform-region
+					tx
+					(climi::original-region design)))))
--- /project/mcclim/cvsroot/mcclim/Backends/gtkairo/ffi.lisp	2006/12/25 19:55:11	1.14
+++ /project/mcclim/cvsroot/mcclim/Backends/gtkairo/ffi.lisp	2006/12/26 16:44:46	1.15
@@ -317,6 +317,11 @@
   (arg4 :pointer)                       ;double *
   )
 
+(defcfun "cairo_fill_preserve"
+    :pointer
+  (arg0 :pointer)                       ;cairo_t *
+  )
+
 (defcfun "cairo_font_extents"
     :void
   (arg0 :pointer)                       ;cairo_t *
@@ -672,6 +677,11 @@
   (arg0 :pointer)                       ;cairo_t *
   )
 
+(defcfun "cairo_stroke_preserve"
+    :void
+  (arg0 :pointer)                       ;cairo_t *
+  )
+
 (defcfun "cairo_stroke_extents"
     :void
   (arg0 :pointer)                       ;cairo_t *




More information about the Mcclim-cvs mailing list