Touch input device #27

Open
rafaelcaricio wants to merge 15 commits from indev into master
Showing only changes of commit 30c5d87bb3 - Show all commits

View file

@ -1,14 +1,15 @@
use core::cell::Cell;
use cstr_core::CString; use cstr_core::CString;
use embedded_graphics::pixelcolor::Rgb565; use embedded_graphics::pixelcolor::Rgb565;
use embedded_graphics::prelude::*; use embedded_graphics::prelude::*;
use embedded_graphics_simulator::{ use embedded_graphics_simulator::{
OutputSettingsBuilder, SimulatorDisplay, SimulatorEvent, Window, OutputSettingsBuilder, SimulatorDisplay, SimulatorEvent, Window,
}; };
use lvgl::input_device::{BufferStatus, InputData, Pointer}; use lvgl::input_device::{BufferStatus, InputData, Pointer};
use lvgl::style::Style; use lvgl::style::Style;
use lvgl::widgets::{Btn, Label}; use lvgl::widgets::{Btn, Label};
use lvgl::{self, Align, Color, LvError, Part, State, Widget, UI}; use lvgl::{self, Align, Color, LvError, Part, State, Widget, UI};
use std::thread::sleep; use std::thread::sleep;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
@ -25,11 +26,10 @@ fn main() -> Result<(), LvError> {
ui.disp_drv_register(display)?; ui.disp_drv_register(display)?;
// Define the initial state of your input // Define the initial state of your input
let latest_touch_status: Cell<BufferStatus> = let mut latest_touch_status = InputData::Touch(Point::new(0, 0)).released().once();
Cell::new(InputData::Touch(Point::new(0, 0)).released().once());
// Register a new input device that's capable of reading the current state of the input // Register a new input device that's capable of reading the current state of the input
let mut touch_screen = Pointer::new(|| latest_touch_status.get()); let mut touch_screen = Pointer::new(|| latest_touch_status);
ui.indev_drv_register(&mut touch_screen)?; ui.indev_drv_register(&mut touch_screen)?;
// Create screen and widgets // Create screen and widgets
@ -71,11 +71,9 @@ fn main() -> Result<(), LvError> {
let mut events = window.events().peekable(); let mut events = window.events().peekable();
if events.peek().is_none() { if events.peek().is_none() {
latest_touch_status.replace( latest_touch_status = InputData::Touch(latest_touch_point.clone())
InputData::Touch(latest_touch_point.clone())
.released() .released()
.once(), .once();
);
} }
for event in events { for event in events {
@ -87,7 +85,7 @@ fn main() -> Result<(), LvError> {
println!("Clicked on: {:?}", point); println!("Clicked on: {:?}", point);
// Send a event to the button directly // Send a event to the button directly
latest_touch_point = point.clone(); latest_touch_point = point.clone();
latest_touch_status.replace(InputData::Touch(point).pressed().once()); latest_touch_status = InputData::Touch(point).pressed().once();
} }
SimulatorEvent::Quit => break 'running, SimulatorEvent::Quit => break 'running,
_ => {} _ => {}