Wow, how did I write that much and not notice `get-client-size`, which is 
exactly what I want? The documentation is fine, apparently I just can't 
read today!

On Saturday, July 24, 2021 at 10:55:58 AM UTC-5 Ryan Kramer wrote:

> The following program looks "correct" when my Windows display scaling is 
> set to 100%, and looks "wrong" when set to anything higher than 100%. By 
> "correct" I mean that the 4 squares meet in the center of the canvas, 
> stretched to the maximum size possible that the canvas width and height 
> will allow.
>
> What is interesting is that I can make the program look correct by 
> immediately scaling the values returned from `get-scaled-client-size`. For 
> example, if my display is set to 150%, I can make the program look correct 
> by immediately multiplying the returned width and height by 2/3, because 
> 100% is 2/3 of 150%. But right now I have to hard-code the 2/3 factor. Is 
> there a way to get that 2/3 factor programmatically in Racket? Or (even 
> better), is there something else I should be calling instead of 
> `get-scaled-client-size` that would return the dimensions I want?
>
> This is Racket CS 8.0.0.11 on Windows. Let me know if you want 
> screenshots. Thanks in advance.
>
>
> #lang racket/gui
>
> (require pict)
>
> (define frame
>   (new frame%
>        [label "Scale Test"]))
>
> (define (paint canvas dc)
>   (define-values (w h) (send canvas get-scaled-client-size))
>   (define-values (size x-offset y-offset)
>     (if (> w h)
>         (values h (/ (- w h) 2) 0)
>         (values w 0 (/ (- h w) 2))))
>   (println (list w h size x-offset y-offset))
>   (for ([x (list x-offset (+ x-offset (/ size 2)))]
>         #:when #t
>         [y (list y-offset (+ y-offset (/ size 2)))])
>     (send dc draw-rectangle x y (/ size 2) (/ size 2))))
>
> (define canvas
>   (new canvas%
>        [parent frame]
>        [paint-callback paint]))
>
> (send frame show #t)
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/31a9adf4-c257-4871-88a5-6a01e9857f43n%40googlegroups.com.

Reply via email to