- Update gradle to 8.7
- Update Kotlin to 1.8.20.
- Fix opening a corrupted GIFs could result in an endless loop.
- Minor decoding optimization.
- GifDrawable implements
mutate
properly. - GifDrawable will only use ARGB_8888 bitmaps internally for more accurate colors.
- Reduce memory usage of GifDrawable.
- Speed optimization.
- Update AGP to 8.1.1
- Hot fix: Fix compatibiliy with Android pre-Tiramisu.
- Hot fix: Fix BufferedReplayInputStream trying to read after close.
- Fix concurrency bug in BufferedReplayInputStream.
- Bump libraries.
- Fix publication of sources and doc.
- Rewrite the BufferedRandomAccessFile so that the file gets closed between read.
- android-drawable now targets Android SDK 33.
- Fix concurrency issue with the bitmap field in GifDrawable.
- Fix paint dithering to use 565 for non transparent gifs.
- Fix recycle of bitmaps, should behave nicer for memory.
- Target kotlin 1.7.10
- Rewrite GifDrawable (again), it will now work properly on Android 12, and Android at large (Yup, was broken).
- Save current frame index, so that we display proper frame when starting, stopping or pausing the GifDrawable.
- Bump Android sdk to 32, AGP and dependencies
- Add
getDelay
method to GIF.
setVisible
will try to be less smart, and not assume that visibility change is actually reliable.
- Better frame timing for GifDrawawble.
- GifDrawable now implements setVisible properly, and the frame preparation future will be properly cancelled.
- Gif now implements AutoClosable.
- Rewrite GifDrawable in pure android to ditch dependencies to coroutines.
- Arbitrarily decide it's the 1.0.0. Pretty stable I would say.
- Project updated to kotlin 1.6.0.
- Project now targets java 11.
- Opening a Gif from a file will now use a buffered RandomAccessFile, to limit read operations.
- As GifDescriptor can be used by multiple Gifs, we synchronize the read block when decoding a frame to avoid weird multi-threading artifacts.
- Simplify bitmap pool, aka stop pooling. It's not that useful.
- GifDrawable's backgroundColor is now a val.
- Fix an issue where the decoder would not reset the canvas before restarting the animation loop. Depending on the disposal method of the last frame, it could lead to artifacts.
- Breaking:
advance()
now decodes the frame. It used to be done by thegetFrame
methods. With this change,getFrames
will either simply copy the internal buffer, or calledadvance
if needed. - Breaking:
decoder.Result
class has been replaced by thekotlin.Result
class, now stable. Several function in the Gif class that would return nullable now returnkotlin.Result
instead. - Bump kotlin to 1.5.31, AGP to 7.0.2
- Target SDK 31
- Add a helper method to create a shallow copy of a Gif sharing GifDescriptors.
- Fix a signed error in Dimension and Position: they were short instead of unsigned short, causing issues for giant gifs.
- Memory optimization (free data from memory early).
- Get rid of the useless BitmapShader in the GifDrawable.
- Update documentation.
- Minor refactor (Point becomes Position).
- Upgrade Android Gradle Plugin to 7.0.0, and dependencies in general.
- Deprecate setRepeatCount and getRepeatCount in the GifDrawable.
- Upgrade gradle wrapper to 7.1.1.
- Bump libraries, including AGP and kotlin.
- Add a few comments there and there.
- Change package of utility classes.
- Update kotlin to 1.5.0.
- Update AGP to 4.2.1.
- Get rid of netty, replaced by a naive homebrew solution.
- Breaking: parser and Gif now avoid Exceptions, in favor of Result<>.
- Bump a few libs and kotlin.
- Introduce an API to decode files directly via a random access file instead of loading everthing from an InputStream.
- Change package name to app.redwarp.gif (because I don't own the domain redwarp.net).
- Change publication repository to Maven Central.
- Adds a constant state to the GifDrawable, to facilitate copy. Uncharted territory.
- Increase robustness of GIF parsing by not throwing an exception on a wrong disposal method. Instead, default to "not specified".
- Improve timing of frames by having the loop independant of the draw call.
- Made sure that if the drawable is not drawn again, the loop stops. No need to calculate in vacum.
- Code cleanup
- Initial release
- API is not stable/final yet.