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

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

There is a newer version: 0.116.3
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 PictureRecorder extends Managed {
    static { Library.staticLoad(); }
    
    public PictureRecorder() {
        this(_nMake());
        Stats.onNativeCall();
    }

    @ApiStatus.Internal
    public PictureRecorder(long ptr) {
        super(ptr, _FinalizerHolder.PTR);
    }

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

    /**
     * Returns the canvas that records the drawing commands.
     * 
     * @param bounds the cull rect used when recording this picture. Any drawing the falls outside
     *               of this rect is undefined, and may be drawn or it may not.
     * @return the canvas.
    */
    public Canvas beginRecording(Rect bounds) {
        try {
            Stats.onNativeCall();
            return new Canvas(_nBeginRecording(_ptr, bounds._left, bounds._top, bounds._right, bounds._bottom), false, this);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    /**
     * @return  the recording canvas if one is active, or null if recording is not active.
     */
    @Nullable
    public Canvas getRecordingCanvas() {
        try {
            Stats.onNativeCall();
            long ptr = _nGetRecordingCanvas(_ptr);
            return ptr == 0 ? null : new Canvas(ptr, false, this);
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    /**
     * 

Signal that the caller is done recording. This invalidates the canvas returned by * {@link #beginRecording(Rect)}/{@link #getRecordingCanvas()}.

* *

The returned picture is immutable. If during recording drawables were added to the canvas, * these will have been "drawn" into a recording canvas, so that this resulting picture will * reflect their current state, but will not contain a live reference to the drawables * themselves.

*/ public Picture finishRecordingAsPicture() { try { Stats.onNativeCall(); return new Picture(_nFinishRecordingAsPicture(_ptr)); } finally { Reference.reachabilityFence(this); } } /** * Signal that the caller is done recording, and update the cull rect to use for bounding * box hierarchy (BBH) generation. The behavior is the same as calling * {@link #finishRecordingAsPicture()}, except that this method updates the cull rect * initially passed into {@link #beginRecording(Rect)}. * * @param cull the new culling rectangle to use as the overall bound for BBH generation * and subsequent culling operations. * @return the picture containing the recorded content. */ public Picture finishRecordingAsPicture(@NotNull Rect cull) { try { Stats.onNativeCall(); return new Picture(_nFinishRecordingAsPictureWithCull(_ptr, cull._left, cull._top, cull._right, cull._bottom)); } finally { Reference.reachabilityFence(this); } } // TODO /** *

Signal that the caller is done recording. This invalidates the canvas returned by * {@link #beginRecording(Rect)}/{@link #getRecordingCanvas()}.

* *

Unlike {@link #finishRecordingAsPicture()}, which returns an immutable picture, * the returned drawable may contain live references to other drawables (if they were added to * the recording canvas) and therefore this drawable will reflect the current state of those * nested drawables anytime it is drawn or a new picture is snapped from it (by calling * {@link Drawable#makePictureSnapshot()}).

*/ // public Drawable finishRecordingAsPicture(@NotNull Rect cull) { // Stats.onNativeCall(); // return new Drawable(_nFinishRecordingAsDrawable(_ptr, 0)); // } @ApiStatus.Internal public static native long _nMake(); @ApiStatus.Internal public static native long _nGetFinalizer(); @ApiStatus.Internal public static native long _nBeginRecording(long ptr, float left, float top, float right, float bottom); @ApiStatus.Internal public static native long _nGetRecordingCanvas(long ptr); @ApiStatus.Internal public static native long _nFinishRecordingAsPicture(long ptr); @ApiStatus.Internal public static native long _nFinishRecordingAsPictureWithCull(long ptr, float left, float top, float right, float bottom); @ApiStatus.Internal public static native long _nFinishRecordingAsDrawable(long ptr); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy