类sun.font.TextLineComponent源码实例Demo

下面列出了怎么用sun.font.TextLineComponent的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: Java8CN   文件: TextMeasurer.java
private TextLine makeTextLineOnRange(int startPos, int limitPos) {

        int[] charsLtoV = null;
        byte[] charLevels = null;

        if (fBidi != null) {
            Bidi lineBidi = fBidi.createLineBidi(startPos, limitPos);
            charLevels = BidiUtils.getLevels(lineBidi);
            int[] charsVtoL = BidiUtils.createVisualToLogicalMap(charLevels);
            charsLtoV = BidiUtils.createInverseMap(charsVtoL);
        }

        TextLineComponent[] components = makeComponentsOnRange(startPos, limitPos);

        return new TextLine(fFrc,
                            components,
                            fBaselineOffsets,
                            fChars,
                            startPos,
                            limitPos,
                            charsLtoV,
                            charLevels,
                            fIsDirectionLTR);

    }
 
源代码2 项目: hottub   文件: TextMeasurer.java
private TextLine makeTextLineOnRange(int startPos, int limitPos) {

        int[] charsLtoV = null;
        byte[] charLevels = null;

        if (fBidi != null) {
            Bidi lineBidi = fBidi.createLineBidi(startPos, limitPos);
            charLevels = BidiUtils.getLevels(lineBidi);
            int[] charsVtoL = BidiUtils.createVisualToLogicalMap(charLevels);
            charsLtoV = BidiUtils.createInverseMap(charsVtoL);
        }

        TextLineComponent[] components = makeComponentsOnRange(startPos, limitPos);

        return new TextLine(fFrc,
                            components,
                            fBaselineOffsets,
                            fChars,
                            startPos,
                            limitPos,
                            charsLtoV,
                            charLevels,
                            fIsDirectionLTR);

    }
 
源代码3 项目: jdk1.8-source-analysis   文件: TextLine.java
/**
 * Create a TextLine from the Font and character data over the
 * range.  The range is relative to both the StyledParagraph and the
 * character array.
 */
public static TextLine createLineFromText(char[] chars,
                                          StyledParagraph styledParagraph,
                                          TextLabelFactory factory,
                                          boolean isDirectionLTR,
                                          float[] baselineOffsets) {

    factory.setLineContext(0, chars.length);

    Bidi lineBidi = factory.getLineBidi();
    int[] charsLtoV = null;
    byte[] levels = null;

    if (lineBidi != null) {
        levels = BidiUtils.getLevels(lineBidi);
        int[] charsVtoL = BidiUtils.createVisualToLogicalMap(levels);
        charsLtoV = BidiUtils.createInverseMap(charsVtoL);
    }

    TextLineComponent[] components =
        getComponents(styledParagraph, chars, 0, chars.length, charsLtoV, levels, factory);

    return new TextLine(factory.getFontRenderContext(), components, baselineOffsets,
                        chars, 0, chars.length, charsLtoV, levels, isDirectionLTR);
}
 
源代码4 项目: dragonwell8_jdk   文件: TextMeasurer.java
private TextLine makeTextLineOnRange(int startPos, int limitPos) {

        int[] charsLtoV = null;
        byte[] charLevels = null;

        if (fBidi != null) {
            Bidi lineBidi = fBidi.createLineBidi(startPos, limitPos);
            charLevels = BidiUtils.getLevels(lineBidi);
            int[] charsVtoL = BidiUtils.createVisualToLogicalMap(charLevels);
            charsLtoV = BidiUtils.createInverseMap(charsVtoL);
        }

        TextLineComponent[] components = makeComponentsOnRange(startPos, limitPos);

        return new TextLine(fFrc,
                            components,
                            fBaselineOffsets,
                            fChars,
                            startPos,
                            limitPos,
                            charsLtoV,
                            charLevels,
                            fIsDirectionLTR);

    }
 
源代码5 项目: Bytecoder   文件: TextLine.java
public static float getAdvanceBetween(TextLineComponent[] components, int start, int limit) {
    float advance = 0;

    int tlcStart = 0;
    for(int i = 0; i < components.length; i++) {
        TextLineComponent comp = components[i];

        int tlcLength = comp.getNumCharacters();
        int tlcLimit = tlcStart + tlcLength;
        if (tlcLimit > start) {
            int measureStart = Math.max(0, start - tlcStart);
            int measureLimit = Math.min(tlcLength, limit - tlcStart);
            advance += comp.getAdvanceBetween(measureStart, measureLimit);
            if (tlcLimit >= limit) {
                break;
            }
        }

        tlcStart = tlcLimit;
    }

    return advance;
}
 
源代码6 项目: openjdk-jdk9   文件: TextLine.java
public static float getAdvanceBetween(TextLineComponent[] components, int start, int limit) {
    float advance = 0;

    int tlcStart = 0;
    for(int i = 0; i < components.length; i++) {
        TextLineComponent comp = components[i];

        int tlcLength = comp.getNumCharacters();
        int tlcLimit = tlcStart + tlcLength;
        if (tlcLimit > start) {
            int measureStart = Math.max(0, start - tlcStart);
            int measureLimit = Math.min(tlcLength, limit - tlcStart);
            advance += comp.getAdvanceBetween(measureStart, measureLimit);
            if (tlcLimit >= limit) {
                break;
            }
        }

        tlcStart = tlcLimit;
    }

    return advance;
}
 
源代码7 项目: openjdk-jdk9   文件: TextLine.java
public Rectangle2D getItalicBounds() {

        float left = Float.MAX_VALUE, right = -Float.MAX_VALUE;
        float top = Float.MAX_VALUE, bottom = -Float.MAX_VALUE;

        for (int i=0, n = 0; i < fComponents.length; i++, n += 2) {
            TextLineComponent tlc = fComponents[getComponentLogicalIndex(i)];

            Rectangle2D tlcBounds = tlc.getItalicBounds();
            float x = locs[n];
            float y = locs[n+1];

            left = Math.min(left, x + (float)tlcBounds.getX());
            right = Math.max(right, x + (float)tlcBounds.getMaxX());

            top = Math.min(top, y + (float)tlcBounds.getY());
            bottom = Math.max(bottom, y + (float)tlcBounds.getMaxY());
        }

        return new Rectangle2D.Float(left, top, right-left, bottom-top);
    }
 
源代码8 项目: openjdk-8-source   文件: TextLine.java
public static float getAdvanceBetween(TextLineComponent[] components, int start, int limit) {
    float advance = 0;

    int tlcStart = 0;
    for(int i = 0; i < components.length; i++) {
        TextLineComponent comp = components[i];

        int tlcLength = comp.getNumCharacters();
        int tlcLimit = tlcStart + tlcLength;
        if (tlcLimit > start) {
            int measureStart = Math.max(0, start - tlcStart);
            int measureLimit = Math.min(tlcLength, limit - tlcStart);
            advance += comp.getAdvanceBetween(measureStart, measureLimit);
            if (tlcLimit >= limit) {
                break;
            }
        }

        tlcStart = tlcLimit;
    }

    return advance;
}
 
源代码9 项目: dragonwell8_jdk   文件: TextLine.java
public Rectangle2D getItalicBounds() {

        float left = Float.MAX_VALUE, right = -Float.MAX_VALUE;
        float top = Float.MAX_VALUE, bottom = -Float.MAX_VALUE;

        for (int i=0, n = 0; i < fComponents.length; i++, n += 2) {
            TextLineComponent tlc = fComponents[getComponentLogicalIndex(i)];

            Rectangle2D tlcBounds = tlc.getItalicBounds();
            float x = locs[n];
            float y = locs[n+1];

            left = Math.min(left, x + (float)tlcBounds.getX());
            right = Math.max(right, x + (float)tlcBounds.getMaxX());

            top = Math.min(top, y + (float)tlcBounds.getY());
            bottom = Math.max(bottom, y + (float)tlcBounds.getMaxY());
        }

        return new Rectangle2D.Float(left, top, right-left, bottom-top);
    }
 
源代码10 项目: jdk8u-jdk   文件: TextLine.java
public Rectangle2D getItalicBounds() {

        float left = Float.MAX_VALUE, right = -Float.MAX_VALUE;
        float top = Float.MAX_VALUE, bottom = -Float.MAX_VALUE;

        for (int i=0, n = 0; i < fComponents.length; i++, n += 2) {
            TextLineComponent tlc = fComponents[getComponentLogicalIndex(i)];

            Rectangle2D tlcBounds = tlc.getItalicBounds();
            float x = locs[n];
            float y = locs[n+1];

            left = Math.min(left, x + (float)tlcBounds.getX());
            right = Math.max(right, x + (float)tlcBounds.getMaxX());

            top = Math.min(top, y + (float)tlcBounds.getY());
            bottom = Math.max(bottom, y + (float)tlcBounds.getMaxY());
        }

        return new Rectangle2D.Float(left, top, right-left, bottom-top);
    }
 
源代码11 项目: hottub   文件: TextLine.java
public static float getAdvanceBetween(TextLineComponent[] components, int start, int limit) {
    float advance = 0;

    int tlcStart = 0;
    for(int i = 0; i < components.length; i++) {
        TextLineComponent comp = components[i];

        int tlcLength = comp.getNumCharacters();
        int tlcLimit = tlcStart + tlcLength;
        if (tlcLimit > start) {
            int measureStart = Math.max(0, start - tlcStart);
            int measureLimit = Math.min(tlcLength, limit - tlcStart);
            advance += comp.getAdvanceBetween(measureStart, measureLimit);
            if (tlcLimit >= limit) {
                break;
            }
        }

        tlcStart = tlcLimit;
    }

    return advance;
}
 
源代码12 项目: jdk8u-jdk   文件: TextLine.java
public Rectangle2D getItalicBounds() {

        float left = Float.MAX_VALUE, right = -Float.MAX_VALUE;
        float top = Float.MAX_VALUE, bottom = -Float.MAX_VALUE;

        for (int i=0, n = 0; i < fComponents.length; i++, n += 2) {
            TextLineComponent tlc = fComponents[getComponentLogicalIndex(i)];

            Rectangle2D tlcBounds = tlc.getItalicBounds();
            float x = locs[n];
            float y = locs[n+1];

            left = Math.min(left, x + (float)tlcBounds.getX());
            right = Math.max(right, x + (float)tlcBounds.getMaxX());

            top = Math.min(top, y + (float)tlcBounds.getY());
            bottom = Math.max(bottom, y + (float)tlcBounds.getMaxY());
        }

        return new Rectangle2D.Float(left, top, right-left, bottom-top);
    }
 
源代码13 项目: TencentKona-8   文件: TextLine.java
/**
 * Create a TextLine from the Font and character data over the
 * range.  The range is relative to both the StyledParagraph and the
 * character array.
 */
public static TextLine createLineFromText(char[] chars,
                                          StyledParagraph styledParagraph,
                                          TextLabelFactory factory,
                                          boolean isDirectionLTR,
                                          float[] baselineOffsets) {

    factory.setLineContext(0, chars.length);

    Bidi lineBidi = factory.getLineBidi();
    int[] charsLtoV = null;
    byte[] levels = null;

    if (lineBidi != null) {
        levels = BidiUtils.getLevels(lineBidi);
        int[] charsVtoL = BidiUtils.createVisualToLogicalMap(levels);
        charsLtoV = BidiUtils.createInverseMap(charsVtoL);
    }

    TextLineComponent[] components =
        getComponents(styledParagraph, chars, 0, chars.length, charsLtoV, levels, factory);

    return new TextLine(factory.getFontRenderContext(), components, baselineOffsets,
                        chars, 0, chars.length, charsLtoV, levels, isDirectionLTR);
}
 
源代码14 项目: jdk8u60   文件: TextLine.java
public Rectangle2D getItalicBounds() {

        float left = Float.MAX_VALUE, right = -Float.MAX_VALUE;
        float top = Float.MAX_VALUE, bottom = -Float.MAX_VALUE;

        for (int i=0, n = 0; i < fComponents.length; i++, n += 2) {
            TextLineComponent tlc = fComponents[getComponentLogicalIndex(i)];

            Rectangle2D tlcBounds = tlc.getItalicBounds();
            float x = locs[n];
            float y = locs[n+1];

            left = Math.min(left, x + (float)tlcBounds.getX());
            right = Math.max(right, x + (float)tlcBounds.getMaxX());

            top = Math.min(top, y + (float)tlcBounds.getY());
            bottom = Math.max(bottom, y + (float)tlcBounds.getMaxY());
        }

        return new Rectangle2D.Float(left, top, right-left, bottom-top);
    }
 
源代码15 项目: Bytecoder   文件: TextMeasurer.java
private TextLine makeTextLineOnRange(int startPos, int limitPos) {

        int[] charsLtoV = null;
        byte[] charLevels = null;

        if (fBidi != null) {
            Bidi lineBidi = fBidi.createLineBidi(startPos, limitPos);
            charLevels = BidiUtils.getLevels(lineBidi);
            int[] charsVtoL = BidiUtils.createVisualToLogicalMap(charLevels);
            charsLtoV = BidiUtils.createInverseMap(charsVtoL);
        }

        TextLineComponent[] components = makeComponentsOnRange(startPos, limitPos);

        return new TextLine(fFrc,
                            components,
                            fBaselineOffsets,
                            fChars,
                            startPos,
                            limitPos,
                            charsLtoV,
                            charLevels,
                            fIsDirectionLTR);

    }
 
源代码16 项目: Java8CN   文件: TextLine.java
public Rectangle2D getItalicBounds() {

        float left = Float.MAX_VALUE, right = -Float.MAX_VALUE;
        float top = Float.MAX_VALUE, bottom = -Float.MAX_VALUE;

        for (int i=0, n = 0; i < fComponents.length; i++, n += 2) {
            TextLineComponent tlc = fComponents[getComponentLogicalIndex(i)];

            Rectangle2D tlcBounds = tlc.getItalicBounds();
            float x = locs[n];
            float y = locs[n+1];

            left = Math.min(left, x + (float)tlcBounds.getX());
            right = Math.max(right, x + (float)tlcBounds.getMaxX());

            top = Math.min(top, y + (float)tlcBounds.getY());
            bottom = Math.max(bottom, y + (float)tlcBounds.getMaxY());
        }

        return new Rectangle2D.Float(left, top, right-left, bottom-top);
    }
 
源代码17 项目: JDKSourceCode1.8   文件: TextLine.java
public static float getAdvanceBetween(TextLineComponent[] components, int start, int limit) {
    float advance = 0;

    int tlcStart = 0;
    for(int i = 0; i < components.length; i++) {
        TextLineComponent comp = components[i];

        int tlcLength = comp.getNumCharacters();
        int tlcLimit = tlcStart + tlcLength;
        if (tlcLimit > start) {
            int measureStart = Math.max(0, start - tlcStart);
            int measureLimit = Math.min(tlcLength, limit - tlcStart);
            advance += comp.getAdvanceBetween(measureStart, measureLimit);
            if (tlcLimit >= limit) {
                break;
            }
        }

        tlcStart = tlcLimit;
    }

    return advance;
}
 
源代码18 项目: openjdk-jdk8u-backup   文件: TextLine.java
float computeFunction(TextLine line,
                      int componentIndex,
                      int indexInArray) {

    TextLineComponent tlc = line.fComponents[componentIndex];
        int vi = line.getComponentVisualIndex(componentIndex);
    return line.locs[vi * 2] + tlc.getCharX(indexInArray) + tlc.getCharAdvance(indexInArray);
}
 
源代码19 项目: jdk1.8-source-analysis   文件: TextLine.java
float computeFunction(TextLine line,
                      int componentIndex,
                      int indexInArray) {

    TextLineComponent tlc = line.fComponents[componentIndex];
    float charPos = tlc.getCharY(indexInArray);

    // charPos is relative to the component - adjust for
    // baseline

    return charPos + line.getComponentShift(componentIndex);
}
 
源代码20 项目: openjdk-8-source   文件: TextLine.java
float computeFunction(TextLine line,
                      int componentIndex,
                      int indexInArray) {

        int vi = line.getComponentVisualIndex(componentIndex);
    TextLineComponent tlc = line.fComponents[componentIndex];
    return line.locs[vi * 2] + tlc.getCharX(indexInArray);
}
 
源代码21 项目: jdk8u_jdk   文件: TextLine.java
float computeFunction(TextLine line,
                      int componentIndex,
                      int indexInArray) {

    TextLineComponent tlc = line.fComponents[componentIndex];
    return tlc.getCharAdvance(indexInArray);
}
 
源代码22 项目: openjdk-jdk8u-backup   文件: TextLine.java
/**
 * Return the union of the visual bounds of all the components.
 * This incorporates the path.  It does not include logical
 * bounds (used by carets).
 */
public Rectangle2D getVisualBounds() {
    Rectangle2D result = null;

    for (int i = 0, n = 0; i < fComponents.length; i++, n += 2) {
        TextLineComponent tlc = fComponents[getComponentLogicalIndex(i)];
        Rectangle2D r = tlc.getVisualBounds();

        Point2D.Float pt = new Point2D.Float(locs[n], locs[n+1]);
        if (lp == null) {
            r.setRect(r.getMinX() + pt.x, r.getMinY() + pt.y,
                      r.getWidth(), r.getHeight());
        } else {
            lp.pathToPoint(pt, false, pt);

            AffineTransform at = tlc.getBaselineTransform();
            if (at != null) {
                AffineTransform tx = AffineTransform.getTranslateInstance
                    (pt.x - at.getTranslateX(), pt.y - at.getTranslateY());
                tx.concatenate(at);
                r = tx.createTransformedShape(r).getBounds2D();
            } else {
                r.setRect(r.getMinX() + pt.x, r.getMinY() + pt.y,
                          r.getWidth(), r.getHeight());
            }
        }

        if (result == null) {
            result = r;
        } else {
            result.add(r);
        }
    }

    if (result == null) {
        result = new Rectangle2D.Float(Float.MAX_VALUE, Float.MAX_VALUE, Float.MIN_VALUE, Float.MIN_VALUE);
    }

    return result;
}
 
源代码23 项目: jdk8u-jdk   文件: TextLine.java
/**
 * Return the union of the visual bounds of all the components.
 * This incorporates the path.  It does not include logical
 * bounds (used by carets).
 */
public Rectangle2D getVisualBounds() {
    Rectangle2D result = null;

    for (int i = 0, n = 0; i < fComponents.length; i++, n += 2) {
        TextLineComponent tlc = fComponents[getComponentLogicalIndex(i)];
        Rectangle2D r = tlc.getVisualBounds();

        Point2D.Float pt = new Point2D.Float(locs[n], locs[n+1]);
        if (lp == null) {
            r.setRect(r.getMinX() + pt.x, r.getMinY() + pt.y,
                      r.getWidth(), r.getHeight());
        } else {
            lp.pathToPoint(pt, false, pt);

            AffineTransform at = tlc.getBaselineTransform();
            if (at != null) {
                AffineTransform tx = AffineTransform.getTranslateInstance
                    (pt.x - at.getTranslateX(), pt.y - at.getTranslateY());
                tx.concatenate(at);
                r = tx.createTransformedShape(r).getBounds2D();
            } else {
                r.setRect(r.getMinX() + pt.x, r.getMinY() + pt.y,
                          r.getWidth(), r.getHeight());
            }
        }

        if (result == null) {
            result = r;
        } else {
            result.add(r);
        }
    }

    if (result == null) {
        result = new Rectangle2D.Float(Float.MAX_VALUE, Float.MAX_VALUE, Float.MIN_VALUE, Float.MIN_VALUE);
    }

    return result;
}
 
源代码24 项目: dragonwell8_jdk   文件: TextLine.java
public Rectangle2D getCharBounds(int logicalIndex) {

        if (logicalIndex < 0) {
            throw new IllegalArgumentException("Negative logicalIndex.");
        }

        int tlcStart = 0;

        for (int i=0; i < fComponents.length; i++) {

            int tlcLimit = tlcStart + fComponents[i].getNumCharacters();
            if (tlcLimit > logicalIndex) {

                TextLineComponent tlc = fComponents[i];
                int indexInTlc = logicalIndex - tlcStart;
                Rectangle2D chBounds = tlc.getCharVisualBounds(indexInTlc);

                        int vi = getComponentVisualIndex(i);
                chBounds.setRect(chBounds.getX() + locs[vi * 2],
                                 chBounds.getY() + locs[vi * 2 + 1],
                                 chBounds.getWidth(),
                                 chBounds.getHeight());
                return chBounds;
            }
            else {
                tlcStart = tlcLimit;
            }
        }

        throw new IllegalArgumentException("logicalIndex too large.");
    }
 
源代码25 项目: openjdk-8   文件: TextLine.java
public Shape getOutline(AffineTransform tx) {

        GeneralPath dstShape = new GeneralPath(GeneralPath.WIND_NON_ZERO);

        for (int i=0, n = 0; i < fComponents.length; i++, n += 2) {
            TextLineComponent tlc = fComponents[getComponentLogicalIndex(i)];

            dstShape.append(tlc.getOutline(locs[n], locs[n+1]), false);
        }

        if (tx != null) {
            dstShape.transform(tx);
        }
        return dstShape;
    }
 
源代码26 项目: openjdk-jdk8u   文件: TextLine.java
float computeFunction(TextLine line,
                      int componentIndex,
                      int indexInArray) {

        int vi = line.getComponentVisualIndex(componentIndex);
    TextLineComponent tlc = line.fComponents[componentIndex];
    return line.locs[vi * 2] + tlc.getCharX(indexInArray);
}
 
源代码27 项目: hottub   文件: TextLine.java
float computeFunction(TextLine line,
                      int componentIndex,
                      int indexInArray) {

        int vi = line.getComponentVisualIndex(componentIndex);
    TextLineComponent tlc = line.fComponents[componentIndex];
    return line.locs[vi * 2] + tlc.getCharX(indexInArray);
}
 
源代码28 项目: hottub   文件: TextLine.java
public Shape getOutline(AffineTransform tx) {

        GeneralPath dstShape = new GeneralPath(GeneralPath.WIND_NON_ZERO);

        for (int i=0, n = 0; i < fComponents.length; i++, n += 2) {
            TextLineComponent tlc = fComponents[getComponentLogicalIndex(i)];

            dstShape.append(tlc.getOutline(locs[n], locs[n+1]), false);
        }

        if (tx != null) {
            dstShape.transform(tx);
        }
        return dstShape;
    }
 
源代码29 项目: jdk-1.7-annotated   文件: TextLine.java
float computeFunction(TextLine line,
                      int componentIndex,
                      int indexInArray) {

    TextLineComponent tlc = line.fComponents[componentIndex];
    float charPos = tlc.getCharY(indexInArray);

    // charPos is relative to the component - adjust for
    // baseline

    return charPos + line.getComponentShift(componentIndex);
}
 
源代码30 项目: TencentKona-8   文件: TextLine.java
float computeFunction(TextLine line,
                      int componentIndex,
                      int indexInArray) {

    TextLineComponent tlc = line.fComponents[componentIndex];
        int vi = line.getComponentVisualIndex(componentIndex);
    return line.locs[vi * 2] + tlc.getCharX(indexInArray) + tlc.getCharAdvance(indexInArray);
}