forked from michael/leanshot
cargo clippy + cargo fmt
This commit is contained in:
parent
f6a1d572f5
commit
15220bed4b
8 changed files with 601 additions and 558 deletions
996
Cargo.lock
generated
996
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "leanshot"
|
||||
description = "Screenshot capture for Linux."
|
||||
version = "0.3.3"
|
||||
version = "0.4.0"
|
||||
repository = "https://github.com/iptq/leanshot"
|
||||
license-file = "LICENSE"
|
||||
authors = ["Michael Zhang <failed.down@gmail.com>"]
|
||||
|
@ -14,7 +14,7 @@ failure = "0.1"
|
|||
gl = "0.11"
|
||||
glutin = "0.19"
|
||||
imlib2 = { version = "0.1", path = "./imlib2" }
|
||||
leanshot_xlib = { version = "0.1", path = "./xlib" }
|
||||
leanshot_xlib = { version = "0.2", path = "./xlib" }
|
||||
nanovg = { version = "1.0.2", features = ["gl3"] }
|
||||
png = "0.14"
|
||||
structopt = "0.2"
|
||||
|
|
|
@ -8,4 +8,4 @@ authors = ["Michael Zhang <failed.down@gmail.com>"]
|
|||
[dependencies]
|
||||
failure = "0.1"
|
||||
imlib2-sys = { version = "0.1", path = "imlib2-sys" }
|
||||
leanshot_xlib = { version = "0.1", path = "../xlib" }
|
||||
leanshot_xlib = { version = "0.2", path = "../xlib" }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
use crate::errors::ScreenshotError;
|
||||
|
||||
use crate::gui::GUI;
|
||||
use imlib2;
|
||||
use crate::options::{Options, Region};
|
||||
use imlib2;
|
||||
|
||||
/// The main capture routine.
|
||||
pub fn capture(opt: &Options) -> Result<(), ScreenshotError> {
|
||||
|
|
149
src/gui.rs
149
src/gui.rs
|
@ -1,5 +1,5 @@
|
|||
use imlib2::{self, Image as Image2};
|
||||
use crate::xlib::{Display, Visual, Window};
|
||||
use imlib2::{self, Image as Image2};
|
||||
|
||||
use crate::errors::ScreenshotError;
|
||||
use crate::Options;
|
||||
|
@ -24,7 +24,6 @@ impl GUI {
|
|||
let root = attr.get_root();
|
||||
let (x, y, _) = self.display.translate_coordinates(window, 0, 0, root)?;
|
||||
|
||||
|
||||
imlib2::context_set_display(&self.display);
|
||||
let visual = Visual::default(&self.display, 0);
|
||||
imlib2::context_set_visual(&visual);
|
||||
|
@ -80,17 +79,14 @@ impl GUI {
|
|||
// }
|
||||
// }
|
||||
|
||||
use gl;
|
||||
use glutin::{
|
||||
self,
|
||||
dpi::{PhysicalPosition, PhysicalSize},
|
||||
os::unix::{WindowBuilderExt, WindowExt, XWindowType},
|
||||
ElementState, Event, EventsLoop, GlContext, GlWindow, KeyboardInput, MouseButton,
|
||||
MouseCursor, VirtualKeyCode, WindowBuilder, WindowEvent,
|
||||
};
|
||||
use nanovg::{self, Image, ImagePattern, PathOptions, StrokeOptions};
|
||||
use nanovg::{Image, ImagePattern, PathOptions, StrokeOptions};
|
||||
use std::{f32::consts, mem, slice};
|
||||
use x11;
|
||||
|
||||
// let attr = window.get_attributes()?;
|
||||
// let width = attr.get_width();
|
||||
|
@ -249,81 +245,82 @@ impl GUI {
|
|||
});
|
||||
}
|
||||
|
||||
evl.poll_events(|event| match event {
|
||||
Event::WindowEvent { event, .. } => match event {
|
||||
WindowEvent::Destroyed => running = false,
|
||||
WindowEvent::KeyboardInput {
|
||||
input:
|
||||
KeyboardInput {
|
||||
virtual_keycode,
|
||||
state,
|
||||
..
|
||||
},
|
||||
..
|
||||
} => match (virtual_keycode, state) {
|
||||
(Some(VirtualKeyCode::Escape), ElementState::Released) => {
|
||||
evl.poll_events(|event| {
|
||||
if let Event::WindowEvent { event, .. } = event {
|
||||
match event {
|
||||
WindowEvent::Destroyed => running = false,
|
||||
WindowEvent::KeyboardInput {
|
||||
input:
|
||||
KeyboardInput {
|
||||
virtual_keycode,
|
||||
state,
|
||||
..
|
||||
},
|
||||
..
|
||||
} => {
|
||||
if let (Some(VirtualKeyCode::Escape), ElementState::Released) =
|
||||
(virtual_keycode, state)
|
||||
{
|
||||
if down {
|
||||
down = false;
|
||||
rectw = 0.0;
|
||||
recth = 0.0;
|
||||
} else {
|
||||
unsafe {
|
||||
x11::xlib::XDestroyWindow(
|
||||
self.display.as_raw(),
|
||||
win.get_xlib_window().unwrap(),
|
||||
)
|
||||
};
|
||||
running = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
WindowEvent::CursorMoved { position, .. } => {
|
||||
mx = position.x;
|
||||
my = position.y;
|
||||
if down {
|
||||
down = false;
|
||||
rectw = 0.0;
|
||||
recth = 0.0;
|
||||
} else {
|
||||
unsafe {
|
||||
x11::xlib::XDestroyWindow(
|
||||
self.display.as_raw(),
|
||||
win.get_xlib_window().unwrap(),
|
||||
)
|
||||
};
|
||||
running = false;
|
||||
if delayed_down {
|
||||
dx = mx;
|
||||
dy = my;
|
||||
delayed_down = false;
|
||||
} else {
|
||||
redraw = true;
|
||||
}
|
||||
rectw = mx - dx;
|
||||
recth = my - dy;
|
||||
}
|
||||
}
|
||||
WindowEvent::MouseInput { button, state, .. } => {
|
||||
if let MouseButton::Left = button {
|
||||
down = match state {
|
||||
ElementState::Pressed => {
|
||||
delayed_down = true;
|
||||
if mx < 0.0 || my < 0.0 {
|
||||
} else {
|
||||
dx = mx;
|
||||
dy = my;
|
||||
}
|
||||
true
|
||||
}
|
||||
ElementState::Released => {
|
||||
if down && rectw.abs() > 0.0 && recth.abs() > 0.0 {
|
||||
unsafe {
|
||||
x11::xlib::XDestroyWindow(
|
||||
self.display.as_raw(),
|
||||
win.get_xlib_window().unwrap(),
|
||||
)
|
||||
};
|
||||
running = false;
|
||||
}
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => (),
|
||||
},
|
||||
WindowEvent::CursorMoved { position, .. } => {
|
||||
mx = position.x;
|
||||
my = position.y;
|
||||
if down {
|
||||
if delayed_down {
|
||||
dx = mx;
|
||||
dy = my;
|
||||
delayed_down = false;
|
||||
} else {
|
||||
redraw = true;
|
||||
}
|
||||
rectw = mx - dx;
|
||||
recth = my - dy;
|
||||
}
|
||||
}
|
||||
WindowEvent::MouseInput { button, state, .. } => match button {
|
||||
MouseButton::Left => {
|
||||
down = match state {
|
||||
ElementState::Pressed => {
|
||||
delayed_down = true;
|
||||
if mx < 0.0 || my < 0.0 {
|
||||
} else {
|
||||
dx = mx;
|
||||
dy = my;
|
||||
}
|
||||
true
|
||||
}
|
||||
ElementState::Released => {
|
||||
if down && rectw.abs() > 0.0 && recth.abs() > 0.0 {
|
||||
unsafe {
|
||||
x11::xlib::XDestroyWindow(
|
||||
self.display.as_raw(),
|
||||
win.get_xlib_window().unwrap(),
|
||||
)
|
||||
};
|
||||
running = false;
|
||||
}
|
||||
false
|
||||
}
|
||||
};
|
||||
}
|
||||
_ => (),
|
||||
},
|
||||
_ => (),
|
||||
},
|
||||
_ => (),
|
||||
}
|
||||
});
|
||||
win.swap_buffers().expect("couldn't swap buffers");
|
||||
}
|
||||
|
|
|
@ -21,8 +21,8 @@ mod gui;
|
|||
mod options;
|
||||
|
||||
use crate::errors::ScreenshotError;
|
||||
use structopt::StructOpt;
|
||||
use crate::xlib::Rectangle;
|
||||
use structopt::StructOpt;
|
||||
|
||||
pub use crate::capture::capture;
|
||||
pub use crate::options::{Options, Region};
|
||||
|
|
|
@ -10,7 +10,7 @@ pub enum Region {
|
|||
Selection,
|
||||
}
|
||||
|
||||
/// Optiosn for screenshot
|
||||
/// Options for screenshot
|
||||
#[derive(StructOpt)]
|
||||
pub struct Options {
|
||||
/// The region to select (fullscreen | window | select)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "leanshot_xlib"
|
||||
version = "0.1.1"
|
||||
version = "0.2.0"
|
||||
description = "xlib bindings"
|
||||
license-file = "../LICENSE"
|
||||
authors = ["Michael Zhang <failed.down@gmail.com>"]
|
||||
|
|
Loading…
Reference in a new issue