# Generated file. DO NOT EDIT!

menu "LVGL"
menu "Memory and Standard Library"

config LV_STDLIB_BUILTIN
	int
	default 0

config LV_STDLIB_CLIB
	int
	default 1

config LV_STDLIB_MICROPYTHON
	int
	default 2

config LV_STDLIB_RTTHREAD
	int
	default 3

config LV_STDLIB_CUSTOM
	int
	default 255

choice
	prompt "Malloc functions source"
	default LV_USE_BUILTIN_MALLOC

config LV_USE_BUILTIN_MALLOC
	select LV_USE_TLSF
	bool "LVGL built-in"

config LV_USE_CLIB_MALLOC
	bool "C standard library (malloc/realloc/free)"

config LV_USE_MICROPYTHON_MALLOC
	bool "MicroPython"

config LV_USE_RTTHREAD_MALLOC
	bool "RT-Thread"

config LV_USE_CUSTOM_MALLOC
	bool "Custom (implemented externally)"

endchoice # "Malloc functions"

config LV_USE_STDLIB_MALLOC
	int
	default LV_STDLIB_BUILTIN 	if LV_USE_BUILTIN_MALLOC
	default LV_STDLIB_CLIB 		if LV_USE_CLIB_MALLOC
	default LV_STDLIB_MICROPYTHON 	if LV_USE_MICROPYTHON_MALLOC
	default LV_STDLIB_RTTHREAD 	if LV_USE_RTTHREAD_MALLOC
	default LV_STDLIB_CUSTOM 	if LV_USE_CUSTOM_MALLOC

choice
	prompt "String functions source"
	default LV_USE_BUILTIN_STRING

config LV_USE_BUILTIN_STRING
	bool "LVGL built-in"

config LV_USE_CLIB_STRING
	bool "C standard library (memcpy/memset/strlen/strcpy)"

config LV_USE_RTTHREAD_STRING
	bool "RT-Thread (rt_memcpy/rt_memset/rt_strlen/rt_strcpy)"

config LV_USE_CUSTOM_STRING
	bool "Custom (implemented externally)"

endchoice

config LV_USE_STDLIB_STRING
	int
	default LV_STDLIB_BUILTIN 	if LV_USE_BUILTIN_STRING
	default LV_STDLIB_CLIB 		if LV_USE_CLIB_STRING
	default LV_STDLIB_RTTHREAD 	if LV_USE_RTTHREAD_STRING
	default LV_STDLIB_CUSTOM 	if LV_USE_CUSTOM_STRING

choice
	prompt "Sprintf functions source"
	default LV_USE_BUILTIN_SPRINTF

config LV_USE_BUILTIN_SPRINTF
	bool "LVGL built-in"

config LV_USE_CLIB_SPRINTF
	bool "C standard library (vsnprintf)"

config LV_USE_RTTHREAD_SPRINTF
	bool "RT-Thread (rt_vsnprintf)"

config LV_USE_CUSTOM_SPRINTF
	bool "Custom (implemented externally)"

endchoice # "Sprintf functions"

config LV_USE_STDLIB_SPRINTF
	int
	default LV_STDLIB_BUILTIN 	if LV_USE_BUILTIN_SPRINTF
	default LV_STDLIB_CLIB 		if LV_USE_CLIB_SPRINTF
	default LV_STDLIB_RTTHREAD 	if LV_USE_RTTHREAD_SPRINTF
	default LV_STDLIB_CUSTOM 	if LV_USE_CUSTOM_SPRINTF

if LV_USE_BUILTIN_MALLOC

menu "Builtin Malloc Settings"

config LV_MEM_SIZE
	int "Memory size (bytes)"
	default 65536
	help
	  Size of the pool `lv_malloc()` allocates from. Needs to be at least 2kB (2048).

config LV_MEM_SIZE_KILOBYTES
	int "Memory size (KB) [DEPRECATED: use LV_MEM_SIZE]"
	default 0
	help
	  Deprecated. Use LV_MEM_SIZE (in bytes) instead.

config LV_MEM_POOL_EXPAND_SIZE_KILOBYTES
	int "Memory pool expand size (KB) [DEPRECATED: use LV_MEM_SIZE directly]"
	default 0
	help
	  Deprecated. Modify LV_MEM_SIZE (in bytes) directly instead.

config LV_MEM_ADR
	hex "Memory pool address"
	default 0x0
	help
	  Place the pool at a fixed address instead of allocating it as a normal array.
	  0: unused.
endmenu

endif #LV_USE_BUILTIN_MALLOC

# Emitted verbatim (unquoted) as the #include argument.
config LV_STDINT_INCLUDE
	string "Header for integer types (stdint)"
	default "stdint.h"

config LV_STDDEF_INCLUDE
	string "Header for standard definitions (stddef)"
	default "stddef.h"

config LV_STDBOOL_INCLUDE
	string "Header for boolean types (stdbool)"
	default "stdbool.h"

config LV_INTTYPES_INCLUDE
	string "Header for fixed-width integer format macros (inttypes)"
	default "inttypes.h"

config LV_LIMITS_INCLUDE
	string "Header for implementation limits (limits)"
	default "limits.h"

config LV_STDARG_INCLUDE
	string "Header for variadic argument handling (stdarg)"
	default "stdarg.h"

config LV_USE_TLSF
	bool
	default n
endmenu
menu "Operating System (OS)"
choice LV_USE_OS
	prompt "Operating system"
	default LV_OS_NONE

	config LV_OS_NONE
		bool "None"
	config LV_OS_PTHREAD
		bool "POSIX threads (pthread)"
		select LV_OS_USE_PTHREAD
	config LV_OS_FREERTOS
		bool "FreeRTOS"
		select LV_OS_USE_FREERTOS
	config LV_OS_CMSIS_RTOS2
		bool "CMSIS-RTOS2"
		select LV_OS_USE_CMSIS_RTOS2
	config LV_OS_RTTHREAD
		bool "RT-Thread"
		select LV_OS_USE_RTTHREAD
	config LV_OS_WINDOWS
		bool "Windows"
		select LV_OS_USE_WINDOWS
	config LV_OS_MQX
		bool "MQX"
		select LV_OS_USE_MQX
	config LV_OS_SDL2
		bool "SDL2"
		select LV_OS_USE_SDL2
	config LV_OS_CUSTOM
		bool "Custom"
		select LV_OS_USE_CUSTOM_INCLUDE
endchoice

config LV_USE_OS
	int
	default 0 if LV_OS_NONE
	default 1 if LV_OS_PTHREAD
	default 2 if LV_OS_FREERTOS
	default 3 if LV_OS_CMSIS_RTOS2
	default 4 if LV_OS_RTTHREAD
	default 5 if LV_OS_WINDOWS
	default 6 if LV_OS_MQX
	default 7 if LV_OS_SDL2
	default 255 if LV_OS_CUSTOM

config LV_OS_USE_PTHREAD
	bool

config LV_OS_USE_FREERTOS
	bool

config LV_OS_USE_CMSIS_RTOS2
	bool

config LV_OS_USE_RTTHREAD
	bool

config LV_OS_USE_WINDOWS
	bool

config LV_OS_USE_MQX
	bool

config LV_OS_USE_SDL2
	bool

config LV_OS_USE_CUSTOM_INCLUDE
	bool

config LV_OS_CUSTOM_INCLUDE
	string "Custom OS include header"
	default ""
	depends on LV_OS_CUSTOM

if LV_OS_FREERTOS
menu "FreeRTOS Configuration"

config LV_USE_FREERTOS_TASK_NOTIFY
	bool "Direct task notifications"
	default y
	help
		Synchronize with direct task notifications instead of an intermediary object such as a
		binary semaphore: 45% faster and less RAM, but only usable when a single task can be
		the recipient of the event.

config LV_OS_IDLE_PERCENT_CUSTOM
	bool "Custom idle percentage calculation"
	default n
	help
		Provide your own lv_os_get_idle_percent(). Useful on multi-core systems, where the
		default FreeRTOS implementation may not track idle time across all cores.
endmenu
endif #LV_OS_FREERTOS
endmenu
menu "Rendering Configuration"

menu "Color Settings"

	choice LV_COLOR_FORMAT_DEFAULT
		prompt "Default color format"
		default LV_COLOR_FORMAT_I1       if LV_COLOR_DEPTH_1
		default LV_COLOR_FORMAT_L8       if LV_COLOR_DEPTH_8
		default LV_COLOR_FORMAT_RGB888   if LV_COLOR_DEPTH_24
		default LV_COLOR_FORMAT_XRGB8888 if LV_COLOR_DEPTH_32
		default LV_COLOR_FORMAT_RGB565

		config LV_COLOR_FORMAT_I1
			bool "I1"
			imply LV_FONT_UNSCII_8
		config LV_COLOR_FORMAT_L8
			bool "L8"
			imply LV_FONT_UNSCII_8
		config LV_COLOR_FORMAT_RGB565
			bool "RGB565"
			imply LV_FONT_MONTSERRAT_14
		config LV_COLOR_FORMAT_RGB565_SWAPPED
			bool "RGB565 (Big-endian)"
			imply LV_FONT_MONTSERRAT_14
		config LV_COLOR_FORMAT_RGB888
			bool "RGB888"
			imply LV_FONT_MONTSERRAT_14
		config LV_COLOR_FORMAT_XRGB8888
			bool "XRGB8888"
			imply LV_FONT_MONTSERRAT_14
		config LV_COLOR_FORMAT_ARGB8888
			bool "ARGB8888"
			imply LV_FONT_MONTSERRAT_14
		config LV_COLOR_FORMAT_ARGB8888_PREMULTIPLIED
			bool "ARGB8888 (premultiplied)"
			imply LV_FONT_MONTSERRAT_14
	endchoice

	choice LV_COLOR_DEPTH_CHOICE
		prompt "Color depth [DEPRECATED: Use LV_COLOR_FORMAT_DEFAULT]"
		default LV_COLOR_DEPTH_UNSET
		config LV_COLOR_DEPTH_UNSET
			bool "Use LV_COLOR_FORMAT_DEFAULT"
		config LV_COLOR_DEPTH_32
			bool "32: XRGB8888"
			imply LV_FONT_MONTSERRAT_14
		config LV_COLOR_DEPTH_24
			bool "24: RGB888"
			imply LV_FONT_MONTSERRAT_14
		config LV_COLOR_DEPTH_16
			bool "16: RGB565"
			imply LV_FONT_MONTSERRAT_14
		config LV_COLOR_DEPTH_8
			bool "8: L8 (grayscale)"
			imply LV_FONT_UNSCII_8
		config LV_COLOR_DEPTH_1
			bool "1: I1 (1 bit per pixel)"
			imply LV_FONT_MONTSERRAT_14
	endchoice

	config LV_COLOR_DEPTH
		int
		default 1 if LV_COLOR_FORMAT_I1
		default 8 if LV_COLOR_FORMAT_L8
		default 16 if LV_COLOR_FORMAT_RGB565 || LV_COLOR_FORMAT_RGB565_SWAPPED
		default 24 if LV_COLOR_FORMAT_RGB888
		default 32

	config LV_COLOR_MIX_ROUND_OFS
		int "Color mix rounding offset"
		default 0
		range 0 254
		help
			0: no adjustment, get the integer part of the result (round down)
			64: round up from x.75
			128: round up from half
			192: round up from x.25
			254: round up
endmenu

config LV_DRAW_HAS_VECTOR_SUPPORT
	bool
	default n

config LV_DRAW_HAS_3D_SUPPORT
	bool
	default n

config LV_DRAW_DISABLE_TILED_RENDERING
	bool
	default n

config LV_DEF_REFR_PERIOD
	int "Default refresh period (ms)"
	default 33
	help
		Default display refresh, input device read and animation step period.

config LV_DPI_DEF
	int "Default DPI (px/inch)"
	default 130
	help
		Used to initialize default sizes such as widget sizes and style paddings.

config LV_DRAW_BUF_STRIDE_ALIGN
	int "Draw buffer stride alignment (bytes)"
	default 1
	help
		Align the stride of all layers and images to this many bytes.

config LV_DRAW_BUF_ALIGN
	int "Draw buffer address alignment (bytes)"
	default 4
	help
		Align the start address of draw_buf addresses to this many bytes.

config LV_USE_MATRIX
	bool "Matrix"
	default n
	select LV_USE_FLOAT
	help
		3x3 matrix API (lv_matrix_t) for transformations. Requires floating point support.

config LV_DRAW_TRANSFORM_USE_MATRIX
	bool "Matrix based transformations"
	default n
	depends on LV_USE_MATRIX
	help
		The rendering engine must support 3x3 matrix transformations.

config LV_DRAW_LAYER_SIMPLE_BUF_SIZE
	int "Simple layer buffer size (bytes)"
	default 24576
	help
		Widgets with `style_opa < 255` (not `bg_opa`, `text_opa` etc) or a non-NORMAL blend mode are
		buffered into a "simple" layer in chunks of this size.
		"Transformed layers" (if `transform_angle/zoom` are set) use larger buffers and can't be chunked.

config LV_DRAW_LAYER_MAX_MEMORY
	int "Maximum layer memory (bytes)"
	default 0
	help
		Limit for simple and transformed layers together; 0 means no limit.
		Must be at least `LV_DRAW_LAYER_SIMPLE_BUF_SIZE`, and with transformed layers large enough
		for the largest widget too (width x height x 4).

config LV_DRAW_THREAD_STACK_SIZE
	int "Draw thread stack size (bytes)"
	default 8192
	depends on !LV_OS_NONE
	help
		If FreeType or ThorVG is enabled, it is recommended to set it to 32KB or more.

config LV_DRAW_THREAD_PRIO
	int "Draw thread priority"
	range 0 4
	default 3
	depends on !LV_OS_NONE
	help
		Thread priority controls the relative importance of the drawing threads.
		Values correspond to lv_thread_prio_t enum in lv_os.h:
		0: LV_THREAD_PRIO_LOWEST
		1: LV_THREAD_PRIO_LOW
		2: LV_THREAD_PRIO_MID (default)
		3: LV_THREAD_PRIO_HIGH
		4: LV_THREAD_PRIO_HIGHEST

		Higher priority can improve rendering performance but might cause
		starvation of lower priority tasks.

config LV_USE_VECTOR_GRAPHIC
	bool "Vector graphics"
	default n
	select LV_USE_MATRIX
	help
		Vector drawing API (lv_vector_dsc_*) for paths, strokes and fills.
		Needs a renderer with vector support, e.g. the SW renderer with ThorVG, or VG-Lite.


config LV_USE_SNAPSHOT
	bool "Snapshot"
	default n
	help
		Render a widget and its children into an image buffer with lv_snapshot_take().

config LV_USE_THORVG
	bool "Vector graphics engine (ThorVG)"
	default n
	select LV_DRAW_HAS_VECTOR_SUPPORT if LV_USE_DRAW_SW
	help
		Backend that gives the SW renderer vector graphics support.

config LV_USE_THORVG_INTERNAL
	bool "Bundled ThorVG"
	default y
	depends on LV_USE_THORVG
	help
		Build the ThorVG copy shipped with LVGL instead of linking an external one.


menu "SW"
config LV_USE_DRAW_SW
	bool "SW renderer"
	default y
	help
		Required to draw anything on the screen.

if LV_USE_DRAW_SW

menu "Supported color formats"

config LV_DRAW_SW_SUPPORT_RGB565
	bool "RGB565"
	default y

config LV_DRAW_SW_SUPPORT_RGB565_SWAPPED
	bool "RGB565 swapped"
	default y

config LV_DRAW_SW_SUPPORT_RGB565A8
	bool "RGB565A8"
	default y

config LV_DRAW_SW_SUPPORT_RGB888
	bool "RGB888"
	default y

config LV_DRAW_SW_SUPPORT_XRGB8888
	bool "XRGB8888"
	default y

config LV_DRAW_SW_SUPPORT_ARGB8888
	bool "ARGB8888"
	default y

config LV_DRAW_SW_SUPPORT_ARGB8888_PREMULTIPLIED
	bool "ARGB8888 premultiplied"
	default y

config LV_DRAW_SW_SUPPORT_L8
	bool "L8"
	default y

config LV_DRAW_SW_SUPPORT_AL88
	bool "AL88"
	default y

config LV_DRAW_SW_SUPPORT_A8
	bool "A8"
	default y

config LV_DRAW_SW_SUPPORT_I1
	bool "I1"
	default y

config LV_DRAW_SW_I1_LUM_THRESHOLD
	int "I1 luminance threshold"
	default 127
	range 0 254
	depends on LV_DRAW_SW_SUPPORT_I1
	help
		Pixels brighter than this luminance become active (set) when rendering to I1.

endmenu

config LV_DRAW_SW_DRAW_UNIT_CNT
	int "Number of draw units"
	default 1
	range 1 255
	depends on !LV_OS_NONE
	help
		Number of threads used to render a frame in parallel

config LV_USE_DRAW_ARM2D_SYNC
	bool "Arm-2D acceleration (Cortex-M)"
	default n
	help
		Requires the Arm-2D library in your project and an include path for "arm_2d.h".

config LV_USE_NATIVE_HELIUM_ASM
	bool "Native Helium assembly"
	default n
	help
		Disable to let Arm-2D work on its own (for testing only).

config LV_DRAW_SW_COMPLEX
	bool "Complex draw engine"
	default y
	help
		Adds rounded corners, shadows, skewed lines and arcs.
		Without it only rectangles with gradients, images, texts and straight lines can be drawn.

config LV_GRADIENT_MAX_STOPS
	int "Maximum gradient stops"
	default 2
	help
		Each additional stop costs (sizeof(lv_color_t) + 1) bytes.

config LV_USE_DRAW_SW_COMPLEX_GRADIENTS
	bool "Complex gradients"
	default n

	help
		Adds linear gradients at an angle, plus radial and conical gradients.

config LV_DRAW_SW_SHADOW_CACHE_SIZE
	int "Shadow cache size"
	depends on LV_DRAW_SW_COMPLEX
	default 0
	help
		Maximum shadow size to buffer, where shadow size is `shadow_width + radius`.
		Costs this value squared in RAM; 0 disables caching.

config LV_DRAW_SW_CIRCLE_CACHE_SIZE
	int "Circle cache size"
	depends on LV_DRAW_SW_COMPLEX
	default 4
	help
		The circumference of a 1/4 circle is cached for anti-aliasing, costing
		radius * 4 bytes per circle. Set to 0 to disable caching.

choice LV_USE_DRAW_SW_ASM
	prompt "SW assembly optimization"
	default LV_DRAW_SW_ASM_NONE

	config LV_DRAW_SW_ASM_NONE
		bool "0: None"
	config LV_DRAW_SW_ASM_NEON
		bool "1: NEON"
	config LV_DRAW_SW_ASM_HELIUM
		bool "2: Helium"
	config LV_DRAW_SW_ASM_RISCV_V
		bool "3: RISC-V Vector"
	config LV_DRAW_SW_ASM_SVE2
		bool "4: SVE2"
	config LV_DRAW_SW_ASM_CUSTOM
		bool "255: Custom"
		select LV_DRAW_SW_ASM_USE_CUSTOM_INCLUDE
endchoice

config LV_USE_DRAW_SW_ASM
	int
	default 0 if LV_DRAW_SW_ASM_NONE
	default 1 if LV_DRAW_SW_ASM_NEON
	default 2 if LV_DRAW_SW_ASM_HELIUM
	default 3 if LV_DRAW_SW_ASM_RISCV_V
	default 4 if LV_DRAW_SW_ASM_SVE2
	default 255 if LV_DRAW_SW_ASM_CUSTOM

config LV_DRAW_SW_ASM_USE_CUSTOM_INCLUDE
	bool

config LV_DRAW_SW_ASM_CUSTOM_INCLUDE
	string "Custom assembly include file"
	default ""
	depends on LV_DRAW_SW_ASM_CUSTOM

endif #LV_USE_DRAW_SW
endmenu

menu "VG-Lite"
config LV_USE_DRAW_VG_LITE
	bool "VG-Lite renderer"
	default n
	select LV_USE_MATRIX
	select LV_DRAW_HAS_VECTOR_SUPPORT
	help
		Renders with a VG-Lite GPU. Requires a VG-Lite driver, or the VG-Lite simulator below.

if LV_USE_DRAW_VG_LITE

config LV_VG_LITE_USE_GPU_INIT
	bool "Custom external gpu_init() function"
	default n
	help
		Call an application-provided gpu_init() before the first use of the GPU.

config LV_VG_LITE_USE_ASSERT
	bool "Assertions"
	default n
	help
		Check internal VG-Lite state with LV_ASSERT(). Useful while debugging.

config LV_VG_LITE_FLUSH_MAX_COUNT
	int "Flush trigger threshold (draw tasks)"
	default 8
	help
		The GPU tries to batch this many draw tasks before flushing.

config LV_VG_LITE_USE_BOX_SHADOW
	bool "Simulate box shadow with a border"
	default y
	help
		Usually faster, but does not match the rendering quality of the SW renderer.

config LV_VG_LITE_GRAD_CACHE_CNT
	int "Gradient cache size (entries)"
	default 32
	help
		The memory usage of a single gradient:
			linear: 4K bytes.
			radial: radius * 4K bytes.

config LV_VG_LITE_STROKE_CACHE_CNT
	int "Stroke cache size (entries)"
	default 32

config LV_VG_LITE_BITMAP_FONT_CACHE_CNT
	int "Unaligned bitmap font cache size (entries)"
	default 256

config LV_VG_LITE_DISABLE_VLC_OP_CLOSE
	bool "Remove VLC_OP_CLOSE path instruction (Workaround for NXP)"
	default n

config LV_VG_LITE_DISABLE_LINEAR_GRADIENT_EXT
	bool "Disable linear gradient extension"
	default n
	help
		Needed with older VG-Lite drivers that do not implement the extension.

config LV_VG_LITE_DISABLE_BLIT_RECT_OFFSET
	bool "Disable blit rectangle offset"
	default n
	help
		Works around HW errors on some GPUs at the cost of extra blits.

config LV_VG_LITE_PATH_DUMP_MAX_LEN
	int "Maximum path dump length (points)"
	default 1000

config LV_USE_VG_LITE_DRIVER
	bool "Built-in VG-Lite driver"
	default n
	help
		Build the VG-Lite driver bundled with LVGL instead of linking a vendor-provided one.

	if LV_USE_VG_LITE_DRIVER
	# A choice because the include path needs unquoted tokens, which Kconfig
	# strings cannot emit.
	choice
		prompt "VG-Lite GPU (series and revision)"
		default LV_VG_LITE_GPU_GC255_0X40A

		config LV_VG_LITE_GPU_GC255_0X40A
			bool "GC255 (revision 0x40A)"
		config LV_VG_LITE_GPU_GC355_0X0_1215
			bool "GC355 (revision 0x0_1215)"
		config LV_VG_LITE_GPU_GC355_0X0_1216
			bool "GC355 (revision 0x0_1216)"
		config LV_VG_LITE_GPU_GC555_0X423
			bool "GC555 (revision 0x423)"
		config LV_VG_LITE_GPU_GC555_0X423_ECO
			bool "GC555 (revision 0x423 ECO)"
		config LV_VG_LITE_GPU_GCNANOULTRAV_0X1003
			bool "GCNanoUltraV (revision 0x1003)"
	endchoice

	config LV_VG_LITE_GPU
		int
		default 0 if LV_VG_LITE_GPU_GC255_0X40A
		default 1 if LV_VG_LITE_GPU_GC355_0X0_1215
		default 2 if LV_VG_LITE_GPU_GC355_0X0_1216
		default 3 if LV_VG_LITE_GPU_GC555_0X423
		default 4 if LV_VG_LITE_GPU_GC555_0X423_ECO
		default 5 if LV_VG_LITE_GPU_GCNANOULTRAV_0X1003

	config LV_VG_LITE_HAL_GPU_BASE_ADDRESS
		hex "GPU base address"
		default 0x40240000
	endif #LV_USE_VG_LITE_DRIVER

config LV_USE_VG_LITE_THORVG
	bool "VG-Lite simulator (ThorVG)"
	default n
	select LV_USE_THORVG
	help
		Simulate VG-Lite hardware with ThorVG for debugging and testing on a PC simulator.
		Requires the internal or an external ThorVG library.

if LV_USE_VG_LITE_THORVG

config LV_VG_LITE_THORVG_LVGL_BLEND_SUPPORT
	bool "LVGL blend modes"
	default n
	depends on LV_USE_VG_LITE_THORVG

config LV_VG_LITE_THORVG_YUV_SUPPORT
	bool "YUV color formats"
	default n

config LV_VG_LITE_THORVG_LINEAR_GRADIENT_EXT_SUPPORT
	bool "Linear gradient extension"
	default n

config LV_VG_LITE_THORVG_16PIXELS_ALIGN
	bool "16 pixel alignment"
	default y

config LV_VG_LITE_THORVG_BUF_ADDR_ALIGN
	int "Buffer address alignment (bytes)"
	default 64

config LV_VG_LITE_THORVG_THREAD_RENDER
	bool "Multi-threaded rendering"
	default n

endif #LV_USE_VG_LITE_THORVG
endif #LV_USE_DRAW_VG_LITE
endmenu

menu "Dave2D"
config LV_USE_DRAW_DAVE2D
	bool "Dave2D renderer"
	default n
	help
		Accelerate drawing with the Dave2D GPU found on Renesas RA platforms.
endmenu

menu "NemaGFX"
config LV_USE_NEMA_GFX
	bool "NemaGFX renderer"
	default n
	help
		Accelerate drawing with the Think Silicon (TSi) NemaGFX GPU library.

if LV_USE_NEMA_GFX

config LV_NEMA_USE_CACHE
	bool "Cache maintenance"
	default n
	help
		Clean and invalidate the CPU cache around draw buffers so the GPU sees
		coherent data. Needed on cores with a data cache.

config LV_NEMA_CACHE_HAL_INCLUDE
	string "Cache HAL header"
	default "stm32u5xx_hal.h"
	depends on LV_NEMA_USE_CACHE

choice LV_USE_NEMA_LIB
	prompt "NemaGFX static library"
	default LV_NEMA_LIB_NONE
	help
		Bundled NemaGFX library and headers to use, per target CPU core.
		None warns at build time and falls back to Cortex-M33 (Rev C).

	config LV_NEMA_LIB_NONE
		bool "None"
	config LV_NEMA_LIB_M33_REVC
		bool "Cortex-M33 (Rev C)"
	config LV_NEMA_LIB_M33_NEMAPVG
		bool "Cortex-M33 (NemaPVG)"
	config LV_NEMA_LIB_M55
		bool "Cortex-M55"
	config LV_NEMA_LIB_M7
		bool "Cortex-M7"
endchoice

config LV_USE_NEMA_LIB
	int
	default 0 if LV_NEMA_LIB_NONE
	default 1 if LV_NEMA_LIB_M33_REVC
	default 2 if LV_NEMA_LIB_M33_NEMAPVG
	default 3 if LV_NEMA_LIB_M55
	default 4 if LV_NEMA_LIB_M7

choice LV_USE_NEMA_HAL
	prompt "NemaGFX HAL"
	default LV_NEMA_HAL_CUSTOM
	help
		STM32 uses the HAL bundled with LVGL. Custom means the application
		provides the NemaGFX HAL (nema_hal.c) itself.

	config LV_NEMA_HAL_CUSTOM
		bool "Custom"
	config LV_NEMA_HAL_STM32
		bool "STM32"
endchoice

config LV_USE_NEMA_HAL
	int
	default 0 if LV_NEMA_HAL_CUSTOM
	default 1 if LV_NEMA_HAL_STM32

config LV_NEMA_STM32_HAL_INCLUDE
	string "STM32 HAL header"
	default "stm32u5xx_hal.h"
	depends on LV_NEMA_HAL_STM32

config LV_NEMA_USE_CUSTOM_INCLUDE
	bool "Custom attribute header"
	default n
	depends on LV_NEMA_HAL_STM32
	help
	  Include the header given by LV_NEMA_CUSTOM_INCLUDE to override
	  NemaGFX/STM32 HAL-specific macros such as
	  LV_NEMA_STM32_HAL_ATTRIBUTE_POOL_MEM.

config LV_NEMA_CUSTOM_INCLUDE
	string "Path to custom NemaGFX attribute header"
	default ""
	depends on LV_NEMA_USE_CUSTOM_INCLUDE
	help
	  Optional header to override NemaGFX/STM32 HAL-specific macros.

	  LV_NEMA_STM32_HAL_ATTRIBUTE_POOL_MEM
	    Attribute applied to the NemaGFX memory pool on STM32 targets.
	    Used to place the pool in a specific RAM region accessible by
	    the NemaGFX DMA.
	    e.g. __attribute__((section(".nema_pool")))

config LV_USE_NEMA_VG
	bool "NemaVG vector graphics"
	select LV_DRAW_HAS_VECTOR_SUPPORT
	default n
	help
		Draw vector graphics (lv_vector_dsc) with NemaVG on top of NemaGFX.

config LV_NEMA_GFX_MAX_RESX
	int "NemaVG max horizontal resolution (px)"
	default 800
	help
		Canvas width NemaVG is initialized for. With the vertical resolution it also
		sizes the NemaGFX memory pool on STM32 (RESX * RESY + 10KB).

config LV_NEMA_GFX_MAX_RESY
	int "NemaVG max vertical resolution (px)"
	default 600
	help
		Canvas height NemaVG is initialized for.

endif
endmenu

menu "PXP"
config LV_USE_PXP
	bool "PXP (legacy)"
	default n
	select LV_USE_DRAW_PXP
	help
	  Use LV_USE_DRAW_PXP instead.

config LV_USE_DRAW_PXP
	bool "PXP renderer"
	default n
	help
		Accelerate blends, fills and transforms with the PXP (Pixel Pipeline)
		engine of NXP i.MX RT SoCs.

if LV_USE_DRAW_PXP

config LV_USE_ROTATE_PXP
	bool "Display rotation"
	default n
	help
		Rotate the rendered display buffer with the PXP instead of the CPU.

config LV_USE_PXP_DRAW_THREAD
	bool "Dedicated draw thread"
	depends on !LV_OS_NONE
	default y
	help
		Dispatch PXP operations from their own thread so the CPU can keep
		rendering in parallel. Needs an OS.

config LV_USE_PXP_ASSERT
	bool "Asserts"
	help
		Check the status of every PXP call and assert on failure. Useful while
		bringing up a board.

endif
endmenu

menu "PPA"
config LV_USE_PPA
	bool "PPA renderer"
	select LV_USE_DRAW_SW
	default n
	help
		Accelerate blends, fills and transforms with the PPA (Pixel Processing
		Accelerator) peripheral of Espressif SoCs.

if LV_USE_PPA

config LV_USE_PPA_IMG
	bool "Image drawing"
	default n
	help
		Let the PPA also draw images. Only simple cases qualify: unscaled,
		unrotated, fully opaque and without masks.

choice
	prompt "PPA burst length (bytes)"
	default LV_PPA_BURST_LENGTH_128
	help
		DMA burst length used by the PPA clients.

	config LV_PPA_BURST_LENGTH_8
		bool "8"
	config LV_PPA_BURST_LENGTH_16
		bool "16"
	config LV_PPA_BURST_LENGTH_32
		bool "32"
	config LV_PPA_BURST_LENGTH_64
		bool "64"
	config LV_PPA_BURST_LENGTH_128
		bool "128"
endchoice

config LV_PPA_BURST_LENGTH
	int
	default 8 if LV_PPA_BURST_LENGTH_8
	default 16 if LV_PPA_BURST_LENGTH_16
	default 32 if LV_PPA_BURST_LENGTH_32
	default 64 if LV_PPA_BURST_LENGTH_64
	default 128 if LV_PPA_BURST_LENGTH_128
endif
endmenu

menu "DMA2D"
config LV_USE_DRAW_DMA2D
	bool "DMA2D renderer"
	default n
	help
		Accelerate blends, fills and image decoding with the STM32 DMA2D peripheral.

if LV_USE_DRAW_DMA2D

config LV_DRAW_DMA2D_HAL_INCLUDE
	string "STM32 HAL header"
	default "stm32h7xx_hal.h"
	help
		Header that declares the DMA2D HAL API of the target STM32 family.

config LV_USE_DRAW_DMA2D_INTERRUPT
	bool "Transfer complete interrupt"
	default n
	help
		Run DMA2D transfers asynchronously instead of waiting for them (needs an OS).
		Call lv_draw_dma2d_transfer_complete_interrupt_handler() from the DMA2D global ISR.

endif
endmenu

menu "EPIC"
config LV_USE_SIFLI_EPIC
	bool "SiFli EPIC renderer"
	default n
	select LV_USE_DRAW_SW
	help
		Accelerate blends, fills, images and text with the EPIC (Enhanced
		Pixel Image Compositor) engine of SiFli BF0 SoCs. Unsupported
		operations fall back to software rendering.

if LV_USE_SIFLI_EPIC

config LV_USE_SIFLI_EPIC_DRAW_THREAD
	bool "Draw thread"
	depends on !LV_OS_NONE
	default y
	help
		Dispatch EPIC operations from their own thread so the CPU can keep
		rendering in parallel.

config LV_USE_SIFLI_EPIC_ASSERT
	bool "Asserts"
	help
		Check the status of every EPIC call and assert on failure. Useful
		while bringing up a board.

endif
endmenu

menu "EVE"
config LV_USE_DRAW_EVE
	bool "EVE renderer"
	default n
	help
		Offload drawing to an external EVE (FT81X/BT81X) graphics controller over SPI.

if LV_USE_DRAW_EVE

config LV_DRAW_EVE_EVE_GENERATION
	int "EVE generation"
	default 4
	range 2 4
	help
		Generation of the connected controller: 2 = FT81x, 3 = BT815/BT816,
		4 = BT817/BT818. Higher generations expose more commands and registers.

config LV_DRAW_EVE_WRITE_BUFFER_SIZE
	int "SPI write buffer size (bytes)"
	default 2048
	help
		Bytes buffered before each SPI transmission. 0 disables buffering;
		values below 4 are treated as 0.

endif
endmenu

menu "G2D"
config LV_USE_G2D
	bool "G2D (legacy)"
	default n
	select LV_USE_DRAW_G2D
	help
	  Use LV_USE_DRAW_G2D instead.

config LV_USE_DRAW_G2D
	bool "G2D renderer"
	select LV_USE_DRAW_SW
	default n
	help
		Accelerate blends, fills and image blits with the NXP G2D API (i.MX 2D GPU).
		Requires the g2d library and its headers.

if LV_USE_DRAW_G2D

config LV_G2D_HASH_TABLE_SIZE
	int "Buffer hash table size (entries)"
	default 50
	help
		Maximum number of buffers mapped for the G2D draw unit, including frame
		buffers and assets. Drawing asserts once the table is full.

config LV_USE_G2D_DRAW_THREAD
	bool "Dedicated draw thread"
	depends on !LV_OS_NONE
	default y
	help
		Dispatch G2D operations from their own thread so the CPU can keep
		rendering in parallel. Needs an OS.

config LV_USE_G2D_ASSERT
	bool "Asserts"
	depends on LV_USE_DRAW_G2D
	default n
	help
		Check the status of every G2D call and assert on failure. Useful while
		bringing up a board.

endif
endmenu

menu "NanoVG"
config LV_USE_DRAW_NANOVG
	bool "NanoVG renderer"
	default n
	select LV_USE_NANOVG
	select LV_USE_OPENGLES
	select LV_USE_MATRIX
	select LV_DRAW_HAS_VECTOR_SUPPORT
	select LV_DRAW_HAS_3D_SUPPORT
	select LV_DRAW_DISABLE_TILED_RENDERING
	help
		Draw with the NanoVG vector library on top of OpenGL / OpenGL ES shaders.

if LV_USE_DRAW_NANOVG

choice LV_NANOVG_BACKEND
	prompt "NanoVG OpenGL backend"
	default LV_NANOVG_BACKEND_GLES2
	help
		NanoVG shader flavor to compile. Must match the OpenGL context the
		display driver creates.

	config LV_NANOVG_BACKEND_GL2
		bool "OpenGL 2.0"
	config LV_NANOVG_BACKEND_GL3
		bool "OpenGL 3.0+"
	config LV_NANOVG_BACKEND_GLES2
		bool "OpenGL ES 2.0"
	config LV_NANOVG_BACKEND_GLES3
		bool "OpenGL ES 3.0+"
endchoice

config LV_NANOVG_BACKEND
	int
	default 1 if LV_NANOVG_BACKEND_GL2
	default 2 if LV_NANOVG_BACKEND_GL3
	default 3 if LV_NANOVG_BACKEND_GLES2
	default 4 if LV_NANOVG_BACKEND_GLES3

config LV_NANOVG_IMAGE_CACHE_CNT
	int "Image texture cache size (entries)"
	default 128
	help
		Number of decoded images kept as GPU textures.

config LV_NANOVG_LETTER_CACHE_CNT
	int "Letter cache size (entries)"
	default 512
	help
		Number of rendered glyphs kept for text drawing.

endif
endmenu

menu "OpenGL ES"
config LV_USE_DRAW_OPENGLES
	bool "OpenGL ES renderer"
	default n
	select LV_USE_OPENGLES
	select LV_DRAW_HAS_3D_SUPPORT
	select LV_DRAW_DISABLE_TILED_RENDERING
	help
		Draw with OpenGL ES, keeping rendered widgets and images as GPU textures.

if LV_USE_DRAW_OPENGLES

config LV_DRAW_OPENGLES_TEXTURE_CACHE_COUNT
	int "Texture cache size (entries)"
	default 64
	help
		Number of textures kept in the cache. More entries mean fewer redraws
		but more GPU memory.

endif
endmenu

menu "SDL"
config LV_USE_DRAW_SDL
	bool "SDL renderer"
	select LV_USE_DRAW_SW
	select LV_DRAW_DISABLE_TILED_RENDERING
	default n
	help
		Render with the SDL renderer API, caching widgets and images as SDL textures.
endmenu
endmenu
menu "Input Devices"

config LV_INDEV_DEF_SCROLL_LIMIT
	int "Scroll threshold (px)"
	range 0 255
	default 10
	help
		Distance the pointer needs to travel before scrolling starts.

config LV_INDEV_DEF_SCROLL_THROW
	int "Scroll throw slow-down (%)"
	range 1 100
	default 10
	help
		Slow-down applied after releasing a scroll. Greater value means faster slow-down.

config LV_INDEV_DEF_SCROLL_ELASTIC_FACTOR
	int "Elastic scroll slow-down factor"
	range 1 255
	default 4
	help
		Scrolling past the edge of a scrollable widget is slower by this factor.

config LV_INDEV_DEF_LONG_PRESS_TIME
	int "Long press time (ms)"
	range 0 65535
	default 400
	help
		Press time after which `LV_EVENT_LONG_PRESSED` is sent.

config LV_INDEV_DEF_LONG_PRESS_REP_TIME
	int "Long press repeat period (ms)"
	range 0 65535
	default 100
	help
		Time between `LV_EVENT_LONG_PRESSED_REPEAT` events.

config LV_INDEV_DEF_DOUBLE_CLICK_TIME
	int "Multi-click time (ms)"
	range 0 65535
	default 400
	help
		Max time between consecutive clicks to count as a double or triple click.

config LV_INDEV_DEF_GESTURE_LIMIT
	int "Gesture threshold (px)"
	range 0 255
	default 50
	help
		Distance the pointer needs to travel before a gesture is detected.

config LV_INDEV_DEF_GESTURE_MIN_VELOCITY
	int "Gesture minimum velocity (px)"
	range 0 255
	default 3
	help
		Minimum pointer velocity at release to report a swipe.

config LV_INDEV_DEF_ROTARY_SENSITIVITY
	int "Rotary sensitivity"
	range 1 65535
	default 256
	help
		The encoder diff is multiplied by this value and divided by 256.

config LV_USE_GRIDNAV
	bool "Grid navigation"
	default n
	help
		Move focus between a container's children with arrow keys, based on their position.

config LV_USE_GESTURE_RECOGNITION
	bool "Multi-touch gesture recognition"
	select LV_USE_FLOAT
	default n
	help
		Detect pinch and rotate gestures from multi-touch input. Requires float support.

if LV_USE_GESTURE_RECOGNITION

config LV_INDEV_DEF_GESTURE_PINCH_DOWN_THRESHOLD
	int "Pinch in threshold (%)"
	range 1 99
	default 75
	help
		Scale the fingers need to pinch down to before pinch events are sent.

config LV_INDEV_DEF_GESTURE_PINCH_UP_THRESHOLD
	int "Pinch out threshold (%)"
	range 101 1000
	default 150
	help
		Scale the fingers need to pinch up to before pinch events are sent.

config LV_INDEV_DEF_GESTURE_PINCH_MAX_INITIAL_SCALE
	int "Pinch maximum initial scale (%)"
	range 101 1000
	default 250
	help
		A pinch starting above this scale is discarded.
		Must be greater than the pinch out threshold.

config LV_INDEV_DEF_GESTURE_ROTATION_THRESHOLD
	int "Rotation threshold (mrad)"
	range 1 3141
	default 200
	help
		Angle the fingers need to rotate by before rotation events are sent.

endif #LV_USE_GESTURE_RECOGNITION

endmenu
menu "Core"

config LV_OBJ_STYLE_CACHE
	bool "Style cache"
	default y
	help
		Speed up style property lookups by adding 2 x 32 bit variables to each lv_obj_t.

config LV_USE_OBJ_NAME
	bool "Widget names (lv_obj_set_name)"
	default n

config LV_USE_OBJ_ID
	bool "Widget id (lv_obj_set_id)"
	default n

if LV_USE_OBJ_ID

config LV_OBJ_ID_AUTO_ASSIGN
	bool "Automatic ID assignment on widget creation"
	default y

config LV_USE_OBJ_ID_BUILTIN
	bool "Built-in ID handler"
	default y
	help
		Use builtin obj ID handler functions:
		- lv_obj_assign_id:       Called when a widget is created. Use a separate counter for each widget class as an ID.
		- lv_obj_id_compare:      Compare the ID to decide if it matches with a requested value.
		- lv_obj_stringify_id:    Return string-ified identifier, e.g. "button3".
		- lv_obj_free_id:         Does nothing, as there is no memory allocation for the ID.
		When disabled these functions needs to be implemented by the user.

endif #LV_USE_OBJ_ID

config LV_USE_OBJ_PROPERTY
	bool "Generic widget property set/get API"
	default n
	help
		Get and set any widget style or attribute through a single generic property ID based API.

if LV_USE_OBJ_PROPERTY

config LV_USE_OBJ_PROPERTY_NAME
	bool "Access properties by name"
	default y
	help
		Add a name table to every widget class, so the property can be accessed by name.
		Note, the const table will increase flash usage.

endif #LV_USE_OBJ_PROPERTY

config LV_USE_EXT_DATA
	bool "External data and destructor"
	default n
	help
		Attach your own data plus a destructor callback to events, widgets, observers,
		animations, timers, groups, displays, input devices and themes, so your resources
		are cleaned up when LVGL frees them.

config LV_USE_FLOAT
	bool "Float as lv_value_precise_t"
	default n
	help
		Use `float` instead of `int32_t` for coordinates and values that need sub-pixel precision.

config LV_USE_OBSERVER
	bool "Observer"
	default y
	help
		Bind widgets to subject variables so they update automatically when the value changes.

config LV_USE_TRANSLATION
	bool "Text translation"
	help
		Look up strings by ID for the selected language with lv_translation_get().

config LV_USE_COLOR_FILTER
	bool "Color filter style"
	default n

endmenu #"Core"
menu "Logging"
config LV_USE_LOG
	bool "Logging"

if LV_USE_LOG

choice
	bool "Default log verbosity"
	default LV_LOG_LEVEL_WARN

	config LV_LOG_LEVEL_TRACE
		bool "Trace: detailed information about everything"
	config LV_LOG_LEVEL_INFO
		bool "Info: important events"
	config LV_LOG_LEVEL_WARN
		bool "Warn: something unwanted happened but caused no problem"
	config LV_LOG_LEVEL_ERROR
		bool "Error: critical issues where the system may fail"
	config LV_LOG_LEVEL_USER
		bool "User: only logs added by the user"
	config LV_LOG_LEVEL_NONE
		bool "None: nothing is logged"
endchoice

config LV_LOG_LEVEL
	int
	default 0 if LV_LOG_LEVEL_TRACE
	default 1 if LV_LOG_LEVEL_INFO
	default 2 if LV_LOG_LEVEL_WARN
	default 3 if LV_LOG_LEVEL_ERROR
	default 4 if LV_LOG_LEVEL_USER
	default 5 if LV_LOG_LEVEL_NONE

config LV_LOG_LEVEL_NUM
	int
	default 5

config LV_LOG_PRINTF
	bool "Print the log with 'printf'"
	default n
	help
		If not set, the user needs to register a callback with lv_log_register_print_cb().

config LV_LOG_USE_TIMESTAMP
	bool "Add a timestamp to each log"
	default y

config LV_LOG_USE_FILE_LINE
	bool "Add the file name and line number to each log"
	default y

menu "Trace logs per module"

config LV_LOG_TRACE_MEM
	bool "Memory"
	default y

config LV_LOG_TRACE_TIMER
	bool "Timer"
	default y

config LV_LOG_TRACE_INDEV
	bool "Input devices"
	default y

config LV_LOG_TRACE_DISP_REFR
	bool "Display refresh"
	default y

config LV_LOG_TRACE_EVENT
	bool "Events"
	default y

config LV_LOG_TRACE_OBJ_CREATE
	bool "Widget creation"
	default y

config LV_LOG_TRACE_LAYOUT
	bool "Layout"
	default y

config LV_LOG_TRACE_ANIM
	bool "Animations"
	default y

config LV_LOG_TRACE_CACHE
	bool "Cache"
	default y

endmenu

endif
endmenu
menu "Themes"

config LV_USE_THEME_DEFAULT
	bool "Default theme"
	default y
	help
		Full-featured theme used by LVGL's demos and examples.

if LV_USE_THEME_DEFAULT
config LV_THEME_DEFAULT_DARK
	bool "Dark mode"
	default n

config LV_THEME_DEFAULT_GROW
	bool "Grow on press"
	default y

config LV_THEME_DEFAULT_TRANSITION_TIME
	int "Transition time (ms)"
	default 80

endif #LV_USE_THEME_DEFAULT

config LV_USE_THEME_SIMPLE
	bool "Simple theme"
	default y
	help
		Minimal styling, a good starting point for a custom theme.

config LV_USE_THEME_MONO
	bool "Monochrome theme"
	default y
	help
		Styling for 1-bit displays such as e-paper and dot-matrix panels.
endmenu
menu "Layouts"

config LV_USE_FLEX
	bool "Flex"
	default y
	help
		Arrange children in a row or column that wraps and grows, similar to Flexbox in CSS.

config LV_USE_GRID
	bool "Grid"
	default y
	help
		Arrange children in rows and columns, similar to Grid in CSS.
endmenu
menu "Image Settings"

config LV_CACHE_DEF_SIZE
	int "Default image cache size (bytes, 0 = disabled)"
	default 0
	help
		Avoids repeatedly opening and decoding the same images, at the cost of RAM.
		Of little benefit with only the built-in image formats.

config LV_IMAGE_HEADER_CACHE_DEF_CNT
	int "Default image header cache size (entries, 0 = disabled)"
	default 0
	help
		Avoids repeatedly reading image headers, at the cost of RAM.
		Of little benefit with only the built-in image formats.

config LV_USE_RLE
	bool "RLE compression"
	help
		Decoder for LVGL's run-length encoded binary image format.

config LV_USE_LZ4
	bool "LZ4 compression"
	default n
	help
		LZ4 compress/decompress functions, used by LVGL's compressed binary images.

config LV_USE_LZ4_INTERNAL
	bool "Bundled LZ4"
	depends on LV_USE_LZ4
	default y

config LV_BIN_DECODER_RAM_LOAD
	bool "Decode binary images to RAM"
	default n

config LV_USE_LODEPNG
	bool "PNG decoder (LodePNG)"

config LV_USE_LIBPNG
	bool "PNG decoder (libpng)"

config LV_USE_BMP
	bool "BMP decoder"

config LV_USE_TJPGD
	bool "JPEG decoder (TJpgDec)"
	help
		Also decodes split JPEG, a custom format optimized for embedded systems.

config LV_USE_LIBJPEG_TURBO
	bool "JPEG decoder (libjpeg-turbo)"
	help
		High-performance decoder supporting the complete JPEG specifications.

config LV_USE_LIBWEBP
	bool "WebP decoder"

config LV_USE_SVG
	bool "SVG"
	depends on LV_DRAW_HAS_VECTOR_SUPPORT
	select LV_USE_VECTOR_GRAPHIC

if LV_USE_SVG
config LV_USE_SVG_ANIMATION
	bool "SVG animation"

config LV_USE_SVG_DEBUG
	bool "SVG debug logs"
	default n
endif #LV_USE_SVG

endmenu
menu "Text & Font Settings"
choice LV_TXT_ENC
	prompt "Character encoding for strings"
	help
		Your IDE or editor should be set to the same character encoding.
	default LV_TXT_ENC_UTF8

	config LV_TXT_ENC_UTF8
		bool "UTF8"
	config LV_TXT_ENC_ASCII
		bool "ASCII"
endchoice

config LV_TXT_BREAK_CHARS
	string "Characters to break (wrap) text on"
	default " ,.;:-_)]}"

config LV_TXT_LINE_BREAK_LONG_LEN
	int "Line break long length"
	default 0
	help
		If a word is at least this long, will break wherever 'prettiest'.
		To disable, set to a value <= 0.

config LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN
	int "Min num chars before break"
	default 3
	depends on LV_TXT_LINE_BREAK_LONG_LEN > 0
	help
		Minimum number of characters in a long word to put on a line before a break.

config LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN
	int "Min num chars after break"
	default 3
	depends on LV_TXT_LINE_BREAK_LONG_LEN > 0
	help
		Minimum number of characters in a long word to put on a line after a break

config LV_TXT_COLOR_CMD
	string "Text recoloring control character"
	default "\#"

config LV_USE_BIDI
	bool "Bidirectional text"
	help
		Allows mixing Left-to-Right and Right-to-Left texts.
		The direction will be processed according to the Unicode Bidirectional Algorithm:
		https://www.w3.org/International/articles/inline-bidi-markup/uba-basics

choice LV_BIDI_BASE_DIR_DEF
	prompt "Default base direction"
	depends on LV_USE_BIDI
	default LV_BASE_DIR_AUTO

	config LV_BASE_DIR_LTR
		bool "Left-to-Right"
	config LV_BASE_DIR_RTL
		bool "Right-to-Left"
	config LV_BASE_DIR_AUTO
		bool "Auto detect"
endchoice

config LV_USE_ARABIC_PERSIAN_CHARS
	bool "Arabic/Persian character shaping"
	help
		In these languages characters should be replaced with
		another form based on their position in the text.
menu "Built-in Fonts"
	config LV_FONT_MONTSERRAT_8
		bool "Montserrat 8"
		help
			Montserrat fonts with ASCII range and some symbols using bpp = 4
			https://fonts.google.com/specimen/Montserrat
	config LV_FONT_MONTSERRAT_10
		bool "Montserrat 10"
	config LV_FONT_MONTSERRAT_12
		bool "Montserrat 12"
	config LV_FONT_MONTSERRAT_14
		bool "Montserrat 14"
		default y
	config LV_FONT_MONTSERRAT_16
		bool "Montserrat 16"
	config LV_FONT_MONTSERRAT_18
		bool "Montserrat 18"
	config LV_FONT_MONTSERRAT_20
		bool "Montserrat 20"
	config LV_FONT_MONTSERRAT_22
		bool "Montserrat 22"
	config LV_FONT_MONTSERRAT_24
		bool "Montserrat 24"
	config LV_FONT_MONTSERRAT_26
		bool "Montserrat 26"
	config LV_FONT_MONTSERRAT_28
		bool "Montserrat 28"
	config LV_FONT_MONTSERRAT_30
		bool "Montserrat 30"
	config LV_FONT_MONTSERRAT_32
		bool "Montserrat 32"
	config LV_FONT_MONTSERRAT_34
		bool "Montserrat 34"
	config LV_FONT_MONTSERRAT_36
		bool "Montserrat 36"
	config LV_FONT_MONTSERRAT_38
		bool "Montserrat 38"
	config LV_FONT_MONTSERRAT_40
		bool "Montserrat 40"
	config LV_FONT_MONTSERRAT_42
		bool "Montserrat 42"
	config LV_FONT_MONTSERRAT_44
		bool "Montserrat 44"
	config LV_FONT_MONTSERRAT_46
		bool "Montserrat 46"
	config LV_FONT_MONTSERRAT_48
		bool "Montserrat 48"

	config LV_FONT_MONTSERRAT_28_COMPRESSED
		bool "Montserrat 28 (compressed)"
	config LV_FONT_DEJAVU_16_PERSIAN_HEBREW
		bool "Dejavu 16 (Persian, Hebrew, Arabic)"
	config LV_FONT_SOURCE_HAN_SANS_SC_14_CJK
		bool "SourceHanSansSC 14 (CJK)"
	config LV_FONT_SOURCE_HAN_SANS_SC_16_CJK
		bool "SourceHanSansSC 16 (CJK)"

	config LV_FONT_UNSCII_8
		bool "UNSCII 8"
		help
			Pixel perfect monospaced fonts
	config LV_FONT_UNSCII_16
		bool "UNSCII 16"
endmenu

config LV_FONT_USE_CUSTOM_INCLUDE
	bool "Custom font declaration header"
	default n
	help
	  Include the header given by LV_FONT_CUSTOM_INCLUDE to declare custom
	  fonts (LV_FONT_CUSTOM_DECLARE) or override font-related macros.

config LV_FONT_CUSTOM_INCLUDE
	string "Path to custom font declaration header"
	default ""
	depends on LV_FONT_USE_CUSTOM_INCLUDE
	help
	  Optional header to override font-related macros.

	  Typical use is to declare extra fonts through LV_FONT_CUSTOM_DECLARE:
	      #define LV_FONT_CUSTOM_DECLARE  LV_FONT_DECLARE(my_font_24)

	  It can also be used to override the default font to a custom one:
	      #define LV_FONT_DEFAULT         &my_font_24

config LV_USE_CUSTOM_FONT_DEFAULT
	bool "Custom default font"
	default n
	help
		Enable this to set LV_FONT_DEFAULT to a font you define yourself
		rather than one of the built-in fonts below. When enabled, the
		built-in default-font selection is hidden, so you MUST define
		LV_FONT_DEFAULT yourself, either:
		  - from the build system, e.g. -DLV_FONT_DEFAULT='&my_font_24', or
		  - in the header given by LV_FONT_CUSTOM_INCLUDE, e.g.
		        #define LV_FONT_CUSTOM_DECLARE  LV_FONT_DECLARE(my_font_24)
		        #define LV_FONT_DEFAULT         &my_font_24

		If you do not, LV_FONT_DEFAULT falls back to a builtin font,
		which is no longer compiled in, causing a link error.


choice LV_FONT_DEFAULT
	prompt "Default font"
	default LV_FONT_DEFAULT_MONTSERRAT_14
	depends on !LV_USE_CUSTOM_FONT_DEFAULT
	help
		Font used by the themes and by widgets that do not set one explicitly.

	config LV_FONT_DEFAULT_MONTSERRAT_8
		bool "Montserrat 8"
		select LV_FONT_MONTSERRAT_8
	config LV_FONT_DEFAULT_MONTSERRAT_10
		bool "Montserrat 10"
		select LV_FONT_MONTSERRAT_10
	config LV_FONT_DEFAULT_MONTSERRAT_12
		bool "Montserrat 12"
		select LV_FONT_MONTSERRAT_12
	config LV_FONT_DEFAULT_MONTSERRAT_14
		bool "Montserrat 14"
		select LV_FONT_MONTSERRAT_14
	config LV_FONT_DEFAULT_MONTSERRAT_16
		bool "Montserrat 16"
		select LV_FONT_MONTSERRAT_16
	config LV_FONT_DEFAULT_MONTSERRAT_18
		bool "Montserrat 18"
		select LV_FONT_MONTSERRAT_18
	config LV_FONT_DEFAULT_MONTSERRAT_20
		bool "Montserrat 20"
		select LV_FONT_MONTSERRAT_20
	config LV_FONT_DEFAULT_MONTSERRAT_22
		bool "Montserrat 22"
		select LV_FONT_MONTSERRAT_22
	config LV_FONT_DEFAULT_MONTSERRAT_24
		bool "Montserrat 24"
		select LV_FONT_MONTSERRAT_24
	config LV_FONT_DEFAULT_MONTSERRAT_26
		bool "Montserrat 26"
		select LV_FONT_MONTSERRAT_26
	config LV_FONT_DEFAULT_MONTSERRAT_28
		bool "Montserrat 28"
		select LV_FONT_MONTSERRAT_28
	config LV_FONT_DEFAULT_MONTSERRAT_30
		bool "Montserrat 30"
		select LV_FONT_MONTSERRAT_30
	config LV_FONT_DEFAULT_MONTSERRAT_32
		bool "Montserrat 32"
		select LV_FONT_MONTSERRAT_32
	config LV_FONT_DEFAULT_MONTSERRAT_34
		bool "Montserrat 34"
		select LV_FONT_MONTSERRAT_34
	config LV_FONT_DEFAULT_MONTSERRAT_36
		bool "Montserrat 36"
		select LV_FONT_MONTSERRAT_36
	config LV_FONT_DEFAULT_MONTSERRAT_38
		bool "Montserrat 38"
		select LV_FONT_MONTSERRAT_38
	config LV_FONT_DEFAULT_MONTSERRAT_40
		bool "Montserrat 40"
		select LV_FONT_MONTSERRAT_40
	config LV_FONT_DEFAULT_MONTSERRAT_42
		bool "Montserrat 42"
		select LV_FONT_MONTSERRAT_42
	config LV_FONT_DEFAULT_MONTSERRAT_44
		bool "Montserrat 44"
		select LV_FONT_MONTSERRAT_44
	config LV_FONT_DEFAULT_MONTSERRAT_46
		bool "Montserrat 46"
		select LV_FONT_MONTSERRAT_46
	config LV_FONT_DEFAULT_MONTSERRAT_48
		bool "Montserrat 48"
		select LV_FONT_MONTSERRAT_48
	config LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED
		bool "Montserrat 28 (compressed)"
		select LV_FONT_MONTSERRAT_28_COMPRESSED
	config LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW
		bool "Dejavu 16 (Persian, Hebrew, Arabic)"
		select LV_FONT_DEJAVU_16_PERSIAN_HEBREW
	config LV_FONT_DEFAULT_SOURCE_HAN_SANS_SC_14_CJK
		bool "SourceHanSansSC 14 (CJK)"
		select LV_FONT_SOURCE_HAN_SANS_SC_14_CJK
	config LV_FONT_DEFAULT_SOURCE_HAN_SANS_SC_16_CJK
		bool "SourceHanSansSC 16 (CJK)"
		select LV_FONT_SOURCE_HAN_SANS_SC_16_CJK
	config LV_FONT_DEFAULT_UNSCII_8
		bool "UNSCII 8"
		select LV_FONT_UNSCII_8
	config LV_FONT_DEFAULT_UNSCII_16
		bool "UNSCII 16"
		select LV_FONT_UNSCII_16
endchoice

config LV_FONT_FMT_TXT_LARGE
	bool "Large font format"
	help
		Use larger internal offsets so fonts with many glyphs stay addressable.
		The exact limit depends on font size, face and format, but enable it if
		you see issues with fonts above roughly 10,000 characters.

config LV_USE_FONT_COMPRESSED
	bool "Compressed fonts"

config LV_USE_FONT_PLACEHOLDER
	bool "Glyph placeholders"
	default y
	help
		Draw a placeholder rectangle instead of nothing when a glyph is missing
		from the font.

config LV_USE_FONT_MANAGER
	bool "Font manager"
	default n
	help
		Load fonts by name, share them between widgets and free them by reference
		counting.

config LV_FONT_MANAGER_NAME_MAX_LEN
	int "Font name max length (characters)"
	depends on LV_USE_FONT_MANAGER
	default 32

config LV_USE_IMGFONT
	bool "Image font"
	default n
	help
		Use images as glyphs in label and span widgets, e.g. to render emojis.


config LV_USE_FREETYPE
	bool "FreeType"
	default n

if LV_USE_FREETYPE

config LV_FREETYPE_USE_LVGL_PORT
	bool "LVGL memory and file system port"
	default n
	help
		When enabled, FreeType will use LVGL's memory allocator and file system
		abstraction instead of the platform defaults.

config LV_FREETYPE_CACHE_FT_GLYPH_CNT
	int "Glyph cache size (glyphs)"
	default 256

config LV_FREETYPE_CACHE_FT_GLYPH_L1
	bool "L1 glyph metrics cache (lock-free, single-thread only)"
	depends on LV_OS_NONE
	default y

endif #LV_USE_FREETYPE
config LV_USE_TINY_TTF
	bool "Tiny TTF"
	default n
	help
		Built-in TTF decoder
if LV_USE_TINY_TTF
config LV_TINY_TTF_FILE_SUPPORT
	bool "Load TTF data from files"
	default n
config LV_TINY_TTF_CACHE_GLYPH_CNT
	int "Glyph cache size (glyphs)"
	default 128

config LV_TINY_TTF_CACHE_KERNING_CNT
	int "Kerning cache size (entries)"
	default 256
endif #LV_USE_TINY_TTF
endmenu
menu "Widgets"

config LV_WIDGETS_HAS_DEFAULT_VALUE
	bool "Default values for widgets"
	default y
	help
		Causes these widgets to be given default values at creation time.
		- lv_buttonmatrix_t:  Get default maps:  {"Btn1", "Btn2", "Btn3", "\n", "Btn4", "Btn5", ""}, else map not set.
		- lv_checkbox_t    :  String label set to "Check box", else set to empty string.
		- lv_dropdown_t    :  Options set to "Option 1", "Option 2", "Option 3", else no values are set.
		- lv_roller_t      :  Options set to "Option 1", "Option 2", "Option 3", "Option 4", "Option 5", else no values are set.
		- lv_label_t       :  Text set to "Text", else empty string.
		- lv_arclabel_t   :  Text set to "Arced Text", else empty string.

config LV_USE_3DTEXTURE
	bool "3D texture"
	depends on LV_DRAW_HAS_3D_SUPPORT

config LV_USE_ANIMIMG
	bool "Animated image"
	default y

config LV_USE_ARC
	bool "Arc"
	default y

config LV_USE_ARCLABEL
	bool "Arc label"
	default y

config LV_USE_BAR
	bool "Bar"
	default y

config LV_USE_BARCODE
	bool "Barcode"
	select LV_USE_CANVAS
	help
		Generates Code 128 barcodes.

config LV_USE_BUTTON
	bool "Button"
	default y

config LV_USE_BUTTONMATRIX
	bool "Button matrix"
	default y

config LV_USE_CALENDAR
	bool "Calendar"
	default y

if LV_USE_CALENDAR
config LV_CALENDAR_WEEK_STARTS_MONDAY
	bool "Week starts on Monday"

menu "Days name configuration"
	depends on LV_USE_CALENDAR

config LV_MONDAY_STR
	string "Shortened string for Monday"
	default "Mo"
config LV_TUESDAY_STR
	string "Shortened string for Tuesday"
	default "Tu"
config LV_WEDNESDAY_STR
	string "Shortened string for Wednesday"
	default "We"
config LV_THURSDAY_STR
	string "Shortened string for Thursday"
	default "Th"
config LV_FRIDAY_STR
	string "Shortened string for Friday"
	default "Fr"
config LV_SATURDAY_STR
	string "Shortened string for Saturday"
	default "Sa"
config LV_SUNDAY_STR
	string "Shortened string for Sunday"
	default "Su"

endmenu

menu "Month names configuration"
	depends on LV_USE_CALENDAR
config LV_JANUARY_STR
	string "String for January"
	default "January"
config LV_FEBRUARY_STR
	string "String for February"
	default "February"
config LV_MARCH_STR
	string "String for March"
	default "March"
config LV_APRIL_STR
	string "String for April"
	default "April"
config LV_MAY_STR
	string "String for May"
	default "May"
config LV_JUNE_STR
	string "String for June"
	default "June"
config LV_JULY_STR
	string "String for July"
	default "July"
config LV_AUGUST_STR
	string "String for August"
	default "August"
config LV_SEPTEMBER_STR
	string "String for September"
	default "September"
config LV_OCTOBER_STR
	string "String for October"
	default "October"
config LV_NOVEMBER_STR
	string "String for November"
	default "November"
config LV_DECEMBER_STR
	string "String for December"
	default "December"
endmenu

config LV_USE_CALENDAR_HEADER_ARROW
	bool "Header with arrow buttons"
	default y

config LV_USE_CALENDAR_HEADER_DROPDOWN
	bool "Header with dropdowns"
	default y

config LV_USE_CALENDAR_CHINESE
	bool "Chinese calendar"
	default n

endif #LV_USE_CALENDAR



config LV_USE_CANVAS
	bool "Canvas"
	select LV_USE_IMAGE
	default y

config LV_USE_CHART
	bool "Chart"
	default y

config LV_USE_CHECKBOX
	bool "Checkbox"
	default y

config LV_USE_DROPDOWN
	bool "Dropdown"
	select LV_USE_LABEL
	default y

config LV_USE_FFMPEG
	bool "FFmpeg player"
	default n
	help
		Decodes images and plays videos with FFmpeg. It supports all major image
		formats, so do not enable other image decoders together with it.

if LV_USE_FFMPEG

config LV_FFMPEG_DUMP_FORMAT
	bool "Dump format"
	default n
	help
		Print the input stream information to stderr and keep FFmpeg logging
		enabled (it is silenced otherwise).

config LV_FFMPEG_PLAYER_USE_LV_FS
	bool "LVGL file system paths in the player"
	default n
	help
		URLs can no longer be opened once this is enabled. The FFmpeg image
		decoder always uses the LVGL file system regardless of this option.

endif #LV_USE_FFMPEG

config LV_USE_GIF
	bool "GIF decoder"

config LV_GIF_CACHE_DECODE_DATA
	bool "Cache decoded data"
	depends on LV_USE_GIF
	help
		Speeds up playback at the cost of an extra 16KB of RAM.

config LV_GIF_MAX_WIDTH
	int "Maximum GIF canvas width in pixels"
	depends on LV_USE_GIF
	default 480
	help
		Wider GIFs are rejected; raising this value increases memory usage.

config LV_GIF_MAX_HEIGHT
	int "Maximum GIF canvas height in pixels"
	depends on LV_USE_GIF
	default 32768
	help
		Taller GIFs are rejected; this value has no impact on memory usage.

config LV_USE_GLTF
	bool "glTF"
	select LV_USE_3DTEXTURE
	depends on LV_DRAW_HAS_3D_SUPPORT
	help
		Parses and renders 3D models (.gltf/.glb).

config LV_USE_GSTREAMER
	bool "GStreamer player"
	select LV_USE_IMAGE
	default n
	help
		Requires the gstreamer-1.0, gstreamer-video-1.0 and gstreamer-app-1.0
		development libraries.

config LV_USE_IMAGE
	bool "Image"
	default y

config LV_USE_IMAGEBUTTON
	bool "Image button"
	default y

config LV_USE_IME_PINYIN
	bool "Pinyin input method"
	default n
	select LV_USE_KEYBOARD
	help
		Chinese input method that converts Pinyin typed on a keyboard widget
		into Chinese characters.

if LV_USE_IME_PINYIN

config LV_IME_PINYIN_USE_K9_MODE
	bool "9-key input mode"
	default y

config LV_IME_PINYIN_K9_CAND_TEXT_NUM
	int "Maximum number of candidate panels for 9-key input mode"
	depends on LV_IME_PINYIN_USE_K9_MODE
	default 3

config LV_IME_PINYIN_USE_DEFAULT_DICT
	bool "Built-in dictionary"
	default y
	help
		Without it, a dictionary must be set with lv_ime_pinyin_set_dict()
		before the IME is used.

config LV_IME_PINYIN_CAND_TEXT_NUM
	int "Maximum number of candidate panels"
	default 6
	help
		Adjust this to the screen size, as all candidate panels must fit on it.

endif #LV_USE_IME_PINYIN

config LV_USE_KEYBOARD
	bool "Keyboard"
	default y

config LV_USE_LABEL
	bool "Label"
	default y

if LV_USE_LABEL

config LV_LABEL_TEXT_SELECTION
	bool "Text selection"
	default y

config LV_LABEL_LONG_TXT_HINT
	bool "Long text draw hint"
	default y
	help
		Stores 12 extra bytes per label to speed up drawing of very long texts.

config LV_LABEL_WAIT_CHAR_COUNT
	int "Circular scroll gap (characters)"
	default 3
	help
		Gap between the end and the restart of circularly scrolled text,
		measured in space-character widths.

endif #LV_USE_LABEL

config LV_USE_LED
	bool "LED"
	default y

config LV_USE_LINE
	bool "Line"
	default y

config LV_USE_LIST
	bool "List"
	default y

config LV_USE_LOTTIE
	bool "Lottie"
	default n
	depends on LV_DRAW_HAS_VECTOR_SUPPORT
	depends on LV_USE_THORVG # we require thorvg lottie parser
	select LV_USE_VECTOR_GRAPHIC
	help
		Plays Lottie JSON animations using the ThorVG Lottie parser.

config LV_USE_MENU
	bool "Menu"
	default y

config LV_USE_MSGBOX
	bool "Message box"
	default y
	select LV_USE_LABEL

config LV_USE_QRCODE
	bool "QR code"
	select LV_USE_CANVAS

config LV_USE_RLOTTIE
	bool "Lottie (rlottie, legacy)"
	default n
	help
		Legacy rlottie binding, kept for compatibility. Use LV_USE_LOTTIE instead.

config LV_USE_ROLLER
	bool "Roller"
	select LV_USE_LABEL
	default y

config LV_USE_SCALE
	bool "Scale"
	default y

config LV_USE_SLIDER
	bool "Slider"
	select LV_USE_BAR
	default y

config LV_USE_SPAN
	bool "Span"
	default y

config LV_SPAN_SNIPPET_STACK_SIZE
	int "Maximum number of span descriptors"
	default 64
	depends on LV_USE_SPAN

config LV_USE_SPINBOX
	bool "Spinbox"
	default y

config LV_USE_SPINNER
	bool "Spinner"
	default y

config LV_USE_SWITCH
	bool "Switch"
	default y

config LV_USE_TEXTAREA
	bool "Text area"
	select LV_USE_LABEL
	default y

config LV_TEXTAREA_DEF_PWD_SHOW_TIME
	int "Default password show time (ms)"
	default 1500
	depends on LV_USE_TEXTAREA

config LV_USE_TABLE
	bool "Table"
	default y

config LV_USE_TABVIEW
	bool "Tabview"
	default y

config LV_USE_TILEVIEW
	bool "Tileview"
	default y

config LV_USE_WIN
	bool "Window"
	default y
endmenu
menu "Drivers"
config LV_USE_LINUX_DRM
	bool "Linux DRM"
	default n
	help
		Driver for /dev/dri/card

if LV_USE_LINUX_DRM

config LV_LINUX_DRM_AUTO_BACKEND
	bool "Auto-select the DRM backend (legacy)"
	default y
	help
	  Legacy behavior, slated for removal: the backend is inferred from
	  LV_USE_OPENGLES (EGL when it is enabled). Disable this and pick a backend
	  explicitly in the "Rendering backend" choice.

choice
	prompt "Rendering backend"
	default LV_LINUX_DRM_BACKEND_FBDEV
	depends on !LV_LINUX_DRM_AUTO_BACKEND
	help
	  Select how the Linux DRM driver presents rendered frames.

	config LV_LINUX_DRM_BACKEND_FBDEV
		bool "Dumb buffers (no GPU)"
		help
		  Software rendering into DRM/KMS dumb buffers.

	config LV_LINUX_DRM_BACKEND_GBM
		bool "GBM DMA buffers"
		select LV_USE_LINUX_DRM_GBM_BUFFERS
		help
		  Use MESA GBM for Linux DRM DMA buffers.

	config LV_LINUX_DRM_BACKEND_EGL
		bool "EGL (OpenGL ES, hardware-accelerated)"
		select LV_LINUX_DRM_USE_EGL
		select LV_USE_LINUX_DRM_GBM_BUFFERS
		select LV_USE_OPENGLES
		help
		  Hardware-accelerated rendering via OpenGL ES 2.0 and EGL, compatible
		  with LVGL 3D/glTF rendering. Requires OpenGL ES 2.0 on the target
		  hardware and linking with -lEGL; implies GBM buffers.
endchoice

config LV_LINUX_DRM_BACKEND
	int
	default 0 if LV_LINUX_DRM_BACKEND_FBDEV
	default 1 if LV_LINUX_DRM_BACKEND_GBM
	default 2 if LV_LINUX_DRM_BACKEND_EGL

config LV_LINUX_DRM_USE_EGL
	bool
	select LV_USE_EGL

config LV_USE_LINUX_DRM_GBM_BUFFERS
	bool

endif # LV_USE_LINUX_DRM
config LV_USE_LINUX_FBDEV
	bool "Linux framebuffer (fbdev)"
	default n
	help
		Driver for /dev/fb

if LV_USE_LINUX_FBDEV

config LV_LINUX_FBDEV_BSD
	bool "BSD-flavored framebuffer device"
	default n

choice
	prompt "Render mode"
	default LV_LINUX_FBDEV_RENDER_MODE_PARTIAL

	config LV_LINUX_FBDEV_RENDER_MODE_PARTIAL
		bool "Partial mode"
		help
			Render the screen in smaller parts so the buffer(s) can be smaller than the display and save RAM.
			At least 1/10 of the screen size is recommended.

	config LV_LINUX_FBDEV_RENDER_MODE_DIRECT
		bool "Direct mode"
		help
			Render into the correct location of screen-sized buffer(s) so they always hold the whole image, and flush only the changed areas.
			With 2 buffers their content is kept in sync automatically and flush_cb only has to change the address.

	config LV_LINUX_FBDEV_RENDER_MODE_FULL
		bool "Full mode"
		help
			Always redraw the whole screen even if only one pixel has changed.
			With 2 buffers flush_cb only has to change the address.

endchoice

choice
	prompt "Framebuffer size"
	default LV_LINUX_FBDEV_SINGLE_BUFFER

	config LV_LINUX_FBDEV_SINGLE_BUFFER
		bool "One screen-sized buffer"

	config LV_LINUX_FBDEV_DOUBLE_BUFFER
		bool "Two screen-sized buffers"
		depends on !LV_LINUX_FBDEV_RENDER_MODE_PARTIAL

	config LV_LINUX_FBDEV_CUSTOM_BUFFER
		bool "Custom-sized buffer"
		depends on LV_LINUX_FBDEV_RENDER_MODE_PARTIAL

endchoice

config LV_LINUX_FBDEV_BUFFER_COUNT
	int
	default 0 if LV_LINUX_FBDEV_CUSTOM_BUFFER
	default 1 if LV_LINUX_FBDEV_SINGLE_BUFFER
	default 2 if LV_LINUX_FBDEV_DOUBLE_BUFFER

config LV_LINUX_FBDEV_BUFFER_SIZE
	int "Custom partial buffer size (rows)"
	depends on LV_LINUX_FBDEV_CUSTOM_BUFFER
	default 60

config LV_LINUX_FBDEV_MMAP
	bool "Framebuffer device supports mmap"
	default y
	help
		Access the framebuffer through mmap() instead of write() calls.

config LV_LINUX_FBDEV_VSYNC
	bool "Synchronize flushes with vsync"
	default n
	help
	  Wait for vsync before writing to the framebuffer to reduce tearing

endif #LV_USE_LINUX_FBDEV
config LV_USE_FT81X
	bool "FT81X"
	default n
	help
		Driver for FT81X EVE graphics controllers connected over SPI.
config LV_USE_LOVYAN_GFX
	bool "LovyanGFX"
	default n
	help
		Display and touch driver built on the LovyanGFX C++ library, which must be available in the build.

if LV_USE_LOVYAN_GFX

config LV_LGFX_USER_INCLUDE
	string "Header for LovyanGFX user configuration"
	default "lv_lgfx_user.hpp"

endif #LV_USE_LOVYAN_GFX
config LV_USE_GENERIC_MIPI
	bool "Generic MIPI"
	default n
	help
		Driver for LCD devices connected via SPI or parallel port.
		Use it if your LCD controller is not listed among the dedicated drivers below.

config LV_USE_ST7735
	bool "ST7735"
	default n
	select LV_USE_GENERIC_MIPI

config LV_USE_ST7789
	bool "ST7789"
	default n
	select LV_USE_GENERIC_MIPI

config LV_USE_ST7796
	bool "ST7796"
	default n
	select LV_USE_GENERIC_MIPI

config LV_USE_ILI9341
	bool "ILI9341"
	default n
	select LV_USE_GENERIC_MIPI

config LV_USE_NV3007
	bool "NV3007"
	default n
	select LV_USE_GENERIC_MIPI

config LV_USE_NXP_ELCDIF
	bool "NXP ELCDIF"
	default n
	help
		Create a display on an already initialized NXP ELCDIF LCD controller.
config LV_USE_RENESAS_GLCDC
	bool "Renesas GLCDC"
	default n
	help
		Create a display driven by the Renesas GLCDC peripheral.
config LV_USE_ST_LTDC
	bool "ST LTDC"
	default n
	help
		Create a display bound to a layer of the ST LTDC peripheral.

if LV_USE_ST_LTDC

config LV_ST_LTDC_USE_DMA2D_FLUSH
	bool "DMA2D flush for partial mode displays"
	default n
	depends on !LV_USE_DRAW_DMA2D
	help
		Flush partial mode LTDC displays with DMA2D, in parallel with rendering.
		Only available when the DMA2D renderer is disabled.

endif #LV_USE_ST_LTDC
config LV_USE_TFT_ESPI
	bool "TFT_eSPI"
	default n
	help
		Display driver built on the TFT_eSPI Arduino library, which must be available in the build.
config LV_USE_EVDEV
	bool "evdev"
	default n
	help
		Read touchscreen, mouse and keyboard input from Linux /dev/input event devices.
config LV_USE_LIBINPUT
	bool "libinput"
	default n
	help
		Read pointer, touch and keyboard input through libinput, which must be available in the build.

if LV_USE_LIBINPUT

config LV_LIBINPUT_BSD
	bool "BSD variant of libinput"
	default n

config LV_LIBINPUT_XKB
	bool "Full keyboard support via XKB"
	default n
	help
		Map key events to characters with XKB layouts, so modifiers and non-US layouts work.
		Requires linking with -lxkbcommon.

if LV_LIBINPUT_XKB

config LV_LIBINPUT_XKB_RULES
	string "XKB rules"
	default ""
	help
		Run `setxkbmap -query` to find the right values for your keyboard.

config LV_LIBINPUT_XKB_MODEL
	string "XKB model"
	default "pc101"

config LV_LIBINPUT_XKB_LAYOUT
	string "XKB layout"
	default "us"

config LV_LIBINPUT_XKB_VARIANT
	string "XKB variant"
	default ""

config LV_LIBINPUT_XKB_OPTIONS_USE_DEFAULT
	bool "System default XKB options"
	default y
	help
	  Pass NULL for the XKB options so the system default applies (e.g. from the
	  XKB_DEFAULT_OPTIONS env var). Otherwise LV_LIBINPUT_XKB_OPTIONS is used.

config LV_LIBINPUT_XKB_OPTIONS
	string "XKB options"
	default ""
	depends on !LV_LIBINPUT_XKB_OPTIONS_USE_DEFAULT

endif # LV_LIBINPUT_XKB

endif #LV_USE_LIBINPUT
config LV_USE_NUTTX
	bool "NuttX"
	default n
	help
		Display and input drivers for NuttX, including the /dev/fb framebuffer device.

if LV_USE_NUTTX

config LV_USE_NUTTX_INDEPENDENT_IMAGE_HEAP
	bool "Independent image heap"
	default n
	help
		Allocate cached image buffers from a separate NuttX heap to keep the main heap from fragmenting.

config LV_NUTTX_DEFAULT_DRAW_BUF_USE_INDEPENDENT_IMAGE_HEAP
	bool "Independent image heap for the default draw buffer"
	depends on LV_USE_NUTTX_INDEPENDENT_IMAGE_HEAP
	default n

config LV_USE_NUTTX_LIBUV
	bool "libuv event loop"
	default n
	help
		Drive the LVGL timer handler and the display/input timers from a libuv loop instead of the default timer loop.

config LV_USE_NUTTX_CUSTOM_INIT
	bool "Custom init API"
	default n
	help
		Skip the display and input device creation in lv_nuttx_init() so the application can set them up itself.

config LV_USE_NUTTX_LCD
	bool "LCD device"
	default n
	help
		Create the display on a NuttX LCD character device instead of the framebuffer device.

choice
	prompt "LCD buffer size"
	depends on LV_USE_NUTTX_LCD
	default LV_NUTTX_LCD_CUSTOM_BUFFER

	config LV_NUTTX_LCD_SINGLE_BUFFER
		bool "One screen-sized buffer"

	config LV_NUTTX_LCD_DOUBLE_BUFFER
		bool "Two screen-sized buffers"

	config LV_NUTTX_LCD_CUSTOM_BUFFER
		bool "Custom-sized buffer"

endchoice

config LV_NUTTX_LCD_BUFFER_COUNT
	int
	default 0 if LV_NUTTX_LCD_CUSTOM_BUFFER
	default 1 if LV_NUTTX_LCD_SINGLE_BUFFER
	default 2 if LV_NUTTX_LCD_DOUBLE_BUFFER

config LV_NUTTX_LCD_BUFFER_SIZE
	int "Custom partial buffer size (rows)"
	depends on LV_NUTTX_LCD_CUSTOM_BUFFER
	depends on LV_USE_NUTTX_LCD
	default 60


config LV_USE_NUTTX_TOUCHSCREEN
	bool "Touchscreen"
	default n

config LV_NUTTX_TOUCHSCREEN_CURSOR_SIZE
	int "Touchscreen cursor size (px)"
	depends on LV_USE_NUTTX_TOUCHSCREEN
	default 0
	help
		0 disables the cursor.

config LV_USE_NUTTX_MOUSE
	bool "Mouse"
	default n

config LV_USE_NUTTX_MOUSE_MOVE_STEP
	int "Mouse movement step (pixels)"
	depends on LV_USE_NUTTX_MOUSE
	range 1 10
	default 1

config LV_USE_NUTTX_TRACE_FILE
	bool "Profiler trace file"
	depends on LV_USE_PROFILER_BUILTIN
	default n
	help
		Write the built-in profiler output to a file instead of the console.

config LV_NUTTX_TRACE_FILE_PATH
	depends on LV_USE_NUTTX_TRACE_FILE
	string "Profiler trace file path"
	default "/data/lvgl-trace.log"


endif #LV_USE_NUTTX
config LV_USE_OPENGLES
	bool "OpenGL ES"
	select LV_USE_MATRIX
	default n
	help
		Generic OpenGL ES display driver, for embedding LVGL in another application or driving it through GLFW/EGL.

if LV_USE_OPENGLES

config LV_USE_OPENGLES_DEBUG
	bool "Debug mode"
	default n
	help
		Check for an OpenGL error after every GL call and log it with the call site.


endif # LV_USE_OPENGLES

config LV_USE_EGL
	bool
	default n

# Promptless as it's not part of the public API
config LV_USE_OPENGLES_PBUFFER
	bool
	default n
	depends on LV_USE_DRAW_NANOVG
	select LV_USE_EGL
	select LV_USE_OPENGLES
	help
		Render on the GPU into an off-screen EGL pbuffer with no window system at
		all, and read the frame back into the display's draw buffer. For headless
		rendering, screenshot testing and server-side image generation.

config LV_USE_GLFW
	bool "GLFW"
	default n
	select LV_USE_OPENGLES
	depends on !LV_USE_EGL
	help
		Open a window on a PC desktop with GLFW and read mouse and keyboard input.

config LV_USE_QNX
	bool "QNX"
	default n
	help
		Create a display on a QNX Screen window and read pointer and keyboard input.

if LV_USE_QNX

config LV_QNX_BUF_COUNT
	int "Number of screen-sized buffers"
	default 1

endif #LV_USE_QNX
config LV_USE_SDL
	bool "SDL"
	default n
	help
		Open a window on a PC desktop with SDL2 and read mouse and keyboard input.

if LV_USE_SDL

config LV_SDL_INCLUDE_PATH
	string "SDL include path"
	default "SDL2/SDL.h"

config LV_SDL_AUTO_BACKEND
	bool "Auto-select the SDL backend (legacy)"
	default y
	help
	  Legacy behavior, slated for removal: EGL is inferred the legacy way
	  (LV_USE_OPENGLES with an OpenGL draw unit). Disable this and pick a backend
	  explicitly in the "Rendering backend" choice.

choice
	prompt "Rendering backend"
	default LV_SDL_BACKEND_SW
	depends on !LV_SDL_AUTO_BACKEND
	help
	  Select how the SDL driver presents rendered frames.

	config LV_SDL_BACKEND_SW
		bool "Software (SDL surface)"
		help
		  Render in software and upload via an SDL surface.

	config LV_SDL_BACKEND_TEXTURE
		bool "Cached SDL textures"
		select LV_USE_DRAW_SDL
		help
		  Render into cached SDL textures. Enables the SDL renderer.

	config LV_SDL_BACKEND_EGL
		bool "EGL (OpenGL ES, hardware-accelerated)"
		depends on LV_USE_DRAW_OPENGLES || LV_USE_DRAW_NANOVG
		select LV_SDL_USE_EGL
		help
		  Present frames through an EGL/OpenGL ES context.
		  Requires the OpenGL ES or NanoVG renderer.
endchoice

config LV_SDL_BACKEND
	int
	default 0 if LV_SDL_BACKEND_SW
	default 1 if LV_SDL_BACKEND_TEXTURE
	default 2 if LV_SDL_BACKEND_EGL

config LV_SDL_USE_EGL
	bool
	select LV_USE_EGL

choice
	prompt "Render mode"
	default LV_SDL_RENDER_MODE_DIRECT
	help
		Direct mode is recommended for best performance.

	config LV_SDL_RENDER_MODE_PARTIAL
		bool "Partial mode"
		help
			Render the screen in smaller parts so the buffer(s) can be smaller than the display and save RAM.

	config LV_SDL_RENDER_MODE_DIRECT
		bool "Direct mode"
		help
			Render into the correct location of screen-sized buffer(s) so they always hold the whole image, and flush only the changed areas.

	config LV_SDL_RENDER_MODE_FULL
		bool "Full mode"
		help
			Always redraw the whole screen even if only one pixel has changed.
endchoice

config LV_SDL_BUF_COUNT
	int "Number of screen-sized buffers"
	range 1 2
	default 1

choice
	prompt "SDL buffer count [DEPRECATED: use LV_SDL_BUF_COUNT]"
	optional

	config LV_SDL_SINGLE_BUFFER
		bool "One screen-sized buffer [DEPRECATED: set LV_SDL_BUF_COUNT to 1]"

	config LV_SDL_DOUBLE_BUFFER
		bool "Two screen-sized buffers [DEPRECATED: set LV_SDL_BUF_COUNT to 2]"
endchoice

config LV_SDL_ACCELERATED
	bool "Hardware acceleration"
	default y
	help
		Ask SDL for a GPU-backed renderer instead of a software one.

config LV_SDL_FULLSCREEN
	bool "Fullscreen"
	default n

config LV_SDL_DIRECT_EXIT
	bool "Exit when all windows are closed"
	default y

choice
	prompt "SDL mousewheel mode"
	default LV_SDL_MOUSEWHEEL_MODE_ENCODER

	config LV_SDL_MOUSEWHEEL_MODE_ENCODER
		bool "Encoder input device"

	config LV_SDL_MOUSEWHEEL_MODE_CROWN
		bool "Smart watch crown"
endchoice

config LV_SDL_MOUSEWHEEL_MODE
	int
	default 0 if LV_SDL_MOUSEWHEEL_MODE_ENCODER
	default 1 if LV_SDL_MOUSEWHEEL_MODE_CROWN


endif #LV_USE_SDL
config LV_USE_UEFI
	bool "UEFI"
	default n
	help
		Display and input drivers for UEFI firmware, based on the Graphics Output, keyboard and pointer protocols.

if LV_USE_UEFI

config LV_USE_UEFI_INCLUDE
	string "Header wrapping the UEFI framework (EDK2, gnu-efi, ...)"
	default "myefi.h"

config LV_UEFI_USE_MEMORY_SERVICES
	bool "Memory services from the boot services table"
	default n
	help
		Allocate memory with the UEFI boot services instead of the C library.
		Only takes effect with the custom stdlib malloc implementation.

endif #LV_USE_UEFI
config LV_USE_WAYLAND
	bool "Wayland"
	default n
	help
		Open a window on a Wayland compositor on Linux or BSD and read mouse, keyboard and touch input.

if LV_USE_WAYLAND

config LV_WAYLAND_DIRECT_EXIT
	bool "Exit when the last window closes"
	default y
	help
		LVGL is deinitialized before the application exits.

config LV_WAYLAND_USE_SHM
	bool "SHM (Shared Memory) Backend"
	default y
	depends on !LV_USE_DRAW_OPENGLES && !LV_USE_DRAW_NANOVG
	help
		Default backend, using wl_shm for double-buffered direct rendering.
		Compatible with all Wayland compositors; no special hardware required.
		Unavailable with the OpenGL ES and NanoVG renderers, which can only
		render into a GPU surface.

config LV_WAYLAND_USE_DMABUF
	bool "DMA-BUF Backend"
	depends on !LV_USE_DRAW_OPENGLES && !LV_USE_DRAW_NANOVG
	select LV_WAYLAND_USE_DMABUF_PROTOCOL
	help
		Presents software-rendered frames through linear DMA-BUFs that the
		compositor can scan out directly, saving its copy out of shared memory.
		Requires a compositor with zwp_linux_dmabuf_v1 and a gbm implementation
		able to allocate CPU-mappable buffers, plus libdrm and gbm (-ldrm -lgbm).
		Needs no GPU API: unavailable with the OpenGL ES and NanoVG renderers,
		which can only render into a GPU surface.

config LV_WAYLAND_USE_EGL
	bool "EGL (OpenGL ES, hardware-accelerated) Backend"
	default y if LV_USE_DRAW_OPENGLES || LV_USE_DRAW_NANOVG
	select LV_USE_EGL
	select LV_USE_OPENGLES
	help
		Hardware-accelerated rendering via OpenGL ES 2.0 and EGL, compatible
		with LVGL 3D/glTF rendering. Requires OpenGL ES 2.0 on the target
		hardware and linking with wayland-egl (-lwayland-egl).
		The only backend available with the OpenGL ES and NanoVG renderers.

config LV_WAYLAND_USE_G2D
	bool "G2D (NXP i.MX hardware accelerator)"
	depends on !LV_USE_DRAW_OPENGLES && !LV_USE_DRAW_NANOVG
	select LV_USE_DRAW_G2D
	select LV_WAYLAND_USE_DMABUF_PROTOCOL
	help
		Hardware-accelerated 2D rendering via NXP's G2D engine.
		Supports NXP i.MX6/i.MX8 platforms with G2D library installed.
		Unavailable with the OpenGL ES and NanoVG renderers, which can only
		render into a GPU surface.

config LV_WAYLAND_USE_DMABUF_PROTOCOL
	bool

endif # LV_USE_WAYLAND
config LV_USE_WINDOWS
	bool "Windows"
	depends on LV_OS_WINDOWS
	default n
	help
		Open a window with the Win32 API and read mouse, touch, keyboard and mousewheel input.
config LV_USE_X11
	bool "X11"
	default n
	help
		Open a window on an X11 desktop and read mouse and keyboard input.

if LV_USE_X11

config LV_X11_DOUBLE_BUFFER
	bool "Double buffering"
	default y
config LV_X11_DIRECT_EXIT
	bool "Exit when all windows are closed"
	default y
choice
	prompt "Render mode"
	default LV_X11_RENDER_MODE_PARTIAL

	config LV_X11_RENDER_MODE_PARTIAL
		bool "Partial mode"
		help
			Render the screen in smaller parts so the buffer(s) can be smaller than the display and save RAM.
			The driver uses buffer(s) of about 1/10 of the screen size.
	config LV_X11_RENDER_MODE_DIRECT
		bool "Direct mode"
		help
			Render into the correct location of screen-sized buffer(s) so they always hold the whole image, and flush only the changed areas.
			With 2 buffers their content is kept in sync automatically and flush_cb only has to change the address.
	config LV_X11_RENDER_MODE_FULL
		bool "Full mode"
		help
			Always redraw the whole screen even if only one pixel has changed.
			With 2 buffers flush_cb only has to change the address.
endchoice

endif #LV_USE_X11

config LV_USE_NANOVG
	bool "NanoVG"
	default n
	help
		Build the bundled NanoVG vector graphics library. Required by the NanoVG renderer.

endmenu
menu "File System"
config LV_FS_DEFAULT_DRIVER_LETTER
	int "Default drive letter (65 = 'A', 0 = disabled)"
	range 0 90
	default 0
	help
	  Setting a default drive letter allows skipping the driver
	  prefix in filepaths.

config LV_USE_FS_STDIO
	bool "stdio"

if LV_USE_FS_STDIO

config LV_FS_STDIO_LETTER
	int "Drive letter for stdio (65 = 'A', 0 = disabled)"
	range 0 90
	default 0

config LV_FS_STDIO_PATH
	string "Working directory for stdio"
	default ""

config LV_FS_STDIO_CACHE_SIZE
	int "Read cache size in bytes for stdio (0 = disabled)"
	default 0
	range 0 4294967295

endif # LV_USE_FS_STDIO

config LV_USE_FS_POSIX
	bool "POSIX"

if LV_USE_FS_POSIX

config LV_FS_POSIX_LETTER
	int "Drive letter for POSIX (65 = 'A', 0 = disabled)"
	range 0 90
	default 0

config LV_FS_POSIX_PATH
	string "Working directory for POSIX"
	default ""

config LV_FS_POSIX_CACHE_SIZE
	int "Read cache size in bytes for POSIX (0 = disabled)"
	default 0
	range 0 4294967295

endif # LV_USE_FS_POSIX

config LV_USE_FS_WIN32
	bool "Win32"

if LV_USE_FS_WIN32

config LV_FS_WIN32_LETTER
	int "Drive letter for Win32 (65 = 'A', 0 = disabled)"
	range 0 90
	default 0

config LV_FS_WIN32_PATH
	string "Working directory for Win32"
	default ""

config LV_FS_WIN32_CACHE_SIZE
	int "Read cache size in bytes for Win32 (0 = disabled)"
	default 0
	range 0 4294967295

endif # LV_USE_FS_WIN32

config LV_USE_FS_FATFS
	bool "FatFS"

if LV_USE_FS_FATFS

config LV_FS_FATFS_LETTER
	int "Drive letter for FatFS (65 = 'A', 0 = disabled)"
	range 0 90
	default 0

config LV_FS_FATFS_PATH
	string "Working directory for FatFS"
	default ""

config LV_FS_FATFS_CACHE_SIZE
	int "Read cache size in bytes for FatFS (0 = disabled)"
	default 0
	range 0 4294967295

endif # LV_USE_FS_FATFS

config LV_USE_FS_LITTLEFS
	bool "littlefs"

if LV_USE_FS_LITTLEFS

config LV_FS_LITTLEFS_LETTER
	int "Drive letter for littlefs (65 = 'A', 0 = disabled)"
	range 0 90
	default 0

config LV_FS_LITTLEFS_PATH
	string "Working directory for littlefs"
	default ""

endif # LV_USE_FS_LITTLEFS

config LV_USE_FS_ARDUINO_ESP_LITTLEFS
	bool "Arduino ESP littlefs"

if LV_USE_FS_ARDUINO_ESP_LITTLEFS

config LV_FS_ARDUINO_ESP_LITTLEFS_LETTER
	int "Drive letter for Arduino ESP littlefs (65 = 'A', 0 = disabled)"
	range 0 90
	default 0

config LV_FS_ARDUINO_ESP_LITTLEFS_PATH
	string "Working directory for Arduino ESP littlefs"
	default ""

endif # LV_USE_FS_ARDUINO_ESP_LITTLEFS

config LV_USE_FS_ARDUINO_SD
	bool "Arduino SD"

if LV_USE_FS_ARDUINO_SD

config LV_FS_ARDUINO_SD_LETTER
	int "Drive letter for Arduino SD (65 = 'A', 0 = disabled)"
	range 0 90
	default 0

config LV_FS_ARDUINO_SD_PATH
	string "Working directory for Arduino SD"
	default ""

endif # LV_USE_FS_ARDUINO_SD

config LV_USE_FS_UEFI
	bool "UEFI"

if LV_USE_FS_UEFI
config LV_FS_UEFI_LETTER
	int "Drive letter for UEFI (65 = 'A', 0 = disabled)"
	range 0 90
	default 0
endif # LV_USE_FS_UEFI

config LV_USE_FS_FROGFS
	bool "FrogFS"

if LV_USE_FS_FROGFS
config LV_FS_FROGFS_LETTER
	int "Drive letter for FrogFS (65 = 'A', 0 = disabled)"
	range 0 90
	default 0
endif # LV_USE_FS_FROGFS

config LV_USE_FS_MEMFS
	bool "Memory-mapped"
	help
		Reach data already in memory through the lv_fs API, without a real file system.

if LV_USE_FS_MEMFS

config LV_FS_MEMFS_LETTER
	int "Drive letter for memfs (65 = 'A', 0 = disabled)"
	range 0 90
	default 0

endif # LV_USE_FS_MEMFS
endmenu
menu "Debugging"
menu "System Monitoring"
config LV_USE_SYSMON
	bool "System monitor"
	default n
	help
		Periodically collect CPU, FPS and memory statistics and optionally show them in an
		on-screen overlay.

if LV_USE_SYSMON

config LV_SYSMON_PROC_IDLE_AVAILABLE
	bool "Per-process idle measurement"
	default n
	help
		The port provides `lv_os_get_proc_idle_percent` a per-process idle percentage
		in addition to the system-wide one. LVGL provides a default one for linux systems.

config LV_USE_PERF_MONITOR
	bool "Performance monitor"
	default n
	help
		Show the CPU usage and FPS count in a label on the screen.

choice
	prompt "Performance monitor position"
	depends on LV_USE_PERF_MONITOR
	default LV_PERF_MONITOR_ALIGN_BOTTOM_RIGHT

	config LV_PERF_MONITOR_ALIGN_TOP_LEFT
		bool "Top left"
	config LV_PERF_MONITOR_ALIGN_TOP_MID
		bool "Top middle"
	config LV_PERF_MONITOR_ALIGN_TOP_RIGHT
		bool "Top right"
	config LV_PERF_MONITOR_ALIGN_BOTTOM_LEFT
		bool "Bottom left"
	config LV_PERF_MONITOR_ALIGN_BOTTOM_MID
		bool "Bottom middle"
	config LV_PERF_MONITOR_ALIGN_BOTTOM_RIGHT
		bool "Bottom right"
	config LV_PERF_MONITOR_ALIGN_LEFT_MID
		bool "Left middle"
	config LV_PERF_MONITOR_ALIGN_RIGHT_MID
		bool "Right middle"
	config LV_PERF_MONITOR_ALIGN_CENTER
		bool "Center"
endchoice

config LV_USE_PERF_MONITOR_LOG_MODE
	bool "Log performance data"
	depends on LV_USE_PERF_MONITOR
	default n
	help
		Print the performance data to the log instead of showing the on-screen label.

config LV_USE_MEM_MONITOR
	bool "Memory monitor"
	default n
	depends on LV_USE_BUILTIN_MALLOC
	help
		Show the used memory and the memory fragmentation in a label on the screen.

choice
	prompt "Memory monitor position"
	depends on LV_USE_MEM_MONITOR
	default LV_MEM_MONITOR_ALIGN_BOTTOM_LEFT

	config LV_MEM_MONITOR_ALIGN_TOP_LEFT
		bool "Top left"
	config LV_MEM_MONITOR_ALIGN_TOP_MID
		bool "Top middle"
	config LV_MEM_MONITOR_ALIGN_TOP_RIGHT
		bool "Top right"
	config LV_MEM_MONITOR_ALIGN_BOTTOM_LEFT
		bool "Bottom left"
	config LV_MEM_MONITOR_ALIGN_BOTTOM_MID
		bool "Bottom middle"
	config LV_MEM_MONITOR_ALIGN_BOTTOM_RIGHT
		bool "Bottom right"
	config LV_MEM_MONITOR_ALIGN_LEFT_MID
		bool "Left middle"
	config LV_MEM_MONITOR_ALIGN_RIGHT_MID
		bool "Right middle"
	config LV_MEM_MONITOR_ALIGN_CENTER
		bool "Center"
endchoice

config LV_SYSMON_USE_CUSTOM_INCLUDE
	bool "Custom sysmon header"
	default n
	help
	  Include the header given by LV_SYSMON_CUSTOM_INCLUDE to override system
	  monitor macros such as LV_SYSMON_GET_IDLE.

config LV_SYSMON_CUSTOM_INCLUDE
	string "Path to custom sysmon header"
	default ""
	depends on LV_SYSMON_USE_CUSTOM_INCLUDE
	help
	  Optional header to override system monitor idle measurement macros.

	  LV_SYSMON_GET_IDLE
	    Expression returning the CPU idle percentage (0-100) since last call.
	    e.g. my_rtos_get_idle_percent()

	  LV_SYSMON_GET_PROC_IDLE
	    Expression returning per-process idle percentage, if supported by
	    the RTOS. Requires LV_SYSMON_PROC_IDLE_AVAILABLE to be enabled
	    e.g. my_rtos_get_proc_idle_percent()

endif #LV_USE_SYSMON
endmenu

menu "Profiler"
config LV_USE_PROFILER
	bool "Profiler"
	default n
	help
		Instrument LVGL internals with trace hooks to measure runtime performance.

config LV_USE_PROFILER_BUILTIN
	bool "Built-in profiler"
	default n
	select LV_USE_PROFILER

if LV_USE_PROFILER_BUILTIN

config LV_PROFILER_BUILTIN_BUF_SIZE
	int "Trace buffer size (bytes)"
	default 16384

config LV_PROFILER_BUILTIN_DEFAULT_ENABLE
	bool "Start profiling at init"
	default y

config LV_USE_PROFILER_BUILTIN_POSIX
	bool "POSIX port"
	default n


endif #LV_USE_PROFILER_BUILTIN

if LV_USE_PROFILER

config LV_PROFILER_INCLUDE
	string "Profiler header"
	default "lvgl/debugging/profiler/lv_profiler_builtin.h"
	help
	  Path to a header that defines the following profiler hook macros:

	  LV_PROFILER_BEGIN
	    Called at the start of a profiled scope.
	    e.g. #define LV_PROFILER_BEGIN  my_profiler_begin()

	  LV_PROFILER_END
	    Called at the end of a profiled scope.
	    e.g. #define LV_PROFILER_END    my_profiler_end()

	  LV_PROFILER_BEGIN_TAG(tag)
	    Called at the start of a profiled scope with a string tag.
	    e.g. #define LV_PROFILER_BEGIN_TAG(tag)  my_profiler_begin_tag(tag)

	  LV_PROFILER_END_TAG(tag)
	    Called at the end of a profiled scope with a string tag.
	    e.g. #define LV_PROFILER_END_TAG(tag)    my_profiler_end_tag(tag)

	  The default header provides these via the built-in profiler.
	  Set this to your own header to use a custom profiler backend.

menu "Profiled modules"

config LV_PROFILER_LAYOUT
	bool "Layout"
	default y

config LV_PROFILER_REFR
	bool "Display refresh"
	default y

config LV_PROFILER_DRAW
	bool "Draw"
	default y

config LV_PROFILER_INDEV
	bool "Input devices"
	default y

config LV_PROFILER_DECODER
	bool "Image decoder"
	default y

config LV_PROFILER_FONT
	bool "Font"
	default y

config LV_PROFILER_FS
	bool "File system"
	default y

config LV_PROFILER_STYLE
	bool "Style"
	default n

config LV_PROFILER_TIMER
	bool "Timer"
	default y

config LV_PROFILER_CACHE
	bool "Cache"
	default y

config LV_PROFILER_EVENT
	bool "Events"
	default y

endmenu

endif # LV_USE_PROFILER
endmenu

menu "Test Utilities"
config LV_USE_TEST
	bool "Test utilities"
	help
		Emulated input devices, time emulation, and screenshot compares.

if LV_USE_TEST

config LV_USE_TEST_SCREENSHOT_COMPARE
	bool "Screenshot compare"
	select LV_USE_LODEPNG
	help
		Enable `lv_test_screenshot_compare()`. Requires a few MB of extra RAM.

config LV_TEST_SCREENSHOT_CREATE_REFERENCE_IMAGE
	bool "Create missing reference images"
	default y
	depends on LV_USE_TEST_SCREENSHOT_COMPARE
	help
		When a reference image does not exist yet, create it from the rendered
		screen instead of failing the compare.

config LV_USE_NANOVG_TEST_HEADLESS
	bool "Headless EGL display for NanoVG"
	depends on LV_USE_DRAW_NANOVG
	select LV_USE_OPENGLES_PBUFFER
	help
		Render into an off-screen EGL pbuffer instead of a window and read the
		pixels back into the LVGL draw buffer, so screenshot compares work the
		same way as with the software renderer. Requires EGL and GLESv2.

endif #LV_USE_TEST

	config LV_USE_MONKEY
		bool "Monkey test"
		default n
		help
			Feed random input events to the UI for stress testing.
endmenu

menu "Debug Rendering"

config LV_USE_REFR_DEBUG
	bool "Redraw area overlay"
	help
		Draw random colored rectangles over the redrawn areas.

config LV_USE_LAYER_DEBUG
	bool "Layer type overlay"
	help
		Draw a red overlay over ARGB layers and a green overlay over RGB layers.

config LV_USE_PARALLEL_DRAW_DEBUG
	bool "Draw unit overlay"
	help
		Draw an overlay in a different color for each draw unit's tasks, with the
		draw unit's index number on a white background (black for layers).
endmenu
endmenu
menu "Others"
config LV_USE_FRAGMENT
	bool "Fragment"
	default n
	help
		Manage a widget subtree with its own lifecycle and back stack, similar to Android fragments.

config LV_USE_FILE_EXPLORER
	bool "File explorer"
	default n
	select LV_USE_TABLE

if LV_USE_FILE_EXPLORER
config LV_FILE_EXPLORER_PATH_MAX_LEN
	int "Maximum path length (bytes)"
	default 128

config LV_FILE_EXPLORER_QUICK_ACCESS
	bool "Quick access bar"
	default y
	help
		Add a sidebar with shortcuts to common places. It can be hidden by clicking the
		button at the top left corner of the browsing area, which is useful on small screens.

endif #LV_USE_FILE_EXPLORER

endmenu
menu "Build"

config LVGL_VERSION_MAJOR
	int
	default 9
config LVGL_VERSION_MINOR
	int
	default 6
config LVGL_VERSION_PATCH
	int
	default 0

config LV_CONF_SKIP
	bool "Skip lv_conf.h"
	default y
	help
	  Do not include lv_conf.h; take the configuration from this Kconfig
	  tree and the built-in defaults instead.

config LV_CONF_MINIMAL
	bool "Minimal configuration [DEPRECATED: use the minimal defconfig]"
	default n
	help
	  Deprecated and no longer functional. The minimal preset is now a
	  defconfig: configs/defconfigs/minimal.defconfig. Setting this has no
	  effect on the generated configuration and triggers a build warning.

config LV_USE_PRIVATE_API
	bool "Private API (lvgl_private.h)"
	default n
	help
	  Include `lvgl_private.h` from `lvgl.h` so that LVGL internal data
	  structures and functions are accessible by default.

config LV_ENABLE_GLOBAL_CUSTOM
	bool "'lv_global' customization"
	default n
	help
	  By default, LVGL stores all runtime state in a single static
	  'lv_global_t' variable, sufficient for most single-display
	  single-threaded applications.

	  Enable this if you need multiple independent LVGL instances in
	  the same process, for example:
	    - Multiple physical displays with separate render loops
	    - Per-thread LVGL contexts on an RTOS (FreeRTOS, Zephyr, etc.)
	    - Hot-swappable or sandboxed UI instances

	  When enabled, every LVGL internal access to global state goes
	  through LV_GLOBAL_CUSTOM() instead of a static variable. You
	  must implement 'lv_global_t *lv_global_default(void)' to return
	  the correct instance for the current context (e.g. by thread-local
	  storage or a guarded pointer switch).

	  Returning NULL from that function is safe; LVGL will treat the
	  library as uninitialized for that context.

if LV_ENABLE_GLOBAL_CUSTOM

config LV_GLOBAL_USE_CUSTOM_INCLUDE
	bool "Custom 'lv_global_default()' header"
	help
	  Use a custom header for the declaration of:
	  	lv_global_t *lv_global_default(void);

config LV_GLOBAL_CUSTOM_INCLUDE
	string "Path to custom 'lv_global' header"
	depends on LV_GLOBAL_USE_CUSTOM_INCLUDE
	default "lv_global.h"
	help
	  Path to the header that declares:
	    lv_global_t *lv_global_default(void);

	  This header is included wherever LVGL needs to resolve the
	  LV_GLOBAL_DEFAULT() macro. Keep it lightweight, it is included
	  in performance-critical paths.

endif #LV_ENABLE_GLOBAL_CUSTOM

menu "Asserts"
	config LV_USE_ASSERT
		bool "LV_ASSERT / LV_ASSERT_MSG / LV_ASSERT_FORMAT_MSG"

	config LV_USE_ASSERT_MALLOC
		bool "LV_ASSERT_MALLOC"

	config LV_USE_ASSERT_NULL
		bool "LV_ASSERT_NULL"

	config LV_USE_ASSERT_STYLE
		bool "LV_ASSERT_STYLE"

	config LV_USE_ASSERT_MEM_INTEGRITY
		bool "LV_ASSERT_MEM_INTEGRITY"

	config LV_USE_ASSERT_OBJ
		bool "LV_ASSERT_OBJ"

	config LV_ASSERT_HANDLER_INCLUDE
		string "Assert handler header [DEPRECATED: use LV_ASSERT_CUSTOM_INCLUDE]"
		default ""
		help
		  [DEPRECATED: use LV_ASSERT_CUSTOM_INCLUDE]
		  Add a custom handler when assert happens e.g. to restart the MCU
		  Optional header to override assert-related macros.

	config LV_ASSERT_HANDLER_INCLUDE_IS_NON_EMPTY
		bool
		default y if LV_ASSERT_HANDLER_INCLUDE != ""

	config LV_DISABLE_ASSERT_HANDLER_INCLUDE_WARNING
		bool "Disable LV_ASSERT_HANDLER_INCLUDE deprecated warning"
		default n
		help
		  Disable warning saying `LV_ASSERT_HANDLER_INCLUDE` is deprecated.
		  This setting allows you to keep using old LVGL versions which rely on
		  LV_ASSERT_HANDLER_INCLUDE without triggering a compiler warning.

		  LV_ASSERT_HANDLER_INCLUDE has been deprecated in favor of the new approach:
		  define LV_ASSERT_CUSTOM_INCLUDE with the header path, and place the
		  LV_ASSERT_HANDLER macro definition inside that header instead.

		  Only enable this if you are maintaining compatibility with existing code
		  that uses LV_ASSERT_HANDLER_INCLUDE and cannot migrate immediately.
		  New projects should use LV_ASSERT_CUSTOM_INCLUDE and LV_ASSERT_HANDLER
		  directly.

	config LV_ASSERT_USE_CUSTOM_INCLUDE
		bool "Custom assert handler header"
		default n
		help
		  Include the header given by LV_ASSERT_CUSTOM_INCLUDE, which must define
		  a custom LV_ASSERT_HANDLER.

	config LV_ASSERT_CUSTOM_INCLUDE
		string "Path to custom assert handler header"
		default ""
		depends on LV_ASSERT_USE_CUSTOM_INCLUDE
		help
		  Optional header to override assert-related macros.

		  LV_ASSERT_HANDLER
		    Statement to execute when an assertion fails.
		    e.g. #define LV_ASSERT_HANDLER my_assert_failed(__FILE__, __LINE__);

endmenu

menu "Argument Checks"
	config LV_USE_CHECK_ARG
		bool "Runtime argument validation"
		default y
		help
			LV_CHECK_ARG validates function arguments at runtime: a failed check
			logs a warning and executes the specified action. When disabled all
			these checks compile to nothing, which is only safe in very resource
			constrained environments where invariants are guaranteed to hold.

	if LV_USE_CHECK_ARG

	config LV_CHECK_ARG_ASSERT_ON_FAIL
		bool "Assert on failure"
		default n
		help
			Also invoke LV_ASSERT_HANDLER when an LV_CHECK_ARG check fails,
			before the action is executed.

	choice
		prompt "Log behavior on LV_CHECK_ARG failure"
		default LV_CHECK_ARG_LOG_MODE_VERBOSE if LV_USE_LOG
		default LV_CHECK_ARG_LOG_MODE_NONE if !LV_USE_LOG
		help
			Controls what is logged when an LV_CHECK_ARG check fails.
			Minimal and Verbose require LV_USE_LOG; selecting either without it
			causes a compile-time error.

		config LV_CHECK_ARG_LOG_MODE_NONE
			bool "None: no log output on failure"

		config LV_CHECK_ARG_LOG_MODE_MINIMAL
			bool "Minimal: log 'Check failed' only (file/line from LV_LOG_WARN)"
			depends on LV_USE_LOG

		config LV_CHECK_ARG_LOG_MODE_VERBOSE
			bool "Verbose: log 'Check failed: <cond>' plus caller-supplied message"
			depends on LV_USE_LOG

	endchoice

	config LV_CHECK_ARG_LOG_MODE
		int
		default 0 if LV_CHECK_ARG_LOG_MODE_NONE
		default 1 if LV_CHECK_ARG_LOG_MODE_MINIMAL
		default 2 if LV_CHECK_ARG_LOG_MODE_VERBOSE

	config LV_USE_CHECK_OBJ_CLASSTYPE
		bool "Class check in LV_CHECK_OBJ"
		default n
		help
			LV_CHECK_OBJ verifies with lv_obj_has_class() that the object has the
			expected class. When disabled the class check is skipped
			(LV_CHECK_OBJ collapses to a NULL check).

	config LV_USE_CHECK_OBJ_VALIDITY
		bool "Widget-tree validity check in LV_CHECK_OBJ"
		default n
		help
			LV_CHECK_OBJ verifies with lv_obj_is_in_widget_tree() that the object is
			still part of the widget tree. When disabled the validity check is
			skipped (only the class/NULL check remains).

	config LV_USE_CHECK_OBJ_PARENT_LINK
		bool "Parent-link consistency check in lv_obj_is_in_widget_tree"
		default n
		depends on LV_USE_CHECK_OBJ_VALIDITY
		depends on LV_USE_ASSERT
		help
			While walking up the parent chain, lv_obj_is_in_widget_tree also checks that
			each parent's children array contains the child. This finds corruption where
			a child's parent pointer and the parent's children list disagree. The cost is
			O(siblings) per level instead of O(1), and LV_ASSERT reports the mismatch.
	endif
endmenu
endmenu #"Build"
menu "Compiler Settings"
config LV_BIG_ENDIAN_SYSTEM
	bool "Big endian system"

config LV_ATTRIBUTE_USE_CUSTOM_INCLUDE
	bool "Custom attributes header"
	default n
	help
	  Include the header given by LV_ATTRIBUTE_CUSTOM_INCLUDE to override the
	  LV_ATTRIBUTE_* macros for your platform.

config LV_ATTRIBUTE_CUSTOM_INCLUDE
	string "Path to custom attributes header"
	default ""
	depends on LV_ATTRIBUTE_USE_CUSTOM_INCLUDE
	help
	  Optional header to override LV_ATTRIBUTE_* macros for your platform.
	  Leave empty to use defaults (all expand to nothing).

	  Create a header file and set this to its path, e.g. "my_lv_attr.h".
	  The following macros can be defined in it:

	  LV_ATTRIBUTE_MEM_ALIGN
	    Where memory needs to be aligned (e.g. with -Os, data may not be
	    aligned to the required boundary by default).
	    e.g. __attribute__((aligned(4)))

	  LV_ATTRIBUTE_TICK_INC
	    Applied to lv_tick_inc(). Often called from a timer ISR, so fast
	    memory placement can reduce latency.
	    e.g. __attribute__((section(".itcm"))) or __ramfunc (IAR)

	  LV_ATTRIBUTE_TIMER_HANDLER
	    Applied to lv_timer_handler().
	    e.g. __attribute__((section(".itcm")))

	  LV_ATTRIBUTE_FLUSH_READY
	    Applied to lv_display_flush_ready(). Often called from a DMA or
	    display ISR.
	    e.g. __attribute__((section(".itcm")))

	  LV_ATTRIBUTE_SYNC_READY
	    Applied to lv_display_sync_ready(). Similar to FLUSH_READY, useful
	    when called from an ISR context.
	    e.g. __attribute__((section(".itcm")))

	  LV_ATTRIBUTE_LARGE_CONST
	    Applied to large read-only arrays such as font bitmaps. Use to place
	    them in a specific flash region or external memory.
	    e.g. __attribute__((section(".ext_flash")))

	  LV_ATTRIBUTE_LARGE_RAM_ARRAY
	    Applied to large arrays allocated in RAM.
	    e.g. __attribute__((section(".ext_ram")))

	  LV_ATTRIBUTE_FAST_MEM
	    Applied to performance-critical functions to place them in faster
	    memory such as ITCM or SRAM.
	    e.g. __attribute__((section(".itcm"))) or __ramfunc (IAR)

	  LV_ATTRIBUTE_EXTERN_DATA
	    Prefix for all global extern data declarations. Useful for placing
	    shared data in a named section or applying export attributes.
	    e.g. __attribute__((section(".shared_mem")))

	  LV_EXPORT_CONST_INT(int_value)
	    Exports an integer constant to a language binding API such as
	    MicroPython. Called for all constants in the form LV_<CONST>.
	    Leave undefined if not using a binding.
	    e.g. mp_rom_map_elem_t entry = {MP_ROM_QSTR(MP_QSTR_##int_value), MP_ROM_INT(int_value)}

config LV_ATTRIBUTE_FAST_MEM_USE_IRAM
	bool "Place LV_ATTRIBUTE_FAST_MEM functions in IRAM (ESP32 only)"
	help
	  Configure LV_ATTRIBUTE_FAST_MEM to use IRAM.
	  This option is only applicable to ESP32 targets.

endmenu #"Compiler Settings"
menu "Examples"
config LV_BUILD_EXAMPLES
	bool "Build examples"
	default y

endmenu #"Examples"
menu "Demos"
config LV_BUILD_DEMOS
	bool "Build demos"
	default y

if LV_BUILD_DEMOS

config LV_USE_DEMO_BENCHMARK
	bool "Benchmark demo"
	default n
	select LV_FONT_MONTSERRAT_14
	select LV_FONT_MONTSERRAT_20
	select LV_FONT_MONTSERRAT_24
	select LV_FONT_MONTSERRAT_26
	select LV_USE_DEMO_WIDGETS
	imply LV_USE_SYSMON
	imply LV_USE_PERF_MONITOR

config LV_DEMO_BENCHMARK_ALIGNED_FONTS
	depends on LV_USE_DEMO_BENCHMARK
	bool "Aligned fonts"
	default n
	help
		Use the demo's own Montserrat fonts with aligned glyph bitmaps instead
		of the LV_FONT_MONTSERRAT_* fonts.
config LV_USE_DEMO_GLTF
	bool "glTF demo"
	default n
	depends on LV_USE_GLTF
config LV_USE_DEMO_KEYPAD_AND_ENCODER
	bool "Keypad and encoder demo"
	default n

config LV_USE_DEMO_MUSIC
	bool "Music player demo"
	default n
if LV_USE_DEMO_MUSIC

config LV_DEMO_MUSIC_SQUARE
	bool "Square layout"
	default n

config LV_DEMO_MUSIC_LANDSCAPE
	bool "Landscape layout"
	default n

config LV_DEMO_MUSIC_ROUND
	bool "Round layout"
	default n

config LV_DEMO_MUSIC_LARGE
	bool "Large layout"
	default n

config LV_DEMO_MUSIC_AUTO_PLAY
	bool "Auto play"
	default n

endif #LV_USE_DEMO_MUSIC
config LV_USE_DEMO_RENDER
	bool "Render demo"
	select LV_USE_GRID
	default n
	help
		Renders each drawing primitive for visual comparison.
		Requires a display of at least 480x272.

config LV_USE_DEMO_STRESS
	bool "Stress demo"
	default n
config LV_USE_DEMO_VECTOR_GRAPHIC
	bool "Vector graphic demo"
	default n
	depends on LV_DRAW_HAS_VECTOR_SUPPORT
	select LV_USE_VECTOR_GRAPHIC
config LV_USE_DEMO_WIDGETS
	bool "Widgets demo"
	default n

	config LV_USE_DEMO_FLEX_LAYOUT
		bool "Flex layout demo"
		default n
	config LV_USE_DEMO_MULTILANG
		bool "Multi-language demo"
		default n

	config LV_USE_DEMO_SMARTWATCH
		bool "Smartwatch demo"

	config LV_USE_DEMO_EBIKE
		bool "E-bike demo"

	config LV_DEMO_EBIKE_PORTRAIT
		bool "Portrait layout"
		depends on LV_USE_DEMO_EBIKE
		default n

	config LV_USE_DEMO_HIGH_RES
		bool "High resolution demo"
endif
endmenu #"Demos"

endmenu #"LVGL"
