1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-28 07:03:00 +08:00
lvgl/libs/nema_gfx/include/nema_vg_paint.h
2024-11-18 10:49:33 +08:00

242 lines
8.3 KiB
C

/* TSI 2023.xmo */
/*******************************************************************************
* Copyright (c) 2023 Think Silicon Single Member PC
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this header file and/or associated documentation files to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Materials, and to permit persons to whom the Materials are furnished to do
* so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Materials.
*
* MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
* NEMAGFX API. THE UNMODIFIED, NORMATIVE VERSIONS OF THINK-SILICON NEMAGFX
* SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT:
* https://think-silicon.com/products/software/nemagfx-api
*
* The software is provided 'as is', without warranty of any kind, express or
* implied, including but not limited to the warranties of merchantability,
* fitness for a particular purpose and noninfringement. In no event shall
* Think Silicon Single Member PC be liable for any claim, damages or other
* liability, whether in an action of contract, tort or otherwise, arising
* from, out of or in connection with the software or the use or other dealings
* in the software.
******************************************************************************/
/**
* @file
* @brief Paint operation related fuctions. Paint is an internal (opaque) struct of NemaVG.
* The functions defined here can be used access its parameters.
*
*/
#ifndef __NEMA_VG_PAINT_H__
#define __NEMA_VG_PAINT_H__
#include "nema_interpolators.h"
#include "nema_matrix3x3.h"
#include "nema_vg_context.h"
#include "nema_graphics.h"
#ifdef __cplusplus
extern "C" {
#endif
#define NEMA_VG_PAINT_COLOR (0x00U) /**< Fill with color */
#define NEMA_VG_PAINT_FILL (0x00U) /**< Deprecated - Fill with color (same as NEMA_VG_PAINT_COLOR) */
#define NEMA_VG_PAINT_GRAD_LINEAR (0x01U) /**< Fill with linear gradient */
#define NEMA_VG_PAINT_TEXTURE (0x02U) /**< Fill with texture */
#define NEMA_VG_PAINT_GRAD_RADIAL (0x03U) /**< Fill with radial gradient */
#define NEMA_VG_PAINT_GRAD_CONICAL (0x04U) /**< Fill with conical gradient */
#define NEMA_VG_PAINT_MAX_GRAD_STOPS (32) /**< Maximum gradient stops*/
/** \brief Create a paint object.
*
* \return Handle to the created paint object
*
*/
NEMA_VG_PAINT_HANDLE nema_vg_paint_create();
/** \brief Destroy a paint object.
*
* \param paint Handle to paint object that should be destroyed
*
*/
void nema_vg_paint_destroy(NEMA_VG_PAINT_HANDLE paint);
/** \brief Clear the parameters of a paint object.
*
* \param paint Pointer (handle) to paint object
*
*/
void nema_vg_paint_clear(NEMA_VG_PAINT_HANDLE paint);
/** \brief Set the paint type
*
* \param paint Pointer (handle) to paint
* \param type Paint type (NEMA_VG_PAINT_COLOR, NEMA_VG_PAINT_GRAD_LINEAR, NEMA_VG_PAINT_TEXTURE, NEMA_VG_PAINT_GRAD_RADIAL, NEMA_VG_PAINT_GRAD_CONICAL)
*
*/
void nema_vg_paint_set_type(NEMA_VG_PAINT_HANDLE paint, uint8_t type);
/** \brief Lock paint transformation to path. If locked, path and paint
* transformation will be in sync.
*
* \param paint Pointer to paint object
* \param locked 1 if locked (default), 0 if not locked
*
*/
void nema_vg_paint_lock_tran_to_path(NEMA_VG_PAINT_HANDLE paint, int locked);
/** \brief Set linear gradient to a paint object
*
* \param paint Pointer to paint object
* \param grad Pointer to gradient object
* \param x0 Linear gradient start point x coordinate
* \param y0 Linear gradient start point y coordinate
* \param x1 Linear gradient end point x coordinate
* \param y1 Linear gradient end point y coordinate
* \param sampling_mode Sampling mode. NEMA_TEX_BORDER defaults to NEMA_TEX_CLAMP
*
*/
void nema_vg_paint_set_grad_linear(NEMA_VG_PAINT_HANDLE paint,
NEMA_VG_GRAD_HANDLE grad,
float x0, float y0,
float x1, float y1,
nema_tex_mode_t sampling_mode);
/** \brief Set the paint color
*
* \param paint Pointer (handle) to paint object
* \param rgba Color to be set, in rgba (hex 0xAABBGGRR) format
*
*/
void nema_vg_paint_set_paint_color(NEMA_VG_PAINT_HANDLE paint, uint32_t rgba);
/** \brief Set the paint opacity
*
* \param paint Pointer (pointer) to paint object
* \param opacity Opacity to be set, 1 is fully opaque and 0 is fully transparent
*
*/
void nema_vg_paint_set_opacity(NEMA_VG_PAINT_HANDLE paint, float opacity);
/** \brief Set stroke width - DEPRECATED USE nema_vg_stroke_set_width
*
* \param paint Pointer (handle) to paint object
* \param stroke_width Stroke width to be set
*
*/
void nema_vg_paint_set_stroke_width(NEMA_VG_PAINT_HANDLE paint, float stroke_width);
/** \brief Set transformation matrix for texture
*
* \param paint Pointer (handle) to paint object
* \param m 3x3 transformation matrix
*
*/
void nema_vg_paint_set_tex_matrix(NEMA_VG_PAINT_HANDLE paint, nema_matrix3x3_t m);
/** \brief Set texture to paint object
*
* \param paint Pointer (handle) to paint
* \param text Pointer to texture image object
*
*/
void nema_vg_paint_set_tex(NEMA_VG_PAINT_HANDLE paint, nema_img_obj_t* tex);
/** \brief Set Lut-based (look-up-table) texture to paint object. See Nema Pixpresso User Manual regarding Lut formats
*
* \param paint Pointer (handle) to paint object
* \param lut_palette Pointer to the Palette of the Lut image object
* \param lut_indices Pointer to the indices of the Lut image object
*
*/
void nema_vg_paint_set_lut_tex(NEMA_VG_PAINT_HANDLE paint, nema_img_obj_t* lut_palette, nema_img_obj_t* lut_indices);
/** \brief Set Conical gradient to paint object
*
* \param paint Pointer (handle) to paint
* \param grad Pointer (handle) to gradient
* \param cx Conical gradient center point x coordinate
* \param cy Conical gradient center point y coordinate
* \param sampling_mode Sampling mode
*
*/
void nema_vg_paint_set_grad_conical(NEMA_VG_PAINT_HANDLE paint,
NEMA_VG_GRAD_HANDLE grad,
float cx, float cy,
nema_tex_mode_t sampling_mode);
/** \brief Set radial gradient to paint object
*
* \param paint Pointer (handle) to paint
* \param grad Pointer (handle) to gradient
* \param x0 Radial gradient center point x coordinate
* \param y0 Radial gradient center point y coordinate
* \param r Radial gradient radius
* \param sampling_mode Sampling mode
*
*/
void
nema_vg_paint_set_grad_radial(NEMA_VG_PAINT_HANDLE paint,
NEMA_VG_GRAD_HANDLE grad,
float x0, float y0,
float r,
nema_tex_mode_t sampling_mode);
/** \brief Set radial gradient to paint object, with different horizontal and vertical radius
*
* \param paint Pointer (handle) to paint
* \param grad Pointer (handle) to gradient
* \param x0 Radial gradient center point x coordinate
* \param y0 Radial gradient center point y coordinate
* \param rx Radial gradient radius on x axis
* \param ry Radial gradient radius on y axis
* \param sampling_mode Sampling mode
*
*/
void
nema_vg_paint_set_grad_radial2(NEMA_VG_PAINT_HANDLE paint,
NEMA_VG_GRAD_HANDLE grad,
float x0, float y0,
float rx, float ry,
nema_tex_mode_t sampling_mode);
/** \brief Create gradient object
*
* \return Handle (pointer) to the created gradient object
*/
NEMA_VG_GRAD_HANDLE
nema_vg_grad_create(void);
/** \brief Destroy gradient object
*
* \param grad Pointer to the gradient object
*
*/
void
nema_vg_grad_destroy(NEMA_VG_GRAD_HANDLE grad);
/** \brief Set gradient parameters to a gradient object
*
* \param grad Pointer (handle) to gradient object
* \param stops_count Number of stop colors
* \param stops Pointer to stop colors coordinates
* \param colors Pointer to stop color values
*
*/
void
nema_vg_grad_set(NEMA_VG_GRAD_HANDLE grad, int stops_count, float *stops, color_var_t* colors);
#ifdef __cplusplus
}
#endif
#endif //__NEMA_VG_PAINT_H__