예제 #1
0
 /**
  * Scans a list of font definitions and chooses the first one that is available
  *
  * @param list of terms obtained from the font-family property
  * @return a font name string according to java.awt.Font
  */
 public String getFontName(TermList list) {
   String avail[] =
       GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
   for (Term<?> term : list) {
     Object value = term.getValue();
     if (value instanceof CSSProperty.FontFamily)
       return ((CSSProperty.FontFamily) value).getAWTValue();
     else {
       String name = fontAvailable(value.toString(), avail);
       if (name != null) return name;
     }
   }
   // nothing found, use Serif
   return java.awt.Font.SERIF;
 }
예제 #2
0
  /**
   * Updates the context according to the given element style. The properties that are not defined
   * in the style are left unchanged.
   *
   * @param style the style data
   */
  public void update(NodeData style) {
    // setup the font
    String family = null;
    CSSProperty.FontFamily ff = style.getProperty("font-family");
    if (ff == null) family = font.getFamily(); // use current
    else if (ff == FontFamily.list_values) {
      TermList fmlspec = style.getValue(TermList.class, "font-family");
      if (fmlspec == null) family = font.getFamily();
      else family = getFontName(fmlspec);
    } else {
      if (factory != null)
        family =
            factory
                .getConfig()
                .getDefaultFont(ff.getAWTValue()); // try to translate to physical font
      if (family == null) family = ff.getAWTValue(); // could not translate - use as is
    }

    double size;
    double psize = (parent == null) ? CSSUnits.medium_font : parent.getEm();
    CSSProperty.FontSize fsize = style.getProperty("font-size");
    if (fsize == null) size = em;
    else if (fsize == CSSProperty.FontSize.length || fsize == CSSProperty.FontSize.percentage) {
      TermLengthOrPercent lenspec = style.getValue(TermLengthOrPercent.class, "font-size");
      if (lenspec != null) {
        em = psize;
        size =
            pxLength(lenspec, psize); // pixels are ok here (java is fixed to 72 dpi for font sizes)
      } else size = em;
    } else size = CSSUnits.convertFontSize(psize, fsize);
    fontSize = CSSUnits.points(size);

    if (rootContext != null) rem = rootContext.getEm();
    else rem = em; // we don't have a root context?

    CSSProperty.FontWeight weight = style.getProperty("font-weight");
    if (weight != null) fontWeight = weight;
    CSSProperty.FontStyle fstyle = style.getProperty("font-style");
    if (fstyle != null) fontStyle = fstyle;
    int fs = Font.PLAIN;
    if (representsBold(fontWeight)) fs = Font.BOLD;
    if (fontStyle == CSSProperty.FontStyle.ITALIC || fontStyle == CSSProperty.FontStyle.OBLIQUE)
      fs = fs | Font.ITALIC;

    font = new Font(family, fs, (int) Math.round(size));
    em = size;

    CSSProperty.FontVariant variant = style.getProperty("font-variant");
    if (variant != null) fontVariant = variant;
    CSSProperty.TextDecoration decor = style.getProperty("text-decoration");
    textDecoration.clear();
    if (decor != null) {
      if (decor == TextDecoration.list_values) {
        TermList list = style.getValue(TermList.class, "text-decoration");
        for (Term<?> t : list) {
          if (t.getValue() instanceof CSSProperty.TextDecoration)
            textDecoration.add((CSSProperty.TextDecoration) t.getValue());
        }
      } else if (decor != TextDecoration.NONE) textDecoration.add(decor);
    }

    // color
    TermColor clr = style.getValue(TermColor.class, "color");
    if (clr != null) color = clr.getValue();
  }