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::thread;
|
||||||
use std::sync::mpsc;
|
use std::sync::mpsc;
|
||||||
use protocol::mojang;
|
use protocol::mojang;
|
||||||
|
use sdl2::Sdl;
|
||||||
|
use sdl2::keyboard;
|
||||||
|
|
||||||
const CL_BRAND: console::CVar<String> = console::CVar {
|
const CL_BRAND: console::CVar<String> = console::CVar {
|
||||||
ty: PhantomData,
|
ty: PhantomData,
|
||||||
|
@ -90,6 +92,8 @@ pub struct Game {
|
||||||
chunk_builder: chunk_builder::ChunkBuilder,
|
chunk_builder: chunk_builder::ChunkBuilder,
|
||||||
|
|
||||||
connect_reply: Option<mpsc::Receiver<Result<server::Server, protocol::Error>>>,
|
connect_reply: Option<mpsc::Receiver<Result<server::Server, protocol::Error>>>,
|
||||||
|
|
||||||
|
sdl: Sdl,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Game {
|
impl Game {
|
||||||
|
@ -226,10 +230,11 @@ fn main() {
|
||||||
should_close: false,
|
should_close: false,
|
||||||
chunk_builder: chunk_builder::ChunkBuilder::new(resource_manager, textures),
|
chunk_builder: chunk_builder::ChunkBuilder::new(resource_manager, textures),
|
||||||
connect_reply: None,
|
connect_reply: None,
|
||||||
|
sdl: sdl,
|
||||||
};
|
};
|
||||||
game.renderer.camera.pos = cgmath::Point3::new(0.5, 13.2, 0.5);
|
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 {
|
while !game.should_close {
|
||||||
|
|
||||||
let now = time::now();
|
let now = time::now();
|
||||||
|
@ -277,7 +282,7 @@ fn main() {
|
||||||
window.gl_swap_window();
|
window.gl_swap_window();
|
||||||
|
|
||||||
for event in events.poll_iter() {
|
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), ..} => {
|
Event::KeyDown{keycode: Some(Keycode::Backquote), ..} => {
|
||||||
game.console.lock().unwrap().toggle();
|
game.console.lock().unwrap().toggle();
|
||||||
}
|
}
|
||||||
Event::KeyDown{keycode: Some(key), ..} => {
|
Event::KeyDown{keycode: Some(key), keymod, ..} => {
|
||||||
if game.focused {
|
if game.focused {
|
||||||
if let Some(steven_key) = settings::Stevenkey::get_by_keycode(key, &game.vars) {
|
if let Some(steven_key) = settings::Stevenkey::get_by_keycode(key, &game.vars) {
|
||||||
game.server.key_press(true, steven_key);
|
game.server.key_press(true, steven_key);
|
||||||
}
|
}
|
||||||
} else {
|
} 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 game.focused {
|
||||||
if let Some(steven_key) = settings::Stevenkey::get_by_keycode(key, &game.vars) {
|
if let Some(steven_key) = settings::Stevenkey::get_by_keycode(key, &game.vars) {
|
||||||
game.server.key_press(false, steven_key);
|
game.server.key_press(false, steven_key);
|
||||||
}
|
}
|
||||||
} else {
|
} 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, ..} => {
|
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 {
|
match *self {
|
||||||
$(
|
$(
|
||||||
Element::$name(ref inner) => {
|
Element::$name(ref inner) => {
|
||||||
let mut el = inner.borrow_mut();
|
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);
|
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 key == Keycode::Tab {
|
||||||
if !down {
|
if !down {
|
||||||
self.cycle_focus();
|
self.cycle_focus();
|
||||||
|
@ -405,7 +405,7 @@ impl Container {
|
||||||
for el in self.focusable_elements.iter()
|
for el in self.focusable_elements.iter()
|
||||||
.flat_map(|v| v.upgrade()) {
|
.flat_map(|v| v.upgrade()) {
|
||||||
if el.is_focused() {
|
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 get_size(&self) -> (f64, f64);
|
||||||
fn is_dirty(&self) -> bool;
|
fn is_dirty(&self) -> bool;
|
||||||
fn post_init(_: Rc<RefCell<Self>>) {}
|
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 key_type(&mut self, _game: &mut ::Game, _c: char) {}
|
||||||
fn tick(&mut self, renderer: &mut render::Renderer);
|
fn tick(&mut self, renderer: &mut render::Renderer);
|
||||||
}
|
}
|
||||||
|
@ -1309,7 +1309,7 @@ impl TextBoxBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl UIElement for TextBox {
|
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) {
|
match (key, down) {
|
||||||
(Keycode::Backspace, false) => {self.input.pop();},
|
(Keycode::Backspace, false) => {self.input.pop();},
|
||||||
(Keycode::Return, false) => {
|
(Keycode::Return, false) => {
|
||||||
|
@ -1321,6 +1321,15 @@ impl UIElement for TextBox {
|
||||||
}
|
}
|
||||||
self.submit_funcs.append(&mut temp);
|
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