blob: 44b8809d8f43d9aa71990568d07a2be22f93289c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @author Ilya S. Okomin
* @version $Revision$
*/
package org.apache.harmony.awt.gl.font;
import java.awt.Shape;
import java.awt.font.GlyphJustificationInfo;
import java.awt.font.GlyphMetrics;
import java.awt.image.BufferedImage;
public abstract class Glyph{
// character of the glyph
char glChar;
// precise glyph metrics
GlyphMetrics glMetrics;
// glyph metrics in pixels
GlyphMetrics glPointMetrics;
// glyph code of this Glyph
int glCode;
// justification info of this glyph
GlyphJustificationInfo glJustInfo;
// native font handle of the font corresponding to this glyph
long pFont;
// size of the font corresponding to this glyph
int fontSize;
// bitmap representation of the glyph
byte[] bitmap = null;
// Buffered image representation of the glyph
BufferedImage image;
// shape that representing the outline of this glyph
Shape glOutline = null;
/**
* image bitmap parameters
*/
// top side bearing
public int bmp_top = 0;
// left side bearing
public int bmp_left = 0;
// number of bytes in row
public int bmp_pitch;
// number of rows
public int bmp_rows;
// width of the row
public int bmp_width;
/**
* Retruns handle to Native Font object
*/
public long getPFont(){
return this.pFont;
}
/**
* Retruns char value of this glyph object
*/
public char getChar(){
return glChar;
}
/**
* Retruns precise width of this glyph object
*/
public int getWidth(){
return Math.round((float)glMetrics.getBounds2D().getWidth());
}
/**
* Retruns precise height of this glyph object
*/
public int getHeight(){
return Math.round((float)glMetrics.getBounds2D().getHeight());
}
/**
* Retruns glyph code of this glyph object
*/
public int getGlyphCode(){
return glCode;
}
/**
* Retruns GlyphMetrics of this glyph object with precise metrics.
*/
public GlyphMetrics getGlyphMetrics(){
return glMetrics;
}
/**
* Retruns GlyphMetrics of this glyph object in pixels.
*/
public GlyphMetrics getGlyphPointMetrics(){
return glPointMetrics;
}
/**
* Retruns GlyphJustificationInfo of this glyph object
*/
public GlyphJustificationInfo getGlyphJustificationInfo(){
return glJustInfo;
}
/**
* Sets JustificationInfo of this glyph object
*
* @param newJustInfo GlyphJustificationInfo object to set to the Glyph object
*/
public void setGlyphJustificationInfo(GlyphJustificationInfo newJustInfo){
this.glJustInfo = newJustInfo;
}
/**
* Returns an int array of 3 elements, so-called ABC structure that contains
* the width of the character:
* 1st element = left side bearing of the glyph
* 2nd element = width of the glyph
* 3d element = right side bearing of the glyph
*/
public int[] getABC(){
int[] abc = new int[3];
abc[0] = (int)glMetrics.getLSB();
abc[1] = (int)glMetrics.getBounds2D().getWidth();
abc[2] = (int)glMetrics.getRSB();
return abc;
}
/**
* Sets BufferedImage representation of this glyph to the specified parameter.
*
* @param newImage new BufferedImage object to be set as BufferedImage
* representation.
*/
public void setImage(BufferedImage newImage){
this.image = newImage;
}
/**
* Returns true if this Glyph and specified object are equal.
*/
@Override
public boolean equals(Object obj){
if (obj == this) {
return true;
}
if (obj != null) {
try {
Glyph gl = (Glyph)obj;
return ((this.getChar() == gl.getChar())
&& (this.getGlyphMetrics().equals(gl.getGlyphMetrics()))
&& (this.getGlyphCode() == gl.getGlyphCode()));
} catch (ClassCastException e) {
}
}
return false;
}
/**
* Returns height of the glyph in points.
*/
public int getPointHeight(){
return (int)glPointMetrics.getBounds2D().getHeight();
}
/**
* Returns width of the glyph in points.
*/
public int getPointWidth(){
return (int)glPointMetrics.getBounds2D().getWidth();
}
public Shape getShape(){
if (glOutline == null){
glOutline = initOutline(this.glChar);
}
return glOutline;
}
/**
* Sets BufferedImage representation of this glyph.
*/
public BufferedImage getImage(){
//!! Implementation classes must override this method
return null;
}
/**
* Returns array of bytes, representing image of this glyph
*/
public abstract byte[] getBitmap();
/**
* Returns shape that represents outline of the specified character.
*
* @param c specified character
*/
public abstract Shape initOutline(char c);
}