gui/gui-lib/mred/private/wx/gtk/resolution.rkt
Matthew Flatt 84a5dfb367 fix HiDPI detection
Work (in unscaled mode) on systems where the relevant
setting is not available.
2015-08-01 19:08:50 -06:00

39 lines
1.1 KiB
Racket

#lang racket/base
(require racket/promise
ffi/unsafe
"gsettings.rkt")
(provide get-interface-scale-factor)
(define (get-interface-scale-factor display-num)
(or (get-gnome-interface-scale-factor)
1.0))
(define interface-settings
(let ([interface-schema "org.gnome.desktop.interface"])
(delay
(and (g_settings_schema_source_lookup
(g_settings_schema_source_get_default)
interface-schema
#f)
(let* ([gs (g_settings_new interface-schema)]
[keys (g_settings_list_keys gs)])
(define (check s)
(for ([i (in-naturals)]
#:break (not (ptr-ref keys _pointer i)))
(equal? s (ptr-ref keys _string i))))
(and (check "scaling-factor")
(check "text-scaling-factor")
gs))))))
(define (get-gnome-interface-scale-factor)
(with-handlers ([exn:fail? (lambda (exn) #f)])
(define gs (force interface-settings))
(define v
(* (g_variant_get_uint32
(g_settings_get_value gs "scaling-factor"))
(g_variant_get_double
(g_settings_get_value gs "text-scaling-factor"))))
(g_object_unref gs)
v))