Update of /project/mcclim/cvsroot/mcclim/ESA In directory clnet:/tmp/cvs-serv13721/ESA
Modified Files: packages.lisp utils.lisp Log Message: Added new redisplay engine for Drei. Used by default. Does not yet talk to the syntax, so there is no syntax highlighting, but other syntax facilities work just fine. It is significantly faster than the old engine, but not yet Emacs-style fast. It supports variable-width fonts, lines of varying height (though lines are topline-adjusted at the moment) and even arbitrary buffer objects with reasonable performance.
--- /project/mcclim/cvsroot/mcclim/ESA/packages.lisp 2007/12/28 10:08:52 1.8 +++ /project/mcclim/cvsroot/mcclim/ESA/packages.lisp 2008/01/01 18:43:36 1.9 @@ -43,6 +43,7 @@ #:maptree #:subtype-compatible-p #:capitalize + #:ensure-array-size #:observable-mixin #:add-observer #:remove-observer #:observer-notified #:notify-observers --- /project/mcclim/cvsroot/mcclim/ESA/utils.lisp 2007/12/28 10:08:52 1.5 +++ /project/mcclim/cvsroot/mcclim/ESA/utils.lisp 2008/01/01 18:43:36 1.6 @@ -219,6 +219,20 @@ (setf (elt string 0) (char-upcase (elt string 0))) string)
+(defun ensure-array-size (array min-size new-elem-fn) + "Ensure that `array' is at least of size `min-size'. If `array' +needs to be resized, call `new-elem-fn' with no arguments to +generate the elements of the new cells in the array. Returns +`array'. Currently, this function only works when `array' is a +vector." + (when (< (length array) min-size) + (let ((old-length (length array))) + (setf array (adjust-array array + (max (* old-length 2) min-size))) + (loop for i from old-length below (length array) + do (setf (elt array i) (funcall new-elem-fn))))) + array) + (defclass observable-mixin () ((%observers :accessor observers :initform '()))