mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-14 06:42:58 +08:00
0458acd998
Co-authored-by: Kevin Schlosser <kdschlosser@users.noreply.github.com> Co-authored-by: Liam <30486941+liamHowatt@users.noreply.github.com>
128 lines
3.6 KiB
ReStructuredText
128 lines
3.6 KiB
ReStructuredText
=========================
|
|
X11 Display/Inputs driver
|
|
=========================
|
|
|
|
Overview
|
|
--------
|
|
|
|
| The **X11** display/input `driver <https://github.com/lvgl/lvgl/src/drivers/x11>`__ offers support for simulating the LVGL display and keyboard/mouse inputs in an X11 desktop window.
|
|
| It is an alternative to **Wayland**, **XCB**, **SDL** or **Qt**.
|
|
|
|
The main purpose for this driver is for testing/debugging the LVGL application in a **Linux** simulation window.
|
|
|
|
|
|
Prerequisites
|
|
-------------
|
|
|
|
The X11 driver uses XLib to access the linux window manager.
|
|
|
|
1. Install XLib: ``sudo apt-get install libx11-6`` (should be installed already)
|
|
2. Install XLib development package: ``sudo apt-get install libx11-dev``
|
|
|
|
|
|
Configure X11 driver
|
|
--------------------
|
|
|
|
1. Enable the X11 driver support in lv_conf.h, by cmake compiler define or by KConfig
|
|
.. code-block:: c
|
|
|
|
#define LV_USE_X11 1
|
|
|
|
2. Optional configuration options:
|
|
- Direct Exit
|
|
.. code-block:: c
|
|
|
|
#define LV_X11_DIRECT_EXIT 1 /*preferred default - ends the application automatically if last window has been closed*/
|
|
// or
|
|
#define LV_X11_DIRECT_EXIT 0 /*application is responsible for ending the application (e.g. by own LV_EVENT_DELETE handler*/
|
|
|
|
|
|
- Double buffering
|
|
.. code-block:: c
|
|
|
|
#define LV_X11_DOUBLE_BUFFER 1 /*preferred default*/
|
|
// or
|
|
#define LV_X11_DOUBLE_BUFFER 0 /*not recommended*/
|
|
|
|
- Render mode
|
|
.. code-block:: c
|
|
|
|
#define LV_X11_RENDER_MODE_PARTIAL 1 /*LV_DISPLAY_RENDER_MODE_PARTIAL, preferred default*/
|
|
// or
|
|
#define LV_X11_RENDER_MODE_DIRECT 1 /*LV_DISPLAY_RENDER_MODE_DIRECT, not recommended for X11 driver*/
|
|
// or
|
|
#define LV_X11_RENDER_MODE_DULL 1 /*LV_DISPLAY_RENDER_MODE_FULL, not recommended for X11 driver*/
|
|
|
|
Usage
|
|
-----
|
|
|
|
| The minimal initialisation opening a window and enabling keyboard/mouse support
|
|
| (e.g. in main.c, LV_X11_DIRECT_EXIT must be 1):
|
|
|
|
.. code-block:: c
|
|
|
|
int main(int argc, char ** argv)
|
|
{
|
|
...
|
|
|
|
/* initialize X11 display driver */
|
|
lv_display_t * disp = lv_x11_window_create("LVGL X11 Simulation", monitor_hor_res, monitor_ver_res);
|
|
|
|
/* initialize X11 input drivers (for keyboard, mouse & mousewheel) */
|
|
lv_x11_inputs_create(disp, NULL);
|
|
|
|
...
|
|
|
|
while(true)
|
|
{
|
|
...
|
|
|
|
/* Periodically call the lv_timer handler */
|
|
lv_timer_handler();
|
|
}
|
|
}
|
|
|
|
| Full initialisation with mouse pointer symbol and own application exit handling
|
|
| (dependent on LV_X11_DIRECT_EXIT (can be 1 or 0))
|
|
|
|
.. code-block:: c
|
|
|
|
bool terminated = false;
|
|
|
|
#if !LV_X11_DIRECT_EXIT
|
|
static void on_close_cb(lv_event_t * e)
|
|
{
|
|
...
|
|
|
|
terminate = true;
|
|
}
|
|
#endif
|
|
|
|
int main(int argc, char ** argv)
|
|
{
|
|
...
|
|
|
|
/* initialize X11 display driver */
|
|
lv_display_t * disp = lv_x11_window_create("LVGL X11 Simulation", monitor_hor_res, monitor_ver_res);
|
|
lv_display_add_event_cb(disp, on_close_cb, LV_EVENT_DELETE, disp);
|
|
|
|
/* initialize X11 input drivers (for keyboard, mouse & mousewheel) */
|
|
LV_IMAGE_DECLARE(my_mouse_cursor_icon);
|
|
lv_x11_inputs_create(disp, &my_mouse_cursor_icon);
|
|
|
|
#if !LV_X11_DIRECT_EXIT
|
|
/* set optional window close callback to enable application cleanup and exit */
|
|
lv_x11_window_set_close_cb(disp, on_close_cb, disp);
|
|
#endif
|
|
|
|
...
|
|
|
|
while(!terminated)
|
|
{
|
|
...
|
|
|
|
/* Periodically call the lv_timer handler */
|
|
lv_timer_handler();
|
|
}
|
|
}
|