/*
 * @file
 *
 **********************************************************************
 *                            DO NOT EDIT
 * This file is automatically generated by "style_api_gen.py"
 **********************************************************************
 */


#ifndef LV_STYLE_GEN_H
#define LV_STYLE_GEN_H

#ifdef __cplusplus
extern "C" {
#endif

/**
 * Sets width of Widget. Pixel, percentage and `LV_SIZE_CONTENT` values can be used.
 * Percentage values are relative to the width of the parent's content area.
 * Default: Widget dependent, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_width(lv_style_t * style, int32_t value);

/**
 * Sets a minimal width. Pixel and percentage values can be used. Percentage values
 * are relative to the width of the parent's content area.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_min_width(lv_style_t * style, int32_t value);

/**
 * Sets a maximal width. Pixel and percentage values can be used. Percentage values
 * are relative to the width of the parent's content area.
 * Default: LV_COORD_MAX, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_max_width(lv_style_t * style, int32_t value);

/**
 * Sets height of Widget. Pixel, percentage and `LV_SIZE_CONTENT` can be used.
 * Percentage values are relative to the height of the parent's content area.
 * Default: Widget dependent, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_height(lv_style_t * style, int32_t value);

/**
 * Sets a minimal height. Pixel and percentage values can be used. Percentage values
 * are relative to the height of the parent's content area.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_min_height(lv_style_t * style, int32_t value);

/**
 * Sets a maximal height. Pixel and percentage values can be used. Percentage values
 * are relative to the height of the parent's content area.
 * Default: LV_COORD_MAX, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_max_height(lv_style_t * style, int32_t value);

/**
 * Its meaning depends on the type of Widget. For example in case of lv_scale it means
 * the length of the ticks.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_length(lv_style_t * style, int32_t value);

/**
 * Set X coordinate of Widget considering the ``align`` setting. Pixel and percentage
 * values can be used. Percentage values are relative to the width of the parent's
 * content area.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_x(lv_style_t * style, int32_t value);

/**
 * Set Y coordinate of Widget considering the ``align`` setting. Pixel and percentage
 * values can be used. Percentage values are relative to the height of the parent's
 * content area.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_y(lv_style_t * style, int32_t value);

/**
 * Set the alignment which tells from which point of the parent the X and Y
 * coordinates should be interpreted. Possible values are: `LV_ALIGN_DEFAULT`,
 * `LV_ALIGN_TOP_LEFT/MID/RIGHT`, `LV_ALIGN_BOTTOM_LEFT/MID/RIGHT`,
 * `LV_ALIGN_LEFT/RIGHT_MID`, `LV_ALIGN_CENTER`. `LV_ALIGN_DEFAULT` means
 * `LV_ALIGN_TOP_LEFT` with LTR base direction and `LV_ALIGN_TOP_RIGHT` with RTL base
 * direction.
 * Default: `LV_ALIGN_DEFAULT`, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_align(lv_style_t * style, lv_align_t value);

/**
 * Make Widget wider on both sides with this value. Pixel and percentage (with
 * `lv_pct(x)`) values can be used. Percentage values are relative to Widget's width.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_transform_width(lv_style_t * style, int32_t value);

/**
 * Make Widget higher on both sides with this value. Pixel and percentage (with
 * `lv_pct(x)`) values can be used. Percentage values are relative to Widget's height.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_transform_height(lv_style_t * style, int32_t value);

/**
 * Move Widget with this value in X direction. Applied after layouts, aligns and other
 * positioning. Pixel and percentage (with `lv_pct(x)`) values can be used. Percentage
 * values are relative to Widget's width.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_translate_x(lv_style_t * style, int32_t value);

/**
 * Move Widget with this value in Y direction. Applied after layouts, aligns and other
 * positioning. Pixel and percentage (with `lv_pct(x)`) values can be used. Percentage
 * values are relative to Widget's height.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_translate_y(lv_style_t * style, int32_t value);

/**
 * Move object around the centre of the parent object (e.g. around the circumference
 * of a scale).
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_translate_radial(lv_style_t * style, int32_t value);

/**
 * Zoom Widget horizontally. The value 256 (or `LV_SCALE_NONE`) means normal size, 128
 * half size, 512 double size, and so on.
 * Default: 0, inherited: No, layout: Yes, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_transform_scale_x(lv_style_t * style, int32_t value);

/**
 * Zoom Widget vertically. The value 256 (or `LV_SCALE_NONE`) means normal size, 128
 * half size, 512 double size, and so on.
 * Default: 0, inherited: No, layout: Yes, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_transform_scale_y(lv_style_t * style, int32_t value);

/**
 * Rotate Widget. The value is interpreted in 0.1 degree units. E.g. 450 means 45 deg.
 * Default: 0, inherited: No, layout: Yes, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_transform_rotation(lv_style_t * style, int32_t value);

/**
 * Set pivot point's X coordinate for transformations. Relative to Widget's top left corner.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_transform_pivot_x(lv_style_t * style, int32_t value);

/**
 * Set pivot point's Y coordinate for transformations. Relative to Widget's top left corner.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_transform_pivot_y(lv_style_t * style, int32_t value);

/**
 * Skew Widget horizontally. The value is interpreted in 0.1 degree units. E.g. 450
 * means 45 deg.
 * Default: 0, inherited: No, layout: Yes, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_transform_skew_x(lv_style_t * style, int32_t value);

/**
 * Skew Widget vertically. The value is interpreted in 0.1 degree units. E.g. 450
 * means 45 deg.
 * Default: 0, inherited: No, layout: Yes, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_transform_skew_y(lv_style_t * style, int32_t value);

/**
 * Sets the padding on the top. It makes the content area smaller in this direction.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_pad_top(lv_style_t * style, int32_t value);

/**
 * Sets the padding on the bottom. It makes the content area smaller in this direction.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_pad_bottom(lv_style_t * style, int32_t value);

/**
 * Sets the padding on the left. It makes the content area smaller in this direction.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_pad_left(lv_style_t * style, int32_t value);

/**
 * Sets the padding on the right. It makes the content area smaller in this direction.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_pad_right(lv_style_t * style, int32_t value);

/**
 * Sets the padding between the rows. Used by the layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_pad_row(lv_style_t * style, int32_t value);

/**
 * Sets the padding between the columns. Used by the layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_pad_column(lv_style_t * style, int32_t value);

/**
 * Pad text labels away from the scale ticks/remainder of the ``LV_PART_``.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_pad_radial(lv_style_t * style, int32_t value);

/**
 * Sets margin on the top. Widget will keep this space from its siblings in layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_margin_top(lv_style_t * style, int32_t value);

/**
 * Sets margin on the bottom. Widget will keep this space from its siblings in layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_margin_bottom(lv_style_t * style, int32_t value);

/**
 * Sets margin on the left. Widget will keep this space from its siblings in layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_margin_left(lv_style_t * style, int32_t value);

/**
 * Sets margin on the right. Widget will keep this space from its siblings in layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_margin_right(lv_style_t * style, int32_t value);

/**
 * Set background color of Widget.
 * Default: `0xffffff`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Color to submit
 */
void lv_style_set_bg_color(lv_style_t * style, lv_color_t value);

/**
 * Set opacity of the background. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_TRANSP`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_bg_opa(lv_style_t * style, lv_opa_t value);

/**
 * Set gradient color of the background. Used only if `grad_dir` is not `LV_GRAD_DIR_NONE`.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Color to submit
 */
void lv_style_set_bg_grad_color(lv_style_t * style, lv_color_t value);

/**
 * Set direction of the gradient of the background. Possible values are
 * `LV_GRAD_DIR_NONE/HOR/VER`.
 * Default: `LV_GRAD_DIR_NONE`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_bg_grad_dir(lv_style_t * style, lv_grad_dir_t value);

/**
 * Set point from which background color should start for gradients. 0 means to
 * top/left side, 255 the bottom/right side, 128 the center, and so on.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_bg_main_stop(lv_style_t * style, int32_t value);

/**
 * Set point from which background's gradient color should start. 0 means to top/left
 * side, 255 the bottom/right side, 128 the center, and so on.
 * Default: 255, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_bg_grad_stop(lv_style_t * style, int32_t value);

/**
 * Set opacity of the first gradient color.
 * Default: 255, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_bg_main_opa(lv_style_t * style, lv_opa_t value);

/**
 * Set opacity of the second gradient color.
 * Default: 255, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_bg_grad_opa(lv_style_t * style, lv_opa_t value);

/**
 * Set gradient definition. The pointed instance must exist while Widget is alive.
 * NULL to disable. It wraps `BG_GRAD_COLOR`, `BG_GRAD_DIR`, `BG_MAIN_STOP` and
 * `BG_GRAD_STOP` into one descriptor and allows creating gradients with more colors
 * as well. If it's set other gradient related properties will be ignored.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Pointer to gradient descriptor
 */
void lv_style_set_bg_grad(lv_style_t * style, const lv_grad_dsc_t * value);

/**
 * Set a background image. Can be a pointer to `lv_image_dsc_t`, a path to a file or
 * an `LV_SYMBOL_...`.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Pointer to image source
 */
void lv_style_set_bg_image_src(lv_style_t * style, const void * value);

/**
 * Set opacity of the background image. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means
 * fully transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other
 * values or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_bg_image_opa(lv_style_t * style, lv_opa_t value);

/**
 * Set a color to mix to the background image.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Color to submit
 */
void lv_style_set_bg_image_recolor(lv_style_t * style, lv_color_t value);

/**
 * Set intensity of background image recoloring. Value 0, `LV_OPA_0` or
 * `LV_OPA_TRANSP` means no mixing, 255, `LV_OPA_100` or `LV_OPA_COVER` means full
 * recoloring, other values or LV_OPA_10, LV_OPA_20, etc are interpreted
 * proportionally.
 * Default: `LV_OPA_TRANSP`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_bg_image_recolor_opa(lv_style_t * style, lv_opa_t value);

/**
 * If enabled the background image will be tiled. Possible values are `true` or `false`.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_bg_image_tiled(lv_style_t * style, bool value);

/**
 * Set color of the border.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Color to submit
 */
void lv_style_set_border_color(lv_style_t * style, lv_color_t value);

/**
 * Set opacity of the border. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_border_opa(lv_style_t * style, lv_opa_t value);

/**
 * Set width of the border. Only pixel values can be used.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_border_width(lv_style_t * style, int32_t value);

/**
 * Set only which side(s) the border should be drawn. Possible values are
 * `LV_BORDER_SIDE_NONE/TOP/BOTTOM/LEFT/RIGHT/INTERNAL`. OR-ed values can be used as
 * well, e.g. `LV_BORDER_SIDE_TOP | LV_BORDER_SIDE_LEFT`.
 * Default: `LV_BORDER_SIDE_FULL`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_border_side(lv_style_t * style, lv_border_side_t value);

/**
 * Sets whether the border should be drawn before or after the children are drawn.
 * `true`: after children, `false`: before children.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_border_post(lv_style_t * style, bool value);

/**
 * Set width of outline in pixels.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_outline_width(lv_style_t * style, int32_t value);

/**
 * Set color of outline.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Color to submit
 */
void lv_style_set_outline_color(lv_style_t * style, lv_color_t value);

/**
 * Set opacity of outline. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_outline_opa(lv_style_t * style, lv_opa_t value);

/**
 * Set padding of outline, i.e. the gap between Widget and the outline.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_outline_pad(lv_style_t * style, int32_t value);

/**
 * Set width of the shadow in pixels. The value should be >= 0.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_shadow_width(lv_style_t * style, int32_t value);

/**
 * Set an offset on the shadow in pixels in X direction.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_shadow_offset_x(lv_style_t * style, int32_t value);

/**
 * Set an offset on the shadow in pixels in Y direction.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_shadow_offset_y(lv_style_t * style, int32_t value);

/**
 * Make shadow calculation to use a larger or smaller rectangle as base. The value can
 * be in pixels to make the area larger/smaller.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_shadow_spread(lv_style_t * style, int32_t value);

/**
 * Set color of shadow.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Color to submit
 */
void lv_style_set_shadow_color(lv_style_t * style, lv_color_t value);

/**
 * Set opacity of shadow. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_shadow_opa(lv_style_t * style, lv_opa_t value);

/**
 * Set opacity of an image. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_image_opa(lv_style_t * style, lv_opa_t value);

/**
 * Set color to mix with the image.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Color to submit
 */
void lv_style_set_image_recolor(lv_style_t * style, lv_color_t value);

/**
 * Set intensity of color mixing. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_image_recolor_opa(lv_style_t * style, lv_opa_t value);

/**
 * Set image colorkey definition. The lv_image_colorkey_t contains two color values:
 * `high_color` and `low_color`. the color of pixels ranging from `low_color` to
 * `high_color` will be transparent.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Pointer to image color key
 */
void lv_style_set_image_colorkey(lv_style_t * style, const lv_image_colorkey_t * value);

/**
 * Set width of lines in pixels.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_line_width(lv_style_t * style, int32_t value);

/**
 * Set width of dashes in pixels. Note that dash works only on horizontal and vertical lines.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_line_dash_width(lv_style_t * style, int32_t value);

/**
 * Set gap between dashes in pixels. Note that dash works only on horizontal and
 * vertical lines.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_line_dash_gap(lv_style_t * style, int32_t value);

/**
 * Make end points of the lines rounded. `true`: rounded, `false`: perpendicular line ending.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_line_rounded(lv_style_t * style, bool value);

/**
 * Set color of lines.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Color to submit
 */
void lv_style_set_line_color(lv_style_t * style, lv_color_t value);

/**
 * Set opacity of lines.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_line_opa(lv_style_t * style, lv_opa_t value);

/**
 * Set width (thickness) of arcs in pixels.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_arc_width(lv_style_t * style, int32_t value);

/**
 * Make end points of arcs rounded. `true`: rounded, `false`: perpendicular line ending.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_arc_rounded(lv_style_t * style, bool value);

/**
 * Set color of arc.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Color to submit
 */
void lv_style_set_arc_color(lv_style_t * style, lv_color_t value);

/**
 * Set opacity of arcs.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_arc_opa(lv_style_t * style, lv_opa_t value);

/**
 * Set an image from which arc will be masked out. It's useful to display complex
 * effects on the arcs. Can be a pointer to `lv_image_dsc_t` or a path to a file.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Pointer to image source
 */
void lv_style_set_arc_image_src(lv_style_t * style, const void * value);

/**
 * Sets color of text.
 * Default: `0x000000`, inherited: Yes, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Color to submit
 */
void lv_style_set_text_color(lv_style_t * style, lv_color_t value);

/**
 * Set opacity of text. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: Yes, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_text_opa(lv_style_t * style, lv_opa_t value);

/**
 * Set font of text (a pointer `lv_font_t *`).
 * Default: `LV_FONT_DEFAULT`, inherited: Yes, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Pointer to font
 */
void lv_style_set_text_font(lv_style_t * style, const lv_font_t * value);

/**
 * Set letter space in pixels.
 * Default: 0, inherited: Yes, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_text_letter_space(lv_style_t * style, int32_t value);

/**
 * Set line space in pixels.
 * Default: 0, inherited: Yes, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_text_line_space(lv_style_t * style, int32_t value);

/**
 * Set decoration for the text. Possible values are
 * `LV_TEXT_DECOR_NONE/UNDERLINE/STRIKETHROUGH`. OR-ed values can be used as well.
 * Default: `LV_TEXT_DECOR_NONE`, inherited: Yes, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_text_decor(lv_style_t * style, lv_text_decor_t value);

/**
 * Set how to align the lines of the text. Note that it doesn't align the Widget
 * itself, only the lines inside the Widget. Possible values are
 * `LV_TEXT_ALIGN_LEFT/CENTER/RIGHT/AUTO`. `LV_TEXT_ALIGN_AUTO` detect the text base
 * direction and uses left or right alignment accordingly.
 * Default: `LV_TEXT_ALIGN_AUTO`, inherited: Yes, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_text_align(lv_style_t * style, lv_text_align_t value);

/**
 * Sets the color of letter outline stroke.
 * Default: `0x000000`, inherited: Yes, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Color to submit
 */
void lv_style_set_text_outline_stroke_color(lv_style_t * style, lv_color_t value);

/**
 * Set the letter outline stroke width in pixels.
 * Default: 0, inherited: Yes, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_text_outline_stroke_width(lv_style_t * style, int32_t value);

/**
 * Set the opacity of the letter outline stroke. Value 0, `LV_OPA_0` or
 * `LV_OPA_TRANSP` means fully transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means
 * fully covering, other values or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: Yes, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_text_outline_stroke_opa(lv_style_t * style, lv_opa_t value);

/**
 * Sets the intensity of blurring. Applied on each lv_part separately before the
 * children are rendered.
 * Default: `0`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_blur_radius(lv_style_t * style, int32_t value);

/**
 * If `true` the background of the widget will be blurred. The part should have < 100%
 * opacity to make it visible. If `false` the given part will be blurred when it's
 * rendered but before drawing the children.
 * Default: `false`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_blur_backdrop(lv_style_t * style, bool value);

/**
 * Setting to `LV_BLUR_QUALITY_SPEED` the blurring algorithm will prefer speed over
 * quality. `LV_BLUR_QUALITY_PRECISION` will force using higher quality but slower
 * blur. With `LV_BLUR_QUALITY_AUTO` the quality will be selected automatically.
 * Default: `LV_BLUR_QUALITY_AUTO`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_blur_quality(lv_style_t * style, lv_blur_quality_t value);

/**
 * Sets the intensity of blurring. Applied on each lv_part separately before the
 * children are rendered.
 * Default: `0`, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_drop_shadow_radius(lv_style_t * style, int32_t value);

/**
 * Set an offset on the shadow in pixels in X direction.
 * Default: `0`, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_drop_shadow_offset_x(lv_style_t * style, int32_t value);

/**
 * Set an offset on the shadow in pixels in Y direction.
 * Default: `0`, inherited: No, layout: No, ext. draw: Yes.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_drop_shadow_offset_y(lv_style_t * style, int32_t value);

/**
 * Set the color of the shadow.
 * Default: `0`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Color to submit
 */
void lv_style_set_drop_shadow_color(lv_style_t * style, lv_color_t value);

/**
 * Set the opacity of the shadow.
 * Default: `0`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_drop_shadow_opa(lv_style_t * style, lv_opa_t value);

/**
 * Setting to `LV_BLUR_QUALITY_SPEED` the blurring algorithm will prefer speed over
 * quality. `LV_BLUR_QUALITY_PRECISION` will force using higher quality but slower
 * blur. With `LV_BLUR_QUALITY_AUTO` the quality will be selected automatically.
 * Default: `LV_BLUR_QUALITY_PRECISION`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_drop_shadow_quality(lv_style_t * style, lv_blur_quality_t value);

/**
 * Set radius on every corner. The value is interpreted in pixels (>= 0) or
 * `LV_RADIUS_CIRCLE` for max radius.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_radius(lv_style_t * style, int32_t value);

/**
 * Move start point of object (e.g. scale tick) radially.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_radial_offset(lv_style_t * style, int32_t value);

/**
 * Enable clipping of content that overflows rounded corners of parent Widget. Can be
 * `true` or `false`.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_clip_corner(lv_style_t * style, bool value);

/**
 * Scale down all opacity values of the Widget by this factor. Value 0, `LV_OPA_0` or
 * `LV_OPA_TRANSP` means fully transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means
 * fully covering, other values or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: Yes, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_opa(lv_style_t * style, lv_opa_t value);

/**
 * First draw Widget on the layer, then scale down layer opacity factor. Value 0,
 * `LV_OPA_0` or `LV_OPA_TRANSP` means fully transparent, 255, `LV_OPA_100` or
 * `LV_OPA_COVER` means fully covering, other values or LV_OPA_10, LV_OPA_20, etc
 * means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: Yes, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_opa_layered(lv_style_t * style, lv_opa_t value);

/**
 * Mix a color with all colors of the Widget.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Pointer to color-filter descriptor
 */
void lv_style_set_color_filter_dsc(lv_style_t * style, const lv_color_filter_dsc_t * value);

/**
 * The intensity of mixing of color filter.
 * Default: `LV_OPA_TRANSP`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_color_filter_opa(lv_style_t * style, lv_opa_t value);

/**
 * Set a color to mix to the obj.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Color to submit
 */
void lv_style_set_recolor(lv_style_t * style, lv_color_t value);

/**
 * Sets the intensity of color mixing. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means
 * fully transparent. A value of  255, `LV_OPA_100` or `LV_OPA_COVER` means fully
 * opaque. Intermediate values like LV_OPA_10, LV_OPA_20, etc result in
 * semi-transparency.
 * Default: `LV_OPA_TRANSP`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_recolor_opa(lv_style_t * style, lv_opa_t value);

/**
 * Animation template for Widget's animation. Should be a pointer to `lv_anim_t`. The
 * animation parameters are widget specific, e.g. animation time could be the E.g.
 * blink time of the cursor on the Text Area or scroll time of a roller. See Widgets'
 * documentation to learn more.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Pointer to animation descriptor
 */
void lv_style_set_anim(lv_style_t * style, const lv_anim_t * value);

/**
 * Animation duration in milliseconds. Its meaning is widget specific. E.g. blink time
 * of the cursor on the Text Area or scroll time of a roller. See Widgets'
 * documentation to learn more.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_anim_duration(lv_style_t * style, uint32_t value);

/**
 * An initialized ``lv_style_transition_dsc_t`` to describe a transition.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Pointer to transition descriptor
 */
void lv_style_set_transition(lv_style_t * style, const lv_style_transition_dsc_t * value);

/**
 * Describes how to blend the colors to the background. Possible values are
 * `LV_BLEND_MODE_NORMAL/ADDITIVE/SUBTRACTIVE/MULTIPLY/DIFFERENCE`.
 * Default: `LV_BLEND_MODE_NORMAL`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_blend_mode(lv_style_t * style, lv_blend_mode_t value);

/**
 * Set layout of Widget. Children will be repositioned and resized according to
 * policies set for the layout. For possible values see documentation of the layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_layout(lv_style_t * style, uint16_t value);

/**
 * Set base direction of Widget. Possible values are `LV_BIDI_DIR_LTR/RTL/AUTO`.
 * Default: `LV_BASE_DIR_AUTO`, inherited: Yes, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_base_dir(lv_style_t * style, lv_base_dir_t value);

/**
 * If set, a layer will be created for the widget and the layer will be masked with
 * this A8 bitmap mask.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Pointer to A8 bitmap mask
 */
void lv_style_set_bitmap_mask_src(lv_style_t * style, const void * value);

/**
 * Adjust sensitivity for rotary encoders in 1/256 unit. It means, 128: slow down the
 * rotary to half, 512: speeds up to double, 256: no change.
 * Default: `256`, inherited: Yes, layout: No, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_rotary_sensitivity(lv_style_t * style, uint32_t value);

#if LV_USE_FLEX
/**
 * Defines in which direction the flex layout should arrange the children.
 * Default: `LV_FLEX_FLOW_NONE`, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_flex_flow(lv_style_t * style, lv_flex_flow_t value);

/**
 * Defines how to align the children in the direction of flex flow.
 * Default: `LV_FLEX_ALIGN_NONE`, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_flex_main_place(lv_style_t * style, lv_flex_align_t value);

/**
 * Defines how to align the children perpendicular to the direction of flex flow.
 * Default: `LV_FLEX_ALIGN_NONE`, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_flex_cross_place(lv_style_t * style, lv_flex_align_t value);

/**
 * Defines how to align the tracks of the flow.
 * Default: `LV_FLEX_ALIGN_NONE`, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_flex_track_place(lv_style_t * style, lv_flex_align_t value);

/**
 * Defines how much space to take proportionally from the free space of the Widget's track.
 * Default: `0`, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_flex_grow(lv_style_t * style, uint8_t value);

#endif /* LV_USE_FLEX */

#if LV_USE_GRID
/**
 * An array to describe the columns of the grid. Should be LV_GRID_TEMPLATE_LAST terminated.
 * Default: `NULL`, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Pointer to grid-column descriptor array
 */
void lv_style_set_grid_column_dsc_array(lv_style_t * style, const int32_t * value);

/**
 * Defines how to distribute the columns.
 * Default: `LV_GRID_ALIGN_START`, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_grid_column_align(lv_style_t * style, lv_grid_align_t value);

/**
 * An array to describe the rows of the grid. Should be LV_GRID_TEMPLATE_LAST terminated.
 * Default: `NULL`, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Pointer to grid-row descriptor array
 */
void lv_style_set_grid_row_dsc_array(lv_style_t * style, const int32_t * value);

/**
 * Defines how to distribute the rows.
 * Default: `LV_GRID_ALIGN_START`, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_grid_row_align(lv_style_t * style, lv_grid_align_t value);

/**
 * Set column in which Widget should be placed.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_grid_cell_column_pos(lv_style_t * style, int32_t value);

/**
 * Set how to align Widget horizontally.
 * Default: `LV_GRID_ALIGN_START`, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_grid_cell_x_align(lv_style_t * style, lv_grid_align_t value);

/**
 * Set how many columns Widget should span. Needs to be >= 1.
 * Default: 1, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_grid_cell_column_span(lv_style_t * style, int32_t value);

/**
 * Set row in which Widget should be placed.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_grid_cell_row_pos(lv_style_t * style, int32_t value);

/**
 * Set how to align Widget vertically.
 * Default: `LV_GRID_ALIGN_START`, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_grid_cell_y_align(lv_style_t * style, lv_grid_align_t value);

/**
 * Set how many rows Widget should span. Needs to be >= 1.
 * Default: 1, inherited: No, layout: Yes, ext. draw: No.
 * @param  style   Pointer to style
 * @param  value   Value to submit
 */
void lv_style_set_grid_cell_row_span(lv_style_t * style, int32_t value);

#endif /* LV_USE_GRID */

/**
 * Sets width of Widget. Pixel, percentage and `LV_SIZE_CONTENT` values can be used.
 * Percentage values are relative to the width of the parent's content area.
 * Default: Widget dependent, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_WIDTH(val) \
    { \
        .prop = LV_STYLE_WIDTH, .value = { .num = (int32_t)val } \
    }

/**
 * Sets a minimal width. Pixel and percentage values can be used. Percentage values
 * are relative to the width of the parent's content area.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_MIN_WIDTH(val) \
    { \
        .prop = LV_STYLE_MIN_WIDTH, .value = { .num = (int32_t)val } \
    }

/**
 * Sets a maximal width. Pixel and percentage values can be used. Percentage values
 * are relative to the width of the parent's content area.
 * Default: LV_COORD_MAX, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_MAX_WIDTH(val) \
    { \
        .prop = LV_STYLE_MAX_WIDTH, .value = { .num = (int32_t)val } \
    }

/**
 * Sets height of Widget. Pixel, percentage and `LV_SIZE_CONTENT` can be used.
 * Percentage values are relative to the height of the parent's content area.
 * Default: Widget dependent, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_HEIGHT(val) \
    { \
        .prop = LV_STYLE_HEIGHT, .value = { .num = (int32_t)val } \
    }

/**
 * Sets a minimal height. Pixel and percentage values can be used. Percentage values
 * are relative to the height of the parent's content area.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_MIN_HEIGHT(val) \
    { \
        .prop = LV_STYLE_MIN_HEIGHT, .value = { .num = (int32_t)val } \
    }

/**
 * Sets a maximal height. Pixel and percentage values can be used. Percentage values
 * are relative to the height of the parent's content area.
 * Default: LV_COORD_MAX, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_MAX_HEIGHT(val) \
    { \
        .prop = LV_STYLE_MAX_HEIGHT, .value = { .num = (int32_t)val } \
    }

/**
 * Its meaning depends on the type of Widget. For example in case of lv_scale it means
 * the length of the ticks.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_LENGTH(val) \
    { \
        .prop = LV_STYLE_LENGTH, .value = { .num = (int32_t)val } \
    }

/**
 * Set X coordinate of Widget considering the ``align`` setting. Pixel and percentage
 * values can be used. Percentage values are relative to the width of the parent's
 * content area.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_X(val) \
    { \
        .prop = LV_STYLE_X, .value = { .num = (int32_t)val } \
    }

/**
 * Set Y coordinate of Widget considering the ``align`` setting. Pixel and percentage
 * values can be used. Percentage values are relative to the height of the parent's
 * content area.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_Y(val) \
    { \
        .prop = LV_STYLE_Y, .value = { .num = (int32_t)val } \
    }

/**
 * Set the alignment which tells from which point of the parent the X and Y
 * coordinates should be interpreted. Possible values are: `LV_ALIGN_DEFAULT`,
 * `LV_ALIGN_TOP_LEFT/MID/RIGHT`, `LV_ALIGN_BOTTOM_LEFT/MID/RIGHT`,
 * `LV_ALIGN_LEFT/RIGHT_MID`, `LV_ALIGN_CENTER`. `LV_ALIGN_DEFAULT` means
 * `LV_ALIGN_TOP_LEFT` with LTR base direction and `LV_ALIGN_TOP_RIGHT` with RTL base
 * direction.
 * Default: `LV_ALIGN_DEFAULT`, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_ALIGN(val) \
    { \
        .prop = LV_STYLE_ALIGN, .value = { .num = (int32_t)val } \
    }

/**
 * Make Widget wider on both sides with this value. Pixel and percentage (with
 * `lv_pct(x)`) values can be used. Percentage values are relative to Widget's width.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TRANSFORM_WIDTH(val) \
    { \
        .prop = LV_STYLE_TRANSFORM_WIDTH, .value = { .num = (int32_t)val } \
    }

/**
 * Make Widget higher on both sides with this value. Pixel and percentage (with
 * `lv_pct(x)`) values can be used. Percentage values are relative to Widget's height.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TRANSFORM_HEIGHT(val) \
    { \
        .prop = LV_STYLE_TRANSFORM_HEIGHT, .value = { .num = (int32_t)val } \
    }

/**
 * Move Widget with this value in X direction. Applied after layouts, aligns and other
 * positioning. Pixel and percentage (with `lv_pct(x)`) values can be used. Percentage
 * values are relative to Widget's width.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TRANSLATE_X(val) \
    { \
        .prop = LV_STYLE_TRANSLATE_X, .value = { .num = (int32_t)val } \
    }

/**
 * Move Widget with this value in Y direction. Applied after layouts, aligns and other
 * positioning. Pixel and percentage (with `lv_pct(x)`) values can be used. Percentage
 * values are relative to Widget's height.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TRANSLATE_Y(val) \
    { \
        .prop = LV_STYLE_TRANSLATE_Y, .value = { .num = (int32_t)val } \
    }

/**
 * Move object around the centre of the parent object (e.g. around the circumference
 * of a scale).
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TRANSLATE_RADIAL(val) \
    { \
        .prop = LV_STYLE_TRANSLATE_RADIAL, .value = { .num = (int32_t)val } \
    }

/**
 * Zoom Widget horizontally. The value 256 (or `LV_SCALE_NONE`) means normal size, 128
 * half size, 512 double size, and so on.
 * Default: 0, inherited: No, layout: Yes, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TRANSFORM_SCALE_X(val) \
    { \
        .prop = LV_STYLE_TRANSFORM_SCALE_X, .value = { .num = (int32_t)val } \
    }

/**
 * Zoom Widget vertically. The value 256 (or `LV_SCALE_NONE`) means normal size, 128
 * half size, 512 double size, and so on.
 * Default: 0, inherited: No, layout: Yes, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TRANSFORM_SCALE_Y(val) \
    { \
        .prop = LV_STYLE_TRANSFORM_SCALE_Y, .value = { .num = (int32_t)val } \
    }

/**
 * Rotate Widget. The value is interpreted in 0.1 degree units. E.g. 450 means 45 deg.
 * Default: 0, inherited: No, layout: Yes, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TRANSFORM_ROTATION(val) \
    { \
        .prop = LV_STYLE_TRANSFORM_ROTATION, .value = { .num = (int32_t)val } \
    }

/**
 * Set pivot point's X coordinate for transformations. Relative to Widget's top left corner.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TRANSFORM_PIVOT_X(val) \
    { \
        .prop = LV_STYLE_TRANSFORM_PIVOT_X, .value = { .num = (int32_t)val } \
    }

/**
 * Set pivot point's Y coordinate for transformations. Relative to Widget's top left corner.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TRANSFORM_PIVOT_Y(val) \
    { \
        .prop = LV_STYLE_TRANSFORM_PIVOT_Y, .value = { .num = (int32_t)val } \
    }

/**
 * Skew Widget horizontally. The value is interpreted in 0.1 degree units. E.g. 450
 * means 45 deg.
 * Default: 0, inherited: No, layout: Yes, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TRANSFORM_SKEW_X(val) \
    { \
        .prop = LV_STYLE_TRANSFORM_SKEW_X, .value = { .num = (int32_t)val } \
    }

/**
 * Skew Widget vertically. The value is interpreted in 0.1 degree units. E.g. 450
 * means 45 deg.
 * Default: 0, inherited: No, layout: Yes, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TRANSFORM_SKEW_Y(val) \
    { \
        .prop = LV_STYLE_TRANSFORM_SKEW_Y, .value = { .num = (int32_t)val } \
    }

/**
 * Sets the padding on the top. It makes the content area smaller in this direction.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_PAD_TOP(val) \
    { \
        .prop = LV_STYLE_PAD_TOP, .value = { .num = (int32_t)val } \
    }

/**
 * Sets the padding on the bottom. It makes the content area smaller in this direction.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_PAD_BOTTOM(val) \
    { \
        .prop = LV_STYLE_PAD_BOTTOM, .value = { .num = (int32_t)val } \
    }

/**
 * Sets the padding on the left. It makes the content area smaller in this direction.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_PAD_LEFT(val) \
    { \
        .prop = LV_STYLE_PAD_LEFT, .value = { .num = (int32_t)val } \
    }

/**
 * Sets the padding on the right. It makes the content area smaller in this direction.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_PAD_RIGHT(val) \
    { \
        .prop = LV_STYLE_PAD_RIGHT, .value = { .num = (int32_t)val } \
    }

/**
 * Sets the padding between the rows. Used by the layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_PAD_ROW(val) \
    { \
        .prop = LV_STYLE_PAD_ROW, .value = { .num = (int32_t)val } \
    }

/**
 * Sets the padding between the columns. Used by the layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_PAD_COLUMN(val) \
    { \
        .prop = LV_STYLE_PAD_COLUMN, .value = { .num = (int32_t)val } \
    }

/**
 * Pad text labels away from the scale ticks/remainder of the ``LV_PART_``.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_PAD_RADIAL(val) \
    { \
        .prop = LV_STYLE_PAD_RADIAL, .value = { .num = (int32_t)val } \
    }

/**
 * Sets margin on the top. Widget will keep this space from its siblings in layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_MARGIN_TOP(val) \
    { \
        .prop = LV_STYLE_MARGIN_TOP, .value = { .num = (int32_t)val } \
    }

/**
 * Sets margin on the bottom. Widget will keep this space from its siblings in layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_MARGIN_BOTTOM(val) \
    { \
        .prop = LV_STYLE_MARGIN_BOTTOM, .value = { .num = (int32_t)val } \
    }

/**
 * Sets margin on the left. Widget will keep this space from its siblings in layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_MARGIN_LEFT(val) \
    { \
        .prop = LV_STYLE_MARGIN_LEFT, .value = { .num = (int32_t)val } \
    }

/**
 * Sets margin on the right. Widget will keep this space from its siblings in layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_MARGIN_RIGHT(val) \
    { \
        .prop = LV_STYLE_MARGIN_RIGHT, .value = { .num = (int32_t)val } \
    }

/**
 * Set background color of Widget.
 * Default: `0xffffff`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Color to submit
 */
#define LV_STYLE_CONST_BG_COLOR(val) \
    { \
        .prop = LV_STYLE_BG_COLOR, .value = { .color = val } \
    }

/**
 * Set opacity of the background. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_TRANSP`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BG_OPA(val) \
    { \
        .prop = LV_STYLE_BG_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Set gradient color of the background. Used only if `grad_dir` is not `LV_GRAD_DIR_NONE`.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Color to submit
 */
#define LV_STYLE_CONST_BG_GRAD_COLOR(val) \
    { \
        .prop = LV_STYLE_BG_GRAD_COLOR, .value = { .color = val } \
    }

/**
 * Set direction of the gradient of the background. Possible values are
 * `LV_GRAD_DIR_NONE/HOR/VER`.
 * Default: `LV_GRAD_DIR_NONE`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BG_GRAD_DIR(val) \
    { \
        .prop = LV_STYLE_BG_GRAD_DIR, .value = { .num = (int32_t)val } \
    }

/**
 * Set point from which background color should start for gradients. 0 means to
 * top/left side, 255 the bottom/right side, 128 the center, and so on.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BG_MAIN_STOP(val) \
    { \
        .prop = LV_STYLE_BG_MAIN_STOP, .value = { .num = (int32_t)val } \
    }

/**
 * Set point from which background's gradient color should start. 0 means to top/left
 * side, 255 the bottom/right side, 128 the center, and so on.
 * Default: 255, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BG_GRAD_STOP(val) \
    { \
        .prop = LV_STYLE_BG_GRAD_STOP, .value = { .num = (int32_t)val } \
    }

/**
 * Set opacity of the first gradient color.
 * Default: 255, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BG_MAIN_OPA(val) \
    { \
        .prop = LV_STYLE_BG_MAIN_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Set opacity of the second gradient color.
 * Default: 255, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BG_GRAD_OPA(val) \
    { \
        .prop = LV_STYLE_BG_GRAD_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Set gradient definition. The pointed instance must exist while Widget is alive.
 * NULL to disable. It wraps `BG_GRAD_COLOR`, `BG_GRAD_DIR`, `BG_MAIN_STOP` and
 * `BG_GRAD_STOP` into one descriptor and allows creating gradients with more colors
 * as well. If it's set other gradient related properties will be ignored.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Pointer to gradient descriptor
 */
#define LV_STYLE_CONST_BG_GRAD(val) \
    { \
        .prop = LV_STYLE_BG_GRAD, .value = { .ptr = val } \
    }

/**
 * Set a background image. Can be a pointer to `lv_image_dsc_t`, a path to a file or
 * an `LV_SYMBOL_...`.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Pointer to image source
 */
#define LV_STYLE_CONST_BG_IMAGE_SRC(val) \
    { \
        .prop = LV_STYLE_BG_IMAGE_SRC, .value = { .ptr = val } \
    }

/**
 * Set opacity of the background image. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means
 * fully transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other
 * values or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BG_IMAGE_OPA(val) \
    { \
        .prop = LV_STYLE_BG_IMAGE_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Set a color to mix to the background image.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Color to submit
 */
#define LV_STYLE_CONST_BG_IMAGE_RECOLOR(val) \
    { \
        .prop = LV_STYLE_BG_IMAGE_RECOLOR, .value = { .color = val } \
    }

/**
 * Set intensity of background image recoloring. Value 0, `LV_OPA_0` or
 * `LV_OPA_TRANSP` means no mixing, 255, `LV_OPA_100` or `LV_OPA_COVER` means full
 * recoloring, other values or LV_OPA_10, LV_OPA_20, etc are interpreted
 * proportionally.
 * Default: `LV_OPA_TRANSP`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BG_IMAGE_RECOLOR_OPA(val) \
    { \
        .prop = LV_STYLE_BG_IMAGE_RECOLOR_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * If enabled the background image will be tiled. Possible values are `true` or `false`.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BG_IMAGE_TILED(val) \
    { \
        .prop = LV_STYLE_BG_IMAGE_TILED, .value = { .num = (int32_t)val } \
    }

/**
 * Set color of the border.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Color to submit
 */
#define LV_STYLE_CONST_BORDER_COLOR(val) \
    { \
        .prop = LV_STYLE_BORDER_COLOR, .value = { .color = val } \
    }

/**
 * Set opacity of the border. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BORDER_OPA(val) \
    { \
        .prop = LV_STYLE_BORDER_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Set width of the border. Only pixel values can be used.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BORDER_WIDTH(val) \
    { \
        .prop = LV_STYLE_BORDER_WIDTH, .value = { .num = (int32_t)val } \
    }

/**
 * Set only which side(s) the border should be drawn. Possible values are
 * `LV_BORDER_SIDE_NONE/TOP/BOTTOM/LEFT/RIGHT/INTERNAL`. OR-ed values can be used as
 * well, e.g. `LV_BORDER_SIDE_TOP | LV_BORDER_SIDE_LEFT`.
 * Default: `LV_BORDER_SIDE_FULL`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BORDER_SIDE(val) \
    { \
        .prop = LV_STYLE_BORDER_SIDE, .value = { .num = (int32_t)val } \
    }

/**
 * Sets whether the border should be drawn before or after the children are drawn.
 * `true`: after children, `false`: before children.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BORDER_POST(val) \
    { \
        .prop = LV_STYLE_BORDER_POST, .value = { .num = (int32_t)val } \
    }

/**
 * Set width of outline in pixels.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_OUTLINE_WIDTH(val) \
    { \
        .prop = LV_STYLE_OUTLINE_WIDTH, .value = { .num = (int32_t)val } \
    }

/**
 * Set color of outline.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Color to submit
 */
#define LV_STYLE_CONST_OUTLINE_COLOR(val) \
    { \
        .prop = LV_STYLE_OUTLINE_COLOR, .value = { .color = val } \
    }

/**
 * Set opacity of outline. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_OUTLINE_OPA(val) \
    { \
        .prop = LV_STYLE_OUTLINE_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Set padding of outline, i.e. the gap between Widget and the outline.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_OUTLINE_PAD(val) \
    { \
        .prop = LV_STYLE_OUTLINE_PAD, .value = { .num = (int32_t)val } \
    }

/**
 * Set width of the shadow in pixels. The value should be >= 0.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_SHADOW_WIDTH(val) \
    { \
        .prop = LV_STYLE_SHADOW_WIDTH, .value = { .num = (int32_t)val } \
    }

/**
 * Set an offset on the shadow in pixels in X direction.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_SHADOW_OFFSET_X(val) \
    { \
        .prop = LV_STYLE_SHADOW_OFFSET_X, .value = { .num = (int32_t)val } \
    }

/**
 * Set an offset on the shadow in pixels in Y direction.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_SHADOW_OFFSET_Y(val) \
    { \
        .prop = LV_STYLE_SHADOW_OFFSET_Y, .value = { .num = (int32_t)val } \
    }

/**
 * Make shadow calculation to use a larger or smaller rectangle as base. The value can
 * be in pixels to make the area larger/smaller.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_SHADOW_SPREAD(val) \
    { \
        .prop = LV_STYLE_SHADOW_SPREAD, .value = { .num = (int32_t)val } \
    }

/**
 * Set color of shadow.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Color to submit
 */
#define LV_STYLE_CONST_SHADOW_COLOR(val) \
    { \
        .prop = LV_STYLE_SHADOW_COLOR, .value = { .color = val } \
    }

/**
 * Set opacity of shadow. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_SHADOW_OPA(val) \
    { \
        .prop = LV_STYLE_SHADOW_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Set opacity of an image. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_IMAGE_OPA(val) \
    { \
        .prop = LV_STYLE_IMAGE_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Set color to mix with the image.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Color to submit
 */
#define LV_STYLE_CONST_IMAGE_RECOLOR(val) \
    { \
        .prop = LV_STYLE_IMAGE_RECOLOR, .value = { .color = val } \
    }

/**
 * Set intensity of color mixing. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_IMAGE_RECOLOR_OPA(val) \
    { \
        .prop = LV_STYLE_IMAGE_RECOLOR_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Set image colorkey definition. The lv_image_colorkey_t contains two color values:
 * `high_color` and `low_color`. the color of pixels ranging from `low_color` to
 * `high_color` will be transparent.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Pointer to image color key
 */
#define LV_STYLE_CONST_IMAGE_COLORKEY(val) \
    { \
        .prop = LV_STYLE_IMAGE_COLORKEY, .value = { .ptr = val } \
    }

/**
 * Set width of lines in pixels.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_LINE_WIDTH(val) \
    { \
        .prop = LV_STYLE_LINE_WIDTH, .value = { .num = (int32_t)val } \
    }

/**
 * Set width of dashes in pixels. Note that dash works only on horizontal and vertical lines.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_LINE_DASH_WIDTH(val) \
    { \
        .prop = LV_STYLE_LINE_DASH_WIDTH, .value = { .num = (int32_t)val } \
    }

/**
 * Set gap between dashes in pixels. Note that dash works only on horizontal and
 * vertical lines.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_LINE_DASH_GAP(val) \
    { \
        .prop = LV_STYLE_LINE_DASH_GAP, .value = { .num = (int32_t)val } \
    }

/**
 * Make end points of the lines rounded. `true`: rounded, `false`: perpendicular line ending.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_LINE_ROUNDED(val) \
    { \
        .prop = LV_STYLE_LINE_ROUNDED, .value = { .num = (int32_t)val } \
    }

/**
 * Set color of lines.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Color to submit
 */
#define LV_STYLE_CONST_LINE_COLOR(val) \
    { \
        .prop = LV_STYLE_LINE_COLOR, .value = { .color = val } \
    }

/**
 * Set opacity of lines.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_LINE_OPA(val) \
    { \
        .prop = LV_STYLE_LINE_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Set width (thickness) of arcs in pixels.
 * Default: 0, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_ARC_WIDTH(val) \
    { \
        .prop = LV_STYLE_ARC_WIDTH, .value = { .num = (int32_t)val } \
    }

/**
 * Make end points of arcs rounded. `true`: rounded, `false`: perpendicular line ending.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_ARC_ROUNDED(val) \
    { \
        .prop = LV_STYLE_ARC_ROUNDED, .value = { .num = (int32_t)val } \
    }

/**
 * Set color of arc.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Color to submit
 */
#define LV_STYLE_CONST_ARC_COLOR(val) \
    { \
        .prop = LV_STYLE_ARC_COLOR, .value = { .color = val } \
    }

/**
 * Set opacity of arcs.
 * Default: `LV_OPA_COVER`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_ARC_OPA(val) \
    { \
        .prop = LV_STYLE_ARC_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Set an image from which arc will be masked out. It's useful to display complex
 * effects on the arcs. Can be a pointer to `lv_image_dsc_t` or a path to a file.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Pointer to image source
 */
#define LV_STYLE_CONST_ARC_IMAGE_SRC(val) \
    { \
        .prop = LV_STYLE_ARC_IMAGE_SRC, .value = { .ptr = val } \
    }

/**
 * Sets color of text.
 * Default: `0x000000`, inherited: Yes, layout: No, ext. draw: No.
 * @param  val   Color to submit
 */
#define LV_STYLE_CONST_TEXT_COLOR(val) \
    { \
        .prop = LV_STYLE_TEXT_COLOR, .value = { .color = val } \
    }

/**
 * Set opacity of text. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully
 * transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values
 * or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: Yes, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TEXT_OPA(val) \
    { \
        .prop = LV_STYLE_TEXT_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Set font of text (a pointer `lv_font_t *`).
 * Default: `LV_FONT_DEFAULT`, inherited: Yes, layout: Yes, ext. draw: No.
 * @param  val   Pointer to font
 */
#define LV_STYLE_CONST_TEXT_FONT(val) \
    { \
        .prop = LV_STYLE_TEXT_FONT, .value = { .ptr = val } \
    }

/**
 * Set letter space in pixels.
 * Default: 0, inherited: Yes, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TEXT_LETTER_SPACE(val) \
    { \
        .prop = LV_STYLE_TEXT_LETTER_SPACE, .value = { .num = (int32_t)val } \
    }

/**
 * Set line space in pixels.
 * Default: 0, inherited: Yes, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TEXT_LINE_SPACE(val) \
    { \
        .prop = LV_STYLE_TEXT_LINE_SPACE, .value = { .num = (int32_t)val } \
    }

/**
 * Set decoration for the text. Possible values are
 * `LV_TEXT_DECOR_NONE/UNDERLINE/STRIKETHROUGH`. OR-ed values can be used as well.
 * Default: `LV_TEXT_DECOR_NONE`, inherited: Yes, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TEXT_DECOR(val) \
    { \
        .prop = LV_STYLE_TEXT_DECOR, .value = { .num = (int32_t)val } \
    }

/**
 * Set how to align the lines of the text. Note that it doesn't align the Widget
 * itself, only the lines inside the Widget. Possible values are
 * `LV_TEXT_ALIGN_LEFT/CENTER/RIGHT/AUTO`. `LV_TEXT_ALIGN_AUTO` detect the text base
 * direction and uses left or right alignment accordingly.
 * Default: `LV_TEXT_ALIGN_AUTO`, inherited: Yes, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TEXT_ALIGN(val) \
    { \
        .prop = LV_STYLE_TEXT_ALIGN, .value = { .num = (int32_t)val } \
    }

/**
 * Sets the color of letter outline stroke.
 * Default: `0x000000`, inherited: Yes, layout: No, ext. draw: No.
 * @param  val   Color to submit
 */
#define LV_STYLE_CONST_TEXT_OUTLINE_STROKE_COLOR(val) \
    { \
        .prop = LV_STYLE_TEXT_OUTLINE_STROKE_COLOR, .value = { .color = val } \
    }

/**
 * Set the letter outline stroke width in pixels.
 * Default: 0, inherited: Yes, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TEXT_OUTLINE_STROKE_WIDTH(val) \
    { \
        .prop = LV_STYLE_TEXT_OUTLINE_STROKE_WIDTH, .value = { .num = (int32_t)val } \
    }

/**
 * Set the opacity of the letter outline stroke. Value 0, `LV_OPA_0` or
 * `LV_OPA_TRANSP` means fully transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means
 * fully covering, other values or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: Yes, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_TEXT_OUTLINE_STROKE_OPA(val) \
    { \
        .prop = LV_STYLE_TEXT_OUTLINE_STROKE_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Sets the intensity of blurring. Applied on each lv_part separately before the
 * children are rendered.
 * Default: `0`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BLUR_RADIUS(val) \
    { \
        .prop = LV_STYLE_BLUR_RADIUS, .value = { .num = (int32_t)val } \
    }

/**
 * If `true` the background of the widget will be blurred. The part should have < 100%
 * opacity to make it visible. If `false` the given part will be blurred when it's
 * rendered but before drawing the children.
 * Default: `false`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BLUR_BACKDROP(val) \
    { \
        .prop = LV_STYLE_BLUR_BACKDROP, .value = { .num = (int32_t)val } \
    }

/**
 * Setting to `LV_BLUR_QUALITY_SPEED` the blurring algorithm will prefer speed over
 * quality. `LV_BLUR_QUALITY_PRECISION` will force using higher quality but slower
 * blur. With `LV_BLUR_QUALITY_AUTO` the quality will be selected automatically.
 * Default: `LV_BLUR_QUALITY_AUTO`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BLUR_QUALITY(val) \
    { \
        .prop = LV_STYLE_BLUR_QUALITY, .value = { .num = (int32_t)val } \
    }

/**
 * Sets the intensity of blurring. Applied on each lv_part separately before the
 * children are rendered.
 * Default: `0`, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_DROP_SHADOW_RADIUS(val) \
    { \
        .prop = LV_STYLE_DROP_SHADOW_RADIUS, .value = { .num = (int32_t)val } \
    }

/**
 * Set an offset on the shadow in pixels in X direction.
 * Default: `0`, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_DROP_SHADOW_OFFSET_X(val) \
    { \
        .prop = LV_STYLE_DROP_SHADOW_OFFSET_X, .value = { .num = (int32_t)val } \
    }

/**
 * Set an offset on the shadow in pixels in Y direction.
 * Default: `0`, inherited: No, layout: No, ext. draw: Yes.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_DROP_SHADOW_OFFSET_Y(val) \
    { \
        .prop = LV_STYLE_DROP_SHADOW_OFFSET_Y, .value = { .num = (int32_t)val } \
    }

/**
 * Set the color of the shadow.
 * Default: `0`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Color to submit
 */
#define LV_STYLE_CONST_DROP_SHADOW_COLOR(val) \
    { \
        .prop = LV_STYLE_DROP_SHADOW_COLOR, .value = { .color = val } \
    }

/**
 * Set the opacity of the shadow.
 * Default: `0`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_DROP_SHADOW_OPA(val) \
    { \
        .prop = LV_STYLE_DROP_SHADOW_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Setting to `LV_BLUR_QUALITY_SPEED` the blurring algorithm will prefer speed over
 * quality. `LV_BLUR_QUALITY_PRECISION` will force using higher quality but slower
 * blur. With `LV_BLUR_QUALITY_AUTO` the quality will be selected automatically.
 * Default: `LV_BLUR_QUALITY_PRECISION`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_DROP_SHADOW_QUALITY(val) \
    { \
        .prop = LV_STYLE_DROP_SHADOW_QUALITY, .value = { .num = (int32_t)val } \
    }

/**
 * Set radius on every corner. The value is interpreted in pixels (>= 0) or
 * `LV_RADIUS_CIRCLE` for max radius.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_RADIUS(val) \
    { \
        .prop = LV_STYLE_RADIUS, .value = { .num = (int32_t)val } \
    }

/**
 * Move start point of object (e.g. scale tick) radially.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_RADIAL_OFFSET(val) \
    { \
        .prop = LV_STYLE_RADIAL_OFFSET, .value = { .num = (int32_t)val } \
    }

/**
 * Enable clipping of content that overflows rounded corners of parent Widget. Can be
 * `true` or `false`.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_CLIP_CORNER(val) \
    { \
        .prop = LV_STYLE_CLIP_CORNER, .value = { .num = (int32_t)val } \
    }

/**
 * Scale down all opacity values of the Widget by this factor. Value 0, `LV_OPA_0` or
 * `LV_OPA_TRANSP` means fully transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means
 * fully covering, other values or LV_OPA_10, LV_OPA_20, etc means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: Yes, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_OPA(val) \
    { \
        .prop = LV_STYLE_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * First draw Widget on the layer, then scale down layer opacity factor. Value 0,
 * `LV_OPA_0` or `LV_OPA_TRANSP` means fully transparent, 255, `LV_OPA_100` or
 * `LV_OPA_COVER` means fully covering, other values or LV_OPA_10, LV_OPA_20, etc
 * means semi transparency.
 * Default: `LV_OPA_COVER`, inherited: Yes, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_OPA_LAYERED(val) \
    { \
        .prop = LV_STYLE_OPA_LAYERED, .value = { .num = (int32_t)val } \
    }

/**
 * Mix a color with all colors of the Widget.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Pointer to color-filter descriptor
 */
#define LV_STYLE_CONST_COLOR_FILTER_DSC(val) \
    { \
        .prop = LV_STYLE_COLOR_FILTER_DSC, .value = { .ptr = val } \
    }

/**
 * The intensity of mixing of color filter.
 * Default: `LV_OPA_TRANSP`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_COLOR_FILTER_OPA(val) \
    { \
        .prop = LV_STYLE_COLOR_FILTER_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Set a color to mix to the obj.
 * Default: `0x000000`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Color to submit
 */
#define LV_STYLE_CONST_RECOLOR(val) \
    { \
        .prop = LV_STYLE_RECOLOR, .value = { .color = val } \
    }

/**
 * Sets the intensity of color mixing. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means
 * fully transparent. A value of  255, `LV_OPA_100` or `LV_OPA_COVER` means fully
 * opaque. Intermediate values like LV_OPA_10, LV_OPA_20, etc result in
 * semi-transparency.
 * Default: `LV_OPA_TRANSP`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_RECOLOR_OPA(val) \
    { \
        .prop = LV_STYLE_RECOLOR_OPA, .value = { .num = (int32_t)val } \
    }

/**
 * Animation template for Widget's animation. Should be a pointer to `lv_anim_t`. The
 * animation parameters are widget specific, e.g. animation time could be the E.g.
 * blink time of the cursor on the Text Area or scroll time of a roller. See Widgets'
 * documentation to learn more.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Pointer to animation descriptor
 */
#define LV_STYLE_CONST_ANIM(val) \
    { \
        .prop = LV_STYLE_ANIM, .value = { .ptr = val } \
    }

/**
 * Animation duration in milliseconds. Its meaning is widget specific. E.g. blink time
 * of the cursor on the Text Area or scroll time of a roller. See Widgets'
 * documentation to learn more.
 * Default: 0, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_ANIM_DURATION(val) \
    { \
        .prop = LV_STYLE_ANIM_DURATION, .value = { .num = (int32_t)val } \
    }

/**
 * An initialized ``lv_style_transition_dsc_t`` to describe a transition.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Pointer to transition descriptor
 */
#define LV_STYLE_CONST_TRANSITION(val) \
    { \
        .prop = LV_STYLE_TRANSITION, .value = { .ptr = val } \
    }

/**
 * Describes how to blend the colors to the background. Possible values are
 * `LV_BLEND_MODE_NORMAL/ADDITIVE/SUBTRACTIVE/MULTIPLY/DIFFERENCE`.
 * Default: `LV_BLEND_MODE_NORMAL`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BLEND_MODE(val) \
    { \
        .prop = LV_STYLE_BLEND_MODE, .value = { .num = (int32_t)val } \
    }

/**
 * Set layout of Widget. Children will be repositioned and resized according to
 * policies set for the layout. For possible values see documentation of the layouts.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_LAYOUT(val) \
    { \
        .prop = LV_STYLE_LAYOUT, .value = { .num = (int32_t)val } \
    }

/**
 * Set base direction of Widget. Possible values are `LV_BIDI_DIR_LTR/RTL/AUTO`.
 * Default: `LV_BASE_DIR_AUTO`, inherited: Yes, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_BASE_DIR(val) \
    { \
        .prop = LV_STYLE_BASE_DIR, .value = { .num = (int32_t)val } \
    }

/**
 * If set, a layer will be created for the widget and the layer will be masked with
 * this A8 bitmap mask.
 * Default: `NULL`, inherited: No, layout: No, ext. draw: No.
 * @param  val   Pointer to A8 bitmap mask
 */
#define LV_STYLE_CONST_BITMAP_MASK_SRC(val) \
    { \
        .prop = LV_STYLE_BITMAP_MASK_SRC, .value = { .ptr = val } \
    }

/**
 * Adjust sensitivity for rotary encoders in 1/256 unit. It means, 128: slow down the
 * rotary to half, 512: speeds up to double, 256: no change.
 * Default: `256`, inherited: Yes, layout: No, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_ROTARY_SENSITIVITY(val) \
    { \
        .prop = LV_STYLE_ROTARY_SENSITIVITY, .value = { .num = (int32_t)val } \
    }

#if LV_USE_FLEX
/**
 * Defines in which direction the flex layout should arrange the children.
 * Default: `LV_FLEX_FLOW_NONE`, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_FLEX_FLOW(val) \
    { \
        .prop = LV_STYLE_FLEX_FLOW, .value = { .num = (int32_t)val } \
    }

/**
 * Defines how to align the children in the direction of flex flow.
 * Default: `LV_FLEX_ALIGN_NONE`, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_FLEX_MAIN_PLACE(val) \
    { \
        .prop = LV_STYLE_FLEX_MAIN_PLACE, .value = { .num = (int32_t)val } \
    }

/**
 * Defines how to align the children perpendicular to the direction of flex flow.
 * Default: `LV_FLEX_ALIGN_NONE`, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_FLEX_CROSS_PLACE(val) \
    { \
        .prop = LV_STYLE_FLEX_CROSS_PLACE, .value = { .num = (int32_t)val } \
    }

/**
 * Defines how to align the tracks of the flow.
 * Default: `LV_FLEX_ALIGN_NONE`, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_FLEX_TRACK_PLACE(val) \
    { \
        .prop = LV_STYLE_FLEX_TRACK_PLACE, .value = { .num = (int32_t)val } \
    }

/**
 * Defines how much space to take proportionally from the free space of the Widget's track.
 * Default: `0`, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_FLEX_GROW(val) \
    { \
        .prop = LV_STYLE_FLEX_GROW, .value = { .num = (int32_t)val } \
    }

#endif /* LV_USE_FLEX */

#if LV_USE_GRID
/**
 * An array to describe the columns of the grid. Should be LV_GRID_TEMPLATE_LAST terminated.
 * Default: `NULL`, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Pointer to grid-column descriptor array
 */
#define LV_STYLE_CONST_GRID_COLUMN_DSC_ARRAY(val) \
    { \
        .prop = LV_STYLE_GRID_COLUMN_DSC_ARRAY, .value = { .ptr = val } \
    }

/**
 * Defines how to distribute the columns.
 * Default: `LV_GRID_ALIGN_START`, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_GRID_COLUMN_ALIGN(val) \
    { \
        .prop = LV_STYLE_GRID_COLUMN_ALIGN, .value = { .num = (int32_t)val } \
    }

/**
 * An array to describe the rows of the grid. Should be LV_GRID_TEMPLATE_LAST terminated.
 * Default: `NULL`, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Pointer to grid-row descriptor array
 */
#define LV_STYLE_CONST_GRID_ROW_DSC_ARRAY(val) \
    { \
        .prop = LV_STYLE_GRID_ROW_DSC_ARRAY, .value = { .ptr = val } \
    }

/**
 * Defines how to distribute the rows.
 * Default: `LV_GRID_ALIGN_START`, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_GRID_ROW_ALIGN(val) \
    { \
        .prop = LV_STYLE_GRID_ROW_ALIGN, .value = { .num = (int32_t)val } \
    }

/**
 * Set column in which Widget should be placed.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_GRID_CELL_COLUMN_POS(val) \
    { \
        .prop = LV_STYLE_GRID_CELL_COLUMN_POS, .value = { .num = (int32_t)val } \
    }

/**
 * Set how to align Widget horizontally.
 * Default: `LV_GRID_ALIGN_START`, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_GRID_CELL_X_ALIGN(val) \
    { \
        .prop = LV_STYLE_GRID_CELL_X_ALIGN, .value = { .num = (int32_t)val } \
    }

/**
 * Set how many columns Widget should span. Needs to be >= 1.
 * Default: 1, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_GRID_CELL_COLUMN_SPAN(val) \
    { \
        .prop = LV_STYLE_GRID_CELL_COLUMN_SPAN, .value = { .num = (int32_t)val } \
    }

/**
 * Set row in which Widget should be placed.
 * Default: 0, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_GRID_CELL_ROW_POS(val) \
    { \
        .prop = LV_STYLE_GRID_CELL_ROW_POS, .value = { .num = (int32_t)val } \
    }

/**
 * Set how to align Widget vertically.
 * Default: `LV_GRID_ALIGN_START`, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_GRID_CELL_Y_ALIGN(val) \
    { \
        .prop = LV_STYLE_GRID_CELL_Y_ALIGN, .value = { .num = (int32_t)val } \
    }

/**
 * Set how many rows Widget should span. Needs to be >= 1.
 * Default: 1, inherited: No, layout: Yes, ext. draw: No.
 * @param  val   Value to submit
 */
#define LV_STYLE_CONST_GRID_CELL_ROW_SPAN(val) \
    { \
        .prop = LV_STYLE_GRID_CELL_ROW_SPAN, .value = { .num = (int32_t)val } \
    }

#endif /* LV_USE_GRID */


#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* LV_STYLE_GEN_H */
