diff --git a/gui-lib/mred/private/wx/gtk/item.rkt b/gui-lib/mred/private/wx/gtk/item.rkt index f38d8074..8dc95ee7 100644 --- a/gui-lib/mred/private/wx/gtk/item.rkt +++ b/gui-lib/mred/private/wx/gtk/item.rkt @@ -26,10 +26,14 @@ (when font (let* ([target-size (cond - [gtk3? - ;; Gtk3 ignores the "size-in-pixels" part of a - ;; font spec, so we have to adjust the text size - ;; to compensate. + [(and gtk3? + ((gtk_get_minor_version) . < . 22)) + ;; Prior to version 3.22, GTK+3 ignores the + ;; "size-in-pixels" part of a font spec, so we have to + ;; adjust the text size to compensate. + ;; With 3.22 and later, a size in points is effectively + ;; rounded to an integer absolute size; the `get-control-font-size` + ;; function takes that rounding into account. (* (send font get-size) (/ 72.0 (pango_cairo_font_map_get_resolution diff --git a/gui-lib/mred/private/wx/gtk/procs.rkt b/gui-lib/mred/private/wx/gtk/procs.rkt index f05a92c1..db6bd448 100644 --- a/gui-lib/mred/private/wx/gtk/procs.rkt +++ b/gui-lib/mred/private/wx/gtk/procs.rkt @@ -116,8 +116,17 @@ (g_free f)))))) default)) (define (get-control-font-size) - (get-control-font (lambda (m) (string->number (cadr m))) - 10)) + (define s (get-control-font (lambda (m) (string->number (cadr m))) + 10)) + (cond + [(and gtk3? + ((gtk_get_minor_version) . >= . 22)) + ;; As of version 3.22, a size in points ends up rounded + ;; to an integral absolute size for 96 DPI; see also + ;; `install-control-font` + (* (round (* s (/ 96.0 72.0))) (/ 72.0 96.0))] + [else s])) + (define (get-control-font-face) (get-control-font (lambda (m) (car m)) "Sans")) diff --git a/gui-lib/mred/private/wx/gtk/utils.rkt b/gui-lib/mred/private/wx/gtk/utils.rkt index 85dc57d8..b698ec65 100644 --- a/gui-lib/mred/private/wx/gtk/utils.rkt +++ b/gui-lib/mred/private/wx/gtk/utils.rkt @@ -51,6 +51,8 @@ gdk_screen_get_default + gtk_get_minor_version + ;; for declaring derived structures: _GtkObject @@ -200,6 +202,8 @@ (define-gdk gdk_screen_get_default (_fun -> _GdkScreen)) +(define-gtk gtk_get_minor_version (_fun -> _uint)) + (define (mnemonic-string orig-s) (string-join (for/list ([s (in-list (regexp-split #rx"&&" orig-s))])