cocoa & gtk: fix set-label with bitmap on message%

Closes PR 11462

original commit: 04a4ad269fb446000bb463e793e6e8e16457499d
This commit is contained in:
Matthew Flatt 2010-11-26 11:55:32 -07:00
parent 86e4eed112
commit f7594ac5c4
3 changed files with 22 additions and 5 deletions

View File

@ -58,7 +58,7 @@
;; for keyword use
[font no-val])
(rename [super-set-label set-label])
(private-field [label lbl][callback cb])
(private-field [label lbl][callback cb] [is-bitmap? (lbl . is-a? . wx:bitmap%)])
(override
[get-label (lambda () label)]
[get-plain-label (lambda () (and (string? label) (wx:label->plain-label label)))]
@ -69,8 +69,12 @@
(let ([l (if (string? l)
(string->immutable-string l)
l)])
(send wx set-label l)
(set! label l))))])
(when (or (and is-bitmap?
(l . is-a? . wx:bitmap%))
(and (not is-bitmap?)
(string? l)))
(send wx set-label l)
(set! label l)))))])
(public
[hidden-child? (lambda () #f)] ; module-local method
[label-checker (lambda () check-label-string/false)] ; module-local method

View File

@ -94,7 +94,11 @@
[no-show? (memq 'deleted style)])
(define/override (set-label label)
(tellv (get-cocoa) setTitleWithMnemonic: #:type _NSString label))
(cond
[(string? label)
(tellv (get-cocoa) setTitleWithMnemonic: #:type _NSString label)]
[else
(tellv (get-cocoa) setImage: (bitmap->image label))]))
(define/override (gets-focus?) #f)

View File

@ -2,6 +2,7 @@
(require racket/class
ffi/unsafe
"../../syntax.rkt"
"../../lock.rkt"
"item.rkt"
"utils.rkt"
"types.rkt"
@ -21,6 +22,7 @@
(define-gtk gtk_label_set_text_with_mnemonic (_fun _GtkWidget _string -> _void))
(define-gtk gtk_image_new_from_stock (_fun _string _int -> _GtkWidget))
(define-gtk gtk_misc_set_alignment (_fun _GtkWidget _float _float -> _void))
(define-gtk gtk_image_set_from_pixbuf (_fun _GtkWidget _GdkPixbuf -> _void))
(define (mnemonic-string s)
(if (regexp-match? #rx"&" s)
@ -75,6 +77,13 @@
(set-auto-size)
(define/override (set-label s)
(gtk_label_set_text_with_mnemonic (get-gtk) (mnemonic-string s)))
(cond
[(string? s)
(gtk_label_set_text_with_mnemonic (get-gtk) (mnemonic-string s))]
[else
(let ([pixbuf (bitmap->pixbuf s)])
(atomically
(gtk_image_set_from_pixbuf (get-gtk) pixbuf)
(release-pixbuf pixbuf)))]))
(def/public-unimplemented get-font))