@@ -156,13 +156,27 @@ rendering."
156
156
; ; + sparkline generator
157
157
158
158
; ; sparkline-types are internally a symbol with property
159
- ; ; 'symon-sparkline-type associated to a 2d-bool-vector.
159
+ ; ; 'symon-sparkline-type associated to a function that generates a
160
+ ; ; 2d-bool-vector.
161
+
162
+ (defvar symon--sparkline-base-cache
163
+ [nil symon-sparkline-width symon-sparkline-height nil])
164
+ (defun symon--get-sparkline-base ()
165
+ (unless (and (eq (aref symon--sparkline-base-cache 0 ) symon-sparkline-type)
166
+ (= (aref symon--sparkline-base-cache 1 ) symon-sparkline-width)
167
+ (= (aref symon--sparkline-base-cache 2 ) symon-sparkline-height))
168
+ (aset symon--sparkline-base-cache 0 symon-sparkline-type)
169
+ (aset symon--sparkline-base-cache 1 symon-sparkline-width)
170
+ (aset symon--sparkline-base-cache 2 symon-sparkline-height)
171
+ (aset symon--sparkline-base-cache 3
172
+ (funcall (get symon-sparkline-type 'symon-sparkline-type ))))
173
+ (copy-sequence (aref symon--sparkline-base-cache 3 )))
160
174
161
175
(defun symon--make-sparkline (list &optional minimum maximum )
162
176
" make sparkline image from LIST."
163
177
(let ((num-samples (length list )))
164
178
(unless (zerop num-samples)
165
- (let* ((image-data (copy-sequence ( get symon-sparkline-type 'symon -sparkline-type ) ))
179
+ (let* ((image-data (symon--get -sparkline-base ))
166
180
(maximum (if maximum (float maximum) 100.0 ))
167
181
(minimum (if minimum (float minimum) 0.0 ))
168
182
(topmargin (1- symon-sparkline-thickness))
@@ -615,28 +629,33 @@ while(1) \
615
629
(dotimes (y/2 (/ symon-sparkline-height 2 ))
616
630
(aset vec (+ (* (* y/2 2 ) symon-sparkline-width) x) t )))
617
631
618
- (put 'plain 'symon-sparkline-type
619
- (make-bool-vector (* symon-sparkline-height symon-sparkline-width) nil ))
620
-
621
- (put 'bounded 'symon-sparkline-type
622
- (let ((vec (copy-sequence (get 'plain 'symon-sparkline-type ))))
623
- (symon--sparkline-draw-horizontal-grid vec 0 )
624
- (symon--sparkline-draw-horizontal-grid vec (1- symon-sparkline-height))
625
- vec))
626
-
627
- (put 'boxed 'symon-sparkline-type
628
- (let ((vec (copy-sequence (get 'bounded 'symon-sparkline-type ))))
629
- (symon--sparkline-draw-vertical-grid vec 0 )
630
- (symon--sparkline-draw-vertical-grid vec (1- symon-sparkline-width))
631
- vec))
632
-
633
- (put 'gridded 'symon-sparkline-type
634
- (let ((vec (copy-sequence (get 'boxed 'symon-sparkline-type ))))
635
- (symon--sparkline-draw-horizontal-grid vec (/ symon-sparkline-height 2 ))
636
- (symon--sparkline-draw-vertical-grid vec (/ symon-sparkline-width 4 ))
637
- (symon--sparkline-draw-vertical-grid vec (/ symon-sparkline-width 2 ))
638
- (symon--sparkline-draw-vertical-grid vec (/ (* symon-sparkline-width 3 ) 4 ))
639
- vec))
632
+ (defun symon--make-plain-sparkline ()
633
+ (make-bool-vector (* symon-sparkline-height symon-sparkline-width) nil ))
634
+
635
+ (defun symon--make-bounded-sparkline ()
636
+ (let ((vec (symon--make-plain-sparkline)))
637
+ (symon--sparkline-draw-horizontal-grid vec 0 )
638
+ (symon--sparkline-draw-horizontal-grid vec (1- symon-sparkline-height))
639
+ vec))
640
+
641
+ (defun symon--make-boxed-sparkline ()
642
+ (let ((vec (symon--make-bounded-sparkline)))
643
+ (symon--sparkline-draw-vertical-grid vec 0 )
644
+ (symon--sparkline-draw-vertical-grid vec (1- symon-sparkline-width))
645
+ vec))
646
+
647
+ (defun symon--make-gridded-sparkline ()
648
+ (let ((vec (symon--make-boxed-sparkline)))
649
+ (symon--sparkline-draw-horizontal-grid vec (/ symon-sparkline-height 2 ))
650
+ (symon--sparkline-draw-vertical-grid vec (/ symon-sparkline-width 4 ))
651
+ (symon--sparkline-draw-vertical-grid vec (/ symon-sparkline-width 2 ))
652
+ (symon--sparkline-draw-vertical-grid vec (/ (* symon-sparkline-width 3 ) 4 ))
653
+ vec))
654
+
655
+ (put 'plain 'symon-sparkline-type 'symon--make-plain-sparkline )
656
+ (put 'bounded 'symon-sparkline-type 'symon--make-bounded-sparkline )
657
+ (put 'boxed 'symon-sparkline-type 'symon--make-boxed-sparkline )
658
+ (put 'gridded 'symon-sparkline-type 'symon--make-gridded-sparkline )
640
659
641
660
; ; + symon core
642
661
0 commit comments