darling-coregraphics/TODO
ericwa 486503c3d7 Opal: fix typos
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/opal/trunk@31144 72102866-910b-0410-8b05-ffd578937521
2010-08-14 07:29:49 +00:00

75 lines
3.1 KiB
Plaintext

TODO:
=====
CGContext:
- Have a CGColorSpaceRef attached to the context (currently assumed to be
sRGB). This will enable things like:
- Creating a CGBitmapContext in a given color space, then drawing in it
to convert colors to that color space
- For people with wide-gamut monitors, we would want to set the appropriate
color space on the window CGContext.
- Shadow support is not finished.
- Image masks are not supported.
- Need to write a OPGState class that encapsulates the graphics state,
like CairoGState in -back.
- Could follow the example of GNUstep back, and factor
out Cairo specific code in CGContext to a OPCairoContext subclass.
PostScript/PDF parsing classes are unimplemented.
CGPattern and CGShading unimplemented
Image framework:
- Need to add TIFF writing
- The decoders/encoders could be polished:
- They should read colorspace info, now that Opal can take advantage of it
- They use the decoding libs to convert to RGBA32, but should pass though
higher bit-depth images in to Opal and let Opal convert.
- Could add a plugin which uses ImageMagick for more format support
Build system:
- Set up so that image plugins, and LCMS classes are only compiled if the
libraries are available.
CGFont:
- Need to refactor to share implementation with OpalText
CGGradient:
- Should clip the gradient to match Quartz output
Color space and image conversion:
- Add a placeholder color space conversion class which does non-color managed
conversions so that LCMS isn't a necessary dependency
OpalText:
- Still in very early stages. Here is a sketch of what needs to be done:
- Finish CTFont/CTFontDescriptor/CTFontCollection/CTFontManager with
both Fontconfig/Freetype and Windows GDI backends.
(The basics of CTFontDescriptor are currently working with the
Fontconfig backend)
- Implement CTTypesetter, the core part, which requires:
- Identifying permissible places to break a string with the Unicode
linebreaking algorithm
- Run GNU fribidi on the string if needed
- Deciding what font to use for each range in the string, doing fallback
where necessary
- Itemizing the attributed string using
-attributesAtIndex:longestEffectiveRange:inRange
to get the character runs
- Calling harfbuzz to do OpenType layout, yielding glyph runs and advances
(+ other simpler layout routines for non-OpenType fonts?)
- Finish CTFramesetter
Design principles to follow:
============================
- Build on public Cairo APIs as much as possible, use private APIs only if
there is no appropriate public one or would simplify implementation a lot
- Avoid duplicate representation of the same thing (should not store a copy
of what Cairo already stores to avoid getting out of sync or too many
conversions). Choose between Quartz or Cairo representation and convert to
that and then stick to it.
- Keep performance in mind. This is a low level part of the system that
should be fast, small and stable so follow K.I.S.S.
- Keep dependencies clean, only #include what you need and put functions
that depend on the same thing in one file.