From 4aac16093c6bae7b7f4485dbc1d51b6dcf2892c1 Mon Sep 17 00:00:00 2001 From: yanorei32 Date: Fri, 26 May 2023 05:26:28 +0900 Subject: [PATCH] Improve CLI --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/main.rs | 48 ++++++++++++++++++------------------------------ src/model.rs | 28 ++++++++-------------------- 4 files changed, 28 insertions(+), 52 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b9ed8d7..0f9dacf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -379,7 +379,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] -name = "winresutil" +name = "winres" version = "0.1.0" dependencies = [ "clap", diff --git a/Cargo.toml b/Cargo.toml index 4c4c985..ba3d6e3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "winresutil" +name = "winresz" version = "0.1.0" edition = "2021" diff --git a/src/main.rs b/src/main.rs index f0b95a7..5fbbe9e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,45 +38,33 @@ fn filter_target_windows(hwnd: &HWND, q: &TargetInformation) -> bool { true } -fn window_callback(hwnd: HWND, op: &Commands) { - let t = match op { - Commands::Get { target } => target, - Commands::Set { - target, - resolution: _, - } => target, - }; - - if !filter_target_windows(&hwnd, t) { +fn window_callback(hwnd: HWND, op: &Cli) { + if !filter_target_windows(&hwnd, &op.target) { return; } let client_size = Size::from(hwnd.GetClientRect().unwrap()); - match op { - Commands::Get { target: _ } => { - println!("{}", client_size - t.offset); - } - Commands::Set { - target: _, - resolution, - } => { - let window_size = Size::from(hwnd.GetWindowRect().unwrap()); - let border = window_size - client_size; + let Some(size) = op.size else { + println!("{}\t", client_size - op.target.offset); + return; + }; - hwnd.SetWindowPos( - HwndPlace::None, - POINT::new(0, 0), - (*resolution + t.offset + border).into(), - SWP::NOMOVE, - ) - .unwrap(); - } - } + let window_size = Size::from(hwnd.GetWindowRect().unwrap()); + + let border = window_size - client_size; + + hwnd.SetWindowPos( + HwndPlace::None, + POINT::new(0, 0), + (size + op.target.offset + border).into(), + SWP::NOMOVE, + ) + .unwrap(); } fn main() { - let c = Cli::parse().command; + let c = Cli::parse(); EnumWindows(|hwnd: HWND| -> bool { window_callback(hwnd, &c); true diff --git a/src/model.rs b/src/model.rs index ece4c57..9d556cf 100644 --- a/src/model.rs +++ b/src/model.rs @@ -1,4 +1,4 @@ -use clap::{Args, Parser, Subcommand}; +use clap::{Args, Parser}; use std::fmt::{self, Display}; use std::io::{Error, ErrorKind}; use std::ops::{Add, Sub}; @@ -6,32 +6,20 @@ use winsafe::{RECT, SIZE}; #[derive(Debug, Clone, Args)] pub struct TargetInformation { - #[arg(short, long)] + #[arg(short, long, help = "Filter by binary path")] pub path_endswith: Vec, - #[arg(short, long)] + #[arg(short, long, help = "Filter by title")] pub title_contains: Vec, - #[arg(short, long, value_parser = parse_size, default_value_t = Size::default())] + #[arg(short, long, value_parser = parse_size, default_value_t = Size::default(), help = "Additional offset for window")] pub offset: Size, } -#[derive(Debug, Clone, Subcommand)] -pub enum Commands { - Get { - #[command(flatten)] - target: TargetInformation, - }, - Set { - #[command(flatten)] - target: TargetInformation, - #[arg(value_parser = parse_size)] - resolution: Size, - }, -} - #[derive(Debug, Parser)] pub struct Cli { - #[command(subcommand)] - pub command: Commands, + #[command(flatten)] + pub target: TargetInformation, + #[arg(value_parser = parse_size, help = "Set the window size if it's set.")] + pub size: Option, } #[derive(Debug, Copy, Clone, Parser)]