[cairo] Discussion: LCD Filtering API

Lance Hepler nlhepler at gmail.com
Wed Feb 4 01:12:27 PST 2009


Hi Behdad,
Attached is a patch that does what you suggest, with a few differences.
It's an initial stab, but it works as expected.

Included in this patch are some changes to cairo-ft-font.c that hooks into
this private function.
I know that's not what you want, since you wanted to hook it into
scaled-font, but I used this as a way to test it immediately.

Please review, comment, criticize. I learned a lot writing this patch.

Lance

On Mon, Feb 2, 2009 at 3:15 AM, Behdad Esfahbod <behdad at behdad.org> wrote:

> Yeah, ARGB32 in the input doesn't make sense.  Now lets stop designing and
> writing code over email. :)
>
> behdad
>
> Lance Hepler wrote:
> > Hi Behdad,
> >
> > Haha! Good thing. I've already started working on it. And that's about
> > the way I've set it up.
> > One question I have is whether I'll need to handle ARGB32 surfaces, as
> > the current code simply handles 3x (width/height) CAIRO_FORMAT_A8
> > surfaces. Should I just assume we'll only need it for the A8 case and
> > assert so in the function? Expanding the code to filter ARGB32 surfaces
> > would be ... tricky.
> >
> > Lance
> >
> > On Sat, Jan 31, 2009 at 10:35 PM, Behdad Esfahbod <behdad at behdad.org
> > <mailto:behdad at behdad.org>> wrote:
> >
> >     Hi Lance,
> >
> >     The filtering should go into a file of its own for now.
> >      "cairo-lcd-filter.c"
> >     works for me.  The public API will look like what was committed and
> >     reverted.
> >      The main function in that file will take a cairo image surface and a
> >     filtering mode and subpixel order, and returns a new surface that
> >     has the
> >     filtering results...
> >
> >     The rest of the work will be done in cairo-scaled-font.c.  Note that
> >     I need to
> >     do some code reshuffling before this can be hooked up.
> >
> >     Thanks,
> >     behdad
> >
> >     Lance Hepler wrote:
> >     > Hi Owen,
> >     >
> >     > It seems that Behdad is not interested in disturbing the ability to
> do
> >     > native-style rendering. He's interested in making it possible to do
> >     > rasterization in cairo so that animation of text can be done well.
> >     This
> >     > is an excellent point.
> >     >
> >     > I don't see any issues in that at all. The question is, how/where
> do I
> >     > want to put a new file/funtions that contains the lcd filtering
> code
> >     > that I've ripped from freetype? And how do we want this API to
> look,
> >     > even if we keep it private for cairo until we're happy with it?
> >     >
> >     > I'm perfectly fine ripping out the sections of freetype that do the
> >     > filtering (I'm sorry D. Turner!), making another file (seems best,
> >     since
> >     > we want this filtering available for all backends, not just
> freetype)
> >     > for doing lcd filtering in the cairo src directory, and hooking the
> >     > calls in cairo-ft-font.c to use this code to filter instead of
> >     Freetype.
> >     > Looking over ftlcdfil.c it doesn't seem to be too difficult to
> adjust
> >     > the code to work within a cairo-only context. As long as we keep
> >     pulling
> >     > in the preferences from fontconfig, there shouldn't be any
> >     regressions,
> >     > and I don't foresee tremendous difficulty in making this
> >     adjustment. Of
> >     > course, I haven't looked at the formats we're using to keep the
> other
> >     > backends bitmapped glyphs, so maybe I'm just naive.
> >     >
> >     > Anyways, doing this now will give us the immediate benefit of
> having
> >     > these improved filtering methods finally upstream, which would be
> of
> >     > benefit to the unnamed distros that are currently using one version
> of
> >     > the 10301 patch or another. That, and I'm sure users of those
> distros
> >     > that are not using the 10301 patches will benefit from/be grateful
> for
> >     > the improved font rendering. Really, I just want to go the route
> that
> >     > will upstream these filtering abilities as soon as possible.
> >     >
> >     > I am really interested and anxious to see the putative improvements
> in
> >     > font rendering Behdad has planned (subpixel positioning for
> >     > unhinted/slightly-hinted fonts might be really nice! (they aren't
> >     really
> >     > affected by the lsb/rsb deltas)).
> >     >
> >     > Nicolaus (Lance)
> >     >
> >     > On Thu, Jan 29, 2009 at 11:48 AM, Owen Taylor <otaylor at redhat.com
> >     <mailto:otaylor at redhat.com>
> >     > <mailto:otaylor at redhat.com <mailto:otaylor at redhat.com>>> wrote:
> >     >
> >     >     On Thu, 2009-01-29 at 01:39 -0500, Behdad Esfahbod wrote:
> >     >     > Hi Lance,
> >     >     >
> >     >     > I agree with most of your positions.  However, my long term
> plan
> >     >     is to move
> >     >     > glyph rasterization away from FreeType and into cairo, and
> that
> >     >     includes
> >     >     > subpixel rendering.  I think the API should wait till that
> >     >     happens.  In that
> >     >     > case Carl's remaining issues will be moot as we can do the
> same
> >     >     filtering on
> >     >     > all platforms and it will not be FreeType-specific anymore.
> >     >
> >     >     One thing to be concerned about is that matching the system
> >     rendering.
> >     >     Whether text looks good is not just a matter of whether it
> >     looks good in
> >     >     isolation, but whether it matches other text on the screen in
> >     contrast
> >     >     and other characteristics.
> >     >
> >     >     For example, if you take some text rendered on the Mac, and
> >     drop it onto
> >     >     a Windows desktop, the typical reaction will be that it is
> >     fuzzy. Taking
> >     >     text the other way may produce complaints about letter shapes
> >     or color
> >     >     fringing.
> >     >
> >     >     - Owen
> >     >
> >     >
> >     >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cairographics.org/archives/cairo/attachments/20090204/bde381bd/attachment-0001.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fix_lcd_filtering-NEWv90.patch
Type: application/octet-stream
Size: 30476 bytes
Desc: not available
Url : http://lists.cairographics.org/archives/cairo/attachments/20090204/bde381bd/attachment-0001.obj 


More information about the cairo mailing list