Enable paste in textboxes
This commit is contained in:
parent
6e33c3cc36
commit
8d95965d40
19
src/main.rs
19
src/main.rs
|
@ -66,6 +66,8 @@ use std::marker::PhantomData;
|
|||
use std::thread;
|
||||
use std::sync::mpsc;
|
||||
use protocol::mojang;
|
||||
use sdl2::Sdl;
|
||||
use sdl2::keyboard;
|
||||
|
||||
const CL_BRAND: console::CVar<String> = console::CVar {
|
||||
ty: PhantomData,
|
||||
|
@ -90,6 +92,8 @@ pub struct Game {
|
|||
chunk_builder: chunk_builder::ChunkBuilder,
|
||||
|
||||
connect_reply: Option<mpsc::Receiver<Result<server::Server, protocol::Error>>>,
|
||||
|
||||
sdl: Sdl,
|
||||
}
|
||||
|
||||
impl Game {
|
||||
|
@ -226,10 +230,11 @@ fn main() {
|
|||
should_close: false,
|
||||
chunk_builder: chunk_builder::ChunkBuilder::new(resource_manager, textures),
|
||||
connect_reply: None,
|
||||
sdl: sdl,
|
||||
};
|
||||
game.renderer.camera.pos = cgmath::Point3::new(0.5, 13.2, 0.5);
|
||||
|
||||
let mut events = sdl.event_pump().unwrap();
|
||||
let mut events = game.sdl.event_pump().unwrap();
|
||||
while !game.should_close {
|
||||
|
||||
let now = time::now();
|
||||
|
@ -277,7 +282,7 @@ fn main() {
|
|||
window.gl_swap_window();
|
||||
|
||||
for event in events.poll_iter() {
|
||||
handle_window_event(&window, &mut game, &mut ui_container, event)
|
||||
handle_window_event(&window, &mut game, &mut ui_container, event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -361,22 +366,24 @@ fn handle_window_event(window: &sdl2::video::Window,
|
|||
Event::KeyDown{keycode: Some(Keycode::Backquote), ..} => {
|
||||
game.console.lock().unwrap().toggle();
|
||||
}
|
||||
Event::KeyDown{keycode: Some(key), ..} => {
|
||||
Event::KeyDown{keycode: Some(key), keymod, ..} => {
|
||||
if game.focused {
|
||||
if let Some(steven_key) = settings::Stevenkey::get_by_keycode(key, &game.vars) {
|
||||
game.server.key_press(true, steven_key);
|
||||
}
|
||||
} else {
|
||||
ui_container.key_press(game, key, true);
|
||||
let ctrl_pressed = keymod.intersects(keyboard::LCTRLMOD | keyboard::RCTRLMOD);
|
||||
ui_container.key_press(game, key, true, ctrl_pressed);
|
||||
}
|
||||
}
|
||||
Event::KeyUp{keycode: Some(key), ..} => {
|
||||
Event::KeyUp{keycode: Some(key), keymod, ..} => {
|
||||
if game.focused {
|
||||
if let Some(steven_key) = settings::Stevenkey::get_by_keycode(key, &game.vars) {
|
||||
game.server.key_press(false, steven_key);
|
||||
}
|
||||
} else {
|
||||
ui_container.key_press(game, key, false);
|
||||
let ctrl_pressed = keymod.intersects(keyboard::LCTRLMOD | keyboard::RCTRLMOD);
|
||||
ui_container.key_press(game, key, false, ctrl_pressed);
|
||||
}
|
||||
}
|
||||
Event::TextInput{text, ..} => {
|
||||
|
|
|
@ -183,12 +183,12 @@ macro_rules! define_elements {
|
|||
}
|
||||
}
|
||||
|
||||
fn key_press(&self, game: &mut ::Game, key: Keycode, down: bool) {
|
||||
fn key_press(&self, game: &mut ::Game, key: Keycode, down: bool, ctrl_pressed: bool) {
|
||||
match *self {
|
||||
$(
|
||||
Element::$name(ref inner) => {
|
||||
let mut el = inner.borrow_mut();
|
||||
el.key_press(game, key, down);
|
||||
el.key_press(game, key, down, ctrl_pressed);
|
||||
},
|
||||
)*
|
||||
}
|
||||
|
@ -395,7 +395,7 @@ impl Container {
|
|||
focusables[next_focus].set_focused(true);
|
||||
}
|
||||
|
||||
pub fn key_press(&mut self, game: &mut ::Game, key: Keycode, down: bool) {
|
||||
pub fn key_press(&mut self, game: &mut ::Game, key: Keycode, down: bool, ctrl_pressed: bool) {
|
||||
if key == Keycode::Tab {
|
||||
if !down {
|
||||
self.cycle_focus();
|
||||
|
@ -405,7 +405,7 @@ impl Container {
|
|||
for el in self.focusable_elements.iter()
|
||||
.flat_map(|v| v.upgrade()) {
|
||||
if el.is_focused() {
|
||||
el.key_press(game, key, down);
|
||||
el.key_press(game, key, down, ctrl_pressed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -465,7 +465,7 @@ trait UIElement {
|
|||
fn get_size(&self) -> (f64, f64);
|
||||
fn is_dirty(&self) -> bool;
|
||||
fn post_init(_: Rc<RefCell<Self>>) {}
|
||||
fn key_press(&mut self, _game: &mut ::Game, _key: Keycode, _down: bool) {}
|
||||
fn key_press(&mut self, _game: &mut ::Game, _key: Keycode, _down: bool, _ctrl_pressed: bool) {}
|
||||
fn key_type(&mut self, _game: &mut ::Game, _c: char) {}
|
||||
fn tick(&mut self, renderer: &mut render::Renderer);
|
||||
}
|
||||
|
@ -1309,7 +1309,7 @@ impl TextBoxBuilder {
|
|||
}
|
||||
|
||||
impl UIElement for TextBox {
|
||||
fn key_press(&mut self, game: &mut ::Game, key: Keycode, down: bool) {
|
||||
fn key_press(&mut self, game: &mut ::Game, key: Keycode, down: bool, ctrl_pressed: bool) {
|
||||
match (key, down) {
|
||||
(Keycode::Backspace, false) => {self.input.pop();},
|
||||
(Keycode::Return, false) => {
|
||||
|
@ -1321,6 +1321,15 @@ impl UIElement for TextBox {
|
|||
}
|
||||
self.submit_funcs.append(&mut temp);
|
||||
},
|
||||
(Keycode::V, true) => {
|
||||
if ctrl_pressed {
|
||||
let clipboard = game.sdl.video().unwrap().clipboard();
|
||||
if clipboard.has_clipboard_text() {
|
||||
let text = clipboard.clipboard_text().unwrap();
|
||||
self.input.push_str(&text);
|
||||
}
|
||||
}
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue