Typo.
[cl-gtk2.git] / gtk-glext / gtkglext-drawing-area.lisp
index 47cf234..dcfd9ce 100644 (file)
@@ -1,16 +1,19 @@
 (in-package :gtkglext)
 
+(register-object-type-implementation "GtkGLDrawingArea" gl-drawing-area "GtkDrawingArea" nil nil)
+
 (defclass gl-drawing-area (drawing-area)
   ((on-expose :initarg :on-expose :initform nil :accessor gl-drawing-area-on-expose)
    (on-init :initarg :on-init :initform nil :accessor gl-drawing-area-on-init)
-   (on-resize :initarg :on-resize :initform nil :accessor gl-drawing-area-on-resize))
+   (on-resize :initarg :on-resize :initform nil :accessor gl-drawing-area-on-resize)
+   (realized-p :initform nil :accessor gl-drawing-area-realized-p))
   (:metaclass gobject-class)
   (:g-type-name . "GtkGLDrawingArea"))
 
 (defun resize (widget width height)
   (with-gl-context (widget)
     (if (gl-drawing-area-on-resize widget)
-        (funcall (gl-drawing-area-on-resize widget) widget width height))
+        (funcall (gl-drawing-area-on-resize widget) widget width height)
         (progn
           (gl:viewport 0 0 width height)
 
 
           ;; set modelview to identity
           (gl:matrix-mode :modelview)
-          (gl:load-identity))))
+          (gl:load-identity)))))
 
 (defun gl-drawing-area-configure (widget event)
   (declare (ignore event))
   (multiple-value-bind (width height)
       (gdk:drawable-get-size (widget-window widget))
     #+nil(format t "configure ~Dx~D~%" width height)
-    (when (widget-realized-p widget)
+    (when (gl-drawing-area-realized-p widget)
       (resize widget width height))))
 
 (defun gl-drawing-area-realize (widget)
   (bwhen (init-fn (gl-drawing-area-on-init widget))
     (with-gl-context (widget)
       (funcall init-fn widget)))
+  (setf (gl-drawing-area-realized-p widget) t)  
   (multiple-value-bind (width height)
       (gdk:drawable-get-size (widget-window widget))
     (resize widget width height))
   nil)
 
+(defun gl-drawing-area-unrealize (widget)
+  (setf (gl-drawing-area-realized-p widget) nil)
+  nil)
+
 (defun gl-drawing-area-exposed (widget event)
   (bwhen (draw-fn (gl-drawing-area-on-expose widget))
     (with-gl-context (widget)
                                         :rgba-type)
     (warn "set gl capability for ~A (with ~A) failed~%" widget *gl-config*)))
 
-(register-object-type-implementation "GtkGLDrawingArea" gl-drawing-area "GtkDrawingArea" nil nil)
-
 (defmethod initialize-instance :after ((widget gl-drawing-area) &key &allow-other-keys)
   (connect-signal widget "realize" #'gl-drawing-area-realize)
+  (connect-signal widget "unrealize" #'gl-drawing-area-unrealize)
   (connect-signal widget "expose-event" #'gl-drawing-area-exposed)
   (connect-signal widget "configure-event" #'gl-drawing-area-configure)
   (connect-signal widget "parent-set" #'gl-drawing-area-parent-set))