Update of /project/mcclim/cvsroot/mcclim/Backends/gtkairo
In directory clnet:/tmp/cvs-serv29681
Modified Files:
BUGS ffi.lisp gadgets.lisp
Log Message:
Second attempt at label pane layouting.
(demodemo beautiful again, but probably not quite there yet, see bug 24)
* ffi.lisp: Regenerated.
* frame-manager.lisp (MAKE-PANE-2 GENERIC-OPTION-PANE): New.
* gadgets.lisp (LABEL-PANE-EXTRA-WIDTH, -HEIGHT): New slots.
((REALIZE-NATIVE-WIDGET GTK-LABEL-PANE)): Set the inner gtk widget
size according to our child's space requirements, then retrieve
the outer gtk widget's size and save the diferrence.
(COMPOSE-SPACE, *USE-FRONTEND-COMPOSE-SPACE*): Removed *u-f-c-s*
again. ((COMPOSE-SPACE GTK-LABEL-PANE)): Removed.
((ALLOCATE-SPACE GTK-LABEL-PANE)): New method, takes size
difference into account.
--- /project/mcclim/cvsroot/mcclim/Backends/gtkairo/BUGS 2006/11/05 18:49:13 1.12
+++ /project/mcclim/cvsroot/mcclim/Backends/gtkairo/BUGS 2006/11/25 21:11:33 1.13
@@ -124,3 +124,9 @@
interactor. Replacing the :min-height 800 in receivers.lisp with
:min-height 400 :max-height 400 fixes that, but CLX doesn't have the
same problem.
+
+24.
+ Weird problem in the text size test with the drei gadget in the label
+ pane: Resizing ends up resizing the one-line drei gadget, and doesn't
+ even do it in one step. Instead, it enlarges itself in a smooth
+ animation, taking several seconds to stabilize.
--- /project/mcclim/cvsroot/mcclim/Backends/gtkairo/ffi.lisp 2006/11/20 19:53:44 1.5
+++ /project/mcclim/cvsroot/mcclim/Backends/gtkairo/ffi.lisp 2006/11/25 21:11:33 1.6
@@ -1234,6 +1234,12 @@
(widget :pointer) ;GtkWidget *
)
+(defcfun "gtk_widget_get_child_requisition"
+ :void
+ (widget :pointer) ;GtkWidget *
+ (requisition :pointer) ;GtkRequisition *
+ )
+
(defcfun "gtk_widget_get_events"
:int
(widget :pointer) ;GtkWidget *
@@ -1246,6 +1252,13 @@
(y :pointer) ;gint *
)
+(defcfun "gtk_widget_get_size_request"
+ :void
+ (widget :pointer) ;GtkWidget *
+ (width :pointer) ;gint *
+ (height :pointer) ;gint *
+ )
+
(defcfun "gtk_widget_grab_focus"
:void
(widget :pointer) ;GtkWidget *
--- /project/mcclim/cvsroot/mcclim/Backends/gtkairo/gadgets.lisp 2006/11/19 18:08:16 1.12
+++ /project/mcclim/cvsroot/mcclim/Backends/gtkairo/gadgets.lisp 2006/11/25 21:11:33 1.13
@@ -74,7 +74,9 @@
(defclass gtk-hscrollbar (native-scrollbar) ())
(defclass gtk-label-pane (native-widget-mixin label-pane)
- ((label-pane-fixed :accessor label-pane-fixed)))
+ ((label-pane-fixed :accessor label-pane-fixed)
+ (label-pane-extra-width :accessor label-pane-extra-width)
+ (label-pane-extra-height :accessor label-pane-extra-height)))
;;;; Constructors
@@ -94,9 +96,21 @@
(defmethod realize-native-widget ((sheet gtk-label-pane))
(let ((frame (gtk_frame_new (climi::label-pane-label sheet)))
- (fixed (gtk_fixed_new)))
- (setf (label-pane-fixed sheet) fixed)
+ (fixed (gtk_fixed_new))
+ (child (car (sheet-children sheet))))
(gtk_container_add frame fixed)
+ (gtk_widget_show fixed)
+ (when child
+ (let* ((q (compose-space child))
+ (width1 (space-requirement-width q))
+ (height1 (space-requirement-height q)))
+ (gtk_widget_set_size_request fixed width1 height1)
+ (cffi:with-foreign-object (r 'gtkrequisition)
+ (gtk_widget_size_request frame r)
+ (cffi:with-foreign-slots ((width height) r gtkrequisition)
+ (setf (label-pane-extra-width sheet) (- width width1))
+ (setf (label-pane-extra-height sheet) (- height height1))))))
+ (setf (label-pane-fixed sheet) fixed)
frame))
(defmethod container-put ((parent gtk-label-pane) parent-widget child x y)
@@ -493,25 +507,21 @@
;;; COMPOSE-SPACE
-(defvar *use-frontend-compose-space* nil)
-
;; KLUDGE: this is getting called before the sheet has been realized.
(defmethod compose-space ((gadget native-widget-mixin) &key width height)
(declare (ignore width height))
- (if *use-frontend-compose-space*
- (let ((*use-frontend-compose-space* nil))
- (call-next-method))
- (let* ((widget (native-widget gadget))
- (widgetp widget))
- (unless widgetp
- (setf widget (realize-native-widget gadget)))
- (prog1
- (cffi:with-foreign-object (r 'gtkrequisition)
- (gtk_widget_size_request widget r)
- (cffi:with-foreign-slots ((width height) r gtkrequisition)
- (make-space-requirement :width width :height height)))
- (unless widgetp
- (gtk_widget_destroy widget))))))
+ (let* ((widget (native-widget gadget))
+ (widgetp widget))
+ (unless widgetp
+ (setf widget (realize-native-widget gadget)))
+ (prog1
+ (cffi:with-foreign-object (r 'gtkrequisition)
+ (gtk_widget_size_request widget r)
+ (cffi:with-foreign-slots ((width height) r gtkrequisition)
+ (make-space-requirement :width width :height height)))
+ (unless widgetp
+ (gtk_widget_destroy widget)
+ (setf (native-widget gadget) nil)))))
(defmethod compose-space ((gadget gtk-menu-bar) &key width height)
(declare (ignore width height))
@@ -531,12 +541,15 @@
:min-height height
:max-height height)))
(unless widgetp
- (gtk_widget_destroy widget)))))
+ (gtk_widget_destroy widget)
+ (setf (native-widget gadget) nil)))))
-(defmethod compose-space ((gadget gtk-label-pane) &key width height)
- (declare (ignore width height))
- (let ((*use-frontend-compose-space* t))
- (call-next-method)))
+(defmethod allocate-space ((pane label-pane) width height)
+ (when (sheet-children pane)
+ (move-sheet (first (sheet-children pane)) 0 0)
+ (allocate-space (first (sheet-children pane))
+ (- width (label-pane-extra-width pane))
+ (- height (label-pane-extra-height pane)))))
;;; Vermischtes