# Copyright (c) 2018-2019 Jan Van Winkel <jan.van_winkel@dxplore.eu>
# SPDX-License-Identifier: Apache-2.0

menuconfig LVGL
	bool "LittlevGL GUI library"
	help
	  This option enables the LittlevGL GUI library.

if LVGL

module = LVGL
module-str = lvgl
source "subsys/logging/Kconfig.template.log_config"

config LVGL_DISPLAY_DEV_NAME
	string "Display device name"
	default "DISPLAY"
	help
	  Name of the display device to use for rendering.

config LVGL_HOR_RES
	int "Horizontal Screen Resolution"
	default 320
	help
	  Horizontal screen resolution in pixels

config LVGL_VER_RES
	int "Vertical Screen Resolution"
	default 240
	help
	  Vertical screen resolution in pixels

config LVGL_DPI
	int "DPI"
	default 100
	help
	  Dots per inch (DPI)

choice LVGL_COLOR_DEPTH
	prompt "Color Depth"
	default LVGL_COLOR_DEPTH_32
	help
	  Color depth to be used by library

	config LVGL_COLOR_DEPTH_32
		bool "32-bit"

	config LVGL_COLOR_DEPTH_16
		bool "16-bit"

	config LVGL_COLOR_DEPTH_8
		bool "8-bit"

	config LVGL_COLOR_DEPTH_1
		bool "1-bit"

endchoice

config LVGL_BITS_PER_PIXEL
	int "Bits per pixel"
	default 32
	range 1 32
	depends on LVGL_BUFFER_ALLOC_STATIC
	help
	  Number of bits per pixel.

if LVGL_COLOR_DEPTH_16

config LVGL_COLOR_16_SWAP
	bool "RGB565 byte swap"
	help
	  Swap the 2 bytes of a RGB565 pixel.

endif

if LVGL_COLOR_DEPTH_32

config LVGL_COLOR_SCREEN_TRANSP
	bool "Transparency support"
	help
	  Enable screen transparency. Useful for OSD or other overlapping GUISs.

endif

choice
	prompt "Chroma key color"
	default LVGL_CHROMA_KEY_GREEN
	help
	  Color to to use as chroma key

	config LVGL_CHROMA_KEY_RED
		bool "Red"

	config LVGL_CHROMA_KEY_GREEN
		bool "Green"

	config LVGL_CHROMA_KEY_BLUE
		bool "Blue"

	config LVGL_CHROMA_KEY_CUSTOM
		bool "Custom"

endchoice

if LVGL_CHROMA_KEY_CUSTOM
config LVGL_CUSTOM_CHROMA_KEY_RED
	hex "Chroma Key Red"
	range 0x00 0xFF
	default 0x00
	help
	  Value of the color red to be used in the chroma key

config LVGL_CUSTOM_CHROMA_KEY_GREEN
	hex "Chroma Key Green"
	range 0x00 0xFF
	default 0xFF
	help
	  Value of the color green to be used in the chroma key

config LVGL_CUSTOM_CHROMA_KEY_BLUE
	hex "Chroma Key Blue"
	range 0x00 0xFF
	default 0x00
	help
	  Value of the color blue to be used in the chroma key

endif

choice
	prompt "Memory pool"
	default LVGL_MEM_POOL_HEAP_KERNEL
	help
	  Memory pool to use for lvgl allocated objects

	config LVGL_MEM_POOL_HEAP_KERNEL
		bool "Kernel Heap"
		depends on HEAP_MEM_POOL_SIZE != 0
		help
		  Use k_malloc and k_free to allocate objects on the kernel heap

	config LVGL_MEM_POOL_HEAP_LIB_C
	  bool "C library Heap"
	  depends on !MINIMAL_LIBC || (MINIMAL_LIBC_MALLOC_ARENA_SIZE != 0)
	  help
		Use C library malloc and free to allocate objects on the C library heap

	config LVGL_MEM_POOL_KERNEL
		bool "Kernel space lvgl pool"
		help
		  Use a dedicated memory pool in kernel space to allocate lvgl objects
		  on

	config LVGL_MEM_POOL_USER
		bool "User space lvgl pool"
		help
		  Use a dedicated memory pool in user space to allocate lvgl objects on

endchoice

if LVGL_MEM_POOL_KERNEL || LVGL_MEM_POOL_USER

config LVGL_MEM_POOL_MIN_SIZE
	int "Minimum memory pool block size"
	default 16
	help
	  Size of the smallest block in the memory pool in bytes

config LVGL_MEM_POOL_MAX_SIZE
	int "Maximum memory pool block size"
	default 2048
	help
	  Size of the largest block in the memory pool in bytes

config LVGL_MEM_POOL_NUMBER_BLOCKS
	int "Number of max size blocks in memory pool"
	default 1
	help
	  Number of maximum sized blocks in the memory pool.

endif

config LVGL_VDB_SIZE
	int "Rendering buffer size"
	default 10
	range 1 100
	help
	  Size of the buffer used for rendering screen content as a percentage
	  of total display size.

config LVGL_DOUBLE_VDB
	bool "Use two rendering buffers"
	help
	  Use two buffers to render and flush data in parallel

choice
	prompt "Rendering Buffer Allocation"
	default LVGL_BUFFER_ALLOC_STATIC
	help
	  Type of allocation that should be used for allocating rendering buffers

config LVGL_BUFFER_ALLOC_STATIC
	bool "Static"
	help
	  Rendering buffers are statically allocated based on the following
	  configuration parameters:
	  * Horizontal screen resolution
	  * Vertical screen resolution
	  * Rendering buffer size
	  * Bytes per pixel

config LVGL_BUFFER_ALLOC_DYNAMIC
	bool "Dynamic"
	help
	  Rendering buffers are dynamically allocated based on the actual
	  display parameters

endchoice

config LVGL_SCREEN_REFRESH_PERIOD
	int "Screen refresh period"
	default 50
	help
	  Screen refresh period in milliseconds

config LVGL_INPUT_REFRESH_PERIOD
	int "Input device refresh period"
	default 50
	help
	  Refresh period for input devices in milliseconds

config LVGL_INPUT_DRAG_THRESHOLD
	int "Drag Threshold"
	default 10
	help
	  Threshold in pixels before entering drag mode

config LVGL_INPUT_DRAG_THROW_SLOW_DOWN
	int "Drag throw slow-down"
	default 20
	range 0 100
	help
	  Percentage of slow down of a throw following a drag.
	  Greater percentage means faster slow-down.

config LVGL_INPUT_LONG_PRESS_TIME
	int "Long press time"
	default 400
	help
	  Period in milliseconds before a press is seen as a long press

config LVGL_INPUT_LONG_RESS_REPEAT_TIME
	int "Long press repeat time"
	default 100
	help
	  Period in milliseconds after which a new trigger is generated
	  for a long press

choice
	prompt "String character encoding"
	default LVGL_TXT_ENC_ASCII

config LVGL_TXT_ENC_ASCII
	bool "ASCII string encoding"

config LVGL_TXT_ENC_UTF8
	bool "UTF-8 string encoding"

endchoice

config LVGL_TEXT_BREAK_CHARACTERS
	string "Text break characters"
	default " ,.;:-_"
	help
	  Characters on which a text break can take place

config LVGL_TEXT_LINE_BREAK_LONG_LEN
	int "Minimal word length for line break"
	default 12
	help
	  If a word is at least this long, a line break is allowed in the word.

	  If the length is 0, no line break is allowed in the middle of a word.

config LVGL_TEXT_LINE_BREAK_LONG_PRE_MIN_LEN
	int "Minimal number of characters on line before line break"
	default 3
	help
	  Minimal number of characters to place on a line before a line break
	  in the middle of a word can occur.

config LVGL_TEXT_LINE_BREAK_LONG_POST_MIN_LEN
	int "Minimal number of characters on line after line break"
	default 3
	help
	  Minimal number of characters to place on a line after a line break
	  occurred in the middle of a word.

config LVGL_TEXT_COLOR_CMD
	string "Text recoloring control character"
	default "#"
	help
	  Control character to use for signalling text recoloring

config LVGL_TEXT_USE_BIDI
	bool "Enable bidirectional text support"
	help
	  Enable bidirectional text support

	  The direction of the text will be processed according to the
	  Unicode Bidirectional Algorithm:
	  https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/

if LVGL_TEXT_USE_BIDI

choice LVGL_TEXT_BIDI_MODE
	prompt "Bidirectional text processing direction"
	default LVGL_TEXT_BIDI_DIR_AUTO
	help
	  Direction of bidirectional text processing

	config LVGL_TEXT_BIDI_DIR_AUTO
		bool "Automatically detect direction"

	config LVGL_TEXT_BIDI_DIR_LTR
		bool "Left-to-right"

	config LVGL_TEXT_BIDI_DIR_RTL
		bool "Right-to-left"

endchoice

endif

config LVGL_ANTIALIAS
	bool "Enable anti-aliasing"
	help
	  Enable anti-aliasing

config LVGL_ANIMATION
	bool "Enable animations"
	help
	  Enable animations

config LVGL_SHADOW
	bool "Enable shadows"
	help
	  Enable shadows

config LVGL_GROUP
	bool "Enable group support"
	help
	  Enable group support.
	  Used by keyboard and button input

config LVGL_GPU
	bool "Enable GPU support"
	help
	  Enable GPU support

config LVGL_IMG_CF_INDEXED
	bool "Enable indexed image support"
	default y
	help
	  Enable support for indexed images

config LVGL_IMG_CF_ALPHA
	bool "Enable alpha indexed image support"
	default y
	help
	  Enable support for alpha indexed images

config LVGL_IMG_INDEXED_CHROMA
	bool "Enable chroma keying for indexed images"
	help
	  Enable chroma keying for indexed images

config LVGL_FILESYSTEM
	bool "Enable file system"
	depends on FILE_SYSTEM
	default y if FILE_SYSTEM
	help
	  Enable LittlevGL file system

config LVGL_IMG_CACHE_DEF_SIZE
	int "Default image cache size"
	default 1
	help
	  Default image cache size, image caching keeps the images open.
	  If only the built-in image formats are used there is no real
	  advantage of caching. With complex image decoders (e.g. PNG or JPG)
	  caching can save the continuous decoding of images. However the
	  opened images might consume additional RAM.

config LVGL_USE_DEBUG
	bool "Enable debug support"
	default y if TEST
	help
	  Enable debug support.

	  If debug support is enabled LVGL will validate the parameters of
	  any function call made and if an invalid parameter is found __ASSERT
	  is called.

if LVGL_USE_DEBUG

config LVGL_USE_ASSERT_NULL
	bool "Enable null pointer assertion"
	default y if TEST
	help
	  Enable null pointer assertion

	  Check if a null pointer is passed as a parameter (Quite fast)

config LVGL_USE_ASSERT_MEM
	bool "Enable memory allocation assertion"
	default y if TEST
	help
	  Enable memory allocation assertion

	  Check if memory allocation is successful (Quite fast)

config LVGL_USE_ASSERT_STR
	bool "Enable string assertion"
	default y if TEST
	help
	  Enable string assertion

	  Check if the string is not a NULL pointer, unusually long string,
	  contains invalid characters or contains unusual repetitions. (Slow)

	  If this option is disabled and NULL pointer checking is enabled, the
	  NULL pointer check is executed instead.

config LVGL_USE_ASSERT_OBJ
	bool "Enable object assertion"
	default y if TEST
	help
	  Enable object assertion

	  Check if an object is not a NULL pointer, has the correct type and
	  does exists. (Quite Slow)

	  If this option is disabled and NULL pointer checking is enabled, the
	  NULL pointer check is executed instead.

config LVGL_USE_ASSERT_STYLE
	bool "Enable style assertion"
	default y if TEST
	help
	  Enable style assertion

	  Check if a used style is correctly initialized. (Fast)

endif

rsource "Kconfig.themes"
rsource "Kconfig.fonts"
rsource "Kconfig.objects"

config APP_LINK_WITH_LVGL
	bool "Link 'app' with LVGL"
	default y
	help
	  Add LVGL header files to the 'app' include path. It may be
	  disabled if the include paths for LVGL are causing aliasing
	  issues for 'app'.

endif # LVGL
