changed integer-table into byte-vector-table. fixed color-list-find.
This commit is contained in:
parent
def9eb131a
commit
40f33cd2f3
|
@ -11,7 +11,7 @@
|
|||
(if maybe-color
|
||||
maybe-color
|
||||
(let ((color (really-make-color #f Xcolor)))
|
||||
(add-finalizer! color finalize-color)
|
||||
(add-finalizer! color color-list-delete!)
|
||||
(color-list-set! Xcolor color)
|
||||
color))))
|
||||
|
||||
|
@ -32,20 +32,25 @@
|
|||
(import-lambda-definition %extract-rgb-values (XColor)
|
||||
"Extract_RGB_Values")
|
||||
|
||||
;; finalize-color is called, when the garbage collector removes the last
|
||||
;; reference to the color from the heap. Then we can savely close the color
|
||||
;; and remove the weak-pointer from our list.
|
||||
|
||||
(define (finalize-color color)
|
||||
(let ((Xcolor (color-Xcolor color)))
|
||||
;;(destroy-color color)
|
||||
(color-set-Xcolor! color 'already-destroyed)
|
||||
(color-list-delete! Xcolor)))
|
||||
|
||||
;; All color records need to be saved in a weak-list, to have only one record
|
||||
;; for the same r,g,b value in the heap.
|
||||
|
||||
(define *weak-color-list* (make-integer-table))
|
||||
;; A color is generate with S48_MAKE_VALUE, thus it is a byte-vector that cannot
|
||||
;; be kept in an integer-table like the other datatypes. So let's create a
|
||||
;; byte-vector table.
|
||||
|
||||
(define make-byte-vector-table
|
||||
(make-table-maker eq?
|
||||
(lambda (bv)
|
||||
(let loop ((i (byte-vector-length bv))
|
||||
(bytes '()))
|
||||
(if (= i 0)
|
||||
(apply + bytes)
|
||||
(loop (- i 1)
|
||||
(cons (byte-vector-ref bv (- i 1))
|
||||
bytes)))))))
|
||||
|
||||
(define *weak-color-list* (make-byte-vector-table))
|
||||
|
||||
(define (color-list-find Xcolor)
|
||||
(let ((r (table-ref *weak-color-list* Xcolor)))
|
||||
|
@ -60,7 +65,7 @@
|
|||
(let ((color (weak-pointer-ref value)))
|
||||
(if (equal? (list r g b)
|
||||
(extract-rgb-values color))
|
||||
(return key))))
|
||||
(return color))))
|
||||
*weak-color-list*)
|
||||
#f)))
|
||||
|
||||
|
@ -68,5 +73,6 @@
|
|||
(let ((p (make-weak-pointer color)))
|
||||
(table-set! *weak-color-list* Xcolor p)))
|
||||
|
||||
(define (color-list-delete! Xcolor)
|
||||
(table-set! *weak-color-list* Xcolor #f))
|
||||
(define (color-list-delete! color)
|
||||
(table-set! *weak-color-list*
|
||||
(color-Xcolor color) #f))
|
||||
|
|
Loading…
Reference in New Issue