[mcclim-cvs] CVS mcclim

gbaumann gbaumann at common-lisp.net
Sat Aug 1 21:27:14 UTC 2009


Update of /project/mcclim/cvsroot/mcclim
In directory cl-net:/tmp/cvs-serv4992

Modified Files:
	package.lisp panes.lisp 
Log Message:
I like my scroll bars left, Hefner wants them right. So I made it
tweakable. Default is right though.

CLIM-EXTENSIONS:*DEFAULT-VERTICAL-SCROLL-BAR-POSITION*
    New variable^Wparameter intented to be settable by the user.

VERTICAL-SCROLL-BAR-POSITION slot of SCROLLER-PANE
:VERTICAL-SCROLL-BAR-POSITION init arg of SCROLLER-PANE
    New.

(ALLOCATE-SPACE SCROLLER-PANE T T)
    Use it. Do not use *SCROLLBAR-THICKNESS*, but rely on the space
    requirements of the scroll bars.



--- /project/mcclim/cvsroot/mcclim/package.lisp	2009/08/01 16:10:32	1.71
+++ /project/mcclim/cvsroot/mcclim/package.lisp	2009/08/01 21:27:13	1.72
@@ -1973,7 +1973,8 @@
 
    #:define-bitmap-file-reader
    #:unsupported-bitmap-format
-   #:bitmap-format))
+   #:bitmap-format
+   #:*default-vertical-scroll-bar-position*))
 
 ;;; Symbols that must be defined by a backend.
 ;;;
--- /project/mcclim/cvsroot/mcclim/panes.lisp	2009/06/03 20:33:16	1.195
+++ /project/mcclim/cvsroot/mcclim/panes.lisp	2009/08/01 21:27:13	1.196
@@ -27,7 +27,7 @@
 ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 ;;; Boston, MA  02111-1307  USA.
 
-;;; $Id: panes.lisp,v 1.195 2009/06/03 20:33:16 ahefner Exp $
+;;; $Id: panes.lisp,v 1.196 2009/08/01 21:27:13 gbaumann Exp $
 
 (in-package :clim-internals)
 
@@ -1929,6 +1929,13 @@
 
 (defparameter *scrollbar-thickness* 17)
 
+(defvar clim-extensions:*default-vertical-scroll-bar-position*
+  :right
+  "Default for the :VERTICAL-SCROLL-BAR-POSITION init arg of a
+   SCROLLER-PANE. Set it to :LEFT to have the vertical scroll bar of a
+   SCROLLER-PANE appear on the ergonomic left hand side, or leave set to
+   :RIGHT to have it on the distant right hand side of the scroller.")
+
 (defclass scroller-pane (composite-pane)
   ((scroll-bar :type scroll-bar-spec ; (member t :vertical :horizontal nil)
                ;; ### Note: I added NIL here, so that the application
@@ -1951,7 +1958,13 @@
    (vscrollbar :initform nil)
    (hscrollbar :initform nil)
    (suggested-width  :initform 300 :initarg :suggested-width)
-   (suggested-height :initform 300 :initarg :suggested-height))
+   (suggested-height :initform 300 :initarg :suggested-height)
+   (vertical-scroll-bar-position
+    :initform clim-extensions:*default-vertical-scroll-bar-position*
+    :initarg :vertical-scroll-bar-position
+    :type (member :left :right)
+    :documentation "Whether to put the vertical scroll bar on the left hand or
+                    right hand side of the scroller pane."))
   (:default-initargs
    :x-spacing 4
    :y-spacing 4))
@@ -2028,23 +2041,29 @@
         (make-space-requirement))))
 
 (defmethod allocate-space ((pane scroller-pane) width height)
-  (with-slots (viewport vscrollbar hscrollbar x-spacing y-spacing) pane
-    (let ((viewport-width  (if vscrollbar (- width  *scrollbar-thickness*) width))
-          (viewport-height (if hscrollbar (- height *scrollbar-thickness*) height)))
-      
+  (with-slots (viewport vscrollbar hscrollbar x-spacing y-spacing vertical-scroll-bar-position) pane
+    (let* ((vsbar-width (if vscrollbar (space-requirement-width (compose-space vscrollbar)) 0))
+           (hsbar-height (if hscrollbar (space-requirement-height (compose-space hscrollbar)) 0))
+           (viewport-width  (- width vsbar-width))
+           (viewport-height (- height hsbar-height)))
       (when vscrollbar
-        (setf (sheet-transformation vscrollbar)
-              (make-translation-transformation (- width *scrollbar-thickness*) 0))
+        (move-sheet vscrollbar
+                    (ecase vertical-scroll-bar-position
+                      (:left 0)
+                      (:right (- width vsbar-width)))
+                    0)
         (allocate-space vscrollbar
-                        *scrollbar-thickness*
-                        (if hscrollbar (- height *scrollbar-thickness*) height)))
+                        vsbar-width
+                        (- height hsbar-height)))
       (when hscrollbar
         (move-sheet hscrollbar
-		    0
+                    (ecase vertical-scroll-bar-position
+                      (:left vsbar-width)
+                      (:right 0))
                     (- height *scrollbar-thickness*))
         (allocate-space hscrollbar
-                        (if vscrollbar (- width *scrollbar-thickness*) width)
-                        *scrollbar-thickness*))
+                        (- width vsbar-width)
+                        hsbar-height))
       ;;
       ;; Recalculate the gadget-values of the scrollbars
       ;;
@@ -2073,10 +2092,12 @@
                            max))))
 	  (setf (scroll-bar-values hscrollbar) (values min max ts val))))
       (when viewport
-        (setf (sheet-transformation viewport)
-              (make-translation-transformation
-                   (+ x-spacing 0)
-                   (+ y-spacing 0)))
+        (move-sheet viewport
+                    (+ x-spacing
+                       (ecase vertical-scroll-bar-position
+                         (:left vsbar-width)
+                         (:right 0)))
+                    (+ y-spacing 0))
         (allocate-space viewport
                         (- viewport-width (* 2 x-spacing))
                         (- viewport-height (* 2 y-spacing)))))))





More information about the Mcclim-cvs mailing list