[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