2023-06-28 14:26:56 -04:00
|
|
|
|
/*
|
|
|
|
|
* PROJECT: LVGL PC Simulator using Visual Studio
|
|
|
|
|
* FILE: LVGL.Simulator.cpp
|
|
|
|
|
* PURPOSE: Implementation for LVGL ported to Windows Desktop
|
|
|
|
|
*
|
|
|
|
|
* LICENSE: The MIT License
|
|
|
|
|
*
|
|
|
|
|
* DEVELOPER: Mouri_Naruto (Mouri_Naruto AT Outlook.com)
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <Windows.h>
|
|
|
|
|
#include <string>
|
|
|
|
|
#include "resource.h"
|
|
|
|
|
|
2023-07-31 14:28:10 -04:00
|
|
|
|
#include "omoteconfig.h"
|
|
|
|
|
#include "HardwareSimulator.hpp"
|
|
|
|
|
#include "OmoteUI.hpp"
|
|
|
|
|
|
2023-06-28 14:26:56 -04:00
|
|
|
|
#if _MSC_VER >= 1200
|
2023-07-31 14:28:10 -04:00
|
|
|
|
// Disable compilation warnings.
|
2023-06-28 14:26:56 -04:00
|
|
|
|
#pragma warning(push)
|
|
|
|
|
// nonstandard extension used : bit field types other than int
|
2023-07-31 14:28:10 -04:00
|
|
|
|
#pragma warning(disable : 4214)
|
2023-06-28 14:26:56 -04:00
|
|
|
|
// 'conversion' conversion from 'type1' to 'type2', possible loss of data
|
2023-07-31 14:28:10 -04:00
|
|
|
|
#pragma warning(disable : 4244)
|
2023-06-28 14:26:56 -04:00
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#include "lvgl/lvgl.h"
|
|
|
|
|
#include "lv_drivers/win32drv/win32drv.h"
|
|
|
|
|
|
|
|
|
|
#if _MSC_VER >= 1200
|
|
|
|
|
// Restore compilation warnings.
|
|
|
|
|
#pragma warning(pop)
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
|
|
bool single_display_mode_initialization()
|
|
|
|
|
{
|
|
|
|
|
if (!lv_win32_init(
|
2023-07-31 14:28:10 -04:00
|
|
|
|
GetModuleHandleW(NULL),
|
|
|
|
|
SW_SHOW,
|
|
|
|
|
240,
|
|
|
|
|
320,
|
|
|
|
|
LoadIconW(GetModuleHandleW(NULL), MAKEINTRESOURCE(IDI_LVGL))))
|
2023-06-28 14:26:56 -04:00
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
lv_win32_add_all_input_devices_to_group(NULL);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#include <process.h>
|
|
|
|
|
|
|
|
|
|
HANDLE g_window_mutex = NULL;
|
|
|
|
|
bool g_initialization_status = false;
|
|
|
|
|
|
|
|
|
|
#define LVGL_SIMULATOR_MAXIMUM_DISPLAYS 16
|
|
|
|
|
HWND g_display_window_handles[LVGL_SIMULATOR_MAXIMUM_DISPLAYS];
|
|
|
|
|
|
|
|
|
|
unsigned int __stdcall lv_win32_window_thread_entrypoint(
|
2023-07-31 14:28:10 -04:00
|
|
|
|
void *raw_parameter)
|
2023-06-28 14:26:56 -04:00
|
|
|
|
{
|
2023-07-31 14:28:10 -04:00
|
|
|
|
size_t display_id = *(size_t *)(raw_parameter);
|
2023-06-28 14:26:56 -04:00
|
|
|
|
|
|
|
|
|
HINSTANCE instance_handle = GetModuleHandleW(NULL);
|
|
|
|
|
int show_window_mode = SW_SHOW;
|
|
|
|
|
HICON icon_handle = LoadIconW(instance_handle, MAKEINTRESOURCE(IDI_LVGL));
|
|
|
|
|
lv_coord_t hor_res = 240;
|
|
|
|
|
lv_coord_t ver_res = 320;
|
|
|
|
|
|
|
|
|
|
wchar_t window_title[256];
|
|
|
|
|
memset(window_title, 0, sizeof(window_title));
|
|
|
|
|
_snwprintf(
|
|
|
|
|
window_title,
|
|
|
|
|
256,
|
|
|
|
|
L"LVGL Simulator for Windows Desktop (Display %d)",
|
|
|
|
|
display_id);
|
|
|
|
|
|
|
|
|
|
g_display_window_handles[display_id] = lv_win32_create_display_window(
|
|
|
|
|
window_title,
|
|
|
|
|
hor_res,
|
|
|
|
|
ver_res,
|
|
|
|
|
instance_handle,
|
|
|
|
|
icon_handle,
|
|
|
|
|
show_window_mode);
|
|
|
|
|
if (!g_display_window_handles[display_id])
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
g_initialization_status = true;
|
|
|
|
|
|
|
|
|
|
SetEvent(g_window_mutex);
|
|
|
|
|
|
|
|
|
|
MSG message;
|
|
|
|
|
while (GetMessageW(&message, NULL, 0, 0))
|
|
|
|
|
{
|
|
|
|
|
TranslateMessage(&message);
|
|
|
|
|
DispatchMessageW(&message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lv_win32_quit_signal = true;
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool multiple_display_mode_initialization()
|
|
|
|
|
{
|
|
|
|
|
if (!lv_win32_init_window_class())
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < LVGL_SIMULATOR_MAXIMUM_DISPLAYS; ++i)
|
|
|
|
|
{
|
|
|
|
|
g_initialization_status = false;
|
|
|
|
|
|
|
|
|
|
g_window_mutex = CreateEventExW(NULL, NULL, 0, EVENT_ALL_ACCESS);
|
|
|
|
|
|
|
|
|
|
_beginthreadex(
|
|
|
|
|
NULL,
|
|
|
|
|
0,
|
|
|
|
|
lv_win32_window_thread_entrypoint,
|
|
|
|
|
&i,
|
|
|
|
|
0,
|
|
|
|
|
NULL);
|
|
|
|
|
|
|
|
|
|
WaitForSingleObjectEx(g_window_mutex, INFINITE, FALSE);
|
|
|
|
|
|
|
|
|
|
CloseHandle(g_window_mutex);
|
|
|
|
|
|
|
|
|
|
if (!g_initialization_status)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-07-31 14:28:10 -04:00
|
|
|
|
lv_win32_window_context_t *context = (lv_win32_window_context_t *)(lv_win32_get_window_context(g_display_window_handles[0]));
|
2023-06-28 14:26:56 -04:00
|
|
|
|
if (context)
|
|
|
|
|
{
|
|
|
|
|
lv_win32_pointer_device_object = context->mouse_device_object;
|
|
|
|
|
lv_win32_keypad_device_object = context->keyboard_device_object;
|
|
|
|
|
lv_win32_encoder_device_object = context->mousewheel_device_object;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lv_win32_add_all_input_devices_to_group(NULL);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifndef LV_ATTRIBUTE_MEM_ALIGN
|
|
|
|
|
#define LV_ATTRIBUTE_MEM_ALIGN
|
|
|
|
|
#endif
|
|
|
|
|
|
2023-07-31 14:28:10 -04:00
|
|
|
|
int main()
|
|
|
|
|
{
|
|
|
|
|
auto hal = std::make_shared<HardwareSimulator>();
|
|
|
|
|
hal->init();
|
|
|
|
|
|
|
|
|
|
auto ui = OmoteUI::getInstance(hal);
|
2023-06-28 14:26:56 -04:00
|
|
|
|
|
2023-07-31 14:28:10 -04:00
|
|
|
|
if (!single_display_mode_initialization())
|
|
|
|
|
{
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
2023-06-28 14:26:56 -04:00
|
|
|
|
|
2023-07-31 14:28:10 -04:00
|
|
|
|
ui->layout_UI();
|
2023-06-28 14:26:56 -04:00
|
|
|
|
|
2023-07-31 14:28:10 -04:00
|
|
|
|
while (!lv_win32_quit_signal)
|
|
|
|
|
{
|
|
|
|
|
lv_task_handler();
|
|
|
|
|
// std::string strng = std::to_string(scroll_value);
|
|
|
|
|
// const char* pchar = strng.c_str();
|
|
|
|
|
// OutputDebugStringW();
|
|
|
|
|
// lv_label_set_text_fmt(scrollPos, "%d %d", lv_obj_get_scroll_x(lv_tabview_get_content(tabview)), lv_obj_get_scroll_x(panel));
|
|
|
|
|
|
|
|
|
|
Sleep(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
2023-06-28 14:26:56 -04:00
|
|
|
|
}
|