a
This commit is contained in:
parent
c519114a9f
commit
544b2a0652
5 changed files with 53 additions and 17 deletions
|
@ -15,6 +15,7 @@ default = ["backend-x11", "backend-x11-glx"]
|
|||
backend-x11 = ["leanshot-x11"]
|
||||
backend-x11-glx = ["backend-x11", "leanshot-x11/glx"]
|
||||
backend-xcb = ["xcb-util", "xcb"]
|
||||
backend-wayland = []
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.42"
|
||||
|
@ -31,9 +32,5 @@ leanshot-x11 = { path = "x11", optional = true }
|
|||
xcb-util = { version = "0.3.0", features = ["image", "cursor"], optional = true }
|
||||
xcb = { version = "0.9.0", optional = true }
|
||||
|
||||
[package.metadata.cargo-all-features]
|
||||
skip_feature_sets = [
|
||||
["backend-x11", "backend-xcb"],
|
||||
[],
|
||||
]
|
||||
skip_optional_dependencies = true
|
||||
# wayland
|
||||
|
||||
|
|
34
src/gui_wayland.rs
Normal file
34
src/gui_wayland.rs
Normal file
|
@ -0,0 +1,34 @@
|
|||
use std::path::Path;
|
||||
|
||||
use anyhow::Result;
|
||||
|
||||
use crate::gui_trait::{Capture, Gui};
|
||||
use crate::rect::Rectangle;
|
||||
|
||||
pub struct WaylandGui {}
|
||||
|
||||
impl WaylandGui {
|
||||
pub fn new() -> Result<Self> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
impl Gui for WaylandGui {
|
||||
type Capture = ScreenCapture;
|
||||
|
||||
fn capture_entire_screen(&self) -> Result<Self::Capture> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn interactive_select(&self, _: &Self::Capture) -> Result<Option<Rectangle>> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
pub struct ScreenCapture {}
|
||||
|
||||
impl Capture for ScreenCapture {
|
||||
fn save_cropped_to(&self, to: impl AsRef<Path>, section: Option<Rectangle>) -> Result<()> {
|
||||
todo!()
|
||||
}
|
||||
}
|
|
@ -1,8 +1,8 @@
|
|||
use std::path::Path;
|
||||
|
||||
use anyhow::Result;
|
||||
use x11::xlib::{Display, Image as XImage, Screen};
|
||||
use image::{Bgra, DynamicImage, ImageBuffer};
|
||||
use x11::xlib::{Display, Image as XImage, Screen};
|
||||
|
||||
use crate::gui_trait::{Capture, Gui};
|
||||
use crate::rect::Rectangle;
|
||||
|
@ -36,10 +36,7 @@ impl Gui for X11Gui {
|
|||
Ok(ScreenCapture { image })
|
||||
}
|
||||
|
||||
fn interactive_select(
|
||||
&self,
|
||||
_: &Self::Capture,
|
||||
) -> Result<Option<Rectangle>> {
|
||||
fn interactive_select(&self, _: &Self::Capture) -> Result<Option<Rectangle>> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
@ -49,11 +46,7 @@ pub struct ScreenCapture {
|
|||
}
|
||||
|
||||
impl Capture for ScreenCapture {
|
||||
fn save_cropped_to(
|
||||
&self,
|
||||
to: impl AsRef<Path>,
|
||||
section: Option<Rectangle>,
|
||||
) -> Result<()> {
|
||||
fn save_cropped_to(&self, to: impl AsRef<Path>, section: Option<Rectangle>) -> Result<()> {
|
||||
let to = to.as_ref();
|
||||
|
||||
let buffer = self.image.buffer();
|
||||
|
|
12
src/main.rs
12
src/main.rs
|
@ -8,6 +8,10 @@ extern crate leanshot_x11 as x11;
|
|||
|
||||
#[cfg(all(feature = "backend-x11", feature = "backend-xcb"))]
|
||||
compile_error!("don't enable both x11 and xcb backends");
|
||||
#[cfg(all(feature = "backend-x11", feature = "backend-wayland"))]
|
||||
compile_error!("don't enable both x11 and wayland backends");
|
||||
#[cfg(all(feature = "backend-xcb", feature = "backend-wayland"))]
|
||||
compile_error!("don't enable both xcb and wayland backends");
|
||||
|
||||
mod gui_trait;
|
||||
|
||||
|
@ -17,6 +21,9 @@ mod gui_xcb;
|
|||
#[cfg(feature = "backend-x11")]
|
||||
mod gui_x11;
|
||||
|
||||
#[cfg(feature = "backend-wayland")]
|
||||
mod gui_wayland;
|
||||
|
||||
mod rect;
|
||||
mod singleton;
|
||||
|
||||
|
@ -52,6 +59,11 @@ fn get_gui() -> Result<crate::gui_x11::X11Gui> {
|
|||
crate::gui_x11::X11Gui::new()
|
||||
}
|
||||
|
||||
#[cfg(feature = "backend-wayland")]
|
||||
fn get_gui() -> Result<crate::gui_wayland::WaylandGui> {
|
||||
crate::gui_wayland::WaylandGui::new()
|
||||
}
|
||||
|
||||
fn run(opt: &Options, gui: impl Gui) -> Result<()> {
|
||||
let capture = gui.capture_entire_screen()?;
|
||||
|
||||
|
|
|
@ -9,9 +9,9 @@ use crate::rect::Rectangle;
|
|||
|
||||
use super::atom::Atom;
|
||||
use super::display::{Display, GetDisplay};
|
||||
use super::screen::Screen;
|
||||
use super::drawable::Drawable;
|
||||
use super::image::Image;
|
||||
use super::screen::Screen;
|
||||
|
||||
pub use self::attr::{EventMask, SetWindowAttributes, WindowAttributes};
|
||||
|
||||
|
|
Loading…
Reference in a new issue