Features/Font configuration: Difference between revisions
DanielDrake (talk | contribs) No edit summary |
DanielDrake (talk | contribs) |
||
| Line 48: | Line 48: | ||
* In general, font sizes should never be specified. Use the default Sugar font (e.g. which is what you get if you create a gtk.Label), as this is what the user has chosen as their preferred font size. | * In general, font sizes should never be specified. Use the default Sugar font (e.g. which is what you get if you create a gtk.Label), as this is what the user has chosen as their preferred font size. | ||
** also use variations using pango markup e.g. <nowiki><big> <small> <b></nowiki> | ** also use variations using pango markup e.g. <nowiki><big> <small> <b></nowiki> | ||
** | ** If the user cannot or does not want to use pango markup in a particular scenario, Sugar could provide a helper function to scale the font size from the default for a given widget (see suggested code below) | ||
* There may be exceptional cases where applications want to scale a font to fit nicely in a given space. In this situation, they should use the standard Pango rendering pipelines to render text offscreen (using a sensible seed size value), measure the resultant pixel size, and then retry the rendering based on a new font size if the result was too big or too small. | * There may be exceptional cases where applications want to scale a font to fit nicely in a given space. In this situation, they should use the standard Pango rendering pipelines to render text offscreen (using a sensible seed size value), measure the resultant pixel size, and then retry the rendering based on a new font size if the result was too big or too small. | ||
** The Memorize activity is one example of this - it dynamically chooses a font size which causes the text to fit nicely within the tiles of the game. | ** The Memorize activity is one example of this - it dynamically chooses a font size which causes the text to fit nicely within the tiles of the game. | ||
| Line 56: | Line 56: | ||
Not (unnecessarily) messing with font sizes will just become another step in "effective Sugarization" of an activity. | Not (unnecessarily) messing with font sizes will just become another step in "effective Sugarization" of an activity. | ||
Here is sample code for scaling fonts as described above: | |||
def scale_font(widget, scale_steps): | |||
if scale_steps == 0: | |||
return | |||
font = widget.get_pango_context().get_font_description() | |||
font.set_size(int(font.get_size() * pango.SCALE_LARGE * scale_steps)) | |||
widget.modify_font(font) | |||
The above function will work for any GtkWidget, allowing the font to be scaled. A scape_steps value of 0 will cause no scaling, -1 is equivalent to <nowiki><small>, 2 is equivalent to <big><big> or <span font_size="x-large">, </nowiki> etc. It works based on the fact that pango.SCALE_LARGE is the scaling factor for a single step up, which has value 1.2 as used in all pango font scaling (and the CSS world). | |||
=== Additional fonts === | === Additional fonts === | ||