shared/java/paragraph/Paragraph.java (237 lines of code) (raw):
package org.jetbrains.skija.paragraph;
import java.lang.ref.*;
import org.jetbrains.annotations.*;
import org.jetbrains.skija.*;
import org.jetbrains.skija.impl.*;
public class Paragraph extends Managed {
static { Library.staticLoad(); }
@ApiStatus.Internal
public ManagedString _text;
@Override
public void close() {
if (_text != null) {
_text.close();
_text = null;
}
super.close();
}
public float getMaxWidth() {
try {
Stats.onNativeCall();
return _nGetMaxWidth(_ptr);
} finally {
Reference.reachabilityFence(this);
}
}
public float getHeight() {
try {
Stats.onNativeCall();
return _nGetHeight(_ptr);
} finally {
Reference.reachabilityFence(this);
}
}
public float getMinIntrinsicWidth() {
try {
Stats.onNativeCall();
return _nGetMinIntrinsicWidth(_ptr);
} finally {
Reference.reachabilityFence(this);
}
}
public float getMaxIntrinsicWidth() {
try {
Stats.onNativeCall();
return _nGetMaxIntrinsicWidth(_ptr);
} finally {
Reference.reachabilityFence(this);
}
}
public float getAlphabeticBaseline() {
try {
Stats.onNativeCall();
return _nGetAlphabeticBaseline(_ptr);
} finally {
Reference.reachabilityFence(this);
}
}
public float getIdeographicBaseline() {
try {
Stats.onNativeCall();
return _nGetIdeographicBaseline(_ptr);
} finally {
Reference.reachabilityFence(this);
}
}
public float getLongestLine() {
try {
Stats.onNativeCall();
return _nGetLongestLine(_ptr);
} finally {
Reference.reachabilityFence(this);
}
}
public boolean didExceedMaxLines() {
try {
Stats.onNativeCall();
return _nDidExceedMaxLines(_ptr);
} finally {
Reference.reachabilityFence(this);
}
}
public Paragraph layout(float width) {
Stats.onNativeCall();
_nLayout(_ptr, width);
return this;
}
public Paragraph paint(Canvas canvas, float x, float y) {
try {
Stats.onNativeCall();
_nPaint(_ptr, Native.getPtr(canvas), x, y);
return this;
} finally {
Reference.reachabilityFence(canvas);
}
}
/**
* Returns a vector of bounding boxes that enclose all text between
* start and end char indices, including start and excluding end.
*/
public TextBox[] getRectsForRange(int start, int end, RectHeightMode rectHeightMode, RectWidthMode rectWidthMode) {
try {
Stats.onNativeCall();
return _nGetRectsForRange(_ptr, start, end, rectHeightMode.ordinal(), rectWidthMode.ordinal());
} finally {
Reference.reachabilityFence(this);
}
}
public TextBox[] getRectsForPlaceholders() {
try {
Stats.onNativeCall();
return _nGetRectsForPlaceholders(_ptr);
} finally {
Reference.reachabilityFence(this);
}
}
public PositionWithAffinity getGlyphPositionAtCoordinate(float dx, float dy) {
try {
Stats.onNativeCall();
int res = _nGetGlyphPositionAtCoordinate(_ptr, dx, dy);
if (res >= 0)
return new PositionWithAffinity(res, Affinity.DOWNSTREAM);
else
return new PositionWithAffinity(-res-1, Affinity.UPSTREAM);
} finally {
Reference.reachabilityFence(this);
}
}
public IRange getWordBoundary(int offset) {
try {
Stats.onNativeCall();
return IRange._makeFromLong(_nGetWordBoundary(_ptr, offset));
} finally {
Reference.reachabilityFence(this);
}
}
public LineMetrics[] getLineMetrics() {
try {
if (_text == null)
return new LineMetrics[0];
Stats.onNativeCall();
return _nGetLineMetrics(_ptr, Native.getPtr(_text));
} finally {
Reference.reachabilityFence(this);
Reference.reachabilityFence(_text);
}
}
public long getLineNumber() {
try {
Stats.onNativeCall();
return _nGetLineNumber(_ptr);
} finally {
Reference.reachabilityFence(this);
}
}
public Paragraph markDirty() {
Stats.onNativeCall();
_nMarkDirty(_ptr);
return this;
}
public int getUnresolvedGlyphsCount() {
try {
Stats.onNativeCall();
return _nGetUnresolvedGlyphsCount(_ptr);
} finally {
Reference.reachabilityFence(this);
}
}
public Paragraph updateAlignment(Alignment alignment) {
Stats.onNativeCall();
_nUpdateAlignment(_ptr, alignment.ordinal());
return this;
}
// public Paragraph updateText(int from, String text) {
// Stats.onNativeCall();
// _nUpdateText(_ptr, from, text);
// // TODO: update _text
// return this;
// }
public Paragraph updateFontSize(int from, int to, float size) {
try {
if (_text != null) {
Stats.onNativeCall();
_nUpdateFontSize(_ptr, from, to, size, Native.getPtr(_text));
}
return this;
} finally {
Reference.reachabilityFence(_text);
}
}
public Paragraph updateForegroundPaint(int from, int to, Paint paint) {
try {
if (_text != null) {
Stats.onNativeCall();
_nUpdateForegroundPaint(_ptr, from, to, Native.getPtr(paint), Native.getPtr(_text));
}
return this;
} finally {
Reference.reachabilityFence(paint);
Reference.reachabilityFence(_text);
}
}
public Paragraph updateBackgroundPaint(int from, int to, Paint paint) {
try {
if (_text != null) {
Stats.onNativeCall();
_nUpdateBackgroundPaint(_ptr, from, to, Native.getPtr(paint), Native.getPtr(_text));
}
return this;
} finally {
Reference.reachabilityFence(paint);
Reference.reachabilityFence(_text);
}
}
@ApiStatus.Internal
public Paragraph(long ptr, ManagedString text) {
super(ptr, _FinalizerHolder.PTR);
Stats.onNativeCall();
_text = text;
}
@ApiStatus.Internal
public static class _FinalizerHolder {
public static final long PTR = _nGetFinalizer();
}
public static native long _nGetFinalizer();
public static native float _nGetMaxWidth(long ptr);
public static native float _nGetHeight(long ptr);
public static native float _nGetMinIntrinsicWidth(long ptr);
public static native float _nGetMaxIntrinsicWidth(long ptr);
public static native float _nGetAlphabeticBaseline(long ptr);
public static native float _nGetIdeographicBaseline(long ptr);
public static native float _nGetLongestLine(long ptr);
public static native boolean _nDidExceedMaxLines(long ptr);
public static native void _nLayout(long ptr, float width);
public static native long _nPaint(long ptr, long canvasPtr, float x, float y);
public static native TextBox[] _nGetRectsForRange(long ptr, int start, int end, int rectHeightMode, int rectWidthMode);
public static native TextBox[] _nGetRectsForPlaceholders(long ptr);
public static native int _nGetGlyphPositionAtCoordinate(long ptr, float dx, float dy);
public static native long _nGetWordBoundary(long ptr, int offset);
public static native LineMetrics[] _nGetLineMetrics(long ptr, long textPtr);
public static native long _nGetLineNumber(long ptr);
public static native void _nMarkDirty(long ptr);
public static native int _nGetUnresolvedGlyphsCount(long ptr);
public static native void _nUpdateAlignment(long ptr, int Align);
// public static native void _nUpdateText(long ptr, int from, String text);
public static native void _nUpdateFontSize(long ptr, int from, int to, float size, long textPtr);
public static native void _nUpdateForegroundPaint(long ptr, int from, int to, long paintPtr, long textPtr);
public static native void _nUpdateBackgroundPaint(long ptr, int from, int to, long paintPtr, long textPtr);
}