Skip to content

Commit

Permalink
C++: if a SLINT_SCALE_FACTOR is set at compile time, default to that
Browse files Browse the repository at this point in the history
  • Loading branch information
ogoffart committed Apr 4, 2024
1 parent e2bfb9a commit e12870e
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 8 deletions.
16 changes: 8 additions & 8 deletions api/cpp/esp-idf/slint/src/slint-esp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,8 @@ void EspPlatform::run_event_loop()
}
#endif

int last_touch_x = 0;
int last_touch_y = 0;
float last_touch_x = 0;
float last_touch_y = 0;
bool touch_down = false;

while (true) {
Expand Down Expand Up @@ -192,21 +192,21 @@ void EspPlatform::run_event_loop()
*touch_handle, touchpad_x, touchpad_y, NULL, &touchpad_cnt, 1);

if (touchpad_pressed && touchpad_cnt > 0) {
auto scale_factor = m_window->window().scale_factor();
// ESP_LOGI(TAG, "x: %i, y: %i", touchpad_x[0], touchpad_y[0]);
last_touch_x = touchpad_x[0];
last_touch_y = touchpad_y[0];
last_touch_x = float(touchpad_x[0]) / scale_factor;
last_touch_y = float(touchpad_y[0]) / scale_factor;
m_window->window().dispatch_pointer_move_event(
slint::LogicalPosition({ float(last_touch_x), float(last_touch_y) }));
slint::LogicalPosition({ last_touch_x, last_touch_y }));
if (!touch_down) {
m_window->window().dispatch_pointer_press_event(
slint::LogicalPosition(
{ float(last_touch_x), float(last_touch_y) }),
slint::LogicalPosition({ last_touch_x, last_touch_y }),
slint::PointerEventButton::Left);
}
touch_down = true;
} else if (touch_down) {
m_window->window().dispatch_pointer_release_event(
slint::LogicalPosition({ float(last_touch_x), float(last_touch_y) }),
slint::LogicalPosition({ last_touch_x, last_touch_y }),
slint::PointerEventButton::Left);
m_window->window().dispatch_pointer_exit_event();
touch_down = false;
Expand Down
8 changes: 8 additions & 0 deletions api/cpp/platform.rs
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,14 @@ pub unsafe extern "C" fn slint_window_adapter_new(
set_position,
});

if let Some(scale_factor) =
option_env!("SLINT_SCALE_FACTOR").and_then(|x| x.parse::<f32>().ok()).filter(|f| *f > 0.)
{
window.window().dispatch_event(i_slint_core::platform::WindowEvent::ScaleFactorChanged {
scale_factor,
});
}

core::ptr::write(target as *mut Rc<dyn WindowAdapter>, window);
}

Expand Down

0 comments on commit e12870e

Please sign in to comment.