diff --git a/Cargo.lock b/Cargo.lock index f4b69e6..6d29d25 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,9 +14,9 @@ dependencies = [ [[package]] name = "ab_glyph_rasterizer" -version = "0.1.4" +version = "0.1.5" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "d9fe5e32de01730eb1f6b7f5b51c17e03e2325bf40a74f754f04f130043affff" +checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e" [[package]] name = "addr2line" @@ -101,9 +101,9 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "arrayvec" -version = "0.7.1" +version = "0.7.2" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "be4dc07131ffa69b8072d35f5007352af944213cde02545e2103680baed38fcd" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "associative-cache" @@ -404,6 +404,7 @@ dependencies = [ "egui", "egui_glium", "enigo", + "epaint", "epi", "glium", "ico", @@ -927,6 +928,7 @@ dependencies = [ "atomic_refcell", "emath", "nohash-hasher", + "parking_lot 0.11.2", "serde 1.0.130", ] @@ -1501,7 +1503,7 @@ version = "0.8.2" source = "registry+/~https://github.com/rust-lang/crates.io-index" checksum = "c1479e7ffd381ab2ae38617d5e457c5b875ee928c53a7f165dad5d47053319cc" dependencies = [ - "arrayvec 0.7.1", + "arrayvec 0.7.2", ] [[package]] @@ -1986,9 +1988,9 @@ checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] name = "openssl" -version = "0.10.36" +version = "0.10.37" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "8d9facdb76fec0b73c406f125d44d86fdad818d66fef0531eec9233ca425ff4a" +checksum = "2bc6b9e4403633698352880b22cbe2f0e45dd0177f6fabe4585536e56a3e4f75" dependencies = [ "bitflags", "cfg-if 1.0.0", @@ -2006,9 +2008,9 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "openssl-sys" -version = "0.9.67" +version = "0.9.68" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "69df2d8dfc6ce3aaf44b40dec6f487d5a886516cf6879c49e98e0710f310a058" +checksum = "1c571f25d3f66dd427e417cebf73dbe2361d6125cf6e3a70d143fdf97c9f5150" dependencies = [ "autocfg", "cc", @@ -2287,9 +2289,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.21" +version = "0.3.22" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "10e2fcbb64ecbe64c8e040a386c3104d384583af58b956d870aaaf229df6e66d" +checksum = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f" [[package]] name = "png" @@ -2305,9 +2307,9 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.14" +version = "0.2.15" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "c3ca011bd0129ff4ae15cd04c4eef202cadf6c51c21e47aba319b4e0501db741" +checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" [[package]] name = "proc-macro-crate" @@ -2366,9 +2368,9 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.30" +version = "1.0.32" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "edc3358ebc67bc8b7fa0c007f945b0b18226f78437d61bec735a9eb96b61ee70" +checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" dependencies = [ "unicode-xid", ] @@ -2960,9 +2962,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.80" +version = "1.0.81" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "d010a1623fbd906d51d650a9916aaefc05ffa0e4053ff7fe601167f3e715d194" +checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 3d36c20..e73abd5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ deepl = { path = "./deepl", default-features = false } # features must be specif eframe = { git = "/~https://github.com/zu1k/egui.git", branch = "copy-translator" } egui = { git = "/~https://github.com/zu1k/egui.git", branch = "copy-translator" } egui_glium = { git = "/~https://github.com/zu1k/egui.git", branch = "copy-translator" } +epaint = { git = "/~https://github.com/zu1k/egui.git", branch = "copy-translator" } epi = { git = "/~https://github.com/zu1k/egui.git", branch = "copy-translator" } enigo = { git = "/~https://github.com/enigo-rs/enigo" } glium = "0.30" diff --git a/build.rs b/build.rs index 7d64306..d57050e 100644 --- a/build.rs +++ b/build.rs @@ -1,17 +1,15 @@ use std::env; fn main() { - if env::var("PROFILE").unwrap() == "release" { - if let Ok(_) = env::var("CARGO_CFG_WINDOWS") { - let mut res = winres::WindowsResource::new(); - if let Ok(host) = env::var("HOST") { - if host.contains("linux") { - res.set_toolkit_path("/usr/bin") - .set_windres_path("x86_64-w64-mingw32-windres"); - } + if env::var("PROFILE").unwrap() == "release" && env::var("CARGO_CFG_WINDOWS").is_ok() { + let mut res = winres::WindowsResource::new(); + if let Ok(host) = env::var("HOST") { + if host.contains("linux") { + res.set_toolkit_path("/usr/bin") + .set_windres_path("x86_64-w64-mingw32-windres"); } - res.set_icon("res/copy-translator.ico").set_language(0x04); - res.compile().unwrap(); } + res.set_icon("res/copy-translator.ico").set_language(0x04); + res.compile().unwrap(); } } diff --git a/deepl/Cargo.lock b/deepl/Cargo.lock index c709112..e4385ab 100644 --- a/deepl/Cargo.lock +++ b/deepl/Cargo.lock @@ -520,9 +520,9 @@ checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] name = "openssl" -version = "0.10.36" +version = "0.10.37" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "8d9facdb76fec0b73c406f125d44d86fdad818d66fef0531eec9233ca425ff4a" +checksum = "2bc6b9e4403633698352880b22cbe2f0e45dd0177f6fabe4585536e56a3e4f75" dependencies = [ "bitflags", "cfg-if", @@ -540,9 +540,9 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "openssl-sys" -version = "0.9.67" +version = "0.9.68" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "69df2d8dfc6ce3aaf44b40dec6f487d5a886516cf6879c49e98e0710f310a058" +checksum = "1c571f25d3f66dd427e417cebf73dbe2361d6125cf6e3a70d143fdf97c9f5150" dependencies = [ "autocfg", "cc", @@ -596,15 +596,15 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.21" +version = "0.3.22" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "10e2fcbb64ecbe64c8e040a386c3104d384583af58b956d870aaaf229df6e66d" +checksum = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f" [[package]] name = "ppv-lite86" -version = "0.2.14" +version = "0.2.15" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "c3ca011bd0129ff4ae15cd04c4eef202cadf6c51c21e47aba319b4e0501db741" +checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" [[package]] name = "proc-macro-hack" @@ -620,9 +620,9 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.30" +version = "1.0.32" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "edc3358ebc67bc8b7fa0c007f945b0b18226f78437d61bec735a9eb96b61ee70" +checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" dependencies = [ "unicode-xid", ] @@ -892,9 +892,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.80" +version = "1.0.81" source = "registry+/~https://github.com/rust-lang/crates.io-index" -checksum = "d010a1623fbd906d51d650a9916aaefc05ffa0e4053ff7fe601167f3e715d194" +checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966" dependencies = [ "proc-macro2", "quote", diff --git a/src/ui.rs b/src/ui.rs index 44f251a..27a1f57 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,6 +1,7 @@ use crate::{ctrl_c, font}; use deepl; use eframe::{egui, epi}; +use epaint::Color32; use std::{fmt::Debug, sync::mpsc}; #[cfg(target_os = "windows")] @@ -13,6 +14,9 @@ pub struct MouseState { last_event: u8, } +const LINK_COLOR_DOING: Color32 = Color32::GREEN; +const LINK_COLOR_COMMON: Color32 = Color32::GRAY; + impl MouseState { fn new() -> Self { Self { last_event: 0 } @@ -60,6 +64,7 @@ pub struct MyApp { event_rx: mpsc::Receiver, clipboard_last: String, + link_color: Color32, #[cfg(target_os = "windows")] hk_setting: HotkeySetting, @@ -96,6 +101,7 @@ impl MyApp { mouse_state: MouseState::new(), event_rx, clipboard_last: String::new(), + link_color: Color32::GRAY, #[cfg(target_os = "windows")] hk_setting, @@ -125,7 +131,7 @@ impl epi::App for MyApp { self.task_chan .send((self.text.clone(), self.target_lang, Some(self.source_lang))); self.clipboard_last = self.text.clone(); - self.text = "正在翻译中...\r\n\r\n".to_string() + &self.text; + self.link_color = LINK_COLOR_DOING; } } @@ -141,6 +147,7 @@ impl epi::App for MyApp { mouse_state, event_rx, clipboard_last, + link_color, #[cfg(target_os = "windows")] hk_setting, #[cfg(target_os = "windows")] @@ -158,6 +165,7 @@ impl epi::App for MyApp { while let Ok(event) = event_rx.try_recv() { match event { Event::TextSet(text_new) => { + *link_color = LINK_COLOR_COMMON; *text = text_new; } Event::MouseEvent(mouse_event) => match mouse_event { @@ -181,7 +189,8 @@ impl epi::App for MyApp { if let Some(text_new) = ctrl_c() { if text_new.ne(clipboard_last) { *clipboard_last = text_new.clone(); - *text = "正在翻译中...\r\n\r\n".to_string() + &text_new; + *text = text_new.clone(); + *link_color = LINK_COLOR_DOING; let _ = task_chan.send((text_new, *target_lang, Some(*source_lang))); } } @@ -189,7 +198,8 @@ impl epi::App for MyApp { #[cfg(target_os = "windows")] if let Ok(text_new) = rx_this.try_recv() { - *text = "正在翻译中...\r\n\r\n".to_string() + &text_new; + *text = text_new.clone(); + *link_color = LINK_COLOR_DOING; let _ = task_chan.send((text_new, *target_lang, Some(*source_lang))); } @@ -226,26 +236,34 @@ impl epi::App for MyApp { ui.selectable_value(target_lang, i, i.description()); } }); + if ui.add(egui::Button::new("翻译")).clicked() { + let _ = task_chan.send((text.clone(), *target_lang, Some(*source_lang))); + *link_color = LINK_COLOR_DOING; + }; ui.vertical_centered_justified(|ui| { ui.with_layout(egui::Layout::right_to_left(), |ui| { + ui.visuals_mut().hyperlink_color = *link_color; ui.hyperlink_to( - format!("{} GitHub", egui::special_emojis::GITHUB), + egui::special_emojis::GITHUB, "/~https://github.com/zu1k/copy-translator", ); - let drag_button = ui.add(egui::Button::new("○").frame(false)); - if drag_button.clicked() { + if ui.add(egui::Button::new("□").frame(false)).clicked() { *show_box = !*show_box; - } else if ctx.input().key_pressed(egui::Key::D) - && drag_button.is_pointer_button_down_on() + frame.set_decorations(*show_box); + }; + if ui + .add(egui::Button::new("○").frame(false)) + .is_pointer_button_down_on() { frame.drag_window(); - } + }; }); }); if *source_lang != old_source_lang || *target_lang != old_target_lang { + *link_color = LINK_COLOR_DOING; let _ = task_chan.send((text.clone(), *target_lang, Some(*source_lang))); }; }); @@ -266,7 +284,6 @@ impl epi::App for MyApp { }); }); - frame.set_decorations(*show_box); ctx.request_repaint(); } }