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

io.github.humbleui.skija.TextLine Maven / Gradle / Ivy

package io.github.humbleui.skija;

import java.lang.ref.*;
import org.jetbrains.annotations.*;
import io.github.humbleui.skija.impl.*;
import io.github.humbleui.skija.shaper.*;

public class TextLine extends Managed {
    static { Library.staticLoad(); }
    
    @ApiStatus.Internal
    public TextLine(long ptr) {
        super(ptr, _FinalizerHolder.PTR);
    }

    @ApiStatus.Internal
    public static class _FinalizerHolder {
        public static final long PTR = _nGetFinalizer();
    }

    @NotNull @Contract("_, _ -> new")
    public static TextLine make(String text, Font font) {
        return make(text, font, ShapingOptions.DEFAULT);
    }

    @NotNull @Contract("_, _, _, _ -> new")
    public static TextLine make(String text, Font font, ShapingOptions opts) {
        try (Shaper shaper = Shaper.makeShapeDontWrapOrReorder();) {
            return shaper.shapeLine(text, font, opts);
        }
    }

    public float getAscent() {
        Stats.onNativeCall();
        try {
            return _nGetAscent(_ptr);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    public float getCapHeight() {
        Stats.onNativeCall();
        try {
            return _nGetCapHeight(_ptr);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    public float getXHeight() {
        Stats.onNativeCall();
        try {
            return _nGetXHeight(_ptr);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    public float getDescent() {
        Stats.onNativeCall();
        try {
            return _nGetDescent(_ptr);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    public float getLeading() {
        Stats.onNativeCall();
        try {
            return _nGetLeading(_ptr);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    public float getWidth() {
        Stats.onNativeCall();
        try {
            return _nGetWidth(_ptr);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    public float getHeight() {
        Stats.onNativeCall();
        try {
            return _nGetHeight(_ptr);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    @Nullable
    public TextBlob getTextBlob() {
        Stats.onNativeCall();
        try {
            long res = _nGetTextBlob(_ptr);
            return res == 0 ? null : new TextBlob(res);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    public short[] getGlyphs() {
        Stats.onNativeCall();
        try {
            return _nGetGlyphs(_ptr);
        } finally {
            Reference.reachabilityFence(this);
        }
    }    

    /**
     * @return  [x0, y0, x1, y1, ...]
     */
    public float[] getPositions() {
        Stats.onNativeCall();
        try {
            return _nGetPositions(_ptr);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    /**
     * @param x  coordinate in px
     * @return   UTF-16 offset of glyph
     */
    public int getOffsetAtCoord(float x) {
        try {
            Stats.onNativeCall();
            return _nGetOffsetAtCoord(_ptr, x);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    /**
     * @param x  coordinate in px
     * @return   UTF-16 offset of glyph strictly left of coord
     */
    public int getLeftOffsetAtCoord(float x) {
        try {
            Stats.onNativeCall();
            return _nGetLeftOffsetAtCoord(_ptr, x);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    /**
     * @param offset  UTF-16 character offset
     * @return        glyph coordinate
     */
    public float getCoordAtOffset(int offset) {
        try {
            Stats.onNativeCall();
            return _nGetCoordAtOffset(_ptr, offset);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    /**
     * 

Returns the number of intervals that intersect bounds. * bounds describes a pair of lines parallel to the text advance. * The return array size is a multiple of two, and is at most twice the number of glyphs in * the the blob.

* * @param lowerBound lower line parallel to the advance * @param upperBound upper line parallel to the advance * @return intersections; may be null */ @Nullable public float[] getIntercepts(float lowerBound, float upperBound) { return getIntercepts(lowerBound, upperBound, null); } /** *

Returns the number of intervals that intersect bounds. * bounds describes a pair of lines parallel to the text advance. * The return array size is a multiple of two, and is at most twice the number of glyphs in * the the blob.

* * @param lowerBound lower line parallel to the advance * @param upperBound upper line parallel to the advance * @param paint specifies stroking, PathEffect that affects the result; may be null * @return intersections; may be null */ @Nullable public float[] getIntercepts(float lowerBound, float upperBound, @Nullable Paint paint) { try (TextBlob blob = getTextBlob()) { return blob == null ? null : blob.getIntercepts(lowerBound, upperBound, paint); } finally { Reference.reachabilityFence(this); Reference.reachabilityFence(paint); } } @ApiStatus.Internal public static native long _nGetFinalizer(); @ApiStatus.Internal public static native float _nGetAscent(long ptr); @ApiStatus.Internal public static native float _nGetCapHeight(long ptr); @ApiStatus.Internal public static native float _nGetXHeight(long ptr); @ApiStatus.Internal public static native float _nGetDescent(long ptr); @ApiStatus.Internal public static native float _nGetLeading(long ptr); @ApiStatus.Internal public static native float _nGetWidth(long ptr); @ApiStatus.Internal public static native float _nGetHeight(long ptr); @ApiStatus.Internal public static native long _nGetTextBlob(long ptr); @ApiStatus.Internal public static native short[] _nGetGlyphs(long ptr); @ApiStatus.Internal public static native float[] _nGetPositions(long ptr); @ApiStatus.Internal public static native float[] _nGetRunPositions(long ptr); @ApiStatus.Internal public static native float[] _nGetBreakPositions(long ptr); @ApiStatus.Internal public static native int[] _nGetBreakOffsets(long ptr); @ApiStatus.Internal public static native int _nGetOffsetAtCoord(long ptr, float x); @ApiStatus.Internal public static native int _nGetLeftOffsetAtCoord(long ptr, float x); @ApiStatus.Internal public static native float _nGetCoordAtOffset(long ptr, int offset); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy