X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/clg/blobdiff_plain/9adccb27da69b60d058aa37867d55ea20ecf97ca..dfa4f31424800fdb6fb63514121b9cc893269276:/glib/gparam.lisp diff --git a/glib/gparam.lisp b/glib/gparam.lisp index 1d90291..2307924 100644 --- a/glib/gparam.lisp +++ b/glib/gparam.lisp @@ -1,5 +1,5 @@ ;; Common Lisp bindings for GTK+ v2.0 -;; Copyright (C) 2000 Espen S. Johnsen +;; Copyright (C) 2000-2005 Espen S. Johnsen ;; ;; This library is free software; you can redistribute it and/or ;; modify it under the terms of the GNU Lesser General Public @@ -15,12 +15,14 @@ ;; 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: gparam.lisp,v 1.9 2004-11-06 21:39:58 espen Exp $ +;; $Id: gparam.lisp,v 1.16 2005-03-06 17:26:23 espen Exp $ (in-package "GLIB") (deftype gvalue () 'pointer) +(register-type 'gvalue '|g_value_get_type|) + (eval-when (:compile-toplevel :load-toplevel :execute) (defbinding (size-of-gvalue "size_of_gvalue") () unsigned-int)) @@ -41,11 +43,11 @@ (defun gvalue-init (gvalue type &optional (value nil value-p)) (when value-p (funcall (writer-function type) value gvalue +gvalue-value-offset+))) -(defun gvalue-new (type &optional (value nil value-p)) +(defun gvalue-new (&optional type (value nil value-p)) (let ((gvalue (allocate-memory +gvalue-size+))) - (if value-p - (gvalue-init gvalue type value) - (gvalue-init gvalue type)) + (cond + (value-p (gvalue-init gvalue type value)) + (type (gvalue-init gvalue type))) gvalue)) (defun gvalue-free (gvalue &optional (unset-p t)) @@ -55,7 +57,7 @@ (defun gvalue-free (gvalue &optional (unset-p t)) (deallocate-memory gvalue))) (defun gvalue-type (gvalue) - (type-from-number (system:sap-ref-32 gvalue 0))) + (type-from-number (sap-ref-32 gvalue 0))) (defun gvalue-get (gvalue) (funcall (reader-function (gvalue-type gvalue)) @@ -66,6 +68,19 @@ (defun gvalue-set (gvalue value) value gvalue +gvalue-value-offset+) value) +(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)))) (deftype param-flag-type () @@ -81,8 +96,7 @@ (eval-when (:compile-toplevel :load-toplevel :execute) (defclass param-spec-class (ginstance-class) ()) - (defmethod validate-superclass - ((class param-spec-class) (super pcl::standard-class)) + (defmethod validate-superclass ((class param-spec-class) (super standard-class)) t ;(subtypep (class-name super) 'param) )) @@ -125,13 +139,14 @@ (defclass param (ginstance) :allocation :virtual :getter "g_param_spec_get_nick" :reader param-nickname - :type string) + :type (copy-of string)) (documentation :allocation :virtual :getter "g_param_spec_get_blurb" :reader param-documentation - :type string)) - (:metaclass param-spec-class)) + :type (copy-of string))) + (:metaclass param-spec-class) + (:gtype "GParam")) (defclass param-char (param) @@ -147,7 +162,8 @@ (default-value :allocation :alien :reader param-char-default-value :type char)) - (:metaclass param-spec-class)) + (:metaclass param-spec-class) + (:gtype "GParamChar")) (defclass param-unsigned-char (param) ( @@ -165,14 +181,15 @@ (defclass param-unsigned-char (param) ; :type unsigned-char) ) (:metaclass param-spec-class) - (:alien-name "GParamUChar")) + (:gtype "GParamUChar")) (defclass param-boolean (param) ((default-value :allocation :alien :reader param-boolean-default-value :type boolean)) - (:metaclass param-spec-class)) + (:metaclass param-spec-class) + (:gtype "GParamBoolean")) (defclass param-int (param) ((minimum @@ -187,7 +204,8 @@ (default-value :allocation :alien :reader param-int-default-value :type int)) - (:metaclass param-spec-class)) + (:metaclass param-spec-class) + (:gtype "GParamInt")) (defclass param-unsigned-int (param) ((minimum @@ -203,7 +221,7 @@ (default-value :reader param-unsigned-int-default-value :type unsigned-int)) (:metaclass param-spec-class) - (:alien-name "GParamUInt")) + (:gtype "GParamUInt")) (defclass param-long (param) ((minimum @@ -218,7 +236,8 @@ (default-value :allocation :alien :reader param-long-default-value :type long)) - (:metaclass param-spec-class)) + (:metaclass param-spec-class) + (:gtype "GParam")) (defclass param-unsigned-long (param) ((minimum @@ -234,11 +253,12 @@ (default-value :reader param-unsigned-long-default-value :type unsigned-long)) (:metaclass param-spec-class) - (:alien-name "GParamULong")) + (:gtype "GParamULong")) (defclass param-unichar (param) () - (:metaclass param-spec-class)) + (:metaclass param-spec-class) + (:gtype "GParamUnichar")) (defclass param-enum (param) ((class @@ -249,7 +269,8 @@ (default-value :allocation :alien :reader param-enum-default-value :type long)) - (:metaclass param-spec-class)) + (:metaclass param-spec-class) + (:gtype "GParamEnum")) (defclass param-flags (param) ((class @@ -260,7 +281,8 @@ (default-value :allocation :alien :reader param-flags-default-value :type long)) - (:metaclass param-spec-class)) + (:metaclass param-spec-class) + (:gtype "GParamFlags")) (defclass param-single-float (param) ((minimum @@ -280,7 +302,7 @@ (default-value :reader param-single-float-epsilon :type single-float)) (:metaclass param-spec-class) - (:alien-name "GParamFloat")) + (:gtype "GParamFloat")) (defclass param-double-float (param) ((minimum @@ -300,26 +322,30 @@ (default-value :reader param-double-float-epsilon :type double-float)) (:metaclass param-spec-class) - (:alien-name "GParamDouble")) + (:gtype "GParamDouble")) (defclass param-string (param) ((default-value :allocation :alien :reader param-string-default-value :type string)) - (:metaclass param-spec-class)) + (:metaclass param-spec-class) + (:gtype "GParamString")) (defclass param-param (param) () - (:metaclass param-spec-class)) + (:metaclass param-spec-class) + (:gtype "GParamParam")) (defclass param-boxed (param) () - (:metaclass param-spec-class)) + (:metaclass param-spec-class) + (:gtype "GParamBoxed")) (defclass param-pointer (param) () - (:metaclass param-spec-class)) + (:metaclass param-spec-class) + (:gtype "GParamPointer")) (defclass param-value-array (param) ((element-spec @@ -330,12 +356,15 @@ (defclass param-value-array (param) :allocation :alien :reader param-value-array-length :type unsigned-int)) - (:metaclass param-spec-class)) - -;; (defclass param-closure (param) -;; () -;; (:metaclass param-spec-class)) + (:metaclass param-spec-class) + (:gtype "GParamValueArray")) (defclass param-object (param) () - (:metaclass param-spec-class)) + (:metaclass param-spec-class) + (:gtype "GParamObject")) + +(defclass param-overrride (param) + () + (:metaclass param-spec-class) + (:gtype "GParamOverride"))