diff --git a/Cargo.lock b/Cargo.lock index a1e0d61..522ef4a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -135,6 +135,7 @@ version = "0.1.2" dependencies = [ "chrono", "gdk", + "gdk-pixbuf", "gettext-rs", "gio", "glib", diff --git a/Cargo.toml b/Cargo.toml index e290eb7..7178733 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ gettext-rs = "0.5.0" subprocess = "0.2.6" zbus = "1.8.0" zvariant = "2.5.0" +gdk-pixbuf = "0.9.0" [dependencies.gtk] version = "0.9.0" diff --git a/LICENSE b/LICENSE.md similarity index 100% rename from LICENSE rename to LICENSE.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..df82609 --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# Blue Recorder + + +A simple desktop recorder for Linux systems. Built using GTK+ 3 and ffmpeg. + +- It supports recording audio and video on almost all Linux interfaces with support for Wayland display server on GNOME session. +- The following formats are currently supported: mkv, avi, mp4, wmv, gif and nut. +- You can stop the recording process easily by right-clicking the icon and choosing "Stop Record". Or middle-clicking the recording icon in the notifications area (but doesn't work on all interfaces). +- You can choose the audio input source you want from the list. +- You can also set the default values you want by simply changing them in the interface, and the program will save them for you for the next time you open it. + +it based on [Green Recorder](https://github.com/mhsabbagh/green-recorder) and rewritten in Rust with improvements + +## Installation +Blue Recorder available as Snap package + + +[![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/blue-recorder) + +## Build from source +Blue Recorder depend in the following dependencies +``` +ffmpeg +gtk +gdk +gio +gettext +libappindicator3 +x11-utils +pulseaudio +``` + +install dependencies Ubuntu and Debian based distros +``` +sudo apt install build-essential clang cargo libappindicator3-1 x11-utils gettext pulseaudio ffmpeg +``` +the use `Cargo` to build it +``` +git clone https://github.com/xlmnxp/blue-recorder +cd +cargo build --release +cp -a data interfaces po target/release +``` +then you will find the executable file at +`/target/release/blue-recorder` + +## License +``` +GNU General Public License version 3 +License Copyright: Copyright © 2007 Free Software Foundation, Inc. +License License: "Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed." (www.gnu.org/licenses/gpl-3.0.en.html). +License Contact: Free Software Foundation (fsf.org). +SPDX short identifier: GPL-3.0-only +Further resources... +``` +[read the license](LICENSE.md) \ No newline at end of file diff --git a/screenshots/screenshot1.png b/screenshots/screenshot1.png new file mode 100644 index 0000000..2a6f50a Binary files /dev/null and b/screenshots/screenshot1.png differ diff --git a/screenshots/screenshot2.png b/screenshots/screenshot2.png new file mode 100644 index 0000000..42d74fc Binary files /dev/null and b/screenshots/screenshot2.png differ diff --git a/src/main.rs b/src/main.rs index cc2cd03..908887c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,5 @@ extern crate gdk; +extern crate gdk_pixbuf; extern crate gettextrs; extern crate gio; extern crate gtk; @@ -9,6 +10,7 @@ mod ffmpeg_interface; // use gio::prelude::*; use ffmpeg_interface::{Ffmpeg, ProgressWidget}; +use gdk_pixbuf::Pixbuf; use gettextrs::{bindtextdomain, gettext, setlocale, textdomain, LocaleCategory}; use glib::signal::Inhibit; use gtk::prelude::*; @@ -203,28 +205,6 @@ fn main() { config_management::set_bool("default", "followmousecheck", switch.get_active()); }); - // About Dialog - about_menu_item.set_label("about"); - about_dialog.set_transient_for(Some(&main_window)); - about_dialog.set_program_name(&gettext("Blue Recorder")); - about_dialog.set_version(Some("3.2.3")); - about_dialog.set_copyright(Some("© 2021 Salem Yaslem")); - about_dialog.set_wrap_license(true); - about_dialog.set_license(Some("Blue Recorder 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.\n\nBlue Recorder 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.\n\nSee the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Blue Recorder. If not, see .")); - about_dialog.set_comments(Some(&gettext( - "A simple screen recorder for Linux desktop. Supports Wayland & Xorg.", - ))); - about_dialog.set_authors(&[ - "Salem Yaslem ", - "M.Hanny Sabbagh ", - "Alessandro Toia ", - "Patreon Supporters: Ahmad Gharib, Medium,\nWilliam Grunow, Alex Benishek.", - ]); - about_dialog.set_artists(&["Mustapha Assabar"]); - about_dialog.set_website(Some("https://github.com/xlmnxp/blue-recorder/")); - about_dialog.set_logo_icon_name(Some("blue-recorder")); - about_dialog.set_transient_for(Some(&main_window)); - // Buttons window_grab_button.set_label(&gettext("Select a Window")); area_grab_button.set_label(&gettext("Select an Area")); @@ -405,6 +385,31 @@ fn main() { _ffmpeg_record_interface.borrow_mut().clone().play_record(); }); + // About Dialog + about_menu_item.set_label("about"); + about_dialog.set_transient_for(Some(&main_window)); + about_dialog.set_program_name(&gettext("Blue Recorder")); + about_dialog.set_version(Some("3.2.3")); + about_dialog.set_copyright(Some("© 2021 Salem Yaslem")); + about_dialog.set_wrap_license(true); + about_dialog.set_license(Some("Blue Recorder 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.\n\nBlue Recorder 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.\n\nSee the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Blue Recorder. If not, see .")); + about_dialog.set_comments(Some(&gettext( + "A simple screen recorder for Linux desktop. Supports Wayland & Xorg.", + ))); + about_dialog.set_authors(&[ + "Salem Yaslem ", + "M.Hanny Sabbagh ", + "Alessandro Toia ", + "Patreon Supporters: Ahmad Gharib, Medium,\nWilliam Grunow, Alex Benishek.", + ]); + about_dialog.set_artists(&["Mustapha Assabar"]); + about_dialog.set_website(Some("https://github.com/xlmnxp/blue-recorder/")); + about_dialog.set_logo_icon_name(Some("blue-recorder")); + about_dialog.set_logo(Some( + &Pixbuf::from_file(&indicator_icon_path.to_str().unwrap()).unwrap(), + )); + about_dialog.set_transient_for(Some(&main_window)); + // Windows // hide area chooser after it deleted. let _area_chooser_window = area_chooser_window.clone();