microvg  8.0.3
microvg
Macros | Functions | Variables
vg_helper.c File Reference

MicroEJ MicroVG library low level API: helper to implement library natives methods. More...

#include "vg_configuration.h"
#include <LLVG_MATRIX_impl.h>
#include "vg_helper.h"
#include "vg_trace.h"
#include "vg_drawing.h"
#include "bsp_util.h"

Go to the source code of this file.

Macros

#define MIN_HIGH_SURROGATE   ((unsigned short)0xD800)
 
#define MAX_HIGH_SURROGATE   ((unsigned short)0xDBFF)
 
#define MIN_LOW_SURROGATE   ((unsigned short)0xDC00)
 
#define MAX_LOW_SURROGATE   ((unsigned short)0xDFFF)
 
#define MIN_SUPPLEMENTARY_CODE_POINT   0x010000
 
#define GET_NEXT_CHARACTER(t, l, o)   ((o) >= (l) ? (unsigned short)0 : (t)[o])
 
#define IS_SIMPLE_LAYOUT   true
 

Functions

void LLVG_IMPL_initialize (jint trace_group)
 
BSP_DECLARE_WEAK_FCNT void LLUI_DISPLAY_waitAsynchronousDrawingEnd (void)
 Waits until the end of current asynchronous drawing. More...
 
int VG_HELPER_get_utf (const unsigned short *textCharRam, int length, int *offset)
 Gets the UTF character from a text buffer at the given offset and updates the offset to point to the next character. More...
 
const jfloat * VG_HELPER_check_matrix (const jfloat *matrix)
 Checks if the matrix is null. In that case, returns an identity matrix. This allows to prevent to make some checks on the matrix in the algorithms. More...
 
uint32_t VG_HELPER_apply_alpha (uint32_t color, uint32_t alpha)
 Applies the global opacity on given color. More...
 
void VG_HELPER_prepare_matrix (jfloat *dest, jfloat x, jfloat y, const jfloat *matrix)
 Converts a MicroVG matrix in another MicroVG matrix applying a translation. More...
 

Variables

int32_t LLVG_TRACE_group
 Identifies the MicroVG group to trace an event.
 

Detailed Description

MicroEJ MicroVG library low level API: helper to implement library natives methods.

Author
MicroEJ Developer Team
Version
8.0.3

Definition in file vg_helper.c.

Function Documentation

◆ LLUI_DISPLAY_waitAsynchronousDrawingEnd()

BSP_DECLARE_WEAK_FCNT void LLUI_DISPLAY_waitAsynchronousDrawingEnd ( void  )

Waits until the end of current asynchronous drawing.

To avoid potential side effects from the release of objects (images, fonts) retained by a feature during the killing of that feature, ensure that no third-party components (e.g., GPU) are using these objects at the time of the kill.

UI packs with versions higher than 14.5.1 provide the blocking API LLUI_DISPLAY_waitAsynchronousDrawingEnd(). This API is stubbed on the VG Pack for backward compatibility issues between VG Pack 1.8.0 and UI Packs [14.4.0, 14.5.1]. However, it is highly recommended to use a UI Pack version greater than 14.5.1.

Definition at line 157 of file vg_helper.c.

157  {
158  // cannot wait the end of drawing with UI packs [14.4.0-14.5.1]
159 }

◆ VG_HELPER_apply_alpha()

uint32_t VG_HELPER_apply_alpha ( uint32_t  color,
uint32_t  alpha 
)

Applies the global opacity on given color.

Parameters
[in]colorthe 32-bit color.
[in]alphathe opacity.
Returns
the new color.

Definition at line 352 of file vg_helper.c.

352  {
353  uint32_t color_alpha = (((color >> 24) & (uint32_t)0xff) * alpha) / (uint32_t)255;
354  return (color & (uint32_t)0xffffff) | (color_alpha << 24);
355 }

◆ VG_HELPER_check_matrix()

const jfloat* VG_HELPER_check_matrix ( const jfloat *  matrix)

Checks if the matrix is null. In that case, returns an identity matrix. This allows to prevent to make some checks on the matrix in the algorithms.

The identity matrix can be used several times by the same algorithm. The caller must not modify it (read-only matrix).

Parameters
[in]matrixthe matrix to check
Returns
the matrix or an identity matrix

Definition at line 347 of file vg_helper.c.

347  {
348  return (NULL == matrix) ? g_identity_matrix : matrix;
349 }

◆ VG_HELPER_get_utf()

int VG_HELPER_get_utf ( const unsigned short *  text,
int  length,
int *  offset 
)

Gets the UTF character from a text buffer at the given offset and updates the offset to point to the next character.

Some characters have some special values; they are made up of two Unicode characters in two specific ranges such that the first Unicode character is in one range (for example 0xD800-0xD8FF) and the second Unicode character is in the second range (for example 0xDC00-0xDCFF). This is called a surrogate pair.

If a surrogate pair is incomplete (missing second character), this function returns "0" (error) and does not update the offset.

Parameters
[in]texttext buffer encoded in UTF16 where to read UTF character.
[in]lengthlenght of the text buffer.
[in,out]offsetoffset in the text buffer where to read UTF character. Updated to the next character position.
Returns
The decoded UTF character.

Definition at line 166 of file vg_helper.c.

166  {
167  unsigned short highPart = GET_NEXT_CHARACTER(textCharRam, length, *offset);
168  int ret = 0; // means "error" (see doc)
169 
170  if ((highPart >= MIN_HIGH_SURROGATE) && (highPart <= MAX_HIGH_SURROGATE)) {
171  if (*offset < (length - 1)) {
172  unsigned short lowPart = GET_NEXT_CHARACTER(textCharRam, length, *(offset) + 1);
173 
174  if ((lowPart >= MIN_LOW_SURROGATE) && (lowPart <= MAX_LOW_SURROGATE)) {
175  *offset += 2;
176 
177  ret = 0;
178  ret += ((int)highPart - (int)MIN_HIGH_SURROGATE);
179  ret <<= (int)10;
180  ret += ((int)lowPart - (int)MIN_LOW_SURROGATE);
181  ret += (int)MIN_SUPPLEMENTARY_CODE_POINT;
182  }
183  // else: invalid surrogate pair
184  }
185  // else: missing second part of surrogate pair
186  } else {
187  *offset += 1;
188 
189  // standard character
190  ret = 0x0000FFFF & (int)highPart;
191  }
192 
193  return ret;
194 }

◆ VG_HELPER_prepare_matrix()

void VG_HELPER_prepare_matrix ( jfloat *  dest,
jfloat  x,
jfloat  y,
const jfloat *  matrix 
)

Converts a MicroVG matrix in another MicroVG matrix applying a translation.

Parameters
[out]destthe MicroVG matrix to set
[in]xthe X translation to apply
[in]ythe Y translation to apply
[in]matrixthe MicroVG transformation to apply (can be null)

Definition at line 358 of file vg_helper.c.

358  {
359  const jfloat *local_matrix = VG_HELPER_check_matrix(matrix);
360 
361  if ((0 != x) || (0 != y)) {
362  // Create translate matrix for initial x,y translation from graphicscontext.
363  LLVG_MATRIX_IMPL_setTranslate(dest, x, y);
364  LLVG_MATRIX_IMPL_concatenate(dest, local_matrix);
365  } else {
366  // use original matrix
367  LLVG_MATRIX_IMPL_copy(dest, local_matrix);
368  }
369 }
const jfloat * VG_HELPER_check_matrix(const jfloat *matrix)
Checks if the matrix is null. In that case, returns an identity matrix. This allows to prevent to mak...
Definition: vg_helper.c:347