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();
}
}