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

2013-12-17 Thread David Vanderson
Update - according to the cairo developers, this is a limitation of the 
current implementation of cairo, so there's nothing to be fixed. Thanks 
again for looking into it!



As a workaround, they suggested creating a path from the text and 
filling it, which works well:


#lang racket/gui

(define (draw-text dc offset)
  (send dc set-brush "red" 'solid)
  (send dc set-pen "red" 1 'transparent)

  (let ((p (new dc-path%)))
(send p text-outline (send dc get-font) "hello" 0 0)
(send dc draw-path p 0 0))

  (send dc set-brush "black" 'solid)
  (send dc set-pen "black" 1 'transparent)

  (let ((p (new dc-path%)))
(send p text-outline (send dc get-font) "hello" 0 0)
(send dc draw-path p offset offset))

  (send dc set-text-foreground "red")
  (send dc draw-text "hello" 0 20 #t)
  (send dc set-text-foreground "black")
  (send dc draw-text "hello" offset (+ 20 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)





On 12/16/2013 02:16 PM, David Vanderson wrote:

Thank you - I'll look into it.

On 12/16/2013 02:14 PM, Matthew Flatt wrote:

Yes, it's the same on Mac and Windows.

At Mon, 16 Dec 2013 14:12:18 -0500, David Vanderson wrote:
Thanks for looking into it. Can you confirm if you see similar 
output on

a different platform (Mac or Win)?

On 12/16/2013 12:26 PM, Matthew Flatt wrote:

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]

.




_
 Racket Developers list:
 http://lists.racket-lang.org/dev


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

2013-12-16 Thread David Vanderson

Thank you - I'll look into it.

On 12/16/2013 02:14 PM, Matthew Flatt wrote:

Yes, it's the same on Mac and Windows.

At Mon, 16 Dec 2013 14:12:18 -0500, David Vanderson wrote:

Thanks for looking into it. Can you confirm if you see similar output on
a different platform (Mac or Win)?

On 12/16/2013 12:26 PM, Matthew Flatt wrote:

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]
.


_
 Racket Developers list:
 http://lists.racket-lang.org/dev


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

2013-12-16 Thread Matthew Flatt
Yes, it's the same on Mac and Windows.

At Mon, 16 Dec 2013 14:12:18 -0500, David Vanderson wrote:
> Thanks for looking into it. Can you confirm if you see similar output on 
> a different platform (Mac or Win)?
> 
> On 12/16/2013 12:26 PM, Matthew Flatt wrote:
> > 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]
> >> .
_
  Racket Developers list:
  http://lists.racket-lang.org/dev


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

2013-12-16 Thread David Vanderson
Thanks for looking into it. Can you confirm if you see similar output on 
a different platform (Mac or Win)?


On 12/16/2013 12:26 PM, Matthew Flatt wrote:

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]
.


_
 Racket Developers list:
 http://lists.racket-lang.org/dev


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

2013-12-16 Thread Matthew Flatt
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]
> .
_
  Racket Developers list:
  http://lists.racket-lang.org/dev


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

2013-12-16 Thread David Vanderson
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)




<>_
  Racket Developers list:
  http://lists.racket-lang.org/dev


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

2013-12-16 Thread Matthew Flatt
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)

_
  Racket Developers list:
  http://lists.racket-lang.org/dev


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

2013-12-15 Thread David Vanderson

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)
<>_
  Racket Developers list:
  http://lists.racket-lang.org/dev