mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-14 23:56:07 +09:00
added sources for Slick
Former-commit-id: 1647fa32ef6894bd7db44f741f07c2f4dcdf9054 Former-commit-id: 0e5810dcfbe1fd59b13e7cabe9f1e93c5542da2d
This commit is contained in:
152
lib/slick-source/org/newdawn/slick/font/Glyph.java
Normal file
152
lib/slick-source/org/newdawn/slick/font/Glyph.java
Normal file
@@ -0,0 +1,152 @@
|
||||
|
||||
package org.newdawn.slick.font;
|
||||
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.Shape;
|
||||
import java.awt.font.GlyphMetrics;
|
||||
import java.awt.font.GlyphVector;
|
||||
|
||||
import org.newdawn.slick.Image;
|
||||
import org.newdawn.slick.UnicodeFont;
|
||||
|
||||
/**
|
||||
* Represents the glyph in a font for a unicode codepoint.
|
||||
*
|
||||
* @author Nathan Sweet <misc@n4te.com>
|
||||
*/
|
||||
public class Glyph {
|
||||
/** The code point in which this glyph is found */
|
||||
private int codePoint;
|
||||
/** The width of this glyph in pixels */
|
||||
private short width;
|
||||
/** The height of this glyph in pixels */
|
||||
private short height;
|
||||
/** The offset on the y axis to draw the glyph at */
|
||||
private short yOffset;
|
||||
/** True if the glyph isn't defined */
|
||||
private boolean isMissing;
|
||||
/** The shape drawn for this glyph */
|
||||
private Shape shape;
|
||||
/** The image generated for this glyph */
|
||||
private Image image;
|
||||
|
||||
/**
|
||||
* Create a new glyph
|
||||
*
|
||||
* @param codePoint The code point in which this glyph can be found
|
||||
* @param bounds The bounds that this glrph can fill
|
||||
* @param vector The vector this glyph is part of
|
||||
* @param index The index of this glyph within the vector
|
||||
* @param unicodeFont The font this glyph forms part of
|
||||
*/
|
||||
public Glyph(int codePoint, Rectangle bounds, GlyphVector vector, int index, UnicodeFont unicodeFont) {
|
||||
this.codePoint = codePoint;
|
||||
|
||||
GlyphMetrics metrics = vector.getGlyphMetrics(index);
|
||||
int lsb = (int)metrics.getLSB();
|
||||
if (lsb > 0) lsb = 0;
|
||||
int rsb = (int)metrics.getRSB();
|
||||
if (rsb > 0) rsb = 0;
|
||||
|
||||
int glyphWidth = bounds.width - lsb - rsb;
|
||||
int glyphHeight = bounds.height;
|
||||
if (glyphWidth > 0 && glyphHeight > 0) {
|
||||
int padTop = unicodeFont.getPaddingTop();
|
||||
int padRight = unicodeFont.getPaddingRight();
|
||||
int padBottom = unicodeFont.getPaddingBottom();
|
||||
int padLeft = unicodeFont.getPaddingLeft();
|
||||
int glyphSpacing = 1; // Needed to prevent filtering problems.
|
||||
width = (short)(glyphWidth + padLeft + padRight + glyphSpacing);
|
||||
height = (short)(glyphHeight + padTop + padBottom + glyphSpacing);
|
||||
yOffset = (short)(unicodeFont.getAscent() + bounds.y - padTop);
|
||||
}
|
||||
|
||||
shape = vector.getGlyphOutline(index, -bounds.x + unicodeFont.getPaddingLeft(), -bounds.y + unicodeFont.getPaddingTop());
|
||||
|
||||
isMissing = !unicodeFont.getFont().canDisplay((char)codePoint);
|
||||
}
|
||||
|
||||
/**
|
||||
* The unicode codepoint the glyph represents.
|
||||
*
|
||||
* @return The codepoint the glyph represents
|
||||
*/
|
||||
public int getCodePoint () {
|
||||
return codePoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the font does not have a glyph for this codepoint.
|
||||
*
|
||||
* @return True if this glyph is not defined in the given code point
|
||||
*/
|
||||
public boolean isMissing () {
|
||||
return isMissing;
|
||||
}
|
||||
|
||||
/**
|
||||
* The width of the glyph's image.
|
||||
*
|
||||
* @return The width in pixels of the glyphs image
|
||||
*/
|
||||
public int getWidth () {
|
||||
return width;
|
||||
}
|
||||
|
||||
/**
|
||||
* The height of the glyph's image.
|
||||
*
|
||||
* @return The height in pixels of the glyphs image
|
||||
*/
|
||||
public int getHeight () {
|
||||
return height;
|
||||
}
|
||||
|
||||
/**
|
||||
* The shape to use to draw this glyph. This is set to null after the glyph is stored
|
||||
* in a GlyphPage.
|
||||
*
|
||||
* @return The shape drawn for this glyph
|
||||
*/
|
||||
public Shape getShape () {
|
||||
return shape;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the shape that should be drawn for this glyph
|
||||
*
|
||||
* @param shape The shape that should be drawn for this glyph
|
||||
*/
|
||||
public void setShape(Shape shape) {
|
||||
this.shape = shape;
|
||||
}
|
||||
|
||||
/**
|
||||
* The image to use for this glyph. This is null until after the glyph is stored in a
|
||||
* GlyphPage.
|
||||
*
|
||||
* @return The image that has been generated for this glyph
|
||||
*/
|
||||
public Image getImage () {
|
||||
return image;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the image that has been generated for this glyph
|
||||
*
|
||||
* @param image The image that has been generated for this glyph
|
||||
*/
|
||||
public void setImage(Image image) {
|
||||
this.image = image;
|
||||
}
|
||||
|
||||
/**
|
||||
* The distance from drawing y location to top of this glyph, causing the glyph to sit
|
||||
* on the baseline.
|
||||
*
|
||||
* @return The offset on the y axis this glyph should be drawn at
|
||||
*/
|
||||
public int getYOffset() {
|
||||
return yOffset;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user