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

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

There is a newer version: 0.116.2
Show newest version
package io.github.humbleui.skija;

import java.lang.ref.*;
import java.util.function.*;
import org.jetbrains.annotations.*;
import io.github.humbleui.skija.impl.*;
import io.github.humbleui.types.*;

public class Picture extends RefCnt {
    static { Library.staticLoad(); }
    
    @ApiStatus.Internal
    public Picture(long ptr) {
        super(ptr);
    }

    /**
     * Recreates Picture that was serialized into data. Returns constructed Picture
     * if successful; otherwise, returns null. Fails if data does not permit
     * constructing valid Picture.
     */
    @Nullable
    public static Picture makeFromData(Data data) {
        try {
            Stats.onNativeCall();
            long ptr = _nMakeFromData(Native.getPtr(data));
            return ptr == 0 ? null : new Picture(ptr);
        } finally {
            Reference.reachabilityFence(data);
        }
    }

    /**
     * 

Replays the drawing commands on the specified canvas. In the case that the * commands are recorded, each command in the Picture is sent separately to canvas.

* *

To add a single command to draw Picture to recording canvas, call * {@link Canvas#drawPicture} instead.

* * @param canvas receiver of drawing commands * @return this * * @see https://fiddle.skia.org/c/@Picture_playback */ public Picture playback(Canvas canvas) { return playback(canvas, null); } /** *

Replays the drawing commands on the specified canvas. In the case that the * commands are recorded, each command in the Picture is sent separately to canvas.

* *

To add a single command to draw Picture to recording canvas, call * {@link Canvas#drawPicture} instead.

* * @param canvas receiver of drawing commands * @param abort return true to interrupt the playback * @return this * * @see https://fiddle.skia.org/c/@Picture_playback */ public Picture playback(Canvas canvas, @Nullable BooleanSupplier abort) { try { Stats.onNativeCall(); _nPlayback(_ptr, Native.getPtr(canvas), abort); return this; } finally { Reference.reachabilityFence(canvas); } } /** *

Returns cull Rect for this picture, passed in when Picture was created. * Returned Rect does not specify clipping Rect for Picture; cull is hint * of Picture bounds.

* *

Picture is free to discard recorded drawing commands that fall outside cull.

* * @return bounds passed when Picture was created * * @see https://fiddle.skia.org/c/@Picture_cullRect */ public Rect getCullRect() { try { Stats.onNativeCall(); return _nGetCullRect(_ptr); } finally { Reference.reachabilityFence(this); } } /** * Returns a non-zero value unique among Picture in Skia process. * * @return identifier for Picture */ public int getUniqueId() { try { Stats.onNativeCall(); return _nGetUniqueId(_ptr); } finally { Reference.reachabilityFence(this); } } /** * @return storage containing Data describing Picture. * * @see https://fiddle.skia.org/c/@Picture_serialize */ public Data serializeToData() { try { Stats.onNativeCall(); return new Data(_nSerializeToData(_ptr)); } finally { Reference.reachabilityFence(this); } } /** *

Returns a placeholder Picture. Result does not draw, and contains only * cull Rect, a hint of its bounds. Result is immutable; it cannot be changed * later. Result identifier is unique.

* *

Returned placeholder can be intercepted during playback to insert other * commands into Canvas draw stream.

* * @param cull placeholder dimensions * @return placeholder with unique identifier * * @see https://fiddle.skia.org/c/@Picture_MakePlaceholder */ public static Picture makePlaceholder(@NotNull Rect cull) { Stats.onNativeCall(); return new Picture(_nMakePlaceholder(cull._left, cull._top, cull._right, cull._bottom)); } /** * Returns the approximate number of operations in SkPicture. Returned value * may be greater or less than the number of SkCanvas calls * recorded: some calls may be recorded as more than one operation, other * calls may be optimized away. * * @return approximate operation count * * @see https://fiddle.skia.org/c/@Picture_approximateOpCount */ public int getApproximateOpCount() { try { Stats.onNativeCall(); return _nGetApproximateOpCount(_ptr); } finally { Reference.reachabilityFence(this); } } /** * Returns the approximate byte size of Picture. Does not include large objects * referenced by Picture. * * @return approximate size * * @see https://fiddle.skia.org/c/@Picture_approximateBytesUsed */ public long getApproximateBytesUsed() { try { Stats.onNativeCall(); return _nGetApproximateBytesUsed(_ptr); } finally { Reference.reachabilityFence(this); } } /** * Return a new shader that will draw with this picture. The tile rect is considered * equal to the picture bounds. * * @param tmx The tiling mode to use when sampling in the x-direction. * @param tmy The tiling mode to use when sampling in the y-direction. * @param mode How to filter the tiles * @return Returns a new shader object. Note: this function never returns null. */ @NotNull public Shader makeShader(@NotNull FilterTileMode tmx, @NotNull FilterTileMode tmy, @NotNull FilterMode mode) { return makeShader(tmx, tmy, mode, null, null); } /** * Return a new shader that will draw with this picture. The tile rect is considered * equal to the picture bounds. * * @param tmx The tiling mode to use when sampling in the x-direction. * @param tmy The tiling mode to use when sampling in the y-direction. * @param mode How to filter the tiles * @param localMatrix Optional matrix used when sampling * @return Returns a new shader object. Note: this function never returns null. */ @NotNull public Shader makeShader(@NotNull FilterTileMode tmx, @NotNull FilterTileMode tmy, @NotNull FilterMode mode, @Nullable Matrix33 localMatrix) { return makeShader(tmx, tmy, mode, localMatrix, null); } /** * Return a new shader that will draw with this picture. * * @param tmx The tiling mode to use when sampling in the x-direction. * @param tmy The tiling mode to use when sampling in the y-direction. * @param mode How to filter the tiles * @param localMatrix Optional matrix used when sampling * @param tileRect The tile rectangle in picture coordinates: this represents the subset * (or superset) of the picture used when building a tile. It is not * affected by localMatrix and does not imply scaling (only translation * and cropping). If null, the tile rect is considered equal to the picture * bounds. * @return Returns a new shader object. Note: this function never returns null. */ @NotNull public Shader makeShader(@NotNull FilterTileMode tmx, @NotNull FilterTileMode tmy, @NotNull FilterMode mode, @Nullable Matrix33 localMatrix, @Nullable Rect tileRect) { try { Stats.onNativeCall(); float[] arr = localMatrix == null ? null : localMatrix._mat; return new Shader(_nMakeShader(_ptr, tmx.ordinal(), tmy.ordinal(), mode.ordinal(), arr, tileRect)); } finally { Reference.reachabilityFence(this); } } @ApiStatus.Internal public static native long _nMakeFromData(long dataPtr /*, SkDeserialProcs */); @ApiStatus.Internal public static native void _nPlayback(long ptr, long canvasPtr, @Nullable BooleanSupplier abort); @ApiStatus.Internal public static native Rect _nGetCullRect(long ptr); @ApiStatus.Internal public static native int _nGetUniqueId(long ptr); @ApiStatus.Internal public static native long _nSerializeToData(long ptr /*, SkSerialProcs */); @ApiStatus.Internal public static native long _nMakePlaceholder(float left, float top, float right, float bottom); @ApiStatus.Internal public static native int _nGetApproximateOpCount(long ptr); @ApiStatus.Internal public static native long _nGetApproximateBytesUsed(long ptr); @ApiStatus.Internal public static native long _nMakeShader(long ptr, int tmx, int tmy, int filterMode, float[] localMatrix, Rect tileRect); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy