Git Product home page Git Product logo

lv_port_windows's Introduction

LVGL ported to Windows

Warning

This repository is deprecated due to all implementations had been migrated.

Please go to https://github.com/lvgl/lv_port_pc_visual_studio.

Preview

Introduction

This is a pre-configured Visual Studio project to try LVGL on a Windows PC. The project only depend on Win32 API, C Runtime and C++ STL, so you can compile it without any extra dependencies.

The project is currently maintained using Visual Studio 2019. It may well work without modification in Visual Studio 2017 but it is not actively supported with that version, so please install and test with Visual Studio 2019 before reporting any bugs.

This project is not for Visual Studio Code, it is for Visual Studio 2019.

Instructions for cloning, building and running the application are found below.

Roadmap

  • Accessibility support for grouped LVGL widgets.
  • Improve the input experience.
    • IME Support.
    • Touch input support.
    • The desktop style mouse wheel user experience.
  • Improve the UI performance.
    • Split LVGL task schedule loop to the separate thread.
    • Use Windows GDI and Direct2D to implement the custom drawing interface.
    • Implement the DirectWrite as extended font support backend.
  • Make a specialized UI demo.
  • Implement the LVGL file system interface.
  • Implement the Windows resource support for LVGL.

Supported Features

This repo is designed for developing a Windows desktop application. If you wonder to use the LVGL simulator for Windows, please visit lvgl/lv_sim_visual_studio.

  • Only depends on Win32 API, C Runtime and C++ STL.
  • Native support for x86, x64 and ARM64 Windows.
  • Support compiling with VC-LTL toolchain to make the binary size as smaller as using MinGW.
  • Support resizing the Window in the HAL level.
  • Support Per-monitor DPI Aware in the HAL level.
  • Support Windows keyboard and mouse wheel event in the HAL level.
  • Provide the easy way to reference lvgl, lv_examples project for Visual Studio.
  • Provide Windows GDI font engine support.
  • Support Windows touch input in the HAL level.
  • Support Windows IME input in the HAL level.

Drop the ARM32 Windows support

For my deliberate consideration, The lv_port_windows project will drop the ARM32 support on the Windows platform. Here are the reasons:

  • The latest version of ARM32 version for Windows desktop is Redstone 2 Insider Build 15035. I know Windows RT 8.1 and Windows 10 IoT Core aren't in the stage of end of support, but most of daily users are drop their devices (Windows RT 8.x tablets) or have a better solution (Windows 10 IoT Core users on Raspberry Pi devices should migrate to Linux or ARM64 version for Windows 10 desktop).
  • Future ARM processors are deprecating ARM32 ISA support, and Apple Silicon M1 had dropped the ARM32 support at all. So we can't run ARM32 version of Windows desktop applications on these devices.
  • Reduce the size of release package and make the continuous integration faster.

How to Clone

This repository contains other, necessary LVGL software repositories as git submodules. Those submodules are not pulled in with the normal git clone command and they will be needed. There are a couple of techniques to pull in the submodules.

Everything at Once

This command will clone the lv_port_windows repository and all submodules in a single step.

git clone --recurse-submodules https://github.com/lvgl/lv_port_windows.git

Main Repository First, Submodules Second

If you've already cloned the main repository you can pull in the submodules with a second command. Both commands are shown below.

git clone https://github.com/lvgl/lv_port_windows.git
cd lv_port_windows
git submodule update --init --recursive

Keeping Your Clone Up-To-Date

If you have cloned this repository and would like to pull in the latest changes,you will have to do this in two steps. The first step will pull in updates to the main repo, including updated references to the submodules. The second step will update the code in the submodules to match those references. The two commands needed to accomplish this are shown below, run these commands from inside the main repository's directory (top level lv_port_windows directory works fine).

git pull
git submodule update --init --recursive

If you have chosen to fork this repository then updating the fork from upstream will require a different, more involved procedure.

How To Build & Run

Open the LVGL.Windows.sln solution file in Visual Studio. Set the LVGL.Windows.Desktop project as the startup project. Click on the Local windows Debugger button in the top toolbar. The included project will be built and run, launching from a cmd window.

Trying Things Out

There are a list of possible test applications in the LVGL.Windows.Desktop.cpp file. Each test or demo is launched via a single function call. By default the lv_demo_widgets function is the one that runs, but you can comment that one out and choose any of the others to compile and run.

Use these examples to start building your own application test code.

A Note About Versions

This repository has its submodule references updated shortly afk with minor version updates. When submodule updates take place a matching version tag is added tter the release of new, major releases of LittlevGL's core lvgl project. Occasionally it is updated to woro this repository.

If you need to pull in bug fixes in more recent changes to the submodules you will have to update the references on your own. If source files are added or removed in the submodules then the visual studio project will likely need adjusting. See the commit log for examples of submodule updates and associated visual studio file changes to guide you.

lv_port_windows's People

Contributors

killua-killua avatar kisvegabor avatar mourinaruto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lv_port_windows's Issues

Is lv_port_windows production ready?

I see in the roadmap that there are some items not completed yet, and so I wonder if this porting to Windows is "production ready" or in a beta stage.
Moreover, is it possible using it with VSCode and a modern supported toolchain (i.e. MinGW)?

Thanks

Split WinMain into separate file; "library-ize" it.

Hello!

I was honestly awestuck when I saw the implementation here. Before, I had seen people implement LVGL ports for Windows - but usually by either using D3D or OpenGL - or, even worse, via software rendering. This approach here however uses the WinAPI directly, which is perfect!

One thing that I noticed - but, this could also just be the demo - is that the arcs on the second page seem to be stuttering and not move smoothly, although 62 FPS is reported in the bottom right (I use an AMD Ryzen 9 3900X, NVIDIA 2080 TI, 32GB@3200MHz).

That said though, it would be great if we could use this implementation of an "LVGL port" in our own projects too. Since you already did most of the work, I'd love to see WinMain moved to it's own file and apropriate header files created instead - allowing one to copy the existing files into their own project and, when using CMake for instance, conditionally use those files in the build process and call the methods accordingly.

One other, small question: Why C++? Other than reinterpret_cast<T>(V) there was nothing that would strike me as being "C++ only" - plus, the Win32 API is very much C only. So, why use C++?

Thank you in advance!

Kind regards,
Ingwie

This is great!

Hi, I've been using this for a month now and I think it's absolutely fantastic! Zero problems, so small and so fast! As a Win32/C/C++ guy I really appreciate the lack of runtime dependencies and familiar code structure. Till now I was using JUCE but will switch as it means I can use the same LVGL code that I use on my embedded projects. Using the new Squareline Studio gives me all RAD I need to get up and running quickly before further hand coding. Please continue to develop this as I think it's really important for LVGL. Thanks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.