X-Git-Url: https://git.distorted.org.uk/~mdw/clg/blobdiff_plain/9b61d89db2fdaa61cbef5b9bff3c37dc9be4547f..8f12a0ff07ea6a101e778c09218d5efaf319d950:/gdk/gdk.lisp diff --git a/gdk/gdk.lisp b/gdk/gdk.lisp index 7bea418..48b2237 100644 --- a/gdk/gdk.lisp +++ b/gdk/gdk.lisp @@ -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: gdk.lisp,v 1.33 2007-01-14 23:24:11 espen Exp $ +;; $Id: gdk.lisp,v 1.38 2007-06-01 09:17:17 espen Exp $ (in-package "GDK") @@ -36,11 +36,21 @@ ;;; Display +#-debug-ref-counting +(defmethod print-object ((display display) stream) + (if (and (proxy-valid-p display) (slot-boundp display 'name)) + (print-unreadable-object (display stream :type t :identity nil) + (format stream "~S at 0x~X" + (display-name display) (pointer-address (foreign-location display)))) + (call-next-method))) + (defbinding %display-open () display (display-name (or null string))) (defun display-open (&optional display-name) - (let ((display (%display-open display-name))) + (let ((display (or + (%display-open display-name) + (error "Opening display failed: ~A" display-name)))) (unless (display-get-default) (display-set-default display)) display)) @@ -90,19 +100,40 @@ (&optional (display (display-get-default))) int (display display)) +(defun find-display (name) + (find name (list-displays) :key #'display-name :test #'string=)) + +(defun ensure-display (display) + (etypecase display + (null (display-get-default)) + (display display) + (string + (or + (find display (list-displays) :key #'display-name :test #'string=) + (display-open display))))) ;;; Display manager (defbinding display-get-default () display) -(defbinding (display-manager "gdk_display_manager_get") () display-manager) - (defbinding (display-set-default "gdk_display_manager_set_default_display") (display) nil ((display-manager) display-manager) (display display)) +(defbinding (list-displays "gdk_display_manager_list_displays") () + (gslist (static display)) + ((display-manager) display-manager)) + +;; The only purpose of exporting this is to make it possible for +;; applications to connect to the display-opened signal +(defbinding (display-manager "gdk_display_manager_get") () display-manager) + +(defbinding display-get-core-pointer + (&optional (display (display-get-default))) device + (display display)) + ;;; Primitive graphics structures (points, rectangles and regions) @@ -147,7 +178,6 @@ (location pointer)) (defmethod allocate-foreign ((region region) &key rectangle polygon fill-rule) - (declare (ignore initargs)) (cond ((and rectangle polygon) (error "Only one of the keyword arguments :RECTANGLE and :POLYGON can be specified")) @@ -159,7 +189,9 @@ (etypecase region (region region) ((or rectangle vector) - (make-instance 'region :rectangle (ensure-rectangle region))))) + (make-instance 'region :rectangle (ensure-rectangle region))) + (list + (make-instance 'region :polygon region)))) (defbinding region-get-clipbox (region &optional (rectangle (make-instance 'rectangle))) nil (region region) @@ -174,7 +206,7 @@ "Obtains the area covered by the region as a list of rectangles." (multiple-value-bind (location length) (%region-get-rectangles region) (prog1 - (map-c-vector 'list #'identity location 'point length :get) + (map-c-vector 'list #'identity location '(inlined rectangle) length :get) (deallocate-memory location)))) (defbinding region-empty-p () boolean @@ -204,19 +236,19 @@ (dy int)) (defbinding region-intersect (source1 source2) nil - (source1 region) + ((ensure-region source1) region :in/return) ((ensure-region source2) region)) (defbinding region-union (source1 source2) nil - (source1 region) + ((ensure-region source1) region :in/return) ((ensure-region source2) region)) (defbinding region-subtract (source1 source2) nil - (source1 region) + ((ensure-region source1) region :in/return) ((ensure-region source2) region)) (defbinding region-xor (source1 source2) nil - (source1 region) + ((ensure-region source1) region :in/return) ((ensure-region source2) region)) @@ -412,6 +444,13 @@ (dx int) (dy int)) +#?(pkg-exists-p "gtk+-2.0" :atleast-version "2.8.0") +(defbinding window-move-region (window region dx dy) nil + (window window) + ((ensure-region region) region) + (dx int) + (dy int)) + (defbinding window-reparent () nil (window window) (new-parent window) @@ -546,9 +585,9 @@ (defun window-shape-combine (window shape offset-x offset-y) (etypecase shape - (nil (%window-shape-combine-region window nil 0 0) + (null (%window-shape-combine-region window nil 0 0)) (region (%window-shape-combine-region window shape offset-x offset-y)) - (bitmask (window-shape-combine-mask window shape offset-x offset-y))))) + (bitmap (window-shape-combine-mask window shape offset-x offset-y)))) (defbinding window-set-child-shapes () nil (window window)) @@ -572,9 +611,9 @@ (defun window-input-shape-combine (window shape x y) (etypecase shape - (nil (%window-input-shape-combine-region window nil 0 0) - (region (%window-input-shape-combine-region window shape x y)) - (bitmask (%window-input-shape-combine-mask window shape x y))))) + (null (%window-input-shape-combine-region window nil 0 0)) + (region (%window-input-shape-combine-region window shape x y)) + (bitmap (%window-input-shape-combine-mask window shape x y)))) (defbinding window-set-child-input-shapes () nil (window window)) @@ -1017,6 +1056,9 @@ ;; (defbinding cairo-region () nil ;; (cr cairo:context) ;; (region region)) + + (defbinding (cairo-surface-get-window "clg_gdk_cairo_surface_get_window") () window + (surface cairo:surface)) )