gtk frame% set-icon
original commit: ece405106b34fd772cda6ab43f9c0a50c86b3d4d
This commit is contained in:
parent
066057f0b4
commit
65bb68bc8f
|
@ -3,7 +3,7 @@
|
||||||
racket/class
|
racket/class
|
||||||
racket/promise
|
racket/promise
|
||||||
racket/runtime-path
|
racket/runtime-path
|
||||||
racket/draw/bitmap
|
racket/draw
|
||||||
(for-syntax (only-in racket/base quote))
|
(for-syntax (only-in racket/base quote))
|
||||||
"../../syntax.rkt"
|
"../../syntax.rkt"
|
||||||
"../../lock.rkt"
|
"../../lock.rkt"
|
||||||
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
(define _GList (_cpointer/null 'GList))
|
(define _GList (_cpointer/null 'GList))
|
||||||
(define-glib g_list_insert (_fun _GList _pointer _int -> _GList))
|
(define-glib g_list_insert (_fun _GList _pointer _int -> _GList))
|
||||||
|
(define-glib g_list_free (_fun _GList -> _void))
|
||||||
|
|
||||||
(define-gtk gtk_window_new (_fun _int -> _GtkWidget))
|
(define-gtk gtk_window_new (_fun _int -> _GtkWidget))
|
||||||
(define-gtk gtk_window_set_title (_fun _GtkWindow _string -> _void))
|
(define-gtk gtk_window_set_title (_fun _GtkWindow _string -> _void))
|
||||||
|
@ -104,7 +105,7 @@
|
||||||
(define-runtime-path plt-32x32-file '(lib "icons/plt-32x32.png"))
|
(define-runtime-path plt-32x32-file '(lib "icons/plt-32x32.png"))
|
||||||
(define-runtime-path plt-48x48-file '(lib "icons/plt-48x48.png"))
|
(define-runtime-path plt-48x48-file '(lib "icons/plt-48x48.png"))
|
||||||
|
|
||||||
(define icon-list
|
(define icon-pixbufs+glist
|
||||||
(delay
|
(delay
|
||||||
(let ([icons (map
|
(let ([icons (map
|
||||||
(lambda (fn)
|
(lambda (fn)
|
||||||
|
@ -112,8 +113,12 @@
|
||||||
(list plt-16x16-file
|
(list plt-16x16-file
|
||||||
plt-32x32-file
|
plt-32x32-file
|
||||||
plt-48x48-file))])
|
plt-48x48-file))])
|
||||||
|
(cons
|
||||||
|
;; keep pixbuf pointers to avoid GC:
|
||||||
|
icons
|
||||||
|
;; a glist:
|
||||||
(for/fold ([l #f]) ([i (in-list icons)])
|
(for/fold ([l #f]) ([i (in-list icons)])
|
||||||
(g_list_insert l i -1)))))
|
(g_list_insert l i -1))))))
|
||||||
|
|
||||||
(define frame%
|
(define frame%
|
||||||
(class (client-size-mixin window%)
|
(class (client-size-mixin window%)
|
||||||
|
@ -144,7 +149,7 @@
|
||||||
(gtk_widget_show panel-gtk)
|
(gtk_widget_show panel-gtk)
|
||||||
|
|
||||||
(unless is-dialog?
|
(unless is-dialog?
|
||||||
(gtk_window_set_icon_list gtk (force icon-list)))
|
(gtk_window_set_icon_list gtk (cdr (force icon-pixbufs+glist))))
|
||||||
|
|
||||||
(define/override (get-client-gtk) panel-gtk)
|
(define/override (get-client-gtk) panel-gtk)
|
||||||
(define/override (get-window-gtk) gtk)
|
(define/override (get-window-gtk) gtk)
|
||||||
|
@ -303,7 +308,42 @@
|
||||||
|
|
||||||
(define/augment (is-enabled-to-root?) #t)
|
(define/augment (is-enabled-to-root?) #t)
|
||||||
|
|
||||||
(define/public (set-icon bm mask [mode 'both]) (void)) ;; FIXME
|
(define big-icon #f)
|
||||||
|
(define small-icon #f)
|
||||||
|
(define/public (set-icon bm mask [mode 'both])
|
||||||
|
(let ([bm (if mask
|
||||||
|
(let* ([nbm (make-object bitmap%
|
||||||
|
(send bm get-width)
|
||||||
|
(send bm get-height)
|
||||||
|
#f
|
||||||
|
#t)]
|
||||||
|
[dc (make-object bitmap-dc% nbm)])
|
||||||
|
(send dc draw-bitmap bm 0 0
|
||||||
|
'solid (make-object color% "black")
|
||||||
|
mask)
|
||||||
|
(send dc set-bitmap #f)
|
||||||
|
nbm)
|
||||||
|
bm)])
|
||||||
|
(case mode
|
||||||
|
[(small) (set! small-icon bm)]
|
||||||
|
[(big) (set! big-icon bm)]
|
||||||
|
[(both)
|
||||||
|
(set! small-icon bm)
|
||||||
|
(set! big-icon bm)])
|
||||||
|
(let ([small-pixbuf
|
||||||
|
(if small-icon
|
||||||
|
(bitmap->pixbuf small-icon)
|
||||||
|
(car (car (force icon-pixbufs+glist))))]
|
||||||
|
[big-pixbufs
|
||||||
|
(if big-icon
|
||||||
|
(list (bitmap->pixbuf big-icon))
|
||||||
|
(cdr (car (force icon-pixbufs+glist))))])
|
||||||
|
(atomically
|
||||||
|
(let ([l (for/fold ([l #f]) ([i (cons small-pixbuf
|
||||||
|
big-pixbufs)])
|
||||||
|
(g_list_insert l i -1))])
|
||||||
|
(gtk_window_set_icon_list gtk l)
|
||||||
|
(g_list_free l))))))
|
||||||
|
|
||||||
(define/override (call-pre-on-event w e)
|
(define/override (call-pre-on-event w e)
|
||||||
(pre-on-event w e))
|
(pre-on-event w e))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user