[racket-dev] [plt] Push #28009: master branch updated

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Sun Jan 5 15:47:30 EST 2014

After further exploration, I think I'm going to have to re-break your
program and give you a way to un-break it.

The issue is what "aligned" means:

 * "Pixel-aligned" makes drawing to a bitmap with a backing scale of 2
   (at scale 1) consistent with drawing at scale 2 to a bitmap with a
   backing scale --- as you wanted.

 * "Unit-aligned" makes drawing to a bitmap with a backing scale of 2
   more consistent with drawing to a bitmap with backing scale 1.

The change I pushed was essentially from "unit-aligned" to
"pixel-aligned", because "pixel-aligned" seems to better match the goal
of aligned drawing.

But "pixel-aligned" changes the meaning of alignment in a way that
breaks programs. For example, the caret in an editor becomes slightly
mangled on boundaries: it's normally drawn with a pen width of 1 in
unsmoothed/aligned mode at integer unit positions, which makes the
drawing shift left by one Retina pixel in Retina mode.

I think the solution is to allow a backing scale and an alignment scale
to be different in a drawing context. (More precisely, the backing
scale is a property of a drawing destination, while alignment scale is
a property of a drawing context.) By default, I think a DC's alignment
scale should be 1 (i.e., unit-aligned) for compatibility. For your
purposes, then, you'll need to explicitly set the DC's alignment scale
to 2 to match the backing scale.

Does that sound right/ok?

At Sun, 5 Jan 2014 08:55:12 -0700, Matthew Flatt wrote:
> Thanks --- I think I've fixed alignment for drawing to a bitmap with a
> backing scale.
> 
> At Fri, 03 Jan 2014 19:33:22 -0700, Neil Toronto wrote:
> > On 01/03/2014 06:12 PM, mflatt at racket-lang.org wrote:
> > > bd4d0b7 Matthew Flatt <mflatt at racket-lang.org> 2014-01-03 17:57
> > > :
> > > | if a bitmap has a non-1 backing scale, always draw smoothly to other 
> > contexts
> > > :
> > >    M pkgs/draw-pkgs/draw-lib/racket/draw/private/dc.rkt | 11 ++++++-----
> > 
> > Cool. It looks like this solved another issue as well: drawing 2x 
> > bitmaps in the REPL would smooth only intermittently.
> > 
> > There appears to be a problem with drawing in 'unsmoothed mode onto a 
> > bitmap with a backing scale. I've attached a program that demonstrates 
> > using a single polygon and with plots.
> > 
> > In the single polygon test, the triangle drawn onto the 2x bitmap is 
> > shifted down and to the right one pixel.
> > 
> > The code that draws a plot onto a 2x bitmap simulates the change I would 
> > make to Plot to take advantage of the new backing scale feature. The 
> > edge of the sphere looks lumpy, probably because polygons are drawn 
> > unsmoothed and their vertices are being snapped to the wrong places. The 
> > second plot shows how it's supposed to look.
> > 
> > The last two plots show how each looks before being scaled down. The 
> > lumpiness around the edge is probably easier to see this way.
> > 
> > Neil ⊥
> > 
> > 
> > 
> ------------------------------------------------------------------------------
> > [text/plain "unsmoothed-polygons.rkt"] [~/Desktop & open] [~/Temp & open]
> > _________________________
> >   Racket Developers list:
> >   http://lists.racket-lang.org/dev
> 
> _________________________
>   Racket Developers list:
>   http://lists.racket-lang.org/dev


Posted on the dev mailing list.