;; License along with this library; if not, write to the Free Software
;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-;; $Id: gdk.lisp,v 1.1 2000/08/14 16:44:39 espen Exp $
+;; $Id: gdk.lisp,v 1.3 2000/09/04 22:12:45 espen Exp $
(in-package "GDK")
'%event-free)
(deftype-method translate-from-alien
- event (type-spec location &optional (alloc :dynamic))
+ event (type-spec location &optional (alloc :reference))
`(let ((location ,location))
(unless (null-pointer-p location)
(let ((event-class
(find-event-class
(funcall (get-reader-function 'event-type) location 0))))
,(ecase alloc
- (:dynamic '(ensure-alien-instance event-class location))
+ (:copy '(ensure-alien-instance event-class location))
(:static '(ensure-alien-instance event-class location :static t))
- (:copy '(ensure-alien-instance
- event-class (%event-copy location))))))))
+ (:reference '(ensure-alien-instance
+ event-class (%event-copy location))))))))
(define-foreign event-poll-fd () int)
;;; Pixmaps
+;; See the class definition for an explanation of this
+(deftype-method alien-ref bitmap (type-spec)
+ (declare (ignore type-spec))
+ '%drawable-ref)
+
+(deftype-method alien-unref bitmap (type-spec)
+ (declare (ignore type-spec))
+ '%drawable-unref)
+
+(define-foreign %drawable-ref () pointer
+ (object (or bitmap pointer)))
+
+(define-foreign %drawable-unref () nil
+ (object (or bitmap pointer)))
+
+
(define-foreign pixmap-new (width height depth &key window) pixmap
(width int)
(height int)
(depth int)
(window (or null window)))
-
(define-foreign %pixmap-colormap-create-from-xpm () pixmap
(window (or null window))
(colormap (or null colormap))
(color (or null color))
(filename string))
-(define-foreign pixmap-colormap-create-from-xpm-d () pixmap
+(define-foreign %pixmap-colormap-create-from-xpm-d () pixmap
(window (or null window))
(colormap (or null colormap))
(mask bitmap :out)
(color (or null color))
- (data pointer))
-
-; (defun pixmap-create (source &key color window colormap)
-; (let ((window
-; (if (not (or window colormap))
-; (get-root-window)
-; window)))
-; (multiple-value-bind (pixmap bitmap)
-; (typecase source
-; ((or string pathname)
-; (pixmap-colormap-create-from-xpm
-; window colormap color (namestring (truename source))))
-; (t
-; (with-array (data :initial-contents source :free-contents t)
-; (pixmap-colormap-create-from-xpm-d window colormap color data))))
-; (if color
-; (progn
-; (bitmap-unref bitmap)
-; pixmap)
-; (values pixmap bitmap)))))
+ (data (vector string)))
+
+(defun pixmap-create (source &key color window colormap)
+ (let ((window
+ (if (not (or window colormap))
+ (get-root-window)
+ window)))
+ (multiple-value-bind (pixmap mask)
+ (etypecase source
+ ((or string pathname)
+ (%pixmap-colormap-create-from-xpm
+ window colormap color (namestring (truename source))))
+ ((vector string)
+ (%pixmap-colormap-create-from-xpm-d window colormap color source)))
+ (unreference-instance pixmap)
+ (unreference-instance mask)
+ (values pixmap mask))))