From d079ef5e2a883d79756b36823ed39d35990f907c Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 21 Sep 2023 17:05:32 +0200 Subject: [PATCH] ScreenRecorder: Add setting for capturing the mouse cursor This adds a boolean setting for capturing the mouse cursor which is by default true. macOS would otherwise not capture it by default. Change-Id: Ic70eb4c70e1be8c452ff32ef6c54f072ccc31caa Reviewed-by: Cristian Adam --- src/plugins/screenrecorder/record.cpp | 4 ++++ src/plugins/screenrecorder/screenrecordersettings.cpp | 6 ++++++ src/plugins/screenrecorder/screenrecordersettings.h | 5 +---- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/plugins/screenrecorder/record.cpp b/src/plugins/screenrecorder/record.cpp index 422087abbd4..a3e2f52d416 100644 --- a/src/plugins/screenrecorder/record.cpp +++ b/src/plugins/screenrecorder/record.cpp @@ -322,6 +322,7 @@ QStringList RecordWidget::ffmpegParameters(const ClipInfo &clipInfo) const Internal::settings().recordSettings(); const QString frameRateStr = QString::number(rS.frameRate); const QString screenIdStr = QString::number(rS.screenId); + const QString captureCursorStr = Internal::settings().captureCursor() ? "1" : "0"; QStringList videoGrabParams; // see http://trac.ffmpeg.org/wiki/Capture/Desktop switch (HostOsInfo::hostOs()) { @@ -334,6 +335,7 @@ QStringList RecordWidget::ffmpegParameters(const ClipInfo &clipInfo) const ? screen->size() * screen->devicePixelRatio() : rS.cropRect.size()); videoGrabParams.append({"-f", "x11grab"}); + videoGrabParams.append({"-draw_mouse", captureCursorStr}); videoGrabParams.append({"-framerate", frameRateStr}); videoGrabParams.append({"-video_size", videoSize}); videoGrabParams.append({"-i", QString("%1+%2,%3").arg(x11display) @@ -348,6 +350,7 @@ QStringList RecordWidget::ffmpegParameters(const ClipInfo &clipInfo) const .arg(rS.cropRect.y())); } filter.append(":framerate=" + frameRateStr); + filter.append(":draw_mouse=" + captureCursorStr); filter.append(",hwdownload"); filter.append(",format=bgra"); videoGrabParams = { @@ -359,6 +362,7 @@ QStringList RecordWidget::ffmpegParameters(const ClipInfo &clipInfo) const case OsTypeMac: { videoGrabParams = { "-f", "avfoundation", + "-capture_cursor", captureCursorStr, "-framerate", frameRateStr, "-pixel_format", "bgr0", "-i", QString("Capture screen %1:none").arg(rS.screenId), diff --git a/src/plugins/screenrecorder/screenrecordersettings.cpp b/src/plugins/screenrecorder/screenrecordersettings.cpp index ae01d321175..c0f42a8307c 100644 --- a/src/plugins/screenrecorder/screenrecordersettings.cpp +++ b/src/plugins/screenrecorder/screenrecordersettings.cpp @@ -67,6 +67,11 @@ ScreenRecorderSettings::ScreenRecorderSettings() ffprobeTool.setDefaultValue(ffprobeDefault.toUserOutput()); ffprobeTool.setLabelText(Tr::tr("ffprobe tool:")); + captureCursor.setSettingsKey("CaptureCursor"); + captureCursor.setDefaultValue(true); + captureCursor.setLabel(Tr::tr("Capture the mouse cursor")); + captureCursor.setLabelPlacement(BoolAspect::LabelPlacement::AtCheckBox); + enableFileSizeLimit.setSettingsKey("EnableFileSizeLimit"); enableFileSizeLimit.setDefaultValue(true); enableFileSizeLimit.setLabel(Tr::tr("Size limit for intermediate output file")); @@ -145,6 +150,7 @@ ScreenRecorderSettings::ScreenRecorderSettings() Group { title(Tr::tr("Record settings")), Column { + captureCursor, Row { enableFileSizeLimit, fileSizeLimit, st }, Row { enableRtBuffer, rtBufferSize, st }, }, diff --git a/src/plugins/screenrecorder/screenrecordersettings.h b/src/plugins/screenrecorder/screenrecordersettings.h index 75527da6538..a38f7a38849 100644 --- a/src/plugins/screenrecorder/screenrecordersettings.h +++ b/src/plugins/screenrecorder/screenrecordersettings.h @@ -5,10 +5,6 @@ #include -QT_BEGIN_NAMESPACE -class QScreen; -QT_END_NAMESPACE - namespace ScreenRecorder::Internal { class ScreenRecorderSettings : public Utils::AspectContainer @@ -30,6 +26,7 @@ public: // Visible in Settings page Utils::FilePathAspect ffmpegTool{this}; Utils::FilePathAspect ffprobeTool{this}; + Utils::BoolAspect captureCursor{this}; Utils::BoolAspect enableFileSizeLimit{this}; Utils::IntegerAspect fileSizeLimit{this}; // in MB Utils::BoolAspect enableRtBuffer{this};