;; author -> Norbert Freudemann
;; creation date : 16/07/2001
;; last change   : 16/07/2001

;; create a new pixmap.

(define (create-pixmap drawable width height depth)
  (let* ((display (drawable-display drawable))
	 (pixmap (%create-pixmap (display-Xdisplay display)
				 (drawable-Xobject drawable) 
				 width height depth)))
    (make-pixmap pixmap display #t)))

(import-lambda-definition %create-pixmap (Xdisplay Xdrawable w h depth)
  "scx_Create_Pixmap")

;; create-bitmap-from-data creates a new pixmap, consisting of the
;; image found in data, which has to be a string. Such an image can be
;; generated with write-bitmap-file. See XCreateBitmapFromData.

(define (create-bitmap-from-data window data width height)
  (let* ((display (window-display window))
	 (Xpixmap (%create-bitmap-from-data (display-Xdisplay display)
					    (window-Xwindow window)
					    data width height)))
    (make-pixmap Xpixmap display #t)))

(import-lambda-definition %create-bitmap-from-data (Xdisplay Xdrawable data w h)
  "scx_Create_Bitmap_From_Data")

;; create-pixmap-from-bitmap-data creates a pixmap of the given depth
;; and then does a bitmap-format XPutImage of the data into it. See
;; XCreatePixmapFromBitmapData.

(define (create-pixmap-from-bitmap-data win data widht height 
					foregrnd backgrnd depth)
  (let* ((display (window-display window))
	 (pixmap (create-pixmap-from-bitmap-data (display-Xdisplay display)
						 (window-Xwindow window)
						 data widht height foregrnd
						 backgrd depth)))
    (make-pixmap pixmap display #t)))


(import-lambda-definition %create-pixmap-from-bitmap-data
			  (Xdisplay Xdrawabel data w h f b depth)
  "scx_Create_Pixmap_From_Bitmap_Data")

;; read-bitmap-file reads the bitmap data from the file, creates a new
;; pixmap and returns a list of five elements (pixmap widht heigth
;; x-hot y-hot). if x-hot and y-hot are not defined in the file then
;; they are set to -1,-1. See XReadBitmapFile;

(define (read-bitmap-file drawable filename)
  (let ((res (%read-bitmap-file (display-Xdisplay (drawable-display drawable))
				(drawable-Xobject drawable)
				filename)))
    (if (pair? res)
	(set-car! res (make-pixmap (car res) (drawable-display drawable) #t))
	res)))

(import-lambda-definition %read-bitmap-file (Xdisplay Xdrawable file)
  "scx_Read_Bitmap_File")

;; write-bitmap-file writes a bitmap out to a file in the X Version 11
;; format. The optional argument hotspot specifies the hotspot as a
;; pair (x-hot . y-hot) which defaults to (-1 . -1). See
;; XWriteBitmapFile.

(define (write-bitmap-file filename pixmap width height . hotspot)
  (let ((dpy (display-Xdisplay (pixmap-display pixmap)))
	(xy-hot (cond
		 ((null? hotspot) (cons -1 -1))
		 (else (car hotspot)))))
    (%write-bitmap-file dpy filename pixmap widht height 
			(car xy-hot) (cdr xy-hot))))

(import-lambda-definition %write-bitmap-file (Xdisplay file Xpixmap w h x y)
  "scx_Write_Bitmap_File")