Fixing on-release event not working (https://github.com/enso-org/ide/pull/636)

Original commit: 9e0cd599b5
This commit is contained in:
Wojciech Daniło 2020-07-03 21:37:18 +02:00 committed by GitHub
parent 671d41079b
commit 82325eba1a
4 changed files with 60 additions and 55 deletions

View File

@ -243,7 +243,7 @@ impl Registry {
let mouse = &model.mouse;
frp::new_network! { network
mask <- all_with(&keyboard.key_mask,&mouse.button_mask,|k,m| ActionMask::new(k,m));
mask <- all_with(&keyboard.key_mask,&mouse.button_mask,|k,m|ActionMask::new(k,m));
nothing_pressed <- mask.map(|m| *m == default());
nothing_pressed_prev <- nothing_pressed.previous();
press <- mask.gate_not(&nothing_pressed);
@ -259,10 +259,13 @@ impl Registry {
double_press <- press.gate(&is_double_press);
eval double_press ((m) model.process_action(ActionType::DoublePress,m));
prev_mask <- all_with(&keyboard.previous_key_mask,&mouse.previous_button_mask,
|k,m| ActionMask::new(k,m));
the_same_key <- prev_mask.map2(&mask,|t,s| t == s);
release <- prev_mask.gate_not(&the_same_key);
prev_mask_on_key_up <- keyboard.key_mask.map3
(&keyboard.prev_key_mask,&mouse.button_mask,|_,k,m|ActionMask::new(k,m));
prev_mask_on_mouse_up <- mouse.button_mask.map3
(&keyboard.key_mask,&mouse.prev_button_mask,|_,k,m|ActionMask::new(k,m));
prev_mask <- any(prev_mask_on_key_up,prev_mask_on_mouse_up);
same_key <- prev_mask.map2(&mask,|t,s| t == s);
release <- prev_mask.gate_not(&same_key);
eval release ((m) model.process_action(ActionType::Release,m));
}
Self {model,network}

View File

@ -35,7 +35,8 @@ pub trait BitField {
#[derive(Clone,Default,Deref,Eq,Hash,PartialEq)]
#[allow(missing_copy_implementations)]
pub struct BitField256 {
chunks : [u128;2]
/// Raw chunks of this bit field.
pub chunks : [u128;2]
}
impl BitField256 {
@ -88,7 +89,8 @@ macro_rules! define_single_chunk_bit_field {
#[derive(Clone,Copy,Default,Deref,Eq,Hash,PartialEq)]
#[allow(missing_docs)]
pub struct $name {
raw : $raw
/// Raw implementation of the bit field.
pub raw : $raw
}
impl $name {

View File

@ -98,29 +98,29 @@ impl From<&KeyMask> for KeyMask { fn from(t:&KeyMask) -> Self {t.clone()} }
#[derive(Clone,CloneRef,Debug)]
#[allow(missing_docs)]
pub struct Keyboard {
pub network : frp::Network,
pub on_pressed : frp::Source<Key>,
pub on_released : frp::Source<Key>,
pub on_defocus : frp::Source,
pub key_mask : frp::Stream<KeyMask>,
pub previous_key_mask : frp::Stream<KeyMask>,
pub network : frp::Network,
pub on_pressed : frp::Source<Key>,
pub on_released : frp::Source<Key>,
pub on_defocus : frp::Source,
pub key_mask : frp::Stream<KeyMask>,
pub prev_key_mask : frp::Stream<KeyMask>,
}
impl Default for Keyboard {
fn default() -> Self {
frp::new_network! { keyboard
on_pressed <- source();
on_released <- source();
on_defocus <- source();
key_mask <- any_mut::<KeyMask>();
key_mask <+ on_pressed . map2(&key_mask,|key,mask| mask.with_set(key,true));
key_mask <+ on_released . map2(&key_mask,|key,mask| mask.with_set(key,false));
key_mask <+ on_defocus . map2(&key_mask,|_,_| default());
previous_key_mask <- key_mask.previous();
on_pressed <- source();
on_released <- source();
on_defocus <- source();
key_mask <- any_mut::<KeyMask>();
key_mask <+ on_pressed . map2(&key_mask,|key,mask| mask.with_set(key,true));
key_mask <+ on_released . map2(&key_mask,|key,mask| mask.with_set(key,false));
key_mask <+ on_defocus . map2(&key_mask,|_,_| default());
prev_key_mask <- key_mask.previous();
}
let network = keyboard;
let key_mask = key_mask.into();
Keyboard {network,on_pressed,on_released,on_defocus,key_mask,previous_key_mask}
Keyboard {network,on_pressed,on_released,on_defocus,key_mask,prev_key_mask}
}
}

View File

@ -134,37 +134,37 @@ impl From<&ButtonMask> for ButtonMask { fn from(t:&ButtonMask) -> Self {*t} }
#[derive(Clone,CloneRef,Debug)]
#[allow(missing_docs)]
pub struct Mouse {
pub network : frp::Network,
pub up : frp::Source<Button>,
pub down : frp::Source<Button>,
pub wheel : frp::Source,
pub up_0 : frp::Stream,
pub up_1 : frp::Stream,
pub up_2 : frp::Stream,
pub up_3 : frp::Stream,
pub up_4 : frp::Stream,
pub down_0 : frp::Stream,
pub down_1 : frp::Stream,
pub down_2 : frp::Stream,
pub down_3 : frp::Stream,
pub down_4 : frp::Stream,
pub is_up_0 : frp::Stream<bool>,
pub is_up_1 : frp::Stream<bool>,
pub is_up_2 : frp::Stream<bool>,
pub is_up_3 : frp::Stream<bool>,
pub is_up_4 : frp::Stream<bool>,
pub is_down_0 : frp::Stream<bool>,
pub is_down_1 : frp::Stream<bool>,
pub is_down_2 : frp::Stream<bool>,
pub is_down_3 : frp::Stream<bool>,
pub is_down_4 : frp::Stream<bool>,
pub position : frp::Source<Vector2<f32>>,
pub prev_position : frp::Stream<Vector2<f32>>,
pub translation : frp::Stream<Vector2<f32>>,
pub distance : frp::Stream<f32>,
pub ever_moved : frp::Stream<bool>,
pub button_mask : frp::Stream<ButtonMask>,
pub previous_button_mask : frp::Stream<ButtonMask>,
pub network : frp::Network,
pub up : frp::Source<Button>,
pub down : frp::Source<Button>,
pub wheel : frp::Source,
pub up_0 : frp::Stream,
pub up_1 : frp::Stream,
pub up_2 : frp::Stream,
pub up_3 : frp::Stream,
pub up_4 : frp::Stream,
pub down_0 : frp::Stream,
pub down_1 : frp::Stream,
pub down_2 : frp::Stream,
pub down_3 : frp::Stream,
pub down_4 : frp::Stream,
pub is_up_0 : frp::Stream<bool>,
pub is_up_1 : frp::Stream<bool>,
pub is_up_2 : frp::Stream<bool>,
pub is_up_3 : frp::Stream<bool>,
pub is_up_4 : frp::Stream<bool>,
pub is_down_0 : frp::Stream<bool>,
pub is_down_1 : frp::Stream<bool>,
pub is_down_2 : frp::Stream<bool>,
pub is_down_3 : frp::Stream<bool>,
pub is_down_4 : frp::Stream<bool>,
pub position : frp::Source<Vector2<f32>>,
pub prev_position : frp::Stream<Vector2<f32>>,
pub translation : frp::Stream<Vector2<f32>>,
pub distance : frp::Stream<f32>,
pub ever_moved : frp::Stream<bool>,
pub button_mask : frp::Stream<ButtonMask>,
pub prev_button_mask : frp::Stream<ButtonMask>,
}
impl Mouse {
@ -265,13 +265,13 @@ impl Default for Mouse {
button_mask <+ down . map2(&button_mask,|button,mask| mask.with_set(*button,true));
button_mask <+ up . map2(&button_mask,|button,mask| mask.with_set(*button,false));
previous_button_mask <- button_mask.previous();
prev_button_mask <- button_mask.previous();
};
let button_mask = button_mask.into();
Self { network,up,down,wheel,up_0,up_1,up_2,up_3,up_4,down_0,down_1,down_2,down_3,down_4
, is_down_0,is_down_1,is_down_2,is_down_3,is_down_4,is_up_0,is_up_1,is_up_2,is_up_3
, is_up_4,position,prev_position,translation,distance,ever_moved,button_mask
, previous_button_mask }
, prev_button_mask }
}
}