All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.code.appengine.awt.font.GlyphMetrics Maven / Gradle / Ivy

The newest version!
/*
 *  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
 */
package com.google.code.appengine.awt.font;

import com.google.code.appengine.awt.geom.Rectangle2D;

public final class GlyphMetrics {

    // advance width of the glyph character cell
    private float advanceX;
    
    // advance height of the glyph character cell
    private float advanceY;

    // flag if the glyph horizontal
    private boolean horizontal;

    // glyph type code 
    private byte glyphType;
    
    // bounding box for outline of the glyph
    private Rectangle2D.Float bounds;

    public static final byte STANDARD = 0;

    public static final byte LIGATURE = 1;

    public static final byte COMBINING = 2;

    public static final byte COMPONENT = 3;

    public static final byte WHITESPACE = 4;

    public GlyphMetrics(boolean horizontal, float advanceX, float advanceY, 
            Rectangle2D bounds, byte glyphType) {
        this.horizontal = horizontal;
        this.advanceX = advanceX;
        this.advanceY = advanceY;

        this.bounds = new Rectangle2D.Float();
        this.bounds.setRect(bounds);

        this.glyphType = glyphType;
    }

    public GlyphMetrics(float advanceX, Rectangle2D bounds, byte glyphType) {
        this.advanceX = advanceX;
        this.advanceY = 0;

        this.horizontal = true;

        this.bounds = new Rectangle2D.Float();
        this.bounds.setRect(bounds);

        this.glyphType = glyphType;
    }

    public Rectangle2D getBounds2D() {
        return (Rectangle2D.Float) this.bounds.clone();
    }

    public boolean isWhitespace() {
        return ((this.glyphType & 4) == WHITESPACE);
    }

    public boolean isStandard() {
        return ((this.glyphType & 3) == STANDARD);
    }

    public boolean isLigature() {
        return ((this.glyphType & 3) == LIGATURE);
    }

    public boolean isComponent() {
        return ((this.glyphType & 3) == COMPONENT);
    }

    public boolean isCombining() {
        return ((this.glyphType & 3) == COMBINING);
    }

    public int getType() {
        return this.glyphType;
    }

    public float getRSB() {
        if (this.horizontal) {
            return this.advanceX - this.bounds.x - (float)this.bounds.getWidth();
        }
        return this.advanceY - this.bounds.y - (float)this.bounds.getHeight();
    }

    public float getLSB() {
        if (this.horizontal) {
            return this.bounds.x;
        }
        return this.bounds.y;
    }

    public float getAdvanceY() {
        return this.advanceY;
    }

    public float getAdvanceX() {
        return this.advanceX;
    }

    public float getAdvance() {
        if (this.horizontal) {
            return this.advanceX;
        }
        return this.advanceY;
    }

}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy