# HG changeset patch # User Emmanuel Gil Peyrot # Date 1602252299 -7200 # Node ID 39f87ef69b2a08d7348c18494ddfe206f933a2b5 # Parent 6dbe2bbeef707f8da1be5effc8bfd4286463c099 Add support for selecting tools. diff --git a/src/main.rs b/src/main.rs --- a/src/main.rs +++ b/src/main.rs @@ -179,12 +179,16 @@ fn input_axis_new(code: AbsoluteAxis, va input_event_new(EventKind::Absolute, code as u16, value) } +fn input_key_new(code: Key, value: i32) -> input_event { + input_event_new(EventKind::Key, code as u16, value) +} + fn input_misc_new(code: MiscKind, value: i32) -> input_event { - input_event_new(EventKind::Absolute, code as u16, value) + input_event_new(EventKind::Misc, code as u16, value) } fn input_synchronize_new(code: SynchronizeKind, value: i32) -> input_event { - input_event_new(EventKind::Absolute, code as u16, value) + input_event_new(EventKind::Synchronize, code as u16, value) } fn build_ui(application: >k::Application) { @@ -219,7 +223,7 @@ fn build_ui(application: >k::Applicati let hbox = gtk::Box::new(gtk::Orientation::Horizontal, 0); let tools_box = gtk::Box::new(gtk::Orientation::Vertical, 0); - let tool_name = Arc::new(Mutex::new(String::from("Pen"))); + let current_tool = Arc::new(Mutex::new(Key::ButtonToolPen)); let tool1 = gtk::Button::with_label("Pen"); let tool2 = gtk::Button::with_label("Rubber"); let tool3 = gtk::Button::with_label("Brush"); @@ -228,11 +232,18 @@ fn build_ui(application: >k::Applicati macro_rules! impl_tool_signal { ($tool:ident) => { - let tool_name_weak = Arc::downgrade(&tool_name); + let current_tool_weak = Arc::downgrade(¤t_tool); $tool.connect_clicked(move |b| { - let tool_name = tool_name_weak.upgrade().unwrap(); - let mut tool_name = tool_name.lock().unwrap(); - *tool_name = b.get_label().unwrap().to_string(); + let current_tool = current_tool_weak.upgrade().unwrap(); + let mut current_tool = current_tool.lock().unwrap(); + *current_tool = match b.get_label().unwrap().as_str() { + "Pen" => Key::ButtonToolPen, + "Rubber" => Key::ButtonToolRubber, + "Brush" => Key::ButtonToolBrush, + "Pencil" => Key::ButtonToolPencil, + "Airbrush" => Key::ButtonToolAirbrush, + _ => unreachable!(), + }; }); }; }; @@ -270,6 +281,7 @@ fn build_ui(application: >k::Applicati }); let dev_weak = Arc::downgrade(&dev); let current_size_weak = Arc::downgrade(¤t_size); + let current_tool_weak = Arc::downgrade(¤t_tool); let pressed_weak = Arc::downgrade(&pressed); drawing_area.connect_button_press_event(move |_, event| { if event.get_button() != 1 { @@ -277,11 +289,12 @@ fn build_ui(application: >k::Applicati } let dev = dev_weak.upgrade().unwrap(); + let current_tool = current_tool_weak.upgrade().unwrap(); let pressed = pressed_weak.upgrade().unwrap(); let mut pressed = pressed.lock().unwrap(); *pressed = true; let (x, y) = event.get_position(); - println!("press tool {} at {}, {}", tool_name.lock().unwrap(), x, y); + //println!("press tool {} at {}, {}", current_tool.lock().unwrap(), x, y); let current_size = current_size_weak.upgrade().unwrap(); let current_size = current_size.lock().unwrap(); let (width, height) = *current_size; @@ -295,6 +308,7 @@ fn build_ui(application: >k::Applicati input_axis_new(AbsoluteAxis::TiltX, 16), input_axis_new(AbsoluteAxis::TiltY, 0), input_misc_new(MiscKind::Serial, 0), + input_key_new(*current_tool.lock().unwrap(), 0), input_synchronize_new(SynchronizeKind::Report, 0), ]) .unwrap(); @@ -302,6 +316,7 @@ fn build_ui(application: >k::Applicati }); let dev_weak = Arc::downgrade(&dev); let current_size_weak = Arc::downgrade(¤t_size); + let current_tool_weak = Arc::downgrade(¤t_tool); let pressed_weak = Arc::downgrade(&pressed); drawing_area.connect_button_release_event(move |_, event| { if event.get_button() != 1 { @@ -309,6 +324,7 @@ fn build_ui(application: >k::Applicati } let dev = dev_weak.upgrade().unwrap(); + let current_tool = current_tool_weak.upgrade().unwrap(); let (x, y) = event.get_position(); let pressed = pressed_weak.upgrade().unwrap(); let mut pressed = pressed.lock().unwrap(); @@ -327,6 +343,7 @@ fn build_ui(application: >k::Applicati input_axis_new(AbsoluteAxis::TiltX, 16), input_axis_new(AbsoluteAxis::TiltY, 0), input_misc_new(MiscKind::Serial, 0), + input_key_new(*current_tool.lock().unwrap(), 0), input_synchronize_new(SynchronizeKind::Report, 0), ]) .unwrap(); @@ -348,6 +365,7 @@ fn build_ui(application: >k::Applicati input_axis_new(AbsoluteAxis::TiltX, 16), input_axis_new(AbsoluteAxis::TiltY, 0), input_misc_new(MiscKind::Serial, 0), + input_key_new(*current_tool.lock().unwrap(), 0), input_synchronize_new(SynchronizeKind::Report, 0), ]) .unwrap();