diff --git a/docs/src/details/integration/pc/browser.rst b/docs/src/details/integration/pc/browser.rst index 743367a15b..08be592b1c 100644 --- a/docs/src/details/integration/pc/browser.rst +++ b/docs/src/details/integration/pc/browser.rst @@ -2,11 +2,51 @@ Browser ======= -.. develop in browser or run the UI in browser - emscripten - overview: how it works, advantages, see lvgl.io/demos - usage - github codespace - why, how - Editor's online preview - what is it, why, how +Overview +******** + +There are multiple ways to view LVGL UIs in a browser or even develop UIs directly in a browser environment: + +- Compile UI to HTML using **Emscripten** +- Develop in online VSCode using **GitHub Codespaces** +- Preview UIs in the **LVGL UI Editor’s online preview** + +Compile UIs to HTML (Emscripten) +******************************** + +`Emscripten `__ can compile C source files into a single HTML output that runs in a browser. This is a convenient way to share developed UIs with stakeholders, as they can test the interface without needing a developer setup. + +Instead of producing a binary, Emscripten produces WebAssembly, which is supported across modern browsers. + +The `lv_web_emscripten `__ project provides a ready-to-use setup for compiling any LVGL UI into a browser-capable HTML file. + +It uses a specialized, :ref:`build_cmake`‑based build system—check the README for full setup details. + +Develop in Online VSCode (GitHub Codespaces) +******************************************** + +GitHub Codespaces offer a cloud-hosted VSCode environment that runs entirely in the browser. + +LVGL provides a preconfigured Codespace environment, which you can launch with just a few clicks. It’s especially beneficial if: + +- You're having issues setting up a local development environment +- Your machine is slow or underpowered +- You're working from a device without a local IDE + +To get started: + +1. Navigate to `https://github.com/lvgl/lvgl `__. +2. Click the green **Code** button. +3. Select the **Codespaces** tab. +4. Click **Create Codespace on master**. +5. Wait briefly for the workspace to launch. +6. Open the terminal and run `./build_all.sh`. + +This will build LVGL and render the UI in a VSCode tab. You can continue writing and rebuilding simply by running the script again. + +Note: The Codespaces setup also uses Emscripten for browser rendering. + +LVGL’s UI Editor Online Share +***************************** + +Coming soon. diff --git a/docs/src/details/integration/pc/index.rst b/docs/src/details/integration/pc/index.rst index d4d28370d6..df80bec285 100644 --- a/docs/src/details/integration/pc/index.rst +++ b/docs/src/details/integration/pc/index.rst @@ -1,16 +1,22 @@ .. _running_on_pc: +.. _simulator: ============= Running on PC ============= +You can try out LVGL **using only your PC** (i.e. without any +development boards). + +Many ready-to-use projects are available to get started easily on +Windows, Linux, macOS, and in a web browser. Even developing a UEFI BIOS is +an option. + .. toctree:: - :class: toctree-1-deep - :maxdepth: 1 + :maxdepth: 2 - overview linux windows macos diff --git a/docs/src/details/integration/pc/linux.rst b/docs/src/details/integration/pc/linux.rst index 2070a77a15..ab0c14babf 100644 --- a/docs/src/details/integration/pc/linux.rst +++ b/docs/src/details/integration/pc/linux.rst @@ -2,7 +2,50 @@ Linux ===== -.. intro: there are many repos, it's easy to install dependencies via terminal - lv_port_linux: cmake based, also good for embedded linux, suppots many display backends - lv_port_pc_eclipse: many chip vendor IDEs are Eclips based too, needs sdl - lv_port_pc_vscode: modern, needs SDL +Overview +******** + +LVGL comes with a lot of built-in Linux-related drivers and support: + +- Wayland, DRM, SDL, and fbdev display drivers +- ``pthread`` integration +- :ref:`build_cmake` support + +Multiple repositories are available to help you get started easily. +Just follow the README of the repositories listed below. + +Ready-to-Use Projects +********************* + +VSCode +------ + +LVGL is available for `VSCode `__, a well-known cross-platform code editor. + +It uses `SDL `__ to open a window, show the rendered content, and manage mouse and keyboard. + +A ready-to-use LVGL project for VSCode is available at +`https://github.com/lvgl/lv_port_pc_vscode `__. + +The project uses :ref:`build_cmake` to compile LVGL, so it also serves as a CMake example. + +This repository also has built-in FreeRTOS integration, making it easy to test the UI +with an embedded OS. + +Generic Linux Port +------------------ + +The `lv_port_linux `__ project is typically meant to +be used for embedded hardware, but it runs perfectly on PC as well. + +It supports all the built-in LVGL drivers in a preconfigured :ref:`build_cmake` build system, +making it easy to integrate into any platform or environment. + +Eclipse +------- + +The project for `Eclipse CDT `__ also uses `SDL `__. +It can be found at +`https://github.com/lvgl/lv_port_pc_eclipse `__. + +The project uses CMake to compile LVGL, so it also serves as a :ref:`build_cmake` example. diff --git a/docs/src/details/integration/pc/macos.rst b/docs/src/details/integration/pc/macos.rst index 30c40dc485..2dc0e67e67 100644 --- a/docs/src/details/integration/pc/macos.rst +++ b/docs/src/details/integration/pc/macos.rst @@ -1,7 +1,36 @@ ===== -MacOS +macOS ===== -.. lv_port_pc_vscode - lv_port_pc_eclipse +Overview +******** +Ready-to-use projects are available to run LVGL on macOS as well. +These projects use the :ref:`sdl_driver`. + +Ready-to-Use Projects +********************* + +VSCode +------ + +LVGL is available for `VSCode `__, a well-known cross-platform code editor. + +It uses `SDL `__ to open a window, show the rendered content, and manage mouse and keyboard. + +A ready-to-use LVGL project for VSCode is available at +`https://github.com/lvgl/lv_port_pc_vscode `__. + +The project uses :ref:`build_cmake` to compile LVGL, so it also serves as a CMake example. + +This repository also has built-in FreeRTOS integration, making it easy to test the UI +with an embedded OS as well. + +Eclipse +------- + +The project for `Eclipse CDT `__ also uses `SDL `__. +It can be found at +`https://github.com/lvgl/lv_port_pc_eclipse `__. + +The project uses CMake to compile LVGL, so it also serves as a :ref:`build_cmake` example. diff --git a/docs/src/details/integration/pc/overview.rst b/docs/src/details/integration/pc/overview.rst deleted file mode 100644 index 14f72e563f..0000000000 --- a/docs/src/details/integration/pc/overview.rst +++ /dev/null @@ -1,55 +0,0 @@ -.. _simulator: - -======== -Overview -======== - -You can try out LVGL **using only your PC** (i.e. without any -development boards). LVGL will run on a simulator environment on the PC -where anyone can write and experiment with real LVGL applications. - -Using the simulator on a PC has the following advantages: - -- Hardware independent: Write code, run it on the PC and see the result on a monitor. -- Cross-platform: Any Windows, Linux or macOS system can run the PC simulator. -- Portability: The written code is portable, which means you can simply copy it when migrating to embedded hardware. -- Easy Validation: The simulator is also very useful to report bugs because it - provides a common platform for every user. -- Better developer experience: On PC Debuggers are usually faster and better, you can log to files, - add a lot of ``printf`` s, do profiling, and so on. - - -Select an IDE -------------- - -The simulator is ported to various IDEs (Integrated Development Environments). -Choose your favorite IDE, read its README on GitHub, download the project, and load it to the IDE. - -- `Eclipse with SDL driver `__: Recommended on Linux and Mac, supports CMake as well -- `VisualStudio `__: Recommended on Windows -- `VSCode with SDL driver `__: Recommended on Linux (SDL) and Mac (SDL) -- `CodeBlocks `__: Recommended on Windows -- `PlatformIO with SDL driver `__: Recommended on Linux and Mac but has an STM32 environment as well -- `Generic Linux `__: CMake based project where you can easily switch between fbdev, DRM, and SDL. -- `MDK with FastModel `__: For Windows - -External project not maintained by the LVGL organization: - -- `QT Creator `__: Cross platform - -Built-in drivers ----------------- - -LVGL comes with several built-in drivers, operating system and GPU support. -See :ref:`integration_index`. - -Even if a simulator project comes with e.g. SDL, you can easily replace it by enabling -another driver in ``lv_conf.h`` and calling its ``create`` function. - -For example to use the Linux frame buffer device instead of SDL just enable ``LV_USE_LINUX_FBDEV`` -and call - -.. code-block:: c - - lv_display_t *display = lv_linux_fbdev_create(); - lv_linux_fbdev_set_file(display, "/dev/fb0") diff --git a/docs/src/details/integration/pc/sdl.rst b/docs/src/details/integration/pc/sdl.rst index cf65a79c44..e527497abc 100644 --- a/docs/src/details/integration/pc/sdl.rst +++ b/docs/src/details/integration/pc/sdl.rst @@ -4,111 +4,81 @@ SDL Driver ========== -.. almost good just review - metnion the SDL renderer too - - Overview --------- +******** -SDL (Simple DirectMedia Layer) provides a cross-platform way to handle graphics, +`SDL `__ (Simple DirectMedia Layer) provides a cross-platform way to handle graphics, input, and multimedia, making it an excellent choice for running LVGL applications on a PC. +The `Eclipse `__, +`VSCode `__, and `Generic Linux `__ +projects of LVGL use SDL to open a window and manage input devices. + +As SDL is fully cross-platform, it is easy to integrate into any environment. Prerequisites -------------- +************* -Install SDL according to your platform. +Install SDL according to your platform: -- Linux ``sudo apt install libsdl2-dev`` -- MacOS ``brew install sdl2`` -- Windows https://github.com/libsdl-org/SDL/releases +- Linux: ``sudo apt install libsdl2-dev`` +- macOS: ``brew install sdl2`` +- Windows: Recommended: ``vcpkg install sdl2`` + Alternatively, you can download prebuilt SDL2 binaries from the `SDL website `__ and follow their installation instructions. +Configuration +************* -Configure SDL Driver ------------------------ - -1. Required linked libraries: -lSDL2 -2. Enable SDL driver support in lv_conf.h, CMake compiler definitions or KConfig. - - .. code-block:: c - - #define LV_USE_SDL 1 - #define LV_SDL_INCLUDE_PATH - #define SDL_HOR_RES 400 - #define SDL_VER_RES 400 - -Basic Usage ------------ +1. Required linked libraries: ``-lSDL2`` +2. Enable SDL driver support in ``lv_conf.h``, via CMake compiler definitions, or by using KConfig. .. code-block:: c - #include - #define SDL_MAIN_HANDLED /*To fix SDL's "undefined reference to WinMain" issue*/ - #include - #include "drivers/sdl/lv_sdl_mouse.h" - #include "drivers/sdl/lv_sdl_mousewheel.h" - #include "drivers/sdl/lv_sdl_keyboard.h" + #define LV_USE_SDL 1 - static lv_display_t *lvDisplay; - static lv_indev_t *lvMouse; - static lv_indev_t *lvMouseWheel; - static lv_indev_t *lvKeyboard; +Feel free to adjust the other options as needed, but the default values are usually sufficient. - #if LV_USE_LOG != 0 - static void lv_log_print_g_cb(lv_log_level_t level, const char * buf) - { - LV_UNUSED(level); - LV_UNUSED(buf); - } - #endif +Usage +***** + +.. code-block:: c + + #define SDL_MAIN_HANDLED /* To fix SDL's "undefined reference to WinMain" issue */ + #include "lvgl/lvgl.h" + + static lv_display_t *display; + static lv_indev_t *mouse; + static lv_indev_t *mouse_wheel; + static lv_indev_t *keyboard; int main() { - /* initialize lvgl */ + /* Initialize LVGL */ lv_init(); - // Workaround for sdl2 `-m32` crash - // https://bugs.launchpad.net/ubuntu/+source/libsdl2/+bug/1775067/comments/7 - #ifndef WIN32 - setenv("DBUS_FATAL_WARNINGS", "0", 1); - #endif + display = lv_sdl_window_create(SDL_HOR_RES, SDL_VER_RES); + mouse = lv_sdl_mouse_create(); + mouse_wheel = lv_sdl_mousewheel_create(); + keyboard = lv_sdl_keyboard_create(); - /* Register the log print callback */ - #if LV_USE_LOG != 0 - lv_log_register_print_cb(lv_log_print_g_cb); - #endif - - /* Add a display - * Use the 'monitor' driver which creates window on PC's monitor to simulate a display*/ - - lvDisplay = lv_sdl_window_create(SDL_HOR_RES, SDL_VER_RES); - lvMouse = lv_sdl_mouse_create(); - lvMouseWheel = lv_sdl_mousewheel_create(); - lvKeyboard = lv_sdl_keyboard_create(); - - /* create Widgets on the screen */ + /* Create widgets on the screen */ lv_demo_widgets(); - - Uint32 lastTick = SDL_GetTicks(); - while(1) { - SDL_Delay(5); - Uint32 current = SDL_GetTicks(); - lv_tick_inc(current - lastTick); // Update the tick timer. Tick is new for LVGL 9 - lastTick = current; - lv_timer_handler(); // Update the UI- + while (1) { + lv_timer_handler(); + lv_delay_ms(5); } return 0; } -Using an IDE ------------- +When building for 32-bit architecture, add the following workaround at the beginning of ``main``: -LVGL with SDL has been ported to various IDEs. +.. code-block:: c -- `Eclipse with SDL driver `__: Recommended on Linux and Mac, supports CMake as well -- `VSCode with SDL driver `__: Recommended on Linux (SDL) and Mac (SDL) -- `Generic Linux `__: CMake based project where you can easily switch between fbdev, DRM, and SDL. + // Workaround for SDL2 `-m32` crash + // https://bugs.launchpad.net/ubuntu/+source/libsdl2/+bug/1775067/comments/7 + #ifndef WIN32 + setenv("DBUS_FATAL_WARNINGS", "0", 1); + #endif diff --git a/docs/src/details/integration/pc/uefi.rst b/docs/src/details/integration/pc/uefi.rst index afbadfc43c..448298ffed 100644 --- a/docs/src/details/integration/pc/uefi.rst +++ b/docs/src/details/integration/pc/uefi.rst @@ -1,47 +1,48 @@ -========================== -UEFI Display/Inputs driver -========================== +==== +UEFI +==== Overview --------- +******** -The **UEFI** display/input `driver `__ offers support for using LVGL with UEFI. +The **UEFI** display/input `driver `__ offers support +for using LVGL to create UIs in UEFI environments. Prerequisites -------------- +************* -You need the following protocols available: +You need the following UEFI protocols available: -* *EFI_LOADED_IMAGE_PROTOCOL_GUID*, for file system support (used to determine the file system that was used to load the application) -* *EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID*, for file system support -* *EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID*, for keyboard support -* *EFI_SIMPLE_POINTER_PROTOCOL_GUID*, for mouse support -* *EFI_ABSOLUTE_POINTER_PROTOCOL_GUID*, for touch support -* *EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID*, for drawing -* *EFI_EDID_ACTIVE_PROTOCOL_GUID*, for drawing (optional) +- ``EFI_LOADED_IMAGE_PROTOCOL_GUID``: for file system support (used to determine the file system used to load the application) +- ``EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID``: for file system support +- ``EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID``: for keyboard support +- ``EFI_SIMPLE_POINTER_PROTOCOL_GUID``: for mouse support +- ``EFI_ABSOLUTE_POINTER_PROTOCOL_GUID``: for touch support +- ``EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID``: for drawing +- ``EFI_EDID_ACTIVE_PROTOCOL_GUID``: for drawing (optional) -Configure UEFI driver ------------------------- +Configuration +************* -- Enable the UEFI driver support in lv_conf.h +1. Enable the UEFI driver support in ``lv_conf.h``: .. code-block:: c #define LV_USE_UEFI 1 -- Enable the memory core functions, which are wrappers around AllocatePool and FreePool (using memory of type *EfiBootServicesData*) if you do not wan't to use your own implementations +- Enable the memory core functions, which are wrappers around ``AllocatePool`` and ``FreePool`` (using memory of type *EfiBootServicesData*) if you do not wan't to use your own implementations .. code-block:: c #define LV_UEFI_USE_MEMORY_SERVICES 1 -- You can enable file system support for the file system from which the application got loaded (default letter 'E') +3. Enable file system support for the volume the application was loaded from (defaults to drive letter ``E``): .. code-block:: c #define LV_USE_FS_UEFI 1 -- You need to define an include file which contains the basic UEFI definitions (protocols and types), there are 2 predefined files which can be used for EDK2 and gnu-efi +4. Include UEFI type definitions. There are predefined includes for EDK2 and GNU-EFI: .. code-block:: c @@ -50,7 +51,9 @@ Configure UEFI driver #define LV_USE_UEFI_INCLUDE Usage ------ +***** + +A minimal example: .. code-block:: c @@ -58,45 +61,33 @@ Usage #include "lvgl/examples/lv_examples.h" #include "lvgl/demos/lv_demos.h" - EFI_STATUS EFIAPI EfiMain(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE * SystemTable) + EFI_STATUS EFIAPI EfiMain(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) { lv_uefi_init(ImageHandle, SystemTable); lv_init(); - if(!lv_is_initialized()) return EFI_NOT_READY; + if (!lv_is_initialized()) return EFI_NOT_READY; - EFI_HANDLE handle = NULL; - lv_display_t* display = NULL; - lv_indev_t* indev = NULL; - lv_group_t* group = NULL; - lv_obj_t* cursor = NULL; - // used to get out of the main loop - size_t counter; - - // Init the display - handle = lv_uefi_display_get_active(); - if(handle == NULL) { - handle = lv_uefi_display_get_any(); - } - if(handle == NULL) { + EFI_HANDLE handle = lv_uefi_display_get_active(); + if (!handle) handle = lv_uefi_display_get_any(); + if (!handle) { lv_deinit(); return EFI_UNSUPPORTED; } - display = lv_uefi_display_create(handle); + lv_display_t *display = lv_uefi_display_create(handle); lv_display_set_default(display); - // Create the group - group = lv_group_create(); + lv_group_t *group = lv_group_create(); lv_group_set_default(group); - // Create an image that can be used as cursor - cursor = lv_image_create(lv_layer_top()); + lv_obj_t *cursor = lv_image_create(lv_layer_top()); lv_image_set_src(cursor, "E:cursor.png"); - // Create the input devices + lv_indev_t *indev; + indev = lv_uefi_simple_text_input_indev_create(); - lv_indev_set_group(indev, lv_group_get_default()); + lv_indev_set_group(indev, group); lv_uefi_simple_text_input_indev_add_all(indev); indev = lv_uefi_simple_pointer_indev_create(NULL); @@ -108,10 +99,9 @@ Usage lv_demo_widgets(); - // Run main loop for ~ 10 seconds - counter = 0; - while(counter < 10000) { - counter ++; + size_t counter = 0; + while (counter < 10000) { + counter++; gBS->Stall(1000); lv_tick_inc(1); lv_timer_handler(); diff --git a/docs/src/details/integration/pc/windows.rst b/docs/src/details/integration/pc/windows.rst index 086a802211..341bf8ffdd 100644 --- a/docs/src/details/integration/pc/windows.rst +++ b/docs/src/details/integration/pc/windows.rst @@ -2,65 +2,120 @@ Windows ======= -.. https://github.com/lvgl/lv_port_pc_visual_studio - native windows driver (same as now just make it shorter) - Overview ******** -The **Windows** display/input `driver `__ offers support for simulating the LVGL display and keyboard/mouse inputs in a Windows Win32 window. +LVGL comes with built-in drivers for Windows, covering: -The main purpose for this driver is for testing/debugging the LVGL application in a **Windows** simulation window via **simulator mode**, or developing a standard **Windows** desktop application with LVGL via **application mode**. +- Display, mouse, and keyboard support +- Operating system drivers -These are the **similarities** between simulator mode and application mode. +Using these or other drivers, multiple repositories are available to help you get started easily. +Just follow the README of the repositories listed below. -- Support LVGL pointer, keypad and encoder devices integration. -- Support Windows touch input. -- Support Windows input method integration input. -- Support Per-monitor DPI Aware (both V1 and V2). -- Provide HWND-based interoperability for other Windows UI infrastructures. +Ready-to-Use Projects +********************* -These are the **differences** between simulator mode and application mode. +VSCode +------ -Simulator Mode --------------- +LVGL is available for `VSCode `__, a well-known cross-platform code editor. -- Designed for LVGL device-simulation scenario --- simulates LVGL rendering to a hardware display panel. -- Keeps LVGL display resolution constant in order to best simulate UI layout which will will be seen in production devices. -- When Windows DPI scaling setting is changed, Windows backend will stretch display content. +It uses `SDL `__ to open a window, show the rendered content, and manage mouse and keyboard. -Application Mode ----------------- +A ready-to-use LVGL project for VSCode is available at +https://github.com/lvgl/lv_port_pc_vscode\ . -- Designed for Windows desktop application-development scenario. -- Has Window resizing support and LVGL display resolution is changed dynamically. -- When Windows DPI scaling setting is changed, LVGL display DPI value is also changed. -- The resolution you set for lv_windows_create_display is the window size instead of window client size for following the convention of other Windows desktop UI infrastructures. -- The applications based on this mode should adapt the LVGL display resolution changing for supporting window resizing properly. +The project uses :ref:`build_cmake` to compile LVGL, so it also serves as a CMake example. + +This repository also includes built-in FreeRTOS integration, making it easy to test the UI +with an embedded OS. + +Visual Studio +------------- + +`Visual Studio `__ is a comprehensive IDE from Microsoft +containing all the tools required for development out of the box. + +To use LVGL in Visual Studio, visit the +`lvgl/lv_port_pc_visual_studio `__ repository. + +It uses LVGL's built-in Windows drivers to open a window where you can see the LVGL-rendered UI, +and use your mouse as a touch input replacement. + +Eclipse +------- + +The project for `Eclipse CDT `__ also uses `SDL `__. +It can be found at +`https://github.com/lvgl/lv_port_pc_eclipse `__. + +The project uses :ref:`build_cmake` to compile LVGL and serves as a CMake example. + +Windows Driver +************** + +It's also easy to port LVGL to any Windows IDEs or toolchains using either the built-in SDL driver or +the Windows driver. + +To learn more about the SDL driver, visit :ref:`sdl_driver`. + +Details of the Windows driver are provided below. + +The **Windows** display/input `driver `__ +offers support for simulating the LVGL display and keyboard/mouse inputs in a Windows Win32 window. + +Modes +----- + +The main purpose of this driver is for testing/debugging LVGL applications in +a **Windows** simulation window via **simulator mode**, or developing standard **Windows** desktop +applications with LVGL via **application mode**. + +Both simulator mode and application mode: + +- Support LVGL pointer, keypad, and encoder device integration +- Support Windows touch input +- Support Windows input method integration +- Support per-monitor DPI awareness (both V1 and V2) +- Provide HWND-based interoperability for other Windows UI infrastructures + +However, **Simulator Mode**: + +- is designed for simulating LVGL rendering on hardware-like displays, +- keeps LVGL display resolution constant to simulate production UI layouts, and +- uses Windows DPI scaling to stretch content, + +whereas **Application Mode**: + +- is designed for native Windows desktop application development, +- supports dynamic window resizing with corresponding changes to LVGL display resolution, +- updates LVGL display DPI when Windows DPI changes, +- uses window size (not client area) when setting resolution via :cpp:func:`lv_windows_create_display`, and +- requires apps to handle display resolution changes properly. + +The mode can be selected by calling :cpp:func:`lv_windows_create_display`. Prerequisites -************* +------------- The minimum Windows OS requirement for this driver is Windows Vista RTM. -If you use Windows API shim libraries like `YY-Thunks -`__, the tested minimum Windows OS -requirement for this driver is Windows XP RTM. +If you use Windows API shim libraries like `YY-Thunks `__, +the tested minimum OS version is Windows XP RTM. -According to the Windows GDI API this driver used, it is possible the minimum Windows OS -requirement limitation for this driver is Windows 2000 RTM. +Due to the use of Windows GDI APIs, the theoretical minimum may be Windows 2000 RTM. -Configure Windows Driver -************************ +Usage +----- -Enable the Windows driver support in lv_conf.h, by cmake compiler define or by KConfig +Enable Windows driver support in ``lv_conf.h``, via CMake compiler define, or KConfig: .. code-block:: c #define LV_USE_WINDOWS 1 -Usage -***** +Once enabled, the Windows driver can be used like this: .. code-block:: c @@ -78,35 +133,21 @@ Usage bool simulator_mode = false; lv_display_t* display = lv_windows_create_display( L"LVGL Display Window", - 800, - 480, - zoom_level, - allow_dpi_override, - simulator_mode); - if (!display) - { - return -1; - } + 800, 480, + zoom_level, allow_dpi_override, simulator_mode); + + if (!display) return -1; lv_lock(); lv_indev_t* pointer_device = lv_windows_acquire_pointer_indev(display); - if (!pointer_device) - { - return -1; - } + if (!pointer_device) return -1; lv_indev_t* keypad_device = lv_windows_acquire_keypad_indev(display); - if (!keypad_device) - { - return -1; - } + if (!keypad_device) return -1; lv_indev_t* encoder_device = lv_windows_acquire_encoder_indev(display); - if (!encoder_device) - { - return -1; - } + if (!encoder_device) return -1; lv_demo_widgets(); @@ -115,8 +156,9 @@ Usage while (1) { uint32_t time_till_next = lv_timer_handler(); - if(time_till_next == LV_NO_TIMER_READY) time_till_next = LV_DEF_REFR_PERIOD; /*handle LV_NO_TIMER_READY. Another option is to `sleep` for longer*/ - lv_delay_ms(time_till_next); + // handle LV_NO_TIMER_READY. Another option is to always sleep a few milliseconds + if(time_till_next == LV_NO_TIMER_READY) time_till_next = LV_DEF_REFR_PERIOD; + lv_sleep_ms(time_till_next); } return 0;