diff --git a/Cargo.lock b/Cargo.lock index 2ad9555..3c0978d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,6 +20,15 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + [[package]] name = "atty" version = "0.2.14" @@ -43,6 +52,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bumpalo" +version = "3.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" + [[package]] name = "bytemuck" version = "1.7.3" @@ -403,6 +418,15 @@ dependencies = [ "rayon", ] +[[package]] +name = "js-sys" +version = "0.3.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -602,7 +626,7 @@ dependencies = [ [[package]] name = "post_maker" -version = "0.2.0" +version = "0.2.1" dependencies = [ "clap", "dirs", @@ -616,6 +640,8 @@ dependencies = [ "serde", "serde_json", "simplelog", + "textwrap", + "webbrowser", ] [[package]] @@ -766,6 +792,23 @@ dependencies = [ "redox_syscall", ] +[[package]] +name = "regex" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + [[package]] name = "rulinalg" version = "0.4.2" @@ -846,6 +889,12 @@ dependencies = [ "termcolor", ] +[[package]] +name = "smawk" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043" + [[package]] name = "strsim" version = "0.10.0" @@ -877,6 +926,11 @@ name = "textwrap" version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" +dependencies = [ + "smawk", + "unicode-linebreak", + "unicode-width", +] [[package]] name = "tiff" @@ -905,6 +959,21 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e5d7cd7ab3e47dda6e56542f4bbf3824c15234958c6e1bd6aaa347e93499fdc" +[[package]] +name = "unicode-linebreak" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a52dcaab0c48d931f7cc8ef826fa51690a08e1ea55117ef26f89864f532383f" +dependencies = [ + "regex", +] + +[[package]] +name = "unicode-width" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" + [[package]] name = "unicode-xid" version = "0.2.2" @@ -929,12 +998,93 @@ version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +[[package]] +name = "wasm-bindgen" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" + +[[package]] +name = "web-sys" +version = "0.3.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecad156490d6b620308ed411cfee90d280b3cbd13e189ea0d3fada8acc89158a" +dependencies = [ + "web-sys", + "widestring", + "winapi", +] + [[package]] name = "weezl" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b77fdfd5a253be4ab714e4ffa3c49caf146b4de743e97510c0656cf90f1e8e" +[[package]] +name = "widestring" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" + [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index 45b2839..68af7fd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "post_maker" -version = "0.2.0" +version = "0.2.1" edition = "2021" -description = "Post Maker helps you to make post for instagram and other social madia apps easily" -authors = ["Piyush Raj "] +description = "Post Maker helps you to make post for Instagram and other Social Media apps easily." +authors = ["PiyushXCoder "] license = "GPL-3.0-only" readme = "README.md" repository = "https://github.com/PiyushXCoder/post_maker" @@ -22,4 +22,6 @@ rusttype = "0.9" serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } lazy_static = "1.4" -dirs = "4.0.0" +dirs = "4.0" +textwrap = "0.14" +webbrowser = "0.5" diff --git a/src/about.rs b/src/about.rs new file mode 100644 index 0000000..441ad8a --- /dev/null +++ b/src/about.rs @@ -0,0 +1,170 @@ +/* + This file is part of Post Maker. + Post Maker is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + Post Maker is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with Post Maker. If not, see +*/ + +//! About Window +use crate::{config, globals}; +use fltk::{ + app, dialog, + enums::{self, Align, Event}, + frame::Frame, + group::Flex, + image::SvgImage, + prelude::*, + window::Window, +}; + +pub(crate) struct About { + pub(crate) win: Window, + pub(crate) repo_link: Frame, + pub(crate) dev_link: Frame, + pub(crate) license_link: Frame, +} + +impl About { + pub(crate) fn new() -> Self { + let mut win = Window::new(0, 0, 400, 500, "About Us").center_screen(); + win.set_icon(Some( + SvgImage::from_data(globals::ICON.to_str().unwrap()).unwrap(), + )); + + let link_color = if *globals::THEME == config::Themes::Dark + || *globals::THEME == config::Themes::HighContrast + { + enums::Color::rgb_color(111, 190, 255) + } else { + enums::Color::rgb_color(16, 71, 151) + }; + + let mut main_flex = Flex::default().with_size(390, 490).with_pos(5, 5).column(); + + let mut icon = Frame::default(); + let mut img = SvgImage::from_data(globals::ICON_WITH_TEXT.to_str().unwrap()).unwrap(); + img.scale(200, 200, true, true); + icon.set_image(Some(img)); + + let mut description = + Frame::default().with_label(&textwrap::fill(env!("CARGO_PKG_DESCRIPTION"), 50)); + description.set_label_size(14); + main_flex.set_size(&description, 50); + + main_flex.set_size( + &Frame::default().with_label(&format!("Version: {}", env!("CARGO_PKG_VERSION"))), + 30, + ); + + let mut grp = Flex::default().row(); + let mut git = Frame::default() + .with_label("Git:") + .with_align(Align::Right | Align::Inside); + git.set_label_size(13); + grp.set_size(&git, 60); + + let mut repo_link = Frame::default() + .with_label(env!("CARGO_PKG_REPOSITORY")) + .with_align(Align::Left | Align::Inside); + repo_link.set_label_color(link_color.clone()); + repo_link.set_label_size(13); + grp.end(); + main_flex.set_size(&grp, 30); + + let mut text = Frame::default() + .with_label("Developed with <3 by PiyushXCoder") + .with_align(Align::Bottom | Align::Inside); + text.set_label_size(13); + main_flex.set_size(&text, 20); + + let mut dev_link = Frame::default() + .with_label("https://piyushxcoder.in") + .with_align(Align::Top | Align::Inside); + dev_link.set_label_color(link_color.clone()); + dev_link.set_label_size(13); + main_flex.set_size(&dev_link, 20); + + let mut license = Frame::default() + .with_label("This program comes with absolutely no warrant.See the") + .with_align(Align::Bottom | Align::Inside); + license.set_label_size(13); + main_flex.set_size(&license, 25); + + let mut license_link = + Frame::default().with_label("GNU General Public License, version 3 or later"); + license_link.set_label_color(link_color.clone()); + license_link.set_label_size(13); + main_flex.set_size(&license_link, 13); + + let mut license = Frame::default() + .with_label("for details.") + .with_align(Align::Top | Align::Inside); + license.set_label_size(13); + main_flex.set_size(&license, 25); + + main_flex.end(); + + win.end(); + win.make_modal(true); + + let mut about = Self { + win, + repo_link, + dev_link, + license_link, + }; + about.event(); + + about + } + + pub(crate) fn show(&mut self) { + self.win.show(); + while self.win.shown() { + app::wait(); + } + } + + // Set callbacks of elements + fn event(&mut self) { + // Repository Link + self.repo_link.handle(|_, ev| { + if ev == Event::Push { + if let Err(e) = webbrowser::open(env!("CARGO_PKG_REPOSITORY")) { + dialog::alert_default("Failed to open the link!"); + warn!("Failed to open the link!\n{:?}", e); + } + } + true + }); + + // Developer's Link + self.dev_link.handle(|_, ev| { + if ev == Event::Push { + if let Err(e) = webbrowser::open("https://piyushxcoder.in") { + dialog::alert_default("Failed to open the link!"); + warn!("Failed to open the link!\n{:?}", e); + } + } + true + }); + + // License Link + self.license_link.handle(|_, ev| { + if ev == Event::Push { + if let Err(e) = webbrowser::open("https://www.gnu.org/licenses/gpl-3.0.html") { + dialog::alert_default("Failed to open the link!"); + warn!("Failed to open the link!\n{:?}", e); + } + } + true + }); + } +} diff --git a/src/globals.rs b/src/globals.rs index 91b27b3..9481c3c 100644 --- a/src/globals.rs +++ b/src/globals.rs @@ -113,6 +113,9 @@ lazy_static! { /// Image to use for Window pub(crate) static ref ICON: OsString = include_str!("../assets/icon.svg").into(); + /// Image to use for About + pub(crate) static ref ICON_WITH_TEXT: OsString = include_str!("../assets/icon_with_text.svg").into(); + /// Image to use for Reload Button pub(crate) static ref RELOAD_ICON: OsString = { let img = include_str!("../assets/reload.svg"); diff --git a/src/main.rs b/src/main.rs index 50437f4..498cc35 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,6 +17,7 @@ extern crate log; extern crate simplelog; +mod about; mod config; mod config_picker; mod config_window; diff --git a/src/main_window.rs b/src/main_window.rs index 3965817..19549b0 100644 --- a/src/main_window.rs +++ b/src/main_window.rs @@ -13,6 +13,7 @@ */ //! Main window where you do all editing +use crate::about::About; use crate::crop_window::CropWindow; use crate::draw_thread::*; use crate::utils; @@ -455,14 +456,13 @@ impl MainWindow { }, ); + let mut about_win = About::new(); self.menubar.add( "&Help/About...\t", Shortcut::None, menu::MenuFlag::Normal, move |_| { - dialog::alert_default( - "Created with <3 by PiyushXCoder\nhttps://github.com/PiyushXCoder", - ); + about_win.show(); }, ); }