shared/java/AnimationFrameInfo.java (26 lines of code) (raw):
package org.jetbrains.skija;
import lombok.*;
import org.jetbrains.annotations.*;
/**
* Information about individual frames in a multi-framed image.
*/
@lombok.Data @AllArgsConstructor @With
public class AnimationFrameInfo {
@ApiStatus.Internal
public AnimationFrameInfo(int requiredFrame, int duration, boolean fullyReceived, int alphaTypeOrdinal, boolean hasAlphaWithinBounds, int disposalMethodOrdinal, int blendModeOrdinal, IRect frameRect) {
this(requiredFrame, duration, fullyReceived, ColorAlphaType._values[alphaTypeOrdinal], hasAlphaWithinBounds, AnimationDisposalMode._values[disposalMethodOrdinal], BlendMode._values[blendModeOrdinal], frameRect);
}
/**
* <p>The frame that this frame needs to be blended with, or
* -1 if this frame is independent (so it can be
* drawn over an uninitialized buffer).</p>
*
* <p>Note that this is the *earliest* frame that can be used
* for blending. Any frame from [_requiredFrame, i) can be
* used, unless its getDisposalMethod() is {@link AnimationDisposalMode#RESTORE_PREVIOUS}.</p>
*/
@ApiStatus.Internal
public int _requiredFrame;
/**
* Number of milliseconds to show this frame.
*/
@ApiStatus.Internal
public int _duration;
/**
* <p>Whether the end marker for this frame is contained in the stream.</p>
*
* <p>Note: this does not guarantee that an attempt to decode will be complete.
* There could be an error in the stream.</p>
*/
@ApiStatus.Internal
public boolean _fullyReceived;
/**
* <p>This is conservative; it will still return non-opaque if e.g. a
* color index-based frame has a color with alpha but does not use it.</p>
*/
@ApiStatus.Internal
public ColorAlphaType _alphaType;
/**
* <p>Whether the updated rectangle contains alpha.</p>
*
* <p>This is conservative; it will still be set to true if e.g. a color
* index-based frame has a color with alpha but does not use it. In
* addition, it may be set to true, even if the final frame, after
* blending, is opaque.</p>
*/
@ApiStatus.Internal
public boolean _hasAlphaWithinBounds;
/**
* <p>How this frame should be modified before decoding the next one.</p>
*/
@ApiStatus.Internal
public AnimationDisposalMode _disposalMethod;
/**
* <p>How this frame should blend with the prior frame.</p>
*/
@ApiStatus.Internal
public BlendMode _blendMode;
/**
* <p>The rectangle updated by this frame.</p>
*
* <p>It may be empty, if the frame does not change the image. It will
* always be contained by {@link Codec#getSize()}.
*/
@ApiStatus.Internal
public IRect _frameRect;
}