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-top">3</property>
<property name="margin-bottom">3</property>
<property name="active">True</property>
<property name="has-tooltip">True</property>
<child>
<object class="GtkGrid">

View File

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

View File

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

View File

@ -138,12 +138,12 @@ audio-source-tooltip = Select audio source
audio-tooltip = Mic audio recording
delay-tooltip = Delay time before starting record
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
frames-tooltip = Frames rate
hide-tooltip = Hide window when start 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
screen-tooltip = Select screen to record
speaker-tooltip = Speakr sound recording

View File

@ -138,12 +138,12 @@ audio-source-tooltip = Select audio source
audio-tooltip = Mic audio recording
delay-tooltip = Delay time before starting record
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
frames-tooltip = Frames rate
hide-tooltip = Hide window when start 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
screen-tooltip = Select screen to record
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", "hidecheck", "0");
set("default", "speakercheck", "0");
set("default", "mode", "screen");
}
fn merge_previous_version() -> Option<PathBuf> {

View File

@ -1,4 +1,5 @@
extern crate subprocess;
use crate::config_management;
use crate::utils::{is_snap, is_wayland};
use crate::wayland_record::{CursorModeTypes, RecordTypes, WaylandRecorder};
use chrono::prelude::*;
@ -85,34 +86,46 @@ impl Ffmpeg {
}
if self.record_video.is_active() && !is_wayland() {
let mode = config_management::get("default", "mode");
let format = "x11grab";
let display = format!("{}+{},{}",
std::env::var("DISPLAY").unwrap_or_else(|_| ":0".to_string())
.as_str(),
x,
y
);
let mut ffmpeg_command = FfmpegCommand::new();
// if show mouse switch is enabled, draw the mouse to video
let draw_mouse = if self.record_mouse.is_active() {
"-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(),
x,
y
));
// Disable frame rate if value is zero
if self.record_frames.value() > 0.0 {
ffmpeg_command.rate(self.record_frames.value() as f32);
if self.follow_mouse.is_active() && mode.as_str() == "screen" {
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 self.follow_mouse.is_active() {
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
if self.record_bitrate.value() > 0.0 {
ffmpeg_command.args([

View File

@ -140,13 +140,16 @@ pub fn build_ui(application: &Application) {
stop_button.hide();
play_button.hide();
// Toggle button
config_management::set("default", "mode", "screen");
screen_grab_button.set_active(true);
// Comboboxs tooltip
audio_source_combobox.set_tooltip_text(Some(&bundle.format_pattern(bundle.get_message("audio-source-tooltip").unwrap()
.value().unwrap(), None, &mut vec![]).to_string()));
format_chooser_combobox.set_tooltip_text(Some(&bundle.format_pattern(bundle.get_message("format-tooltip").unwrap()
.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()
.value().unwrap(), None, &mut vec![]).to_string()));
// Temporary solution
@ -156,6 +159,7 @@ pub fn build_ui(application: &Application) {
//area_grab_button.set_can_target(false);
//area_grab_button.add_css_class("disabled");
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()
.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());
if switch.is_active() {
_mouse_switch.set_sensitive(true);
_follow_mouse_switch.set_sensitive(true);
} else {
_mouse_switch.set_sensitive(false);
_follow_mouse_switch.set_sensitive(false);
_audio_switch.set_active(true);
_audio_switch.set_sensitive(true);
_mouse_switch.set_active(false);
_follow_mouse_switch.set_active(false);
}
});
let _follow_mouse_switch = follow_mouse_switch.clone();
mouse_switch.connect_toggled(move |switch: &CheckButton| {
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();
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()
.value().unwrap(), None, &mut vec![]).to_string());
area_grab_button.connect_clicked(move |_| {
config_management::set("default", "mode", "area");
_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()
.value().unwrap(), None, &mut vec![]).to_string());
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();
});
@ -569,6 +573,7 @@ pub fn build_ui(application: &Application) {
screen_grab_label.set_label(&bundle.format_pattern(bundle.get_message("select-screen").unwrap()
.value().unwrap(), None, &mut vec![]).to_string());
screen_grab_button.connect_clicked(move |_| {
config_management::set("default", "mode", "screen");
screen_grab_button_record_window.replace(false);
_area_chooser_window.hide();
_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()
.value().unwrap(), None, &mut vec![]).to_string());
window_grab_button.connect_clicked(move |_| {
config_management::set("default", "mode", "window");
_area_chooser_window.hide();
if is_wayland() {
window_grab_button_record_window.replace(true);