X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/clg/blobdiff_plain/112ac1d33aa8f9b7f3d2f9542d15431f152b1d35..afa01e1b95c480818761b9e337ff08da44e9d49f:/glib/gparam.lisp diff --git a/glib/gparam.lisp b/glib/gparam.lisp index d706580..05ccca1 100644 --- a/glib/gparam.lisp +++ b/glib/gparam.lisp @@ -1,5 +1,5 @@ ;; Common Lisp bindings for GTK+ v2.x -;; Copyright 2000-2005 Espen S. Johnsen +;; Copyright 2000-2006 Espen S. Johnsen ;; ;; Permission is hereby granted, free of charge, to any person obtaining ;; a copy of this software and associated documentation files (the @@ -20,7 +20,7 @@ ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -;; $Id: gparam.lisp,v 1.17 2005-04-23 16:48:51 espen Exp $ +;; $Id: gparam.lisp,v 1.21 2006-04-25 22:12:48 espen Exp $ (in-package "GLIB") @@ -31,9 +31,7 @@ (register-type 'gvalue '|g_value_get_type|) (eval-when (:compile-toplevel :load-toplevel :execute) (defbinding (size-of-gvalue "size_of_gvalue") () unsigned-int)) -;(defconstant +gvalue-size+ (+ (size-of 'type-number) (* 2 (size-of 'double-float)))) -(defconstant +gvalue-size+ #.(size-of-gvalue)) - +(defconstant +gvalue-size+ (size-of-gvalue)) (defconstant +gvalue-value-offset+ (size-of 'type-number)) (defbinding (%gvalue-init "g_value_init") () nil @@ -62,12 +60,20 @@ (defun gvalue-free (gvalue &optional (unset-p t)) (deallocate-memory gvalue))) (defun gvalue-type (gvalue) - (type-from-number (sap-ref-32 gvalue 0))) + (type-from-number (ref-type-number gvalue))) (defun gvalue-get (gvalue) (funcall (reader-function (gvalue-type gvalue)) gvalue +gvalue-value-offset+)) +(defun gvalue-peek (gvalue) + (funcall (reader-function (gvalue-type gvalue) :ref :peek) + gvalue +gvalue-value-offset+)) + +(defun gvalue-take (gvalue) + (funcall (reader-function (gvalue-type gvalue) :ref :get) + gvalue +gvalue-value-offset+)) + (defun gvalue-set (gvalue value) (funcall (writer-function (gvalue-type gvalue)) value gvalue +gvalue-value-offset+) @@ -77,15 +83,12 @@ (defbinding (gvalue-p "g_type_check_value") () boolean (location pointer)) (defmacro with-gvalue ((gvalue &optional type (value nil value-p)) &body body) - `(let ((,gvalue ,(cond - ((and type value-p) `(gvalue-new ,type ,value)) - (type `(gvalue-new ,type)) - (`(gvalue-new))))) - (unwind-protect - (progn - ,@body - ,(unless value-p `(gvalue-get ,gvalue))) - (gvalue-free ,gvalue)))) + `(with-memory (,gvalue +gvalue-size+) + ,(cond + ((and type value-p) `(gvalue-init ,gvalue ,type ,value)) + (type `(gvalue-init ,gvalue ,type))) + ,@body + ,(unless value-p `(gvalue-take ,gvalue)))) (deftype param-flag-type () @@ -101,6 +104,14 @@ (eval-when (:compile-toplevel :load-toplevel :execute) (defclass param-spec-class (ginstance-class) ()) + (defmethod shared-initialize ((class param-spec-class) names &rest initargs) + (declare (ignore names initargs)) + (call-next-method) + (unless (slot-boundp class 'ref) + (setf (slot-value class 'ref) '%param-spec-ref)) + (unless (slot-boundp class 'unref) + (setf (slot-value class 'unref) '%param-spec-unref))) + (defmethod validate-superclass ((class param-spec-class) (super standard-class)) t ;(subtypep (class-name super) 'param) )) @@ -112,15 +123,6 @@ (defbinding %param-spec-ref () pointer (defbinding %param-spec-unref () nil (location pointer)) -(defmethod reference-foreign ((class param-spec-class) location) - (declare (ignore class)) - (%param-spec-ref location)) - -(defmethod unreference-foreign ((class param-spec-class) location) - (declare (ignore class)) - (%param-spec-unref location)) - - ;; TODO: rename to param-spec (defclass param (ginstance) @@ -157,15 +159,15 @@ (defclass param (ginstance) (defclass param-char (param) ((minimum :allocation :alien - :reader param-char-minimum + :reader param-minimum :type char) (maximum :allocation :alien - :reader param-char-maximum + :reader param-maximum :type char) (default-value :allocation :alien - :reader param-char-default-value + :reader param-default-value :type char)) (:metaclass param-spec-class) (:gtype "GParamChar")) @@ -191,7 +193,7 @@ (defclass param-unsigned-char (param) (defclass param-boolean (param) ((default-value :allocation :alien - :reader param-boolean-default-value + :reader param-default-value :type boolean)) (:metaclass param-spec-class) (:gtype "GParamBoolean")) @@ -199,15 +201,15 @@ (defclass param-boolean (param) (defclass param-int (param) ((minimum :allocation :alien - :reader param-int-minimum + :reader param-minimum :type int) (maximum :allocation :alien - :reader param-int-maximum + :reader param-maximum :type int) (default-value :allocation :alien - :reader param-int-default-value + :reader param-default-value :type int)) (:metaclass param-spec-class) (:gtype "GParamInt")) @@ -215,15 +217,15 @@ (default-value (defclass param-unsigned-int (param) ((minimum :allocation :alien - :reader param-unsigned-int-minimum + :reader param-minimum :type unsigned-int) (maximum :allocation :alien - :reader param-unsigned-int-maximum + :reader param-maximum :type unsigned-int) (default-value :allocation :alien - :reader param-unsigned-int-default-value + :reader param-default-value :type unsigned-int)) (:metaclass param-spec-class) (:gtype "GParamUInt")) @@ -231,15 +233,15 @@ (default-value (defclass param-long (param) ((minimum :allocation :alien - :reader param-long-minimum + :reader param-minimum :type long) (maximum :allocation :alien - :reader param-long-maximum + :reader param-maximum :type long) (default-value :allocation :alien - :reader param-long-default-value + :reader param-default-value :type long)) (:metaclass param-spec-class) (:gtype "GParam")) @@ -247,15 +249,15 @@ (default-value (defclass param-unsigned-long (param) ((minimum :allocation :alien - :reader param-unsigned-long-minimum + :reader param-minimum :type unsigned-long) (maximum :allocation :alien - :reader param-unsigned-long-maximum + :reader param-maximum :type unsigned-long) (default-value :allocation :alien - :reader param-unsigned-long-default-value + :reader param-default-value :type unsigned-long)) (:metaclass param-spec-class) (:gtype "GParamULong")) @@ -272,7 +274,7 @@ (defclass param-enum (param) :type pointer) (default-value :allocation :alien - :reader param-enum-default-value + :reader param-default-value :type long)) (:metaclass param-spec-class) (:gtype "GParamEnum")) @@ -284,7 +286,7 @@ (defclass param-flags (param) :type pointer) (default-value :allocation :alien - :reader param-flags-default-value + :reader param-default-value :type long)) (:metaclass param-spec-class) (:gtype "GParamFlags")) @@ -292,19 +294,19 @@ (default-value (defclass param-single-float (param) ((minimum :allocation :alien - :reader param-single-float-minimum + :reader param-minimum :type single-float) (maximum :allocation :alien - :reader param-single-float-maximum + :reader param-maximum :type single-float) (default-value :allocation :alien - :reader param-single-float-default-value + :reader param-default-value :type single-float) (epsilon :allocation :alien - :reader param-single-float-epsilon + :reader param-float-epsilon :type single-float)) (:metaclass param-spec-class) (:gtype "GParamFloat")) @@ -312,19 +314,19 @@ (default-value (defclass param-double-float (param) ((minimum :allocation :alien - :reader param-double-float-minimum + :reader param-minimum :type double-float) (maximum :allocation :alien - :reader param-double-float-maximum + :reader param-maximum :type double-float) (default-value :allocation :alien - :reader param-double-float-default-value + :reader param-default-value :type double-float) (epsilon :allocation :alien - :reader param-double-float-epsilon + :reader param-float-epsilon :type double-float)) (:metaclass param-spec-class) (:gtype "GParamDouble")) @@ -332,7 +334,7 @@ (default-value (defclass param-string (param) ((default-value :allocation :alien - :reader param-string-default-value + :reader param-default-value :type string)) (:metaclass param-spec-class) (:gtype "GParamString"))