racket/draw: add get-handle' to
bitmap%'; add `make-handle-brush'
The `get-handle' method provides the underlying Cairo surface for a bitmap, while the unsafe `make-handle-brush' function supports the use of a Cairo surface as a `brush%'. Also, add `racket/draw/unsafe/cairo-lib', which simplifies access Cairo from external libraries. Documenting `racket/draw/unsafe/cairo' might be better, but that's a lot more work. original commit: 4f197f4ba944ee802e15fb3323f34a074e915db6
This commit is contained in:
parent
46cd9ed627
commit
fc7b0420da
|
@ -1,4 +1,5 @@
|
|||
#lang scheme/gui
|
||||
(require "unsafe-draw.rkt")
|
||||
|
||||
(define manual-chinese? #f)
|
||||
|
||||
|
@ -971,6 +972,12 @@
|
|||
(send dc draw-rectangle 300 320 80 20)
|
||||
(send dc set-pen p))
|
||||
|
||||
(let ([p (send dc get-pen)])
|
||||
(send dc set-pen "black" 1 'solid)
|
||||
(send dc set-brush surface-brush)
|
||||
(send dc draw-rectangle 400 320 30 40)
|
||||
(send dc set-pen p))
|
||||
|
||||
(let ([p (send dc get-pen)])
|
||||
(send dc set-pen "white" 1 'transparent)
|
||||
(send dc set-brush (new brush%
|
||||
|
|
36
collects/tests/gracket/unsafe-draw.rkt
Normal file
36
collects/tests/gracket/unsafe-draw.rkt
Normal file
|
@ -0,0 +1,36 @@
|
|||
#lang racket/base
|
||||
(require ffi/unsafe
|
||||
racket/draw/unsafe/cairo-lib
|
||||
racket/draw/unsafe/brush)
|
||||
|
||||
(provide surface-brush)
|
||||
|
||||
(define cairo_image_surface_create
|
||||
(get-ffi-obj 'cairo_image_surface_create cairo-lib (_fun _int _int _int -> _pointer)))
|
||||
(define cairo_surface_destroy
|
||||
(get-ffi-obj 'cairo_surface_destroy cairo-lib (_fun _pointer -> _void)))
|
||||
(define cairo_create
|
||||
(get-ffi-obj 'cairo_create cairo-lib (_fun _pointer -> _pointer)))
|
||||
(define cairo_destroy
|
||||
(get-ffi-obj 'cairo_destroy cairo-lib (_fun _pointer -> _void)))
|
||||
|
||||
(define cairo_set_source_rgba
|
||||
(get-ffi-obj 'cairo_set_source_rgba cairo-lib (_fun _pointer _double* _double* _double* _double* -> _void)))
|
||||
(define cairo_rectangle
|
||||
(get-ffi-obj 'cairo_rectangle cairo-lib (_fun _pointer _double* _double* _double* _double* -> _void)))
|
||||
(define cairo_fill
|
||||
(get-ffi-obj 'cairo_fill cairo-lib (_fun _pointer -> _void)))
|
||||
|
||||
(define s (cairo_image_surface_create 0 20 30))
|
||||
(define cr (cairo_create s))
|
||||
(cairo_set_source_rgba cr 1.0 0.0 0.0 0.5)
|
||||
(cairo_rectangle cr 2 2 16 26)
|
||||
(cairo_fill cr)
|
||||
(cairo_set_source_rgba cr 0.0 0.0 0.0 1.0)
|
||||
(cairo_rectangle cr 9 9 2 2)
|
||||
(cairo_fill cr)
|
||||
(cairo_destroy cr)
|
||||
|
||||
(define surface-brush (make-handle-brush s 20 30 '#(#(1 0 0 1 420 320) 0 0 1 1 0)))
|
||||
|
||||
(cairo_surface_destroy s)
|
Loading…
Reference in New Issue
Block a user