You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
213 lines
7.2 KiB
213 lines
7.2 KiB
/*
|
|
* Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved.
|
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* (C) Copyright Taligent, Inc. 1996 - 1997, All Rights Reserved
|
|
* (C) Copyright IBM Corp. 1996 - 1998, All Rights Reserved
|
|
*
|
|
* The original version of this source code and documentation is
|
|
* copyrighted and owned by Taligent, Inc., a wholly-owned subsidiary
|
|
* of IBM. These materials are provided under terms of a License
|
|
* Agreement between Taligent and Sun. This technology is protected
|
|
* by multiple US and International patents.
|
|
*
|
|
* This notice and attribution to Taligent may not be removed.
|
|
* Taligent is a registered trademark of Taligent, Inc.
|
|
*/
|
|
|
|
package java.awt.font;
|
|
|
|
/**
|
|
* The <code>GlyphJustificationInfo</code> class represents information
|
|
* about the justification properties of a glyph. A glyph is the visual
|
|
* representation of one or more characters. Many different glyphs can
|
|
* be used to represent a single character or combination of characters.
|
|
* The four justification properties represented by
|
|
* <code>GlyphJustificationInfo</code> are weight, priority, absorb and
|
|
* limit.
|
|
* <p>
|
|
* Weight is the overall 'weight' of the glyph in the line. Generally it is
|
|
* proportional to the size of the font. Glyphs with larger weight are
|
|
* allocated a correspondingly larger amount of the change in space.
|
|
* <p>
|
|
* Priority determines the justification phase in which this glyph is used.
|
|
* All glyphs of the same priority are examined before glyphs of the next
|
|
* priority. If all the change in space can be allocated to these glyphs
|
|
* without exceeding their limits, then glyphs of the next priority are not
|
|
* examined. There are four priorities, kashida, whitespace, interchar,
|
|
* and none. KASHIDA is the first priority examined. NONE is the last
|
|
* priority examined.
|
|
* <p>
|
|
* Absorb determines whether a glyph absorbs all change in space. Within a
|
|
* given priority, some glyphs may absorb all the change in space. If any of
|
|
* these glyphs are present, no glyphs of later priority are examined.
|
|
* <p>
|
|
* Limit determines the maximum or minimum amount by which the glyph can
|
|
* change. Left and right sides of the glyph can have different limits.
|
|
* <p>
|
|
* Each <code>GlyphJustificationInfo</code> represents two sets of
|
|
* metrics, which are <i>growing</i> and <i>shrinking</i>. Growing
|
|
* metrics are used when the glyphs on a line are to be
|
|
* spread apart to fit a larger width. Shrinking metrics are used when
|
|
* the glyphs are to be moved together to fit a smaller width.
|
|
*/
|
|
|
|
public final class GlyphJustificationInfo {
|
|
|
|
/**
|
|
* Constructs information about the justification properties of a
|
|
* glyph.
|
|
* @param weight the weight of this glyph when allocating space. Must be non-negative.
|
|
* @param growAbsorb if <code>true</code> this glyph absorbs
|
|
* all extra space at this priority and lower priority levels when it
|
|
* grows
|
|
* @param growPriority the priority level of this glyph when it
|
|
* grows
|
|
* @param growLeftLimit the maximum amount by which the left side of this
|
|
* glyph can grow. Must be non-negative.
|
|
* @param growRightLimit the maximum amount by which the right side of this
|
|
* glyph can grow. Must be non-negative.
|
|
* @param shrinkAbsorb if <code>true</code>, this glyph absorbs all
|
|
* remaining shrinkage at this and lower priority levels when it
|
|
* shrinks
|
|
* @param shrinkPriority the priority level of this glyph when
|
|
* it shrinks
|
|
* @param shrinkLeftLimit the maximum amount by which the left side of this
|
|
* glyph can shrink. Must be non-negative.
|
|
* @param shrinkRightLimit the maximum amount by which the right side
|
|
* of this glyph can shrink. Must be non-negative.
|
|
*/
|
|
public GlyphJustificationInfo(float weight,
|
|
boolean growAbsorb,
|
|
int growPriority,
|
|
float growLeftLimit,
|
|
float growRightLimit,
|
|
boolean shrinkAbsorb,
|
|
int shrinkPriority,
|
|
float shrinkLeftLimit,
|
|
float shrinkRightLimit)
|
|
{
|
|
if (weight < 0) {
|
|
throw new IllegalArgumentException("weight is negative");
|
|
}
|
|
|
|
if (!priorityIsValid(growPriority)) {
|
|
throw new IllegalArgumentException("Invalid grow priority");
|
|
}
|
|
if (growLeftLimit < 0) {
|
|
throw new IllegalArgumentException("growLeftLimit is negative");
|
|
}
|
|
if (growRightLimit < 0) {
|
|
throw new IllegalArgumentException("growRightLimit is negative");
|
|
}
|
|
|
|
if (!priorityIsValid(shrinkPriority)) {
|
|
throw new IllegalArgumentException("Invalid shrink priority");
|
|
}
|
|
if (shrinkLeftLimit < 0) {
|
|
throw new IllegalArgumentException("shrinkLeftLimit is negative");
|
|
}
|
|
if (shrinkRightLimit < 0) {
|
|
throw new IllegalArgumentException("shrinkRightLimit is negative");
|
|
}
|
|
|
|
this.weight = weight;
|
|
this.growAbsorb = growAbsorb;
|
|
this.growPriority = growPriority;
|
|
this.growLeftLimit = growLeftLimit;
|
|
this.growRightLimit = growRightLimit;
|
|
this.shrinkAbsorb = shrinkAbsorb;
|
|
this.shrinkPriority = shrinkPriority;
|
|
this.shrinkLeftLimit = shrinkLeftLimit;
|
|
this.shrinkRightLimit = shrinkRightLimit;
|
|
}
|
|
|
|
private static boolean priorityIsValid(int priority) {
|
|
|
|
return priority >= PRIORITY_KASHIDA && priority <= PRIORITY_NONE;
|
|
}
|
|
|
|
/** The highest justification priority. */
|
|
public static final int PRIORITY_KASHIDA = 0;
|
|
|
|
/** The second highest justification priority. */
|
|
public static final int PRIORITY_WHITESPACE = 1;
|
|
|
|
/** The second lowest justification priority. */
|
|
public static final int PRIORITY_INTERCHAR = 2;
|
|
|
|
/** The lowest justification priority. */
|
|
public static final int PRIORITY_NONE = 3;
|
|
|
|
/**
|
|
* The weight of this glyph.
|
|
*/
|
|
public final float weight;
|
|
|
|
/**
|
|
* The priority level of this glyph as it is growing.
|
|
*/
|
|
public final int growPriority;
|
|
|
|
/**
|
|
* If <code>true</code>, this glyph absorbs all extra
|
|
* space at this and lower priority levels when it grows.
|
|
*/
|
|
public final boolean growAbsorb;
|
|
|
|
/**
|
|
* The maximum amount by which the left side of this glyph can grow.
|
|
*/
|
|
public final float growLeftLimit;
|
|
|
|
/**
|
|
* The maximum amount by which the right side of this glyph can grow.
|
|
*/
|
|
public final float growRightLimit;
|
|
|
|
/**
|
|
* The priority level of this glyph as it is shrinking.
|
|
*/
|
|
public final int shrinkPriority;
|
|
|
|
/**
|
|
* If <code>true</code>,this glyph absorbs all remaining shrinkage at
|
|
* this and lower priority levels as it shrinks.
|
|
*/
|
|
public final boolean shrinkAbsorb;
|
|
|
|
/**
|
|
* The maximum amount by which the left side of this glyph can shrink
|
|
* (a positive number).
|
|
*/
|
|
public final float shrinkLeftLimit;
|
|
|
|
/**
|
|
* The maximum amount by which the right side of this glyph can shrink
|
|
* (a positive number).
|
|
*/
|
|
public final float shrinkRightLimit;
|
|
}
|