fix draw_mouse

This commit is contained in:
ochibani 2024-06-18 07:53:30 +02:00
parent 5fb12a8776
commit b4e6b6393e
No known key found for this signature in database
GPG Key ID: 2C6B61CE0C704ED4
9 changed files with 65 additions and 1139 deletions

View File

@ -258,7 +258,6 @@
<property name="margin-end">3</property> <property name="margin-end">3</property>
<property name="margin-top">3</property> <property name="margin-top">3</property>
<property name="margin-bottom">3</property> <property name="margin-bottom">3</property>
<property name="active">True</property>
<property name="has-tooltip">True</property> <property name="has-tooltip">True</property>
<child> <child>
<object class="GtkGrid"> <object class="GtkGrid">

View File

@ -87,7 +87,7 @@ file-name = اسم الملفّ الافتراضي:
file-name-overwritten = اسم الملف (سيُكتَبُ عليه) file-name-overwritten = اسم الملف (سيُكتَبُ عليه)
# Follow mouse label # Follow mouse label
follow-mouse = إبراز مؤشر الفأرة follow-mouse = Follow Mouse
# Frames label # Frames label
frames = الإطارات: frames = الإطارات:
@ -103,16 +103,16 @@ license =
لمزيد تفاصيل راجع رخصة جنو العمومية. إن لم تكن حصلت على نسخة من رخصة جنو العمومية مع المسجل الأزرق فانظر { license-website }. لمزيد تفاصيل راجع رخصة جنو العمومية. إن لم تكن حصلت على نسخة من رخصة جنو العمومية مع المسجل الأزرق فانظر { license-website }.
# Bitrate label # Bitrate label
bitrate = معدل البت: bitrate = Bitrate:
# Recording button # Recording button
record = سجل record = سجل
# Record audio label # Record audio label
record-audio = تسجيل صوت اللاقط record-audio = Record Mic
# Record speaker label # Record speaker label
record-speaker = تسجيل صوت المكبر record-speaker = Record Speaker
# Record video label # Record video label
record-video = تسجيل الصورة record-video = تسجيل الصورة
@ -138,18 +138,18 @@ website = الموقع
about-tooltip = ما يُستَحسَنُ أن تعلمه عن المسجل الأزرق about-tooltip = ما يُستَحسَنُ أن تعلمه عن المسجل الأزرق
area-tooltip = يحدد المنطقة المُراد تسجيلها area-tooltip = يحدد المنطقة المُراد تسجيلها
audio-source-tooltip = لاختيار مدخل الصوت audio-source-tooltip = لاختيار مدخل الصوت
audio-tooltip = يسجل باستخدام مدخل الصوت audio-tooltip = Mic audio recording
delay-tooltip = مُهلة قبل بدء التسجيل delay-tooltip = مُهلة قبل بدء التسجيل
folder-tooltip = لاختيار مكان التخزين folder-tooltip = لاختيار مكان التخزين
follow-mouse-tooltip = يميز مؤشر الفأرة عند التسجيل follow-mouse-tooltip = Make the grabbed area follow the mouse
format-tooltip = لاختيار صيغة الخَرج format-tooltip = لاختيار صيغة الخَرج
frames-tooltip = عدد الإطارات في الثانية frames-tooltip = عدد الإطارات في الثانية
hide-tooltip = لإخفاء نافذة المسجل الأزرق عند بدء التسجيل hide-tooltip = لإخفاء نافذة المسجل الأزرق عند بدء التسجيل
mouse-tooltip = يظهر مؤشر الفأرة عند التسجيل mouse-tooltip = يظهر مؤشر الفأرة عند التسجيل
bitrate-tooltip = ضبط معدل البت بوحدة KB bitrate-tooltip = Set video bitrate in KB/s
record-tooltip = يبدأ تسجيل الشاشة record-tooltip = يبدأ تسجيل الشاشة
screen-tooltip = يحدد الشاشة ليسجلها screen-tooltip = يحدد الشاشة ليسجلها
speaker-tooltip = يسجل باستخدام مخرج الصوت speaker-tooltip = Speakr sound recording
stop-tooltip = وقف تسجيل الشاشة stop-tooltip = وقف تسجيل الشاشة
video-tooltip = يسجل الشاشة video-tooltip = يسجل الشاشة
wayland-tooltip = غير مدعوم في وايلاند wayland-tooltip = غير مدعوم في وايلاند

View File

@ -87,7 +87,7 @@ file-name = اسم الملفّ الافتراضي:
file-name-overwritten = اسم الملف (سيُكتَبُ عليه) file-name-overwritten = اسم الملف (سيُكتَبُ عليه)
# Follow mouse label # Follow mouse label
follow-mouse = إبراز مؤشر الفأرة follow-mouse = Follow Mouse
# Frames label # Frames label
frames = الإطارات: frames = الإطارات:
@ -103,16 +103,16 @@ license =
لمزيد تفاصيل راجع رخصة جنو العمومية. إن لم تكن حصلت على نسخة من رخصة جنو العمومية مع المسجل الأزرق فانظر { license-website }. لمزيد تفاصيل راجع رخصة جنو العمومية. إن لم تكن حصلت على نسخة من رخصة جنو العمومية مع المسجل الأزرق فانظر { license-website }.
# Bitrate label # Bitrate label
bitrate = معدل البت: bitrate = Bitrate:
# Recording button # Recording button
record = سجل record = سجل
# Record audio label # Record audio label
record-audio = تسجيل صوت اللاقط record-audio = Record Mic
# Record speaker label # Record speaker label
record-speaker = تسجيل صوت المكبر record-speaker = Record Speaker
# Record video label # Record video label
record-video = تسجيل الصورة record-video = تسجيل الصورة
@ -138,18 +138,18 @@ website = الموقع
about-tooltip = ما يُستَحسَنُ أن تعلمه عن المسجل الأزرق about-tooltip = ما يُستَحسَنُ أن تعلمه عن المسجل الأزرق
area-tooltip = يحدد المنطقة المُراد تسجيلها area-tooltip = يحدد المنطقة المُراد تسجيلها
audio-source-tooltip = لاختيار مدخل الصوت audio-source-tooltip = لاختيار مدخل الصوت
audio-tooltip = يسجل باستخدام مدخل الصوت audio-tooltip = Mic audio recording
delay-tooltip = مُهلة قبل بدء التسجيل delay-tooltip = مُهلة قبل بدء التسجيل
folder-tooltip = لاختيار مكان التخزين folder-tooltip = لاختيار مكان التخزين
follow-mouse-tooltip = يميز مؤشر الفأرة عند التسجيل follow-mouse-tooltip = Make the grabbed area follow the mouse
format-tooltip = لاختيار صيغة الخَرج format-tooltip = لاختيار صيغة الخَرج
frames-tooltip = عدد الإطارات في الثانية frames-tooltip = عدد الإطارات في الثانية
hide-tooltip = لإخفاء نافذة المسجل الأزرق عند بدء التسجيل hide-tooltip = لإخفاء نافذة المسجل الأزرق عند بدء التسجيل
mouse-tooltip = يظهر مؤشر الفأرة عند التسجيل mouse-tooltip = يظهر مؤشر الفأرة عند التسجيل
bitrate-tooltip = ضبط معدل البت بوحدة KB bitrate-tooltip = Set video bitrate in KB/s
record-tooltip = يبدأ تسجيل الشاشة record-tooltip = يبدأ تسجيل الشاشة
screen-tooltip = يحدد الشاشة ليسجلها screen-tooltip = يحدد الشاشة ليسجلها
speaker-tooltip = يسجل باستخدام مخرج الصوت speaker-tooltip = Speakr sound recording
stop-tooltip = وقف تسجيل الشاشة stop-tooltip = وقف تسجيل الشاشة
video-tooltip = يسجل الشاشة video-tooltip = يسجل الشاشة
wayland-tooltip = غير مدعوم في وايلاند wayland-tooltip = غير مدعوم في وايلاند

View File

@ -138,12 +138,12 @@ audio-source-tooltip = Select audio source
audio-tooltip = Mic audio recording audio-tooltip = Mic audio recording
delay-tooltip = Delay time before starting record delay-tooltip = Delay time before starting record
folder-tooltip = Select storage location folder-tooltip = Select storage location
follow-mouse-tooltip = Highlight mouse follow-mouse-tooltip = Make the grabbed area follow the mouse
format-tooltip = Select file format format-tooltip = Select file format
frames-tooltip = Frames rate frames-tooltip = Frames rate
hide-tooltip = Hide window when start recording hide-tooltip = Hide window when start recording
mouse-tooltip = Mouse appears in video recording mouse-tooltip = Mouse appears in video recording
bitrate-tooltip = Set video bitrate in KB bitrate-tooltip = Set video bitrate in KB/s
record-tooltip = Start screen record record-tooltip = Start screen record
screen-tooltip = Select screen to record screen-tooltip = Select screen to record
speaker-tooltip = Speakr sound recording speaker-tooltip = Speakr sound recording

View File

@ -138,12 +138,12 @@ audio-source-tooltip = Select audio source
audio-tooltip = Mic audio recording audio-tooltip = Mic audio recording
delay-tooltip = Delay time before starting record delay-tooltip = Delay time before starting record
folder-tooltip = Select storage location folder-tooltip = Select storage location
follow-mouse-tooltip = Highlight mouse follow-mouse-tooltip = Make the grabbed area follow the mouse
format-tooltip = Select file format format-tooltip = Select file format
frames-tooltip = Frames rate frames-tooltip = Frames rate
hide-tooltip = Hide window when start recording hide-tooltip = Hide window when start recording
mouse-tooltip = Mouse appears in video recording mouse-tooltip = Mouse appears in video recording
bitrate-tooltip = Set video bitrate in KB bitrate-tooltip = Set video bitrate in KB/s
record-tooltip = Start screen record record-tooltip = Start screen record
screen-tooltip = Select screen to record screen-tooltip = Select screen to record
speaker-tooltip = Speakr sound recording speaker-tooltip = Speakr sound recording

File diff suppressed because it is too large Load Diff

View File

@ -59,6 +59,7 @@ fn default() {
set("default", "followmousecheck", "0"); set("default", "followmousecheck", "0");
set("default", "hidecheck", "0"); set("default", "hidecheck", "0");
set("default", "speakercheck", "0"); set("default", "speakercheck", "0");
set("default", "mode", "screen");
} }
fn merge_previous_version() -> Option<PathBuf> { fn merge_previous_version() -> Option<PathBuf> {

View File

@ -1,4 +1,5 @@
extern crate subprocess; extern crate subprocess;
use crate::config_management;
use crate::utils::{is_snap, is_wayland}; use crate::utils::{is_snap, is_wayland};
use crate::wayland_record::{CursorModeTypes, RecordTypes, WaylandRecorder}; use crate::wayland_record::{CursorModeTypes, RecordTypes, WaylandRecorder};
use chrono::prelude::*; use chrono::prelude::*;
@ -85,34 +86,46 @@ impl Ffmpeg {
} }
if self.record_video.is_active() && !is_wayland() { if self.record_video.is_active() && !is_wayland() {
let mut ffmpeg_command = FfmpegCommand::new(); let mode = config_management::get("default", "mode");
let format = "x11grab";
// if show mouse switch is enabled, draw the mouse to video let display = format!("{}+{},{}",
let draw_mouse = if self.record_mouse.is_active() { std::env::var("DISPLAY").unwrap_or_else(|_| ":0".to_string())
"-draw_mouse 1"
} else {
"-draw_mouse 0"
};
// record video with specified width and hight
ffmpeg_command.size(width.into(), height.into())
.format("x11grab").args(draw_mouse.split(' '))
.input(format!("{}+{},{}", std::env::var("DISPLAY").unwrap_or_else(|_| ":0".to_string())
.as_str(), .as_str(),
x, x,
y y
)); );
let mut ffmpeg_command = FfmpegCommand::new();
// Disable frame rate if value is zero // record video with specified width and hight
if self.record_frames.value() > 0.0 { if self.follow_mouse.is_active() && mode.as_str() == "screen" {
ffmpeg_command.rate(self.record_frames.value() as f32); let width = width as f32 * 0.95;
let height = height as f32 * 0.95;
ffmpeg_command.size(width as u32, height as u32);
} else {
ffmpeg_command.size(width.into(), height.into());
} }
// if show mouse switch is enabled, draw the mouse to video
if self.record_mouse.is_active() {
ffmpeg_command.args(["-draw_mouse", "1"]);
} else {
ffmpeg_command.args(["-draw_mouse", "0"]);
};
// if follow mouse switch is enabled, follow the mouse // if follow mouse switch is enabled, follow the mouse
if self.follow_mouse.is_active() { if self.follow_mouse.is_active() {
ffmpeg_command.args(["-follow_mouse", "centered"]); ffmpeg_command.args(["-follow_mouse", "centered"]);
} }
// Disable frame rate if value is zero
if self.record_frames.value() > 0.0 {
ffmpeg_command.args(["-framerate", &self.record_frames.value().to_string()]);
}
// Video format && input
ffmpeg_command.format(format)
.input(display);
// Disable bitrate if value is zero // Disable bitrate if value is zero
if self.record_bitrate.value() > 0.0 { if self.record_bitrate.value() > 0.0 {
ffmpeg_command.args([ ffmpeg_command.args([

View File

@ -140,13 +140,16 @@ pub fn build_ui(application: &Application) {
stop_button.hide(); stop_button.hide();
play_button.hide(); play_button.hide();
// Toggle button
config_management::set("default", "mode", "screen");
screen_grab_button.set_active(true);
// Comboboxs tooltip // Comboboxs tooltip
audio_source_combobox.set_tooltip_text(Some(&bundle.format_pattern(bundle.get_message("audio-source-tooltip").unwrap() audio_source_combobox.set_tooltip_text(Some(&bundle.format_pattern(bundle.get_message("audio-source-tooltip").unwrap()
.value().unwrap(), None, &mut vec![]).to_string())); .value().unwrap(), None, &mut vec![]).to_string()));
format_chooser_combobox.set_tooltip_text(Some(&bundle.format_pattern(bundle.get_message("format-tooltip").unwrap() format_chooser_combobox.set_tooltip_text(Some(&bundle.format_pattern(bundle.get_message("format-tooltip").unwrap()
.value().unwrap(), None, &mut vec![]).to_string())); .value().unwrap(), None, &mut vec![]).to_string()));
// Hide window grab button in Wayland
area_grab_button.set_tooltip_text(Some(&bundle.format_pattern(bundle.get_message("area-tooltip").unwrap() area_grab_button.set_tooltip_text(Some(&bundle.format_pattern(bundle.get_message("area-tooltip").unwrap()
.value().unwrap(), None, &mut vec![]).to_string())); .value().unwrap(), None, &mut vec![]).to_string()));
// Temporary solution // Temporary solution
@ -156,6 +159,7 @@ pub fn build_ui(application: &Application) {
//area_grab_button.set_can_target(false); //area_grab_button.set_can_target(false);
//area_grab_button.add_css_class("disabled"); //area_grab_button.add_css_class("disabled");
area_grab_button.set_sensitive(false); area_grab_button.set_sensitive(false);
// Hide window grab button in Wayland
area_grab_button.set_tooltip_text(Some(&bundle.format_pattern(bundle.get_message("wayland-tooltip").unwrap() area_grab_button.set_tooltip_text(Some(&bundle.format_pattern(bundle.get_message("wayland-tooltip").unwrap()
.value().unwrap(), None, &mut vec![]).to_string())); .value().unwrap(), None, &mut vec![]).to_string()));
} }
@ -241,23 +245,19 @@ pub fn build_ui(application: &Application) {
config_management::set_bool("default", "videocheck", switch.is_active()); config_management::set_bool("default", "videocheck", switch.is_active());
if switch.is_active() { if switch.is_active() {
_mouse_switch.set_sensitive(true); _mouse_switch.set_sensitive(true);
_follow_mouse_switch.set_sensitive(true);
} else { } else {
_mouse_switch.set_sensitive(false); _mouse_switch.set_sensitive(false);
_follow_mouse_switch.set_sensitive(false); _follow_mouse_switch.set_sensitive(false);
_audio_switch.set_active(true); _audio_switch.set_active(true);
_audio_switch.set_sensitive(true); _audio_switch.set_sensitive(true);
_mouse_switch.set_active(false); _mouse_switch.set_active(false);
_follow_mouse_switch.set_active(false);
} }
}); });
let _follow_mouse_switch = follow_mouse_switch.clone(); let _follow_mouse_switch = follow_mouse_switch.clone();
mouse_switch.connect_toggled(move |switch: &CheckButton| { mouse_switch.connect_toggled(move |switch: &CheckButton| {
config_management::set_bool("default", "mousecheck", switch.is_active()); config_management::set_bool("default", "mousecheck", switch.is_active());
if switch.is_active() {
_follow_mouse_switch.set_sensitive(true);
} else {
_follow_mouse_switch.set_active(false);
_follow_mouse_switch.set_sensitive(false);
}
}); });
let _mouse_switch = mouse_switch.clone(); let _mouse_switch = mouse_switch.clone();
audio_switch.connect_toggled(move |switch: &CheckButton| { audio_switch.connect_toggled(move |switch: &CheckButton| {
@ -548,6 +548,7 @@ pub fn build_ui(application: &Application) {
area_grab_label.set_label(&bundle.format_pattern(bundle.get_message("select-area").unwrap() area_grab_label.set_label(&bundle.format_pattern(bundle.get_message("select-area").unwrap()
.value().unwrap(), None, &mut vec![]).to_string()); .value().unwrap(), None, &mut vec![]).to_string());
area_grab_button.connect_clicked(move |_| { area_grab_button.connect_clicked(move |_| {
config_management::set("default", "mode", "area");
_area_chooser_window.show(); _area_chooser_window.show();
}); });
@ -556,6 +557,9 @@ pub fn build_ui(application: &Application) {
area_apply_label.set_label(&bundle.format_pattern(bundle.get_message("apply").unwrap() area_apply_label.set_label(&bundle.format_pattern(bundle.get_message("apply").unwrap()
.value().unwrap(), None, &mut vec![]).to_string()); .value().unwrap(), None, &mut vec![]).to_string());
area_set_button.connect_clicked(move |_| { area_set_button.connect_clicked(move |_| {
_area_capture
.borrow_mut()
.get_window_by_name(_area_chooser_window.title().unwrap().as_str());
_area_chooser_window.hide(); _area_chooser_window.hide();
}); });
@ -569,6 +573,7 @@ pub fn build_ui(application: &Application) {
screen_grab_label.set_label(&bundle.format_pattern(bundle.get_message("select-screen").unwrap() screen_grab_label.set_label(&bundle.format_pattern(bundle.get_message("select-screen").unwrap()
.value().unwrap(), None, &mut vec![]).to_string()); .value().unwrap(), None, &mut vec![]).to_string());
screen_grab_button.connect_clicked(move |_| { screen_grab_button.connect_clicked(move |_| {
config_management::set("default", "mode", "screen");
screen_grab_button_record_window.replace(false); screen_grab_button_record_window.replace(false);
_area_chooser_window.hide(); _area_chooser_window.hide();
_area_capture.borrow_mut().reset(); _area_capture.borrow_mut().reset();
@ -581,6 +586,7 @@ pub fn build_ui(application: &Application) {
window_grab_label.set_label(&bundle.format_pattern(bundle.get_message("select-window").unwrap() window_grab_label.set_label(&bundle.format_pattern(bundle.get_message("select-window").unwrap()
.value().unwrap(), None, &mut vec![]).to_string()); .value().unwrap(), None, &mut vec![]).to_string());
window_grab_button.connect_clicked(move |_| { window_grab_button.connect_clicked(move |_| {
config_management::set("default", "mode", "window");
_area_chooser_window.hide(); _area_chooser_window.hide();
if is_wayland() { if is_wayland() {
window_grab_button_record_window.replace(true); window_grab_button_record_window.replace(true);