# Changelog

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.8.3] - 2026-10-06

### Added

- Add `VG_LOG_DECLARE_MODULE()`, called once by each C source file that logs, and the `VG_LOG_ERROR()` and `VG_LOG_INFO()` log macros to the C Module MicroVG.

### Changed

- Log the C Modules without `mej_log.h`: through the VEE Port Essentials logger when `veeport_logger.h` is in the include path, and through `printf` with the same `[ERROR - MICROVG] : ` format otherwise.
- Compile the MicroVG informative logs only when `VG_LOG_INFO_ENABLED` is `1`. Migration: replace `MEJ_LOG_MICROVG` and `MEJ_LOG_INFO_LEVEL` with `VG_LOG_INFO_ENABLED` set to `1`.
- Require the C Module MicroVG 8.0.3 in the C Modules VGLite, NemaVG and FreeType.

### Deprecated

- Deprecate `MEJ_LOG_ERROR_MICROVG()` and `MEJ_LOG_INFO_MICROVG()`. Migration: use `VG_LOG_ERROR()` and `VG_LOG_INFO()`.

### Fixed

- Return the box the glyphs actually draw from `VectorFont.measureStringWidth()` and `VectorFont.measureStringHeight()`.
- Return a text measure that is positive or zero, and 0 when nothing is drawn.
- Document that the measured width is the ink the glyphs draw, not the sum of their advances.
- Raise `VectorGraphicsException` on every negative value a text measure native returns.
- Anchor the first drawn pixel of `VectorGraphicsPainter.drawString()` on `x`, as its documentation states.
- Measure and draw text on the Front Panel as the embedded implementation does, with the box the glyphs draw and the letter spacing in complex layout.
- [Front Panel] Round the MicroUI text width up, as the embedded implementation does, which may widen a measure by up to one pixel.
- [Front Panel] Measure a text as the union of the ink of all its glyphs.
- [Front Panel] Return a text measure that is positive or zero, and 0 when nothing is drawn.
- [Front Panel] Start a drawn text on the leftmost pixel any of its glyphs draws.
- Name the MicroUI images heap in the `plutovg` back end's out-of-memory trace, which said only `OOM`.
- Remove the colored emoji support when `VG_FEATURE_FREETYPE_COLORED_EMOJI` is `0`, as documented: a VEE Port that draws colored emoji sets it to `1`.
- Refuse to load a font that declares no EM size: `VectorFont.loadFont()` throws a `VectorGraphicsException` with `FONT_INVALID`.
- Fix a read of freed memory when closing a font compiled with the application or stored in byte-addressable memory, when `VG_FEATURE_FONT_EXTERNAL` is `1`.
- [Image Generator] Report why a vector image could not be converted, and how to convert it on a machine without an X server.

## [1.8.2] - 2026-09-15

### Changed

- Accept `plutovg` as a MicroVG implementation, a software vector renderer used to validate the Pack.

### Fixed

- Do not generate an element for a vector image path that draws nothing.
- [Front Panel] Measure and draw text as the embedded implementation does.
- [Front Panel] Draw right-to-left text in its own direction.
- [Front Panel] Draw text on a circle without distorting its glyphs.
- [Front Panel] Stop failing when measuring an empty string.
- [Front Panel] Measure and draw text faster, from seconds to milliseconds on long strings.

## [1.8.1] - 2026-01-27

### Fixed

- Fix the `kernel.intern` file to ensure compliance with the implementation of MicroVG.

## [1.8.0] - 2026-01-23

### Changed

- Harmonize the trace events (SystemView description file `SYSVIEW_MicroVG.txt` is updated).
- [Front Panel] Trace the drawing functions like embedded side.

### Fixed

- [Front Panel] Fix the Nema image decoder: fill rule was not correctly decoded.
- Fix the memory leak when a feature is killed whereas a BufferedVectorImage, an external RAW image or a filtered image is opened.
- Fix the closing of a font that was opened twice, which caused both fonts (same object) to close simultaneously.
- Fix the clearing of a BufferedVectorImage when its clip is null: the content was not deleted at all.

### Removed

- Remove the cache of the vector fonts: each call to `VectorFont.loadFont()` creates a new instance.

## [1.7.2] - 2025-09-16

### Fixed

- [Front Panel] Fix the drawing of gradient in a BufferedVectorImage.
- Include `SYSVIEW_MicroVG.txt` in the MicroVG library (like MicroUI library).
- Fix the generation of RAW vector images when building a feature.

## [1.7.1] - 2025-04-09

### Fixed

- [intern] Fix the values of the error causes in the javadoc of `VectorGraphicsException`.
- [Front Panel] Fix the drawing bounds of the BufferedVectorImage's elements.
- [Front Panel] Fix the drawing of a BufferedVectorImage outside the destination's clip.
- [Front Panel] Fix the drawing of the BufferedVectorImage's elements which are outside the BufferedVectorImage's clip.
- [Front Panel] Fix the management of transparent gradients for the NemaVG GPU.
- [Front Panel] Fix the drawing of gradient paths with zero or one color. 

## [1.7.0] - 2024-10-09

### Added

- Add the extension of MicroUI Font from a MicroVG Font.

### Changed

- Change the minimal UI Pack compatibility: 14.1.0.
- [Front Panel] Compare the version fetched by the Front Panel project and the VEE Port.

### Fixed

- [Front Panel] Exclude the VG Front Panel fetched by the Front Panel project from the VEE Port's classpath.

## [1.6.0] - 2024-07-19

### Added

- Add the `nema` value for the MicroVG implementation (image generator and front panel).
- Add the publication of the Front Panel API and Image Generator Vector API to be able to extend the Front Panel VG and Image Generator VG engines in the VEE Port projects. 
- Add the properties `dynamicPath` and `dynamicLinearGradient` (in `microvg.properties`) to disable respectively the support of dynamic paths and dynamic linear gradients on the simulator (enabled by default). 
- Add the properties `path.length` and `chunk.length` (in `microvg.properties`) to configure the construction of the dynamic paths (respectively the initial size and the additional chunck size).
- Add the structure that represents a MicroVG Image in C: `MICROVG_Image`.

### Changed

- Pass the MicroVG implementation to the Image Generator.
- Increase the UI Pack dependency to version 14.0.1.
- Change the semantic of the LLAPI `LLVG_GRADIENT_IMPL_initializeGradient()`: the positions array cannot be null.
- Change the signatures of `LLVG_PAINTER_IMPL_drawImage()` and `LLVG_BVI_IMPL_map_context()` to use the new type `MICROVG_Image`.

## [1.5.1] - 2024-04-11

### Fixed

- Fix the drawing of a BufferedVectorImage in a BufferedVectorImage with a clip on the simulator.
- Fix the drawing of a glyph with path overlap on the simulator.

## [1.5.0] - 2024-02-15

### Changed

- Make the VG Pack compatible with the UI Pack 14.0.0.

### Fixed

- Fix comment in header file `LLVG_BVI_impl.h`.
- Fix the exception when loading a font with an empty path.
- Fix the exception when getting an image with an empty path.
- Fix the release of the BVI resources (use the hook of the UI Pack 13.7 to close the custom image's resources). 
- Fix the memory leak on images (ResourceVectorImage and BufferedVectorImage) on the simulator.

## [1.4.2] - 2023-11-13

### Fixed

- Fix dynamic paths larger than 64 KB.

## [1.4.1] - 2023-09-21

### Changed

- Update the license.
   
### Fixed

- Fix the path command "move relative". 

## [1.4.0] - 2023-07-21

### Changed

- Implement MicroVG 1.4.0.

### Fixed

- Fix the UI Pack minimal compatible version (13.5.0).

## [1.3.0] - 2023-05-10

### Changed

- Implement MicroVG 1.3.0.
- [Front Panel] Change the implementation to be compatible with the UI Pack 13.5.0.

### Fixed

- [Front Panel] Simplify pixels data conversion after drawing.
- [Image Generator] Support SVG clip-path feature.

## [1.2.1] - 2023-02-06

### Fixed

- [Front Panel] Fix the cropped images when using GraphicsContext clip and translation.
- [Front Panel] Fix AWT `RasterFormatException` exception.

## [1.2.0] - 2022-12-30

### Added

- Add "fill alpha" and "stroke alpha" animations to gradient elements.

### Changed

- Implement MicroVG 1.2.0.
- Change the VectorImage internal format: _raw_ format instead of _immutables_ format.

### Fixed

- [Front Panel] Fix the redirection of fillEllipseArc to the right software alogorithm.

## [1.1.2] - 2022-10-14

### Changed

- Update Vector Image Generator to version 1.0.3 for faster conversion.

## [1.1.1] - 2022-09-05

### Fixed

- Fix the README.md file for publication.

## [1.1.0] - 2022-09-02

### Added

- Add a sanity check on UI Pack fetched by the platform and the minimal version expected by the VG pack.
- Add the VG Pack version in the header file LLVG_impl.h.

### Changed

- Implement MicroVG 1.1.0 (can close a VectorFont, Matrix.getSNIContext()). 
- Allow to load a VectorFont from the external resources. 
- Add layout modes (simple or complex) feature to VectorFont(see limitations in README.md).
- Join character bboxes at baseline for drawStringOnCircle.

### Fixed

- Fix NullPointerException while sorting TranslateXY VectorDrawableObjectAnimator in vectorimage-converter.

## [1.0.1] - 2022-05-16

### Fixed

- Fix incorrect transformation of animated paths while creating a filteredImage.
- Fix incorrect detection of overlapping paths in vector images.

## [1.0.0] - 2022-05-13

### Added

- Initial revision.
- Implement MicroVG-1.0.0

---
_Copyright 2022-2026 MicroEJ Corp. All rights reserved._\
_MicroEJ Corp. PROPRIETARY/CONFIDENTIAL. Use is subject to license terms._\
_Build: 7E4D1F7C_
