2002-01-27 19:21:16 -05:00
|
|
|
; Access to the xpm library
|
|
|
|
|
|
|
|
(define-enumerated-type xpm-attribute :xpm-attribute
|
|
|
|
xpm-attribute?
|
|
|
|
xpm-attributes
|
|
|
|
xpm-attribute-name
|
|
|
|
xpm-attribute-index
|
2002-02-08 12:09:43 -05:00
|
|
|
(visual colormap depth size hotspot char-per-pixel color-symbols rgb-filename
|
|
|
|
infos return-pixels extensions exact-colors closeness rgb-closeness
|
|
|
|
color-key color-table return-alloc-pixels alloc-close-colors bitmap-format
|
|
|
|
alloc-color free-colors color-closure))
|
|
|
|
|
|
|
|
(define-enumerated-type bitmap-format :bitmap-format
|
|
|
|
bitmap-format? bitmap-formats bitmap-format-name bitmap-format-index
|
|
|
|
(xy-bitmap
|
|
|
|
bitmap-format-1 ;; means xy-pixmap, but is not allowed as a bitmap-format
|
|
|
|
z-pixmap))
|
|
|
|
|
|
|
|
(define (integer->bitmap-format int)
|
|
|
|
(vector-ref bitmap-formats int))
|
|
|
|
|
|
|
|
(define (bitmap-format->integer v)
|
|
|
|
(bitmap-format-index v))
|
|
|
|
|
|
|
|
(define xpm-attribute-alist->integer+vector
|
|
|
|
(make-enum-alist->integer+vector
|
|
|
|
xpm-attributes xpm-attribute-index
|
|
|
|
(lambda (v)
|
|
|
|
(cond
|
|
|
|
((eq? v (xpm-attribute visual))
|
|
|
|
visual-Xvisual)
|
|
|
|
((eq? v (xpm-attribute colormap))
|
|
|
|
colormap-Xcolormap)
|
|
|
|
((eq? v (xpm-attribute depth))
|
|
|
|
(lambda (x) x))
|
|
|
|
; ((eq? v (xpm-attribute color-symbols))
|
|
|
|
; (lambda (color-symbols)
|
|
|
|
; (list->vector
|
|
|
|
; (map (lambda (mapping)
|
|
|
|
; (list->vector
|
|
|
|
; (list (name->string (car mapping))
|
|
|
|
; (name->string (cadr mapping))
|
|
|
|
; (pixel-Xpixel (caddr mapping)))))
|
|
|
|
; color-symbols))))
|
|
|
|
((or (eq? v (xpm-attribute return-pixels))
|
|
|
|
(eq? v (xpm-attribute return-alloc-pixels)))
|
|
|
|
(lambda (x) x))
|
|
|
|
((or (eq? v (xpm-attribute exact-colors))
|
|
|
|
(eq? v (xpm-attribute alloc-close-colors)))
|
|
|
|
(lambda (x) (if x 1 0)))
|
|
|
|
((eq? v (xpm-attribute bitmap-format))
|
|
|
|
bitmap-format->integer) ;; xypixmap not allowed
|
|
|
|
(else (lambda (x)
|
|
|
|
(warn "attribute not supported" v)
|
|
|
|
(unspecific)))))))
|
2002-01-27 19:21:16 -05:00
|
|
|
|
|
|
|
(define (name->string obj)
|
|
|
|
(if (symbol? obj)
|
|
|
|
(symbol->string obj)
|
|
|
|
obj))
|
|
|
|
|
|
|
|
(define (make-result display vec)
|
|
|
|
(vector-set! vec 0 (make-pixmap (vector-ref vec 0)
|
|
|
|
display #t))
|
|
|
|
(vector-set! vec 3 (make-pixmap (vector-ref vec 3)
|
|
|
|
display #t))
|
|
|
|
(vector->list vec))
|
|
|
|
|
|
|
|
(define (create-pixmap-from-data drawable data xpm-attribute-alist)
|
|
|
|
(let ((r (%create-pixmap-from-data
|
|
|
|
(display-Xdisplay (drawable-display drawable))
|
|
|
|
(drawable-Xobject drawable)
|
|
|
|
data
|
2002-02-08 12:09:43 -05:00
|
|
|
(xpm-attribute-alist->integer+vector xpm-attribute-alist))))
|
2002-01-27 19:21:16 -05:00
|
|
|
(case r
|
|
|
|
((0) (error "Not enough memory!"))
|
|
|
|
((1) (error "Invalid XPM-File data." data))
|
|
|
|
(else
|
|
|
|
(make-result (drawable-display drawable) r)))))
|
|
|
|
|
|
|
|
;-> (pixmap (width . height) (x-hot . y-hot) shape-mask)
|
|
|
|
|
|
|
|
(import-lambda-definition %create-pixmap-from-data
|
|
|
|
(Xdisplay Xdrawable data attribute-vector)
|
|
|
|
"scx_Create_Pixmap_From_Data")
|
|
|
|
|
|
|
|
;(define (create-data-from-pixmap ...))
|
|
|
|
|
|
|
|
(define (read-file-to-pixmap drawable filename xpm-attribute-alist)
|
|
|
|
(let ((r (%read-file-to-pixmap
|
|
|
|
(display-Xdisplay (drawable-display drawable))
|
|
|
|
(drawable-Xobject drawable)
|
|
|
|
filename
|
2002-02-08 12:09:43 -05:00
|
|
|
(xpm-attribute-alist->integer+vector xpm-attribute-alist))))
|
2002-01-27 19:21:16 -05:00
|
|
|
(case r
|
|
|
|
((0) (error "Not enough memory!"))
|
|
|
|
((1) (error "Invalid XPM-File data." filename))
|
|
|
|
((2) (error "Open failed." filename))
|
|
|
|
(else (make-result (drawable-display drawable) r)))))
|
|
|
|
|
|
|
|
;-> (pixmap (width . height) (x-hot . y-hot) shape-mask)
|
|
|
|
|
|
|
|
|
|
|
|
(import-lambda-definition %read-file-to-pixmap
|
|
|
|
(Xdisplay Xdrawable filename attribute-vector)
|
|
|
|
"scx_Read_File_To_Pixmap")
|
|
|
|
|
|
|
|
|
|
|
|
;(define (write-file-from-pixmap ...))
|