Skip to content

Commit

Permalink
Refactor expand Ctrl a behavior.
Browse files Browse the repository at this point in the history
  • Loading branch information
FloVanGH committed Mar 10, 2020
1 parent eae5d77 commit 7c5076a
Show file tree
Hide file tree
Showing 10 changed files with 188 additions and 127 deletions.
5 changes: 4 additions & 1 deletion crates/api/src/event/focus.rs
@@ -1,6 +1,9 @@
use dces::prelude::Entity;

use crate::{prelude::*, proc_macros::{Event, IntoHandler}};
use crate::{
prelude::*,
proc_macros::{Event, IntoHandler},
};

/// Used to request keyboard focus on the window.
#[derive(Event, Clone)]
Expand Down
2 changes: 1 addition & 1 deletion crates/api/src/event/key.rs
@@ -1,8 +1,8 @@
use std::rc::Rc;

use crate::{
proc_macros::IntoHandler,
prelude::*,
proc_macros::IntoHandler,
shell::{Key, KeyEvent},
};

Expand Down
7 changes: 6 additions & 1 deletion crates/api/src/event/mouse.rs
@@ -1,6 +1,11 @@
use std::rc::Rc;

use crate::{prelude::*, proc_macros::{Event, IntoHandler}, shell::MouseButton, utils::*};
use crate::{
prelude::*,
proc_macros::{Event, IntoHandler},
shell::MouseButton,
utils::*,
};

/// Checks if the given point is inside of a widget.
pub fn check_mouse_condition(mouse_position: Point, widget: &WidgetContainer<'_>) -> bool {
Expand Down
2 changes: 1 addition & 1 deletion crates/api/src/layout/text_selection.rs
Expand Up @@ -115,7 +115,7 @@ impl Layout for TextSelectionLayout {

let vertical_alignment: Alignment = component(ecm, entity, "vertical_alignment");
let margin: Thickness = *ecm.component_store().get("margin", entity).unwrap();
let width = component::<Constraint>(ecm, entity, "constraint").width();
let width = component::<Constraint>(ecm, entity, "constraint").width();

{
let mut widget = WidgetContainer::new(entity, ecm, &theme);
Expand Down
2 changes: 1 addition & 1 deletion crates/api/src/properties/widget/text_selection.rs
Expand Up @@ -15,7 +15,7 @@ impl From<(usize, usize)> for TextSelection {
}

#[cfg(test)]
mod tests {
mod tests {
use super::*;

#[test]
Expand Down
2 changes: 1 addition & 1 deletion crates/proc-macros/src/lib.rs
Expand Up @@ -62,7 +62,7 @@ pub fn derive_event(input: TokenStream) -> TokenStream {
}

#[proc_macro_derive(IntoHandler)]
pub fn derive_into_handler(input: TokenStream) -> TokenStream {
pub fn derive_into_handler(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);

let ident = &input.ident;
Expand Down
116 changes: 79 additions & 37 deletions crates/shell/src/minifb/mod.rs
Expand Up @@ -19,34 +19,45 @@ use crate::{prelude::*, render::*, utils::*};

pub fn initialize() {}

fn key_event_helper<A>(key: &mut KeyHelper, adapter: &mut A, window: &minifb::Window)
fn key_event_helper_down<A>(key: &mut KeyHelper, adapter: &mut A, window: &minifb::Window)
where
A: WindowAdapter,
{
// if window.is_key_pressed(key.1, minifb::KeyRepeat::No) {
// println!("Down {:?}, {:?}", key.1, key.2);
// adapter.key_event(KeyEvent {
// key: key.2,
// state: ButtonState::Down,
// text: String::new(),
// });
// }

// if window.is_key_released(key.1) {
// println!("Up {:?}, {:?}", key.1, key.2);
// adapter.key_event(KeyEvent {
// key: key.2,
// state: ButtonState::Up,
// text: String::new(),
// });
// }
let key_repeat = match key.1 {
minifb::Key::Left
| minifb::Key::Right
| minifb::Key::Up
| minifb::Key::Down
| minifb::Key::Backspace
| minifb::Key::Delete => minifb::KeyRepeat::Yes,
_ => minifb::KeyRepeat::No,
};

if window.is_key_pressed(key.1, key_repeat) {
adapter.key_event(KeyEvent {
key: key.2,
state: ButtonState::Down,
text: String::default(),
});
}
}

fn key_event_helper_up<A>(key: &mut KeyHelper, adapter: &mut A, window: &minifb::Window)
where
A: WindowAdapter,
{
if window.is_key_released(key.1) {
adapter.key_event(KeyEvent {
key: key.2,
state: ButtonState::Up,
text: String::default(),
});
}
}

fn unicode_to_key_event(uni_char: u32) -> Option<KeyEvent> {
let mut text = String::new();

println!("char {}", text);

let key = if let Some(character) = char::from_u32(uni_char) {
text = character.to_string();
Key::from(character)
Expand All @@ -68,8 +79,6 @@ fn unicode_to_key_event(uni_char: u32) -> Option<KeyEvent> {
return None;
}



Some(KeyEvent {
key,
state: ButtonState::Down,
Expand Down Expand Up @@ -119,6 +128,10 @@ where
key_alt_r: KeyHelper,
key_escape: KeyHelper,
key_home: KeyHelper,
key_a: KeyHelper,
key_c: KeyHelper,
key_v: KeyHelper,
key_x: KeyHelper,
update: bool,
running: bool,
active: bool,
Expand Down Expand Up @@ -176,6 +189,10 @@ where
key_alt_r: KeyHelper(false, minifb::Key::RightAlt, Key::Alt),
key_escape: KeyHelper(false, minifb::Key::Escape, Key::Escape),
key_home: KeyHelper(false, minifb::Key::Home, Key::Home),
key_a: KeyHelper(false, minifb::Key::A, Key::A(false)),
key_c: KeyHelper(false, minifb::Key::C, Key::C(false)),
key_v: KeyHelper(false, minifb::Key::V, Key::V(false)),
key_x: KeyHelper(false, minifb::Key::X, Key::X(false)),
running: true,
update: true,
active: false,
Expand Down Expand Up @@ -281,21 +298,46 @@ where
self.adapter.key_event(event);
}

key_event_helper(&mut self.key_backspace, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_delete, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_left, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_right, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_up, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_down, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_enter, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_control, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_control_right, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_shift_l, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_shift_r, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_alt, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_alt_r, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_escape, &mut self.adapter, &self.window);
key_event_helper(&mut self.key_home, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_backspace, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_delete, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_left, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_right, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_up, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_down, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_enter, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_control, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_control_right, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_shift_l, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_shift_r, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_alt, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_alt_r, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_escape, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_home, &mut self.adapter, &self.window);

key_event_helper_up(&mut self.key_backspace, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_delete, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_left, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_right, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_up, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_down, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_enter, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_control, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_control_right, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_shift_l, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_shift_r, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_alt, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_alt_r, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_escape, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_home, &mut self.adapter, &self.window);

key_event_helper_down(&mut self.key_a, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_c, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_v, &mut self.adapter, &self.window);
key_event_helper_down(&mut self.key_x, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_a, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_c, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_v, &mut self.adapter, &self.window);
key_event_helper_up(&mut self.key_x, &mut self.adapter, &self.window);

// resize
if self.window_size != self.window.get_size() {
Expand Down
2 changes: 1 addition & 1 deletion crates/shell/src/web/mod.rs
Expand Up @@ -197,7 +197,7 @@ where
});
}

while let Some(event) = self.touch_end_events.borrow_mut().pop() {
while let Some(event) = self.touch_end_events.borrow_mut().pop() {
self.adapter.mouse_event(MouseEvent {
x: event.changed_touches()[0].client_x() as f64,
y: event.changed_touches()[0].client_y() as f64,
Expand Down
6 changes: 2 additions & 4 deletions crates/widgets/src/behaviors/focus_behavior.rs
Expand Up @@ -20,11 +20,9 @@ impl State for FocusBehaviorState {
return;
}

let target: Entity = (*ctx.widget().get::<u32>("target")).into();
let target: Entity = (*ctx.widget().get::<u32>("target")).into();

ctx.push_event_by_window(FocusEvent::RequestFocus(
target
));
ctx.push_event_by_window(FocusEvent::RequestFocus(target));

self.request_focus.set(false);
}
Expand Down

0 comments on commit 7c5076a

Please sign in to comment.