1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-22 22:38:08 +00:00

fix(core/ui): T3T1 always detect swipes on entire screen

[no changelog]
This commit is contained in:
Martin Milata 2024-05-16 16:16:15 +02:00
parent d6152c02e9
commit bd8ce6e55d
8 changed files with 17 additions and 21 deletions

View File

@ -51,7 +51,7 @@ where
}
}
#[cfg(all(feature = "micropython", feature = "touch"))]
#[cfg(all(feature = "micropython", feature = "touch", feature = "new_rendering"))]
impl<T, F> crate::ui::flow::Swipable for MsgMap<T, F>
where
T: Component + crate::ui::flow::Swipable,

View File

@ -24,10 +24,8 @@ impl SwipeDirection {
}
}
/// Copy of `model_tt/component/swipe.rs` but without the backlight handling.
#[derive(Clone)]
pub struct Swipe {
pub area: Rect,
pub allow_up: bool,
pub allow_down: bool,
pub allow_left: bool,
@ -42,7 +40,6 @@ impl Swipe {
pub fn new() -> Self {
Self {
area: Rect::zero(),
allow_up: false,
allow_down: false,
allow_left: false,
@ -92,8 +89,7 @@ impl Component for Swipe {
type Msg = SwipeDirection;
fn place(&mut self, bounds: Rect) -> Rect {
self.area = bounds;
self.area
bounds
}
fn event(&mut self, _ctx: &mut EventCtx, event: Event) -> Option<Self::Msg> {
@ -101,7 +97,7 @@ impl Component for Swipe {
return None;
}
match (event, self.origin) {
(Event::Touch(TouchEvent::TouchStart(pos)), _) if self.area.contains(pos) => {
(Event::Touch(TouchEvent::TouchStart(pos)), _) => {
// Mark the starting position of this touch.
self.origin.replace(pos);
}

View File

@ -142,7 +142,7 @@ impl<T: Component + Paginate + Clone> Swipable for SwipePage<T> {
}
self.transition = Some(Transition {
cloned: unwrap!(Gc::new(self.inner.clone())),
animation: Animation::new(0.0f32, 1.0f32, util::SLIDE_DURATION, Instant::now()),
animation: Animation::new(0.0f32, 1.0f32, util::SLIDE_DURATION_MS, Instant::now()),
direction,
});
self.inner.change_page(self.current);

View File

@ -67,7 +67,7 @@ impl<Q: FlowState, S: FlowStore> SwipeFlow<Q, S> {
}
self.transition = Transition::External {
prev_state: self.state,
animation: Animation::new(0.0f32, 1.0f32, util::SLIDE_DURATION, Instant::now()),
animation: Animation::new(0.0f32, 1.0f32, util::SLIDE_DURATION_MS, Instant::now()),
direction,
};
self.state = state;

View File

@ -25,7 +25,7 @@ pub trait InvLerp: Copy {
fn inv_lerp(min: Self, max: Self, value: Self) -> f32;
}
macro_rules! impl_lerp_for_int {
macro_rules! impl_lerp_for_signed {
($int: ident) => {
impl Lerp for $int {
fn lerp(a: Self, b: Self, t: f32) -> Self {
@ -41,7 +41,7 @@ macro_rules! impl_lerp_for_int {
};
}
macro_rules! impl_lerp_for_uint {
macro_rules! impl_lerp_for_unsigned {
($uint: ident) => {
impl Lerp for $uint {
fn lerp(a: Self, b: Self, t: f32) -> Self {
@ -65,13 +65,13 @@ macro_rules! impl_lerp_for_uint {
};
}
impl_lerp_for_int!(i16);
impl_lerp_for_int!(i32);
impl_lerp_for_uint!(u8);
impl_lerp_for_uint!(u16);
impl_lerp_for_uint!(u32);
impl_lerp_for_signed!(i16);
impl_lerp_for_signed!(i32);
impl_lerp_for_unsigned!(u8);
impl_lerp_for_unsigned!(u16);
impl_lerp_for_unsigned!(u32);
impl_lerp_for_int!(f32);
impl_lerp_for_signed!(f32);
#[cfg(test)]
mod tests {

View File

@ -7,7 +7,7 @@ pub mod component;
pub mod constant;
pub mod display;
pub mod event;
#[cfg(all(feature = "micropython", feature = "touch"))]
#[cfg(all(feature = "micropython", feature = "touch", feature = "new_rendering"))]
pub mod flow;
pub mod geometry;
pub mod lerp;

View File

@ -17,7 +17,7 @@ use crate::{
use heapless::{String, Vec};
const MAX_WORDS: usize = 33; // super-shamir has 33 words, all other have less
const ANIMATION_DURATION: Duration = Duration::from_millis(166);
const ANIMATION_DURATION_MS: Duration = Duration::from_millis(166);
/// Component showing mnemonic/share words during backup procedure. Model T3T1
/// contains one word per screen. A user is instructed to swipe up/down to see
@ -180,7 +180,7 @@ impl<'a> Swipable for ShareWords<'a> {
self.animation = Some(Animation::new(
0.0f32,
1.0f32,
ANIMATION_DURATION,
ANIMATION_DURATION_MS,
Instant::now(),
));
ctx.request_anim_frame();

View File

@ -180,7 +180,7 @@ macro_rules! include_icon {
};
}
pub const SLIDE_DURATION: Duration = Duration::from_millis(333);
pub const SLIDE_DURATION_MS: Duration = Duration::from_millis(333);
#[cfg(feature = "new_rendering")]
pub fn render_slide<'s, F0, F1, R>(