Uploaded image for project: 'Pivot'
  1. Pivot
  2. PIVOT-312

Add new font setters to text-based skin classes that allow a caller to customize the theme font

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 1.4
    • wtk
    • None

    Description

      Callers often want to modify only the weight, size, or style of the theme font when constructing a UI. Currently, the Label skin supports this via the "fontBold", "fontItalic", and "fontSize" styles, but similar styles are not available for other text-based components (e.g. buttons), and it would be cumbersome to add them.

      A more comprehensive solution would add support for a new JSON-based font encoding that callers could use as follows:

      <Label text="Foo" styles="{font:{bold:true}}"/>

      Instead of calling Font.decode(), the string-based font setter in LabelSkin would call a new method, org.apache.pivot.wtk.GraphicsUtilities.decodeFont(String):Font. If the string begins with a curly brace, this method would derive the font value from the theme font, applying the given properties. Otherwise, it would delegate to Font.decode().

      Callers should be able to fully specify a font using this notation (i.e. support a "name" property in addition to "size", "bold", and "italic"). So, decodeFont() should work as follows:

      • Get the current theme font.
      • Extract name, size, bold, and italic properties from it.
      • Override these values with values specified in the JSON string.
      • Create a new Font instance and return it.

      The existing "fontBold", "fontItalic", and "fontSize" styles in LabelSkin should be removed as part of this change.

      Attachments

        Activity

          People

            gbrown Gregory K. Brown
            gbrown Gregory K. Brown
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: