Cst816s: scale down SDL mouse coordinates according to MONITOR_ZOOM

The lv_drivers provided monitor driver supports a `MONITOR_ZOOM`-factor
which scales the window by the set factor. This is 'useful when
simulating small screens'.

The zoom can be set as cmake configuration setting `-DMONITOR_ZOOM=1`.

Probably even more usefull for high-dpi screens where 240 pixels is
really tiny.
This commit is contained in:
Reinhold Gschweicher 2022-03-30 19:49:17 +02:00
parent 84195fa44b
commit bf3a255ca4
4 changed files with 16 additions and 0 deletions

View File

@ -55,6 +55,13 @@ file(GLOB_RECURSE SOURCES "lv_drivers/*.c" "${InfiniTime_DIR}/src/libs/lvgl/src
add_executable(infinisim main.cpp ${SOURCES} ${INCLUDES})
set(MONITOR_ZOOM 1 CACHE STRING "Scale simulator window by this factor")
if(MONITOR_ZOOM MATCHES "^[0-9]\.?[0-9]*")
target_compile_definitions(infinisim PRIVATE MONITOR_ZOOM=${MONITOR_ZOOM})
else()
message(FATAL_ERROR "variable MONITOR_ZOOM=${MONITOR_ZOOM} must be a positive number")
endif()
# include the generated lv_conf.h file before anything else
target_include_directories(infinisim PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")

View File

@ -55,6 +55,7 @@ The following configuration settings can be added to the first `cmake -S . -B bu
- `-DInfiniTime_DIR=InfiniTime`: a full path to an existing InfiniTime repository checked out.
Inside that directory the `src/libs/lvgl` submodule must be checked out as well.
The default value points to the InfiniTime submodule in this repository.
- `-DMONITOR_ZOOM=1`: scale simulator window by this factor
## Run Simulator

View File

@ -99,7 +99,10 @@
# define MONITOR_VER_RES 240
/* Scale window by this factor (useful when simulating small screens) */
#ifndef MONITOR_ZOOM
# define MONITOR_ZOOM 1
#endif
static_assert(MONITOR_ZOOM > 0);
/* Used to test true double buffering with only address changing.
* Set LV_draw_buf_SIZE = (LV_HOR_RES * LV_VER_RES) and LV_draw_buf_DOUBLE = 1 and LV_COLOR_DEPTH = 32" */

View File

@ -1,4 +1,5 @@
#include "drivers/Cst816s.h"
#include "lv_drv_conf.h" // MONITOR_ZOOM
#include <SDL2/SDL.h>
#include <libraries/log/nrf_log.h>
#include <cmath>
@ -25,6 +26,10 @@ bool Cst816S::Init() {
Cst816S::TouchInfos Cst816S::GetTouchInfo() {
int x, y;
uint32_t buttons = SDL_GetMouseState(&x, &y);
// scale down real mouse coordinates to InfiniTime scale to make zoom work
// the MONITOR_ZOOM-factor is defined in lv_drv_conf.h
x /= MONITOR_ZOOM;
y /= MONITOR_ZOOM;
Cst816S::TouchInfos info;
info.x = x;