[racket-dev] draw-text always pixel aligned?

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Mon Dec 16 12:26:09 EST 2013

I'm not sure about that part. I've confirmed that the cairo_move_to()
call just before pango_cairo_show_layout_line() varies the "y" argument
by 0.1, and I don't see any options that would affect vertical
alignment.

At Mon, 16 Dec 2013 10:37:39 -0500, David Vanderson wrote:
> That makes sense, but the picture with 'unaligned seems strange 
> (attached). It looks like each individual character is being pixel 
> aligned, and also the vertical pixel drop doesn't happen until it's 0.7 
> pixels down. Does this make sense?
> 
> On 12/16/2013 08:15 AM, Matthew Flatt wrote:
> > Did you mean to pass 'unaligned instead of 'aligned as the last
> > argument to `find-or-create-font`? That should disable pixel alignment.
> >
> > At Mon, 16 Dec 2013 01:28:23 -0500, David Vanderson wrote:
> >> Hello,
> >>
> >> It seems that draw-text always pixel-aligns its text. In the example
> >> below, I draw a black "hello" on top of a red one, with a pixel offset
> >> of 0, 0.1, 0.2, . . . 0.9. At least for me, I see no change until 0.5,
> >> where the black text jumps a whole pixel (see attached image).
> >>
> >> Am I missing something? Do others see this behavior?  (I'm on Linux)
> >>
> >> Thanks,
> >> Dave
> >>
> >>
> >> #lang racket/gui
> >>
> >> (define (draw-text dc offset)
> >>     (send dc set-text-foreground "red")
> >>     (send dc draw-text "hello" 0 0 #t)
> >>     (send dc set-text-foreground "black")
> >>     (send dc draw-text "hello" offset offset #t))
> >>
> >> (define (draw-screen canvas dc)
> >>     (send dc set-smoothing 'smoothed)
> >>     (send dc set-font
> >>           (send the-font-list find-or-create-font
> >>                 12 'default 'normal 'normal #f 'smoothed #f 'aligned))
> >>     (send dc set-initial-matrix (vector 1 0 0 1 0 0))
> >>     (for ((i 10))
> >>       (draw-text dc (/ i 10.0))
> >>       (send dc translate 50 0)))
> >>
> >> (define frame (new frame% (label "Test draw-text")))
> >>
> >> (define canvas
> >>     (new canvas%
> >>          (parent frame)
> >>          (min-width 500)
> >>          (min-height 100)
> >>          (paint-callback draw-screen)))
> >>
> >> (send frame show #t)
> >
> 
> 
> ------------------------------------------------------------------------------
> [image/png "draw-text2-unaligned.png"] [~/Desktop & open] [~/Temp & open]
> .

Posted on the dev mailing list.