font-selector

Revision 4 as of 2008-07-02 04:00:47

Clear message

Summary

Develop a GUI application to manipulate the system-wide or user-based fontconfig configuration. This includes settings like font reordering for serif, sans-serif and monospace meta fonts, anti-aliasing, hinting and embedded bitmap handling.

Release Note

In the past users often complained about the default font settings in Ubuntu, however each user has different preferences. To have one font configuration which suits all users is simply impossible. Therefore we give the users a simple GUI tool to change the default font settings according to their liking. The setting which can be modified with this tool include: font reordering for serif, sans-serif and monospace meta fonts, anti-aliasing, hinting and embedded bitmap handling on a per-font basis.

Rationale

In the past users often complained about the default font settings in Ubuntu, however each user has different preferences. To have one font configuration which suits all users is simply impossible. We need to have a simple GUI interface to give the users the possibility to manipulate the default font settings according to their liking.

In detail, we currently have the following situation:

  1. fontconfig provides a low level method to configure and manipulate font settings
    1. distribution wide (/etc/fonts/conf.avail/ and /etc/fonts/conf.d/)
    2. system wide (/etc/fonts/local.conf) -- overrides settings in /etc/fonts/conf.d/
    3. by user (~/.fonts.conf) -- overrides system wide and distribution wide settings
  2. KDE uses fontconfig by default and uses ~/.fonts.conf when settings in Appearances/Fonts are changed.
  3. Gnome has its own way to store this configuration information. The Gnome settings override the fontconfig settings in Gnome applications.
    • need to cause running applications to be updated
    • gnome-settings-daemon uses X Settings to communicate this to running applications
  4. Problems we face:
    1. Users have different preferences about font settings, which cannot be satisfied with a 'one configuration fits all' approach. This includes:
      • Anti-aliasing on/off/embedded bitmaps for CJK
      • Hinting (autohinting on/off/binary hinting)
      • Font ordering for the meta fonts (serif, sans-serif, monospace)
      • cannot be set by locale as users use all kinds of locales to display all kinds of scripts
    2. Full implementation requires language tags for text (which many applications do not support), but a lesser implementation is possible

Use Cases

  • User A uses en_US and wants to use DejaVu as his default fonts and Japanese fonts for CJK text

  • User B uses en_US and wants to use a Chinese font for CJK text instead of the Japanese font.
  • User C uses zh_CN and prefers the Latin glyphs from the Chinese font
  • User D uses zh_CN and prefers the Latin glyphs from DejaVu instead of the Chinese font

  • User E uses a low resolution monitor and prefers tu use small font sizes to display text. As CJK glyphs are nearly unreadable at those settings, he turns on the embedded bitmaps to get a sharper rendering.
  • User F dislikes embedded bitmaps in CJK fonts and likes to use autohinting instead.

Assumptions

Design

Font-Selector reads the system wide and local user fontconfig configurations and displays the current configuration in a GUI with multiple tabs, e.g. different tabs for font reordering, anti-aliasing, hinting and other important settings. Changes will be stored in a separate config file, which overrides the existing fontconfig configuration.

  • GUI interface to manipulate fontconfig settings per user / system wide
  • uses ~/.fontselector.conf and /etc/fonts/fontselector.conf, which gets linked to /etc/fonts/conf.d/52-fontselector.conf
    • would allow ~/.fonts.conf and /etc/fonts/local.conf to override fontselector.conf settings if necessary
  • allows users to adjust the order of the available fonts for each metafont
    • can be different for different lang codes (requires applications to support XML/HTML and to define the lang tag per paragraph)
  • allows users to manipulate font rendering based on condition checking (if/then like)

other user requests

  • manage installation/removal of font packages based on the the selected font family
  • have a preview area to see how the actual setting will look like
  • enable/disable fonts without removing them from the system
  • add custom non-packaged fonts and enable/disable them

Implementation

  • use python/gtk+ to write the application
  • need to look into available font files which features they provide (binary hints, embedded bitmaps)

Test/Demo Plan

It's important that we are able to test new features, and demonstrate them to users. Use this section to describe a short plan that anybody can follow that demonstrates the feature is working. This can then be used during testing, and to show off after release.

This need not be added or completed until the specification is nearing beta.

BoF agenda and discussion


CategorySpec