FreeType & GSoC

The FreeType project has successfully participated at Google Summer of Code. Here is our ideas list for future years – if you have another one, please write to our mailing list so that we can discuss your suggestions, eventually adding them to this page.

If you are interested to participate as a student, please also contact us via the mailing list. It's probably best if you subscribe to it.

Before contacting us, however, you should get really acquainted with the topic you would like to start with – in particular, search the mailing list archive and/or do some googling! We don't want to answer questions like “I'm interested in your project, I want to contribute, please tell me what to do!” again and again…

Develop a test framework for checking FreeType's rendering output (started as a GSoC 2017 project, unfinished)

Right now, FreeType's rendering results of the current development version are not systematically compared to a baseline version. This is problematic, since rendering regressions can be very easily missed due to subtle differences.

The idea is to select a representative set of reference fonts from font corpora (which already exist mainly for fuzzing). The fonts are used to produce glyph images for various sizes and rendering modes (anti-aliased, B/W, native hinting, auto-hinting, etc.). FreeType can already produce MD5 checksums of glyph images as part of its debugging output; these values should be compared against a baseline version of rendering results. If there are differences, HTML pages should be generated that contain comparison images of the baseline's and the current development version's rendering result, ideally indicating how large the differences between the images are by using some yet to be defined measure.

Difficulty: medium. Requirements: C, Unix build tools. Potential mentors: Werner Lemberg, Alexei Podtelezhnikov, Toshiya Suzuki (FreeType).

Add support for the ‘SVG ’ OpenType table to render color fonts

FreeType currently doesn't have support for fonts that use SVG to render color glyphs. The task of this project would be as follows.

  • Evaluate the freely available SVG libraries that would fit the job best.
  • Investigate how to integrate this external library into FreeType. For example, it should be checked whether it makes sense to create a new font rendering module (which would act more or less as a wrapper to the external SVG library).
  • If the module approach doesn't fit, define FreeType API functions and hooks for transferring data from the font's ‘SVG ’ table to the external library. Ditto for transferring the resulting (bitmap) output back into FreeType.
  • Add the necessary infrastructure API stuff (for example, a function to test whether a font has SVG glyphs).

Difficulty: medium to high. Requirements: C, Unix build tools. Potential mentors: Werner Lemberg, Alexei Podtelezhnikov, Toshiya Suzuki (FreeType).

Improve the ‘ftinspect’ demo program

Right now, FreeType comes with a suite of small graphic tools to test the library, most notably ‘ftview’ and ‘ftgrid’. The used graphics library, while working more or less, is very archaic, not having any comfort that modern GUIs are providing.

To improve this, a new demo program called ‘ftinspect’ was started, based on the Qt GUI toolkit. However, the development is currently stalled, mainly for lack of time.

The idea is to finish ftinspect, handling all aspects of the other demo programs. Currently, it only provides the functionality of ‘ftgrid’.

If the student prefers, the Qt toolkit could be replaced with GTK.

Difficulty: medium. Requirements: C, C++, Qt, Unix build tools. Potential mentor: Werner Lemberg (FreeType).

Replace FreeType's tracing and debugging facilities with an external logging library

FreeType extensively uses a home-brewed tracing solution that mainly relies on the C preprocessor and the fprintf function printing to stderr. However, this simplistic approach is not adequate for all platforms, where stderr is not always easily accessible.

Many freely available tracing and logging libraries exist. It would be necessary to test and check which one meets FreeType's requirements. A few requirements have already been discussed in the mailing list. Note that this discussion is by no means exhaustive.

As a rough guideline, the project could be structured as follows.

  • Get accustomed to FreeType's current tracer/logger, all its current features, and how it is currently being used. Extract a few representative samples from FreeType to help with the next step.
  • Evaluate, compare, and discuss freely available tracing and logging libraries in respect to FreeType's current tracer/logger.
  • Replace the old tracer/logger with the new one within FreeType.
  • Write a brief but precise ‘how-to’ article for FreeType's website about using the new tracer/logger which is aimed at FreeType's developers.

Difficulty: medium. Requirements: C, C++, Unix and Windows build tools. Potential mentors: Werner Lemberg, Alexei Podtelezhnikov, Toshiya Suzuki (FreeType), Armin Hasitzka.

Do you have more ideas? Please write to our mailing list so that we can discuss your suggestions, eventually adding them to the list!

Last update: 6-Feb-2019