URI: 
       Implemented keyboard movement for movement tool. - icy_draw - icy_draw is the successor to mystic draw. fork / mirror
  HTML git clone https://git.drkhsh.at/icy_draw.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 6627eea322a48d0153e447906b4133959c30d3d6
   DIR parent 7d1e73f50ef0cda24555aff974cd8b703cb8f98a
  HTML Author: Mike Krüger <mkrueger@posteo.de>
       Date:   Tue, 10 Oct 2023 14:57:11 +0200
       
       Implemented keyboard movement for movement tool.
       
       Fixes #37
       
       Diffstat:
         M src/model/tools/move_layer_imp.rs   |      29 ++++++++++++++++++++++++++++-
         M src/model/tools/paste_tool.rs       |      28 +++++++++++++++++++++++++++-
         M src/ui/editor/ansi/mod.rs           |       4 ++++
       
       3 files changed, 59 insertions(+), 2 deletions(-)
       ---
   DIR diff --git a/src/model/tools/move_layer_imp.rs b/src/model/tools/move_layer_imp.rs
       @@ -1,4 +1,4 @@
       -use super::{Event, Position, Tool};
       +use super::{Event, MKey, Position, Tool};
        use crate::{to_message, AnsiEditor, Message};
        use eframe::egui;
        use i18n_embed_fl::fl;
       @@ -41,6 +41,7 @@ impl Tool for MoveLayer {
        
                if let Some(layer) = editor.buffer_view.lock().get_edit_state_mut().get_cur_layer_mut() {
                    self.start_offset = layer.get_offset();
       +            self.drag_offset = self.start_offset;
                    self.drag_started = true;
                }
                Event::None
       @@ -71,6 +72,32 @@ impl Tool for MoveLayer {
                }
                to_message(editor.buffer_view.lock().get_edit_state_mut().move_layer(self.drag_offset))
            }
       +
       +    fn handle_key(&mut self, editor: &mut AnsiEditor, key: MKey, modifier: super::MModifiers) -> Event {
       +        let offset = if let Some(layer) = editor.buffer_view.lock().get_edit_state_mut().get_cur_layer_mut() {
       +            layer.get_offset()
       +        } else {
       +            return Event::None;
       +        };
       +        let i = if matches!(modifier, super::MModifiers::Shift) { 2 } else { 1 };
       +
       +        match key {
       +            MKey::Down => {
       +                let _ = editor.buffer_view.lock().get_edit_state_mut().move_layer(offset + Position::new(0, i));
       +            }
       +            MKey::Up => {
       +                let _ = editor.buffer_view.lock().get_edit_state_mut().move_layer(offset - Position::new(0, i));
       +            }
       +            MKey::Left => {
       +                let _ = editor.buffer_view.lock().get_edit_state_mut().move_layer(offset - Position::new(i, 0));
       +            }
       +            MKey::Right => {
       +                let _ = editor.buffer_view.lock().get_edit_state_mut().move_layer(offset + Position::new(i, 0));
       +            }
       +            _ => {}
       +        }
       +        Event::None
       +    }
        }
        
        pub(super) fn get_layer_offset_text(editor: &AnsiEditor) -> String {
   DIR diff --git a/src/model/tools/paste_tool.rs b/src/model/tools/paste_tool.rs
       @@ -1,4 +1,4 @@
       -use super::{move_layer_imp::get_layer_offset_text, Event, Position, Tool};
       +use super::{move_layer_imp::get_layer_offset_text, Event, MKey, Position, Tool};
        use crate::{to_message, AnsiEditor, Message};
        use eframe::egui::{self, Key};
        use i18n_embed_fl::fl;
       @@ -116,6 +116,7 @@ impl Tool for PasteTool {
        
                if let Some(layer) = editor.buffer_view.lock().get_edit_state_mut().get_cur_layer_mut() {
                    self.start_offset = layer.get_offset();
       +            self.drag_offset = self.start_offset;
                    self.drag_started = true;
                }
                Event::None
       @@ -146,4 +147,29 @@ impl Tool for PasteTool {
                }
                to_message(editor.buffer_view.lock().get_edit_state_mut().move_layer(self.drag_offset))
            }
       +
       +    fn handle_key(&mut self, editor: &mut AnsiEditor, key: MKey, modifier: super::MModifiers) -> Event {
       +        let offset = if let Some(layer) = editor.buffer_view.lock().get_edit_state_mut().get_cur_layer_mut() {
       +            layer.get_offset()
       +        } else {
       +            return Event::None;
       +        };
       +        let i = if matches!(modifier, super::MModifiers::Shift) { 2 } else { 1 };
       +        match key {
       +            MKey::Down => {
       +                let _ = editor.buffer_view.lock().get_edit_state_mut().move_layer(offset + Position::new(0, i));
       +            }
       +            MKey::Up => {
       +                let _ = editor.buffer_view.lock().get_edit_state_mut().move_layer(offset - Position::new(0, i));
       +            }
       +            MKey::Left => {
       +                let _ = editor.buffer_view.lock().get_edit_state_mut().move_layer(offset - Position::new(i, 0));
       +            }
       +            MKey::Right => {
       +                let _ = editor.buffer_view.lock().get_edit_state_mut().move_layer(offset + Position::new(i, 0));
       +            }
       +            _ => {}
       +        }
       +        Event::None
       +    }
        }
   DIR diff --git a/src/ui/editor/ansi/mod.rs b/src/ui/editor/ansi/mod.rs
       @@ -802,6 +802,10 @@ pub static EDITOR_KEY_MAP: &[(u32, MKey)] = &[
            (Key::ArrowDown as u32, MKey::Down),
            (Key::ArrowRight as u32, MKey::Right),
            (Key::ArrowLeft as u32, MKey::Left),
       +    (Key::ArrowUp as u32 | SHIFT_MOD, MKey::Up),
       +    (Key::ArrowDown as u32 | SHIFT_MOD, MKey::Down),
       +    (Key::ArrowRight as u32 | SHIFT_MOD, MKey::Right),
       +    (Key::ArrowLeft as u32 | SHIFT_MOD, MKey::Left),
            (Key::F1 as u32, MKey::F1),
            (Key::F2 as u32, MKey::F2),
            (Key::F3 as u32, MKey::F3),