package org.geogebra.web.html5.awt; import org.geogebra.common.awt.GFont; public class GFontW extends GFont { private static final String NORMAL_STR = "normal"; private static final String BOLD_STR = "bold"; private static final String ITALIC_STR = "italic"; public static final String GEOGEBRA_FONT_SERIF = "geogebra-serif, serif"; public static final String GEOGEBRA_FONT_SANSERIF = "geogebra-sans-serif, sans-serif"; private String fontStyle = NORMAL_STR; private String fontVariant = NORMAL_STR; private String fontWeight = NORMAL_STR; private String fontSize = "12"; private String lineHeight = "12"; private String fontFamily = GEOGEBRA_FONT_SANSERIF; public GFontW(GFontW otherfont) { fontStyle = otherfont.getFontStyle(); fontVariant = otherfont.getFontVariant(); fontWeight = otherfont.getFontWeight(); fontSize = otherfont.getFontSize(); lineHeight = otherfont.getLineHeight(); fontFamily = otherfont.getFontFamily(); } public GFontW(String fontStyle) { this.fontStyle = fontStyle; } public GFontW(String name, int style, int size) { if ("Serif".equals(name)) { fontFamily = GEOGEBRA_FONT_SERIF; } else if ("SansSerif".equals(name)) { fontFamily = GEOGEBRA_FONT_SANSERIF; } else { fontFamily = name; } fontSize = size + ""; setFontStyle(style); } public String getFontStyle() { return fontStyle; } public String getFullFontString() { return fontStyle + " " + fontVariant + " " + fontWeight + " " + fontSize + "px/" + lineHeight + "px " + fontFamily; } public void setFontVariant(String fontVariant) { this.fontVariant = fontVariant; } public String getFontVariant() { return fontVariant; } public String getFontWeight() { return fontWeight; } public String getFontSize() { return fontSize; } public void setLineHeight(String lineHeight) { this.lineHeight = lineHeight; } public String getLineHeight() { return lineHeight; } public String getFontFamily() { return fontFamily; } @Override public int canDisplayUpTo(String textString) { // Suppose that everything will work well as it is difficult to // determine // if a character is displayable or not return -1; } private void setFontStyle(int fontStyle) { switch (fontStyle) { case BOLD: this.fontWeight = BOLD_STR; this.fontStyle = NORMAL_STR; break; case ITALIC: this.fontWeight = NORMAL_STR; this.fontStyle = ITALIC_STR; break; case (BOLD + ITALIC): this.fontWeight = BOLD_STR; this.fontStyle = ITALIC_STR; break; default: this.fontStyle = NORMAL_STR; this.fontWeight = NORMAL_STR; } } @Override public int getSize() { return Integer.parseInt(fontSize); } @Override public boolean isItalic() { return fontStyle.equals(ITALIC_STR); } @Override public boolean isBold() { return fontWeight.equals(BOLD_STR); } @Override public int getStyle() { return (isBold() ? BOLD : 0) + (isItalic() ? ITALIC : 0); } @Override public GFont deriveFont(int plain2, int newFontSize) { GFontW ret = new GFontW(fontStyle); ret.fontFamily = fontFamily; ret.setFontStyle(plain2); ret.fontSize = newFontSize + ""; return ret; } @Override public GFont deriveFont(int plain2, double fontSize1) { return deriveFont(plain2, (int) fontSize1); } @Override public GFont deriveFont(int i) { GFontW ret = new GFontW(fontStyle); ret.setFontStyle(i); ret.fontSize = fontSize; return ret; } @Override public String getFontName() { return fontFamily; } @Override public boolean equals(Object font) { if (font instanceof GFontW) { GFontW fontW = (GFontW) font; return fontFamily.equals(fontW.fontFamily) && fontSize.equals(fontW.fontSize) && fontStyle.equals(fontW.fontStyle) && fontVariant.equals(fontW.fontVariant) && fontWeight.equals(fontW.fontWeight) && lineHeight.equals(fontW.lineHeight); } return false; } @Override public int hashCode() { // any arbitrary // constant will do return fontSize.hashCode() | fontStyle.hashCode(); } }