[krita] libs/ui: FEATURE: Add a command-line option to create a new image
Boudewijn Rempt
null at kde.org
Thu Oct 12 11:55:57 UTC 2017
Git commit 5f36b38630f073cb3439773f546920fa51de6420 by Boudewijn Rempt.
Committed on 12/10/2017 at 11:55.
Pushed by rempt into branch 'master'.
FEATURE: Add a command-line option to create a new image
CCMAIL: kimageshop at kde.org
M +31 -22 libs/ui/KisApplication.cpp
M +18 -17 libs/ui/KisApplication.h
M +70 -1 libs/ui/KisApplicationArguments.cpp
M +4 -0 libs/ui/KisApplicationArguments.h
https://commits.kde.org/krita/5f36b38630f073cb3439773f546920fa51de6420
diff --git a/libs/ui/KisApplication.cpp b/libs/ui/KisApplication.cpp
index 0fef183724c..9a6597a658c 100644
--- a/libs/ui/KisApplication.cpp
+++ b/libs/ui/KisApplication.cpp
@@ -1,23 +1,22 @@
-/* This file is part of the KDE project
- Copyright (C) 1998, 1999 Torben Weis <weis at kde.org>
- Copyright (C) 2009 Thomas Zander <zander at kde.org>
- Copyright (C) 2012 Boudewijn Rempt <boud at valdyas.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library 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. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
+/*
+ * Copyright (C) 1998, 1999 Torben Weis <weis at kde.org>
+ * Copyright (C) 2012 Boudewijn Rempt <boud at valdyas.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
#include "KisApplication.h"
@@ -384,6 +383,7 @@ bool KisApplication::start(const KisApplicationArguments &args)
processEvents();
initializeGlobals(args);
+ const bool doNewImage = args.doNewImage();
const bool doTemplate = args.doTemplate();
const bool print = args.print();
const bool exportAs = args.exportAs();
@@ -397,7 +397,7 @@ bool KisApplication::start(const KisApplicationArguments &args)
// TODO: fix print & exportAsPdf to work without mainwindow shown
const bool showmainWindow = !exportAs; // would be !batchRun;
- const bool showSplashScreen = !m_batchRun && qEnvironmentVariableIsEmpty("NOSPLASH");// && qgetenv("XDG_CURRENT_DESKTOP") != "GNOME";
+ const bool showSplashScreen = !m_batchRun && qEnvironmentVariableIsEmpty("NOSPLASH");
if (showSplashScreen && d->splashScreen) {
d->splashScreen->show();
d->splashScreen->repaint();
@@ -475,6 +475,16 @@ bool KisApplication::start(const KisApplicationArguments &args)
connect(this, &KisApplication::aboutToQuit, &KisSpinBoxUnitManagerFactory::clearUnitManagerBuilder); //ensure the builder is destroyed when the application leave.
//the new syntax slot syntax allow to connect to a non q_object static method.
+
+ // Create a new image, if needed
+ if (doNewImage) {
+ KisDocument *doc = args.image();
+ if (doc) {
+ KisPart::instance()->addDocument(doc);
+ m_mainWindow->addViewAndNotifyLoadingCompleted(doc);
+ }
+ }
+
// Get the command line arguments which we have to parse
int argsCount = args.filenames().count();
if (argsCount > 0) {
@@ -494,7 +504,6 @@ bool KisApplication::start(const KisApplicationArguments &args)
// now try to load
}
else {
-
if (exportAs) {
QString outputMimetype = KisMimeDatabase::mimeTypeForFile(exportFileName);
if (outputMimetype == "application/octetstream") {
diff --git a/libs/ui/KisApplication.h b/libs/ui/KisApplication.h
index c3dfac8a87e..de7e9371025 100644
--- a/libs/ui/KisApplication.h
+++ b/libs/ui/KisApplication.h
@@ -1,21 +1,22 @@
-/* This file is part of the KDE project
- Copyright (C) 1998, 1999 Torben Weis <weis at kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library 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. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+/*
+ * Copyright (C) 1998, 1999 Torben Weis <weis at kde.org>
+ * Copyright (C) 2012 Boudewijn Rempt <boud at valdyas.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
-*/
+ */
#ifndef KIS_APPLICATION_H
#define KIS_APPLICATION_H
diff --git a/libs/ui/KisApplicationArguments.cpp b/libs/ui/KisApplicationArguments.cpp
index 94ee37756bf..b843c765cd5 100644
--- a/libs/ui/KisApplicationArguments.cpp
+++ b/libs/ui/KisApplicationArguments.cpp
@@ -29,6 +29,8 @@
#include <QBuffer>
#include <klocalizedstring.h>
+#include <KisPart.h>
+#include <KisDocument.h>
struct Q_DECL_HIDDEN KisApplicationArguments::Private
{
@@ -48,6 +50,12 @@ struct Q_DECL_HIDDEN KisApplicationArguments::Private
bool canvasOnly {false};
bool noSplash {false};
bool fullScreen {false};
+
+ bool newImage {false};
+ QString colorModel {"RGBA"};
+ QString colorDepth {"U8"};
+ int width {2000};
+ int height {5000};
};
@@ -69,6 +77,20 @@ KisApplicationArguments::KisApplicationArguments(const QApplication &app)
parser.addHelpOption();
parser.addOption(QCommandLineOption(QStringList() << QLatin1String("print"), i18n("Only print and exit")));
parser.addOption(QCommandLineOption(QStringList() << QLatin1String("template"), i18n("Open a new document with a template")));
+ parser.addOption(QCommandLineOption(QStringList() << QLatin1String("new-image"), i18n("Create a new image on startup.\n"
+ "Possible colorspace values are:\n"
+ " * RGBA\n"
+ " * XYZA\n"
+ " * LABA\n"
+ " * CMYKA\n"
+ " * GRAY\n"
+ " * YCbCrA\n"
+ "Possible channel depth arguments are\n"
+ " * U8 (8 bits integer)\n"
+ " * U16 (16 bits integer)\n"
+ " * F16 (16 bits floating point)\n"
+ " * F32 (32 bits floating point)\n"),
+ QLatin1String("colorspace,depth,width,height")));
parser.addOption(QCommandLineOption(QStringList() << QLatin1String("workspace"), i18n("The name of the workspace to open Krita with"), QLatin1String("workspace")));
parser.addOption(QCommandLineOption(QStringList() << QLatin1String("canvasonly"), i18n("Start Krita in canvas-only mode")));
parser.addOption(QCommandLineOption(QStringList() << QLatin1String("nosplash"), i18n("Do not show the splash screen")));
@@ -97,9 +119,23 @@ KisApplicationArguments::KisApplicationArguments(const QApplication &app)
}
}
+ QString newImageValues = parser.value("new-image");
+ d->newImage = !newImageValues.isEmpty();
+ if (d->newImage) {
+ QStringList v = newImageValues.split(",");
+ if (v.size() != 4) {
+ d->newImage = false;
+ qWarning() << "Cannot create a new image: please specify colormodel, depth, width and height.";
+ }
+ d->colorModel = v[0].toUpper();
+ d->colorDepth = v[1].toUpper();
+ d->width = v[2].toInt();
+ d->height = v[3].toInt();
+ }
+
+
d->exportFileName = parser.value("export-filename");
d->workspace = parser.value("workspace");
-
d->doTemplate = parser.isSet("template");
d->print = parser.isSet("print");
d->exportAs = parser.isSet("export");
@@ -169,6 +205,14 @@ QByteArray KisApplicationArguments::serialize()
ds << d->canvasOnly;
ds << d->noSplash;
ds << d->fullScreen;
+ ds << d->newImage;
+ ds << d->height;
+ ds << d->width;
+ ds << d->height;
+ ds << d->colorModel;
+ ds << d->colorDepth;
+
+
buf.close();
@@ -201,6 +245,12 @@ KisApplicationArguments KisApplicationArguments::deserialize(QByteArray &seriali
ds >> args.d->canvasOnly;
ds >> args.d->noSplash;
ds >> args.d->fullScreen;
+ ds >> args.d->newImage;
+ ds >> args.d->height;
+ ds >> args.d->width;
+ ds >> args.d->height;
+ ds >> args.d->colorModel;
+ ds >> args.d->colorDepth;
buf.close();
@@ -266,3 +316,22 @@ bool KisApplicationArguments::fullScreen() const
{
return d->fullScreen;
}
+
+bool KisApplicationArguments::doNewImage() const
+{
+ return d->newImage;
+}
+
+KisDocument *KisApplicationArguments::image() const
+{
+ KisDocument *doc = KisPart::instance()->createDocument();
+ qDebug() << d->colorDepth << d->colorDepth;
+ const KoColorSpace *cs = KoColorSpaceRegistry::instance()->colorSpace(d->colorModel, d->colorDepth, "");
+ if (!cs) {
+ qWarning() << "Could not create the colorspace for the new image. Check the colorspace and depth arguments.";
+ return 0;
+ }
+
+ doc->newImage(i18n("Unnamed"), d->width, d->height, cs, KoColor(QColor(Qt::white), cs), false, 1, "", 100.0);
+ return doc;
+}
diff --git a/libs/ui/KisApplicationArguments.h b/libs/ui/KisApplicationArguments.h
index b3ae335f25e..9d24cb8cf73 100644
--- a/libs/ui/KisApplicationArguments.h
+++ b/libs/ui/KisApplicationArguments.h
@@ -24,6 +24,7 @@
class QApplication;
class QByteArray;
class QStringList;
+class KisDocument;
#include "kritaui_export.h"
@@ -52,6 +53,9 @@ public:
bool canvasOnly() const;
bool noSplash() const;
bool fullScreen() const;
+ bool doNewImage() const;
+ KisDocument *image() const;
+
private:
More information about the kimageshop
mailing list