mirror of
https://github.com/darlinghq/darling-coregraphics.git
synced 2024-11-26 21:50:27 +00:00
486503c3d7
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/opal/trunk@31144 72102866-910b-0410-8b05-ffd578937521
75 lines
3.1 KiB
Plaintext
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.
|