anchor.diff:    (handle handle)
     (cr cairo:context)
     (id (or null string)))
  +
  +(defun image-surface-create-from-svg (filename &key width height (format :argb32)id)
  +  (with-handle (handle :filename filename)
  +    (multiple-value-bind (width height)
  +	(cond
  +	  ((and width height) (values width height))
  +	  (width 
  +	   (let ((ratio (/ (handle-height handle) (handle-width handle))))
  +	     (values width (truncate (* width ratio)))))
  +	  (height 
  +	   (let ((ratio (/ (handle-width handle) (handle-height handle))))
  +	     (values (truncate (* height ratio)) height)))
  +	  (t (values (handle-width handle) (handle-height handle))))
  +      (let ((image (make-instance 'cairo:image-surface 
  +		    :width width :height height :format format)))
  +	(cairo:with-surface (image cr)
  +	  (cairo:scale cr (/ width (handle-width handle)) (/ height (handle-height handle)))
  +	  (render-cairo handle cr id))
  +	image))))
  
positive.code:    (data (%handle-new-from-data data))
     (t (call-next-method))))
  
  
  ;;; Cairo interface
  
  
negative.code: ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  
  ;; $Id: rsvg.lisp,v 1.9 2008-10-08 18:24:01 espen Exp $
  
  (in-package "RSVG")
  
  