Add --region option (#2013)
* Fix empty help message bug Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com> * Add --region option Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com> * Fix: initial selection even without --region * Enable 'full --region' Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com> * Enable 'screen --region' Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com> * Allow negative width/height Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com> * Fix screen intersection bug Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com> * Change output format of --print-geometry Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>
This commit is contained in:
33
src/main.cpp
33
src/main.cpp
@@ -15,6 +15,7 @@
|
||||
#include "src/utils/filenamehandler.h"
|
||||
#include "src/utils/pathinfo.h"
|
||||
#include "src/utils/systemnotification.h"
|
||||
#include "src/utils/valuehandler.h"
|
||||
#include <QApplication>
|
||||
#include <QDir>
|
||||
#include <QLibraryInfo>
|
||||
@@ -160,6 +161,9 @@ int main(int argc, char* argv[])
|
||||
CommandOption delayOption({ "d", "delay" },
|
||||
QObject::tr("Delay time in milliseconds"),
|
||||
QStringLiteral("milliseconds"));
|
||||
CommandOption regionOption("region",
|
||||
QObject::tr("Screenshot region to select"),
|
||||
QStringLiteral("WxH+X+Y or string"));
|
||||
CommandOption filenameOption({ "f", "filename" },
|
||||
QObject::tr("Set the filename pattern"),
|
||||
QStringLiteral("pattern"));
|
||||
@@ -217,10 +221,16 @@ int main(int argc, char* argv[])
|
||||
QObject::tr("Invalid delay, it must be higher than 0");
|
||||
const QString numberErr =
|
||||
QObject::tr("Invalid screen number, it must be non negative");
|
||||
const QString regionErr = QObject::tr(
|
||||
"Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'.");
|
||||
auto numericChecker = [](const QString& delayValue) -> bool {
|
||||
int value = delayValue.toInt();
|
||||
return value >= 0;
|
||||
};
|
||||
auto regionChecker = [](const QString& region) -> bool {
|
||||
Region valueHandler;
|
||||
return valueHandler.check(region);
|
||||
};
|
||||
|
||||
const QString pathErr =
|
||||
QObject::tr("Invalid path, must be an existing directory or a new file "
|
||||
@@ -246,6 +256,7 @@ int main(int argc, char* argv[])
|
||||
contrastColorOption.addChecker(colorChecker, colorErr);
|
||||
mainColorOption.addChecker(colorChecker, colorErr);
|
||||
delayOption.addChecker(numericChecker, delayErr);
|
||||
regionOption.addChecker(regionChecker, regionErr);
|
||||
pathOption.addChecker(pathChecker, pathErr);
|
||||
trayOption.addChecker(booleanChecker, booleanErr);
|
||||
autostartOption.addChecker(booleanChecker, booleanErr);
|
||||
@@ -263,6 +274,7 @@ int main(int argc, char* argv[])
|
||||
parser.AddOptions({ pathOption,
|
||||
clipboardOption,
|
||||
delayOption,
|
||||
regionOption,
|
||||
rawImageOption,
|
||||
selectionOption,
|
||||
uploadOption,
|
||||
@@ -273,6 +285,7 @@ int main(int argc, char* argv[])
|
||||
clipboardOption,
|
||||
pathOption,
|
||||
delayOption,
|
||||
regionOption,
|
||||
rawImageOption,
|
||||
uploadOption,
|
||||
pinOption },
|
||||
@@ -280,6 +293,7 @@ int main(int argc, char* argv[])
|
||||
parser.AddOptions({ pathOption,
|
||||
clipboardOption,
|
||||
delayOption,
|
||||
regionOption,
|
||||
rawImageOption,
|
||||
uploadOption },
|
||||
fullArgument);
|
||||
@@ -318,6 +332,7 @@ int main(int argc, char* argv[])
|
||||
path = QDir(path).absolutePath();
|
||||
}
|
||||
int delay = parser.value(delayOption).toInt();
|
||||
QString region = parser.value(regionOption);
|
||||
bool clipboard = parser.isSet(clipboardOption);
|
||||
bool raw = parser.isSet(rawImageOption);
|
||||
bool printGeometry = parser.isSet(selectionOption);
|
||||
@@ -326,6 +341,9 @@ int main(int argc, char* argv[])
|
||||
bool acceptOnSelect = parser.isSet(acceptOnSelectOption);
|
||||
DBusUtils dbusUtils;
|
||||
CaptureRequest req(CaptureRequest::GRAPHICAL_MODE, delay, path);
|
||||
if (!region.isEmpty()) {
|
||||
req.setInitialSelection(Region().value(region).toRect());
|
||||
}
|
||||
if (clipboard) {
|
||||
req.addTask(CaptureRequest::COPY);
|
||||
}
|
||||
@@ -379,12 +397,16 @@ int main(int argc, char* argv[])
|
||||
path = QDir(path).absolutePath();
|
||||
}
|
||||
int delay = parser.value(delayOption).toInt();
|
||||
QString region = parser.value(regionOption);
|
||||
bool clipboard = parser.isSet(clipboardOption);
|
||||
bool raw = parser.isSet(rawImageOption);
|
||||
bool upload = parser.isSet(uploadOption);
|
||||
// Not a valid command
|
||||
|
||||
CaptureRequest req(CaptureRequest::FULLSCREEN_MODE, delay);
|
||||
if (!region.isEmpty()) {
|
||||
req.setInitialSelection(Region().value(region).toRect());
|
||||
}
|
||||
if (clipboard) {
|
||||
req.addTask(CaptureRequest::COPY);
|
||||
}
|
||||
@@ -436,12 +458,23 @@ int main(int argc, char* argv[])
|
||||
path = QDir(path).absolutePath();
|
||||
}
|
||||
int delay = parser.value(delayOption).toInt();
|
||||
QString region = parser.value(regionOption);
|
||||
bool clipboard = parser.isSet(clipboardOption);
|
||||
bool raw = parser.isSet(rawImageOption);
|
||||
bool pin = parser.isSet(pinOption);
|
||||
bool upload = parser.isSet(uploadOption);
|
||||
|
||||
CaptureRequest req(CaptureRequest::SCREEN_MODE, delay, number);
|
||||
if (!region.isEmpty()) {
|
||||
if (region.startsWith("screen")) {
|
||||
// TODO use abstract logger
|
||||
QTextStream(stderr) << "The 'screen' command does not support "
|
||||
"'--region screen<N>'.\n"
|
||||
"See flameshot --help.\n";
|
||||
exit(1);
|
||||
}
|
||||
req.setInitialSelection(Region().value(region).toRect());
|
||||
}
|
||||
if (clipboard) {
|
||||
req.addTask(CaptureRequest::COPY);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user