Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_config.cc
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2002 Patrick Julien <freak@codepimps.org>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#include "kis_config.h"
8
9#include <QtGlobal>
10#include <QApplication>
11#include <QScreen>
12#include <QThread>
13#include <QStringList>
14#include <QSettings>
15#include <QStandardPaths>
16#include <QDebug>
17#include <QFileInfo>
18#include <QScreen>
19
20#include <kconfig.h>
21
22#include <KisDocument.h>
23#include <KisResourceLocator.h>
24
25#include <KoColor.h>
28#include <KoColorProfile.h>
29#include <KoPointerEvent.h>
30
31#include <kis_debug.h>
32#include <kis_types.h>
33
35#include "kis_config_notifier.h"
36#include "kis_snap_config.h"
37
38#include <config-ocio.h>
39
40#include <kis_color_manager.h>
42#include <KisUsageLogger.h>
43#include <kis_image_config.h>
45#include <QSurfaceFormat>
46
47#if defined Q_OS_WIN && QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
48# include <QtGui/private/qguiapplication_p.h>
49# include <QtGui/qpa/qplatformintegration.h>
50#endif
51
52#ifdef Q_OS_ANDROID
53#include <KisAndroidUtils.h>
54#endif
55
57 : m_cfg( KSharedConfig::openConfig()->group(""))
58 , m_readOnly(readOnly)
59{
60 if (!readOnly) {
61 KIS_SAFE_ASSERT_RECOVER_RETURN(qApp && qApp->thread() == QThread::currentThread());
62 }
63}
64
66{
67 if (m_readOnly) return;
68
69 if (qApp && qApp->thread() != QThread::currentThread()) {
70 dbgKrita.noquote() << "WARNING: KisConfig: requested config synchronization from nonGUI thread! Called from:" << kisBacktrace();
71 return;
72 }
73
74 m_cfg.sync();
75}
76
78{
79 KisUsageLogger::writeSysInfo("Current Settings\n");
80 KisUsageLogger::writeSysInfo(QString(" Current Swap Location: %1").arg(KisImageConfig(true).swapDir()));
81 KisUsageLogger::writeSysInfo(QString(" Current Swap Location writable: %1").arg(QFileInfo(KisImageConfig(true).swapDir()).isWritable() ? "true" : "false"));
82 KisUsageLogger::writeSysInfo(QString(" Undo Enabled: %1").arg(undoEnabled()? "true" : "false"));
83 KisUsageLogger::writeSysInfo(QString(" Undo Stack Limit: %1").arg(undoStackLimit()));
84 KisUsageLogger::writeSysInfo(QString(" Use OpenGL: %1").arg(useOpenGL() ? "true" : "false"));
85 KisUsageLogger::writeSysInfo(QString(" Use OpenGL Texture Buffer: %1").arg(useOpenGLTextureBuffer() ? "true" : "false"));
86 KisUsageLogger::writeSysInfo(QString(" Disable Vector Optimizations: %1").arg(disableVectorOptimizations() ? "true" : "false"));
87 KisUsageLogger::writeSysInfo(QString(" Disable AVX Optimizations: %1").arg(disableAVXOptimizations() ? "true" : "false"));
88 KisUsageLogger::writeSysInfo(QString(" Canvas State: %1").arg(canvasState()));
89 KisUsageLogger::writeSysInfo(QString(" Autosave Interval: %1").arg(autoSaveInterval()));
90 KisUsageLogger::writeSysInfo(QString(" Use Backup Files: %1").arg(backupFile() ? "true" : "false"));
91 KisUsageLogger::writeSysInfo(QString(" Number of Backups Kept: %1").arg(m_cfg.readEntry("numberofbackupfiles", 1)));
92 KisUsageLogger::writeSysInfo(QString(" Backup File Suffix: %1").arg(m_cfg.readEntry("backupfilesuffix", "~")));
93
94 QString backupDir;
95 switch(m_cfg.readEntry("backupfilelocation", 0)) {
96 case 1:
97 backupDir = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
98 break;
99 case 2:
100 backupDir = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
101 break;
102 default:
103 // Do nothing: the empty string is user file location
104 backupDir = "Same Folder as the File";
105 }
106 KisUsageLogger::writeSysInfo(QString(" Backup Location: %1").arg(backupDir));
107 KisUsageLogger::writeSysInfo(QString(" Backup Location writable: %1").arg(QFileInfo(backupDir).isWritable() ? "true" : "false"));
108 KisUsageLogger::writeSysInfo(QString(" Resource Location: %1").arg(m_cfg.readEntry(KisResourceLocator::resourceLocationKey)));
109
110 KisUsageLogger::writeSysInfo(QString(" Use Win8 Pointer Input: %1").arg(useWin8PointerInput() ? "true" : "false"));
111 KisUsageLogger::writeSysInfo(QString(" Use RightMiddleTabletButton Workaround: %1").arg(useRightMiddleTabletButtonWorkaround() ? "true" : "false"));
112 KisUsageLogger::writeSysInfo(QString(" Levels of Detail Enabled: %1").arg(levelOfDetailEnabled() ? "true" : "false"));
113 KisUsageLogger::writeSysInfo(QString(" Use Zip64: %1").arg(useZip64() ? "true" : "false"));
114
116
117 // Tablet API information
118#if defined Q_OS_WIN && QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
119{
120 auto tabletAPIName = [] (bool useWinTab) {
121 return useWinTab ? "WinTab" : "WinInk";
122 };
123
124 QString actualTabletProtocol = "<unknown>";
125
126 using QWindowsApplication = QNativeInterface::Private::QWindowsApplication;
127 if (auto nativeWindowsApp = dynamic_cast<QWindowsApplication *>(QGuiApplicationPrivate::platformIntegration())) {
128 actualTabletProtocol = tabletAPIName(nativeWindowsApp->isWinTabEnabled());
129 } else {
130 KisUsageLogger::log("WARNING: Failed to fetch WinTab protocol status: QWindowsApplication is not available");
131 }
132
133 KisUsageLogger::writeSysInfo("Tablet API Information\n");
134 KisUsageLogger::writeSysInfo(QString(" User-selected tablet API: %1").arg(tabletAPIName(!useWin8PointerInput())));
135 KisUsageLogger::writeSysInfo(QString(" Actually used tablet API: %1").arg(actualTabletProtocol));
137}
138#endif
139
140}
141
143{
144 if (defaultValue) {
145 return TOUCH_PAINTING_AUTO;
146 } else {
147 int value = m_cfg.readEntry("touchPainting", int(TOUCH_PAINTING_AUTO));
148 return TouchPainting(value);
149 }
150}
151
153{
154 m_cfg.writeEntry("touchPainting", int(value));
156}
157
159{
160 switch (touchPainting()) {
162 return false;
164 return true;
165 default:
166 // Automatic detection: enable or disable touch input based on whether
167 // we've received a tablet input during this session and therefore know
168 // that the user has a pen available.
170 }
171}
172
173bool KisConfig::useProjections(bool defaultValue) const
174{
175 return (defaultValue ? true : m_cfg.readEntry("useProjections", true));
176}
177
178void KisConfig::setUseProjections(bool useProj) const
179{
180 m_cfg.writeEntry("useProjections", useProj);
181}
182
183bool KisConfig::undoEnabled(bool defaultValue) const
184{
185 return (defaultValue ? true : m_cfg.readEntry("undoEnabled", true));
186}
187
188void KisConfig::setUndoEnabled(bool undo) const
189{
190 m_cfg.writeEntry("undoEnabled", undo);
191}
192
193int KisConfig::undoStackLimit(bool defaultValue) const
194{
195 return (defaultValue ? 200 : m_cfg.readEntry("undoStackLimit", 200));
196}
197
198void KisConfig::setUndoStackLimit(int limit) const
199{
200 m_cfg.writeEntry("undoStackLimit", limit);
201}
202
203bool KisConfig::useCumulativeUndoRedo(bool defaultValue) const
204{
205 return (defaultValue ? false : m_cfg.readEntry("useCumulativeUndoRedo",false));
206}
207
209{
210 m_cfg.writeEntry("useCumulativeUndoRedo", value);
211}
212
214{
215 if (defaultValue) {
217 }
218
220 data.read(&m_cfg);
221 return data;
222}
223
228
229qint32 KisConfig::defImageWidth(bool defaultValue) const
230{
231 return (defaultValue ? 2480 : m_cfg.readEntry("imageWidthDef", 2480));
232}
233
234qint32 KisConfig::defImageHeight(bool defaultValue) const
235{
236 return (defaultValue ? 3508 : m_cfg.readEntry("imageHeightDef", 3508));
237}
238
239qreal KisConfig::defImageResolution(bool defaultValue) const
240{
241 return (defaultValue ? 300.0 : m_cfg.readEntry("imageResolutionDef", 300.0)) / 72.0;
242}
243
244QString KisConfig::defColorModel(bool defaultValue) const
245{
246 return (defaultValue ? KoColorSpaceRegistry::instance()->rgb8()->colorModelId().id()
247 : m_cfg.readEntry("colorModelDef", KoColorSpaceRegistry::instance()->rgb8()->colorModelId().id()));
248}
249
250void KisConfig::defColorModel(const QString & model) const
251{
252 m_cfg.writeEntry("colorModelDef", model);
253}
254
255QString KisConfig::defaultColorDepth(bool defaultValue) const
256{
257 return (defaultValue ? KoColorSpaceRegistry::instance()->rgb8()->colorDepthId().id()
258 : m_cfg.readEntry("colorDepthDef", KoColorSpaceRegistry::instance()->rgb8()->colorDepthId().id()));
259}
260
261void KisConfig::setDefaultColorDepth(const QString & depth) const
262{
263 m_cfg.writeEntry("colorDepthDef", depth);
264}
265
266QString KisConfig::defColorProfile(bool defaultValue) const
267{
268 return (defaultValue ? KoColorSpaceRegistry::instance()->rgb8()->profile()->name() :
269 m_cfg.readEntry("colorProfileDef",
270 KoColorSpaceRegistry::instance()->rgb8()->profile()->name()));
271}
272
273void KisConfig::defColorProfile(const QString & profile) const
274{
275 m_cfg.writeEntry("colorProfileDef", profile);
276}
277
278void KisConfig::defImageWidth(qint32 width) const
279{
280 m_cfg.writeEntry("imageWidthDef", width);
281}
282
283void KisConfig::defImageHeight(qint32 height) const
284{
285 m_cfg.writeEntry("imageHeightDef", height);
286}
287
288void KisConfig::defImageResolution(qreal res) const
289{
290 m_cfg.writeEntry("imageResolutionDef", res*72.0);
291}
292
294{
295 return defaultValue ? 100.0 : m_cfg.readEntry("preferredVectorImportResolution", 100.0);
296}
297
299{
300 m_cfg.writeEntry("preferredVectorImportResolution", value);
301}
302
303bool KisConfig::useDefaultColorSpace(bool defaultvalue) const
304{
305 return (defaultvalue? false: m_cfg.readEntry("useDefaultColorSpace", false));
306}
307
309{
310 m_cfg.writeEntry("useDefaultColorSpace", value);
311}
312
313// brush cursor settings
314
315void cleanOldCursorStyleKeys(KConfigGroup &cfg)
316{
317 if (cfg.hasKey("newCursorStyle") &&
318 cfg.hasKey("newOutlineStyle")) {
319
320 cfg.deleteEntry("cursorStyleDef");
321 }
322}
323
325{
326 if (defaultValue) {
328 }
329
330
331 int style = m_cfg.readEntry("newCursorStyle", int(-1));
332
333 if (style < 0) {
334 // old style format
335 style = m_cfg.readEntry("cursorStyleDef", int(OLD_CURSOR_STYLE_OUTLINE));
336
337 switch (style) {
339 style = CURSOR_STYLE_TOOLICON;
340 break;
344 break;
346 style = CURSOR_STYLE_POINTER;
347 break;
351 break;
355 break;
359 break;
363 break;
364 default:
365 style = -1;
366 }
367 }
368
370
371 // compatibility with future versions
372 if (style < 0 || style >= N_CURSOR_STYLE_SIZE) {
374 }
375
376 return (CursorStyle) style;
377}
378
380{
381 m_cfg.writeEntry("newCursorStyle", (int)style);
382}
383
384QColor KisConfig::getCursorMainColor(bool defaultValue) const
385{
386 QColor col;
387 col.setRgbF(1.0, 0.0, 1.0);
388 return (defaultValue ? col : m_cfg.readEntry("cursorMaincColor", col));
389}
390
391void KisConfig::setCursorMainColor(const QColor &v) const
392{
393 m_cfg.writeEntry("cursorMaincColor", v);
394}
395
397{
398 if (defaultValue) {
399 return OUTLINE_FULL;
400 }
401
402 int style = m_cfg.readEntry("newOutlineStyle", int(-1));
403
404 if (style < 0) {
405 // old style format
406 style = m_cfg.readEntry("cursorStyleDef", int(OLD_CURSOR_STYLE_OUTLINE));
407
408 switch (style) {
416 style = OUTLINE_NONE;
417 break;
423 style = OUTLINE_FULL;
424 break;
425 default:
426 style = -1;
427 }
428 }
429
431
432 // compatibility with future versions
433 if (style < 0 || style >= N_OUTLINE_STYLE_SIZE) {
434 style = OUTLINE_FULL;
435 }
436
437 return (OutlineStyle) style;
438}
439
441{
442 m_cfg.writeEntry("newOutlineStyle", (int)style);
443}
444
446{
447 if (defaultValue) {
448 return OUTLINE_NONE;
449 }
450
451 int style = m_cfg.readEntry("lastUsedOutlineStyle", int(-1));
452
453 return (OutlineStyle) style;
454}
455
457{
458 m_cfg.writeEntry("lastUsedOutlineStyle", (int)style);
459}
460
461// eraser cursor settings
462
463bool KisConfig::separateEraserCursor(bool defaultValue) const
464{
465 return (defaultValue ? false : m_cfg.readEntry("separateEraserCursor", false));
466}
467
469{
470 m_cfg.writeEntry("separateEraserCursor", value);
471}
472
474{
475 if (defaultValue) {
476 return CURSOR_STYLE_ERASER;
477 }
478
479 int style = m_cfg.readEntry("eraserCursorStyle", int(-1));
480
481 // compatibility with future versions
482 if (style < 0 || style >= N_CURSOR_STYLE_SIZE) {
483 style = CURSOR_STYLE_ERASER;
484 }
485
486 return (CursorStyle) style;
487}
488
490{
491 m_cfg.writeEntry("eraserCursorStyle", (int)style);
492}
493
494QColor KisConfig::getEraserCursorMainColor(bool defaultValue) const
495{
496 QColor col;
497 col.setRgbF(0.501961, 1.0, 0.501961);
498 return (defaultValue ? col : m_cfg.readEntry("eraserCursorMaincColor", col));
499}
500
501void KisConfig::setEraserCursorMainColor(const QColor &v) const
502{
503 m_cfg.writeEntry("eraserCursorMaincColor", v);
504}
505
507{
508 if (defaultValue) {
509 return OUTLINE_FULL;
510 }
511
512 int style = m_cfg.readEntry("eraserOutlineStyle", int(-1));
513
514 // compatibility with future versions
515 if (style < 0 || style >= N_OUTLINE_STYLE_SIZE) {
516 style = OUTLINE_FULL;
517 }
518
519 return (OutlineStyle) style;
520}
521
523{
524 m_cfg.writeEntry("eraserOutlineStyle", (int)style);
525}
526
528{
529 if (!defaultValue) {
530 int style = m_cfg.readEntry("colorSamplerPreviewStyle", int(ColorSamplerPreviewStyle::Circle));
531 if (style >= 0 && style < int(ColorSamplerPreviewStyle::Count)) {
532 return ColorSamplerPreviewStyle(style);
533 }
534 }
536}
537
539{
540 m_cfg.writeEntry("colorSamplerPreviewStyle", int(style));
542}
543
545{
546 int def = 180;
547 if (!defaultValue) {
548 return m_cfg.readEntry("colorSamplerPreviewCircleDiameter", def);
549 }
550 return def;
551}
552
554{
555 m_cfg.writeEntry("colorSamplerPreviewCircleDiameter", diameter);
556}
557
559{
560 qreal def = 12; // percentage
561 if (!defaultValue) {
562 return m_cfg.readEntry("colorSamplerPreviewCircleThickness", def);
563 }
564 return def;
565}
566
568{
569 m_cfg.writeEntry("colorSamplerPreviewCircleThickness", thickness);
570}
571
573{
574 bool def = true;
575 if (!defaultValue) {
576 return m_cfg.readEntry("colorSamplerPreviewCircleOutlineEnabled", def);
577 }
578 return def;
579}
580
582{
583 m_cfg.writeEntry("colorSamplerPreviewCircleOutlineEnabled", enabled);
584}
585
587{
588 bool def = true;
589 if (!defaultValue) {
590 return m_cfg.readEntry("colorSamplerPreviewCircleExtraCirclesEnabled", def);
591 }
592 return def;
593}
594
596{
597 m_cfg.writeEntry("colorSamplerPreviewCircleExtraCirclesEnabled", enabled);
598}
599
600bool KisConfig::useDirtyPresets(bool defaultValue) const
601{
602 return (defaultValue ? false : m_cfg.readEntry("useDirtyPresets", true));
603}
605{
606 m_cfg.writeEntry("useDirtyPresets",value);
608}
609
610bool KisConfig::useEraserBrushSize(bool defaultValue) const
611{
612 return (defaultValue ? false : m_cfg.readEntry("useEraserBrushSize", false));
613}
614
616{
617 m_cfg.writeEntry("useEraserBrushSize",value);
619}
620
621bool KisConfig::useEraserBrushOpacity(bool defaultValue) const
622{
623 return (defaultValue ? false : m_cfg.readEntry("useEraserBrushOpacity",false));
624}
625
627{
628 m_cfg.writeEntry("useEraserBrushOpacity",value);
630}
631
632QPoint KisConfig::getDefaultGridSpacing(bool defaultValue) const
633{
634 return (defaultValue ? QPoint(16, 16) : m_cfg.readEntry("defaultGridSpacing", QPoint(16, 16)));
635}
636
637void KisConfig::setDefaultGridSpacing(QPoint gridSpacing)
638{
639 m_cfg.writeEntry("defaultGridSpacing", gridSpacing);
640}
641
642QString KisConfig::getMDIBackgroundColor(bool defaultValue) const
643{
644 QColor col(77, 77, 77);
646 kol.fromQColor(col);
647 QString xml = kol.toXML();
648 return (defaultValue ? xml : m_cfg.readEntry("mdiBackgroundColorXML", xml));
649}
650
651void KisConfig::setMDIBackgroundColor(const QString &v) const
652{
653 m_cfg.writeEntry("mdiBackgroundColorXML", v);
654}
655
656QString KisConfig::getMDIBackgroundImage(bool defaultValue) const
657{
658 return (defaultValue ? "" : m_cfg.readEntry("mdiBackgroundImage", ""));
659}
660
661void KisConfig::setMDIBackgroundImage(const QString &filename) const
662{
663 m_cfg.writeEntry("mdiBackgroundImage", filename);
664}
665
667{
668 return (defaultValue ? true : m_cfg.readEntry("enableCanvasSurfaceColorSpaceManagement",true));
669}
670
672{
673 m_cfg.writeEntry("enableCanvasSurfaceColorSpaceManagement", value);
674}
675
677 QString modeStr = defaultValue ? "preferred" : m_cfg.readEntry("canvasSurfaceColorSpaceManagementMode", "preferred");
678
679 if (modeStr == "preferred") {
681 } else if (modeStr == "rec709g22") {
683 } else if (modeStr == "rec709g10") {
685 } else if (modeStr == "rec2020pq") {
687 } else if (modeStr == "unmanaged") {
689 } else {
691 }
692}
693
695 QString modeStr;
696
697 switch (value) {
699 modeStr = "preferred";
700 break;
702 modeStr = "rec709g22";
703 break;
705 modeStr = "rec709g10";
706 break;
708 modeStr = "rec2020pq";
709 break;
711 modeStr = "unmanaged";
712 break;
713 }
714
715 m_cfg.writeEntry("canvasSurfaceColorSpaceManagementMode", modeStr);
716}
717
718
720{
721 QString modeStr = defaultValue ? "auto" : settings->value("canvasSurfaceBitDepthMode", "auto").toString();
722
723 if (modeStr == "auto") {
725 } else if (modeStr == "8bit") {
727 } else if (modeStr == "10bit") {
729 }
730
732}
733
735{
736 QString modeStr;
737
738 switch (value) {
740 modeStr = "auto";
741 break;
743 modeStr = "8bit";
744 break;
746 modeStr = "10bit";
747 break;
748 }
749
750 settings->setValue("canvasSurfaceBitDepthMode", modeStr);
751}
752
754{
755 const QString configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
756 QSettings kritarc(configPath + QStringLiteral("/kritadisplayrc"), QSettings::IniFormat);
757 return canvasSurfaceBitDepthMode(&kritarc, defaultValue);
758}
759
761{
762 const QString configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
763 QSettings kritarc(configPath + QStringLiteral("/kritadisplayrc"), QSettings::IniFormat);
765}
766
768{
769 auto mode = canvasSurfaceBitDepthMode();
770
772 if (format.redBufferSize() == 10 &&
773 format.greenBufferSize() == 10 &&
774 format.blueBufferSize() == 10) {
775
777 } else {
779 }
780 }
781
782 return mode;
783}
784
785
786QString KisConfig::monitorProfile(int screen) const
787{
788 // Note: keep this in sync with the default profile for the RGB colorspaces!
789 const QString defaultProfile = "sRGB-elle-V2-srgbtrc.icc";
790
791 QString profile;
792 const QString screenIdentifier = getScreenStringIdentfier(screen);
793 const QString screenIdentifierKey = "monitorProfile" + screenIdentifier;
794
800 if (!screenIdentifier.isEmpty() && m_cfg.hasKey(screenIdentifierKey)) {
801 profile = m_cfg.readEntry(screenIdentifierKey, defaultProfile);
802 } else {
803 profile = m_cfg.readEntry("monitorProfile" + QString(screen == 0 ? "": QString("_%1").arg(screen)), defaultProfile);
804 }
805
806 //dbgKrita << "KisConfig::monitorProfile()" << profile;
807 return profile;
808}
809
810QString KisConfig::monitorForScreen(int screen, const QString &defaultMonitor, bool defaultValue) const
811{
812 return (defaultValue ? defaultMonitor
813 : m_cfg.readEntry(QString("monitor_for_screen_%1").arg(screen), defaultMonitor));
814}
815
816void KisConfig::setMonitorForScreen(int screen, const QString& monitor)
817{
818 m_cfg.writeEntry(QString("monitor_for_screen_%1").arg(screen), monitor);
819}
820
821void KisConfig::setMonitorProfile(int screen, const QString & monitorProfile, bool override) const
822{
823 m_cfg.writeEntry("monitorProfile/OverrideX11", override);
824 m_cfg.writeEntry("monitorProfile" + QString(screen == 0 ? "": QString("_%1").arg(screen)), monitorProfile);
825 if (!getScreenStringIdentfier(screen).isEmpty()) {
826 m_cfg.writeEntry("monitorProfile" + getScreenStringIdentfier(screen), monitorProfile);
827 }
828}
829
830// TODO: rename into getSystemScreenProfile
832{
833 if (screen < 0) return 0;
834
835 KisConfig cfg(true);
836 QString monitorId;
837 if (KisColorManager::instance()->devices().size() > screen) {
838 monitorId = cfg.monitorForScreen(screen, KisColorManager::instance()->devices()[screen]);
839 }
840 //dbgKrita << "getScreenProfile(). Screen" << screen << "monitor id" << monitorId;
841
842 if (monitorId.isEmpty()) {
843 return 0;
844 }
845
846 QByteArray bytes = KisColorManager::instance()->displayProfile(monitorId);
847
848 //dbgKrita << "\tgetScreenProfile()" << bytes.size();
849 const KoColorProfile * profile = 0;
850 if (bytes.length() > 0) {
852 //dbgKrita << "\tKisConfig::getScreenProfile for screen" << screen << profile->name();
853 }
854 return profile;
855}
856
858{
859 if (screen < 0) return 0;
860
861 // if the user plays with the settings, they can override the display profile, in which case
862 // we don't want the system setting.
863 bool override = useSystemMonitorProfile();
864 //dbgKrita << "KisConfig::displayProfile(). Override X11:" << override;
865 const KoColorProfile *profile = 0;
866 if (override) {
867 //dbgKrita << "\tGoing to get the screen profile";
868 profile = KisConfig::getScreenProfile(screen);
869 }
870
871 // if it fails. check the configuration
872 if (!profile || !profile->isSuitableForDisplay()) {
873 //dbgKrita << "\tGoing to get the monitor profile";
874 QString monitorProfileName = monitorProfile(screen);
875 //dbgKrita << "\t\tmonitorProfileName:" << monitorProfileName;
876 if (!monitorProfileName.isEmpty()) {
877 profile = KoColorSpaceRegistry::instance()->profileByName(monitorProfileName);
878 }
879 if (profile) {
880 //dbgKrita << "\t\tsuitable for display" << profile->isSuitableForDisplay();
881 }
882 else {
883 //dbgKrita << "\t\tstill no profile";
884 }
885 }
886 // if we still don't have a profile, or the profile isn't suitable for display,
887 // we need to get a last-resort profile. the built-in sRGB is a good choice then.
888 if (!profile || !profile->isSuitableForDisplay()) {
889 //dbgKrita << "\tnothing worked, going to get sRGB built-in";
890 profile = KoColorSpaceRegistry::instance()->profileByName("sRGB Built-in");
891 }
892
893 if (profile) {
894 //dbgKrita << "\tKisConfig::displayProfile for screen" << screen << "is" << profile->name();
895 }
896 else {
897 //dbgKrita << "\tCouldn't get a display profile at all";
898 }
899
900 return profile;
901}
902
903const QString KisConfig::getScreenStringIdentfier(int screenNo) const {
904 if (screenNo < 0 || screenNo >= QGuiApplication::screens().length()) {
905 return QString();
906 }
907 QScreen* screen = QGuiApplication::screens()[screenNo];
908
909 QString manufacturer = screen->manufacturer();
910 QString model = screen->model();
911 QString serialNumber = screen->serialNumber();
912
913 if (manufacturer == "" && model == "" && serialNumber == "") {
914 return QString(); // it would be scary to base the profile just on resolution
915 }
916
917 QString identifier = QStringList({manufacturer, model, serialNumber}).join("_");
918 return identifier;
919}
920
921QString KisConfig::workingColorSpace(bool defaultValue) const
922{
923 return (defaultValue ? "RGBA" : m_cfg.readEntry("workingColorSpace", "RGBA"));
924}
925
926void KisConfig::setWorkingColorSpace(const QString & workingColorSpace) const
927{
928 m_cfg.writeEntry("workingColorSpace", workingColorSpace);
929}
930
931QString KisConfig::printerColorSpace(bool /*defaultValue*/) const
932{
933 //TODO currently only rgb8 is supported
934 //return (defaultValue ? "RGBA" : m_cfg.readEntry("printerColorSpace", "RGBA"));
935 return QString("RGBA");
936}
937
938void KisConfig::setPrinterColorSpace(const QString & printerColorSpace) const
939{
940 m_cfg.writeEntry("printerColorSpace", printerColorSpace);
941}
942
943
944QString KisConfig::printerProfile(bool defaultValue) const
945{
946 return (defaultValue ? "" : m_cfg.readEntry("printerProfile", ""));
947}
948
949void KisConfig::setPrinterProfile(const QString & printerProfile) const
950{
951 m_cfg.writeEntry("printerProfile", printerProfile);
952}
953
954
955bool KisConfig::useBlackPointCompensation(bool defaultValue) const
956{
957 return (defaultValue ? true : m_cfg.readEntry("useBlackPointCompensation", true));
958}
959
960void KisConfig::setUseBlackPointCompensation(bool useBlackPointCompensation) const
961{
962 m_cfg.writeEntry("useBlackPointCompensation", useBlackPointCompensation);
963}
964
965bool KisConfig::allowLCMSOptimization(bool defaultValue) const
966{
967 return (defaultValue ? true : m_cfg.readEntry("allowLCMSOptimization", true));
968}
969
970void KisConfig::setAllowLCMSOptimization(bool allowLCMSOptimization)
971{
972 m_cfg.writeEntry("allowLCMSOptimization", allowLCMSOptimization);
973}
974
975bool KisConfig::forcePaletteColors(bool defaultValue) const
976{
977 return (defaultValue ? false : m_cfg.readEntry("colorsettings/forcepalettecolors", false));
978}
979
980void KisConfig::setForcePaletteColors(bool forcePaletteColors)
981{
982 m_cfg.writeEntry("colorsettings/forcepalettecolors", forcePaletteColors);
983}
984
985bool KisConfig::colorHistoryPerDocument(bool defaultValue) const
986{
987 KConfigGroup cfg = KSharedConfig::openConfig()->group("advancedColorSelector");
988 return (defaultValue ? false : cfg.readEntry("lastUsedColorsPerDocument", false));
989}
990
991bool KisConfig::showRulers(bool defaultValue) const
992{
993 return (defaultValue ? false : m_cfg.readEntry("showrulers", false));
994}
995
996void KisConfig::setShowRulers(bool rulers) const
997{
998 m_cfg.writeEntry("showrulers", rulers);
999}
1000
1001bool KisConfig::forceShowSaveMessages(bool defaultValue) const
1002{
1003 return (defaultValue ? false : m_cfg.readEntry("forceShowSaveMessages", false));
1004}
1005
1007{
1008 m_cfg.writeEntry("forceShowSaveMessages", value);
1009}
1010
1011bool KisConfig::forceShowAutosaveMessages(bool defaultValue) const
1012{
1013 return (defaultValue ? false : m_cfg.readEntry("forceShowAutosaveMessages", false));
1014}
1015
1017{
1018 m_cfg.writeEntry("forceShowAutosaveMessages", value);
1019}
1020
1021bool KisConfig::rulersTrackMouse(bool defaultValue) const
1022{
1023 return (defaultValue ? true : m_cfg.readEntry("rulersTrackMouse", true));
1024}
1025
1027{
1028 m_cfg.writeEntry("rulersTrackMouse", value);
1029}
1030
1031qint32 KisConfig::pasteBehaviour(bool defaultValue) const
1032{
1033 return (defaultValue ? 2 : m_cfg.readEntry("pasteBehaviour", 2));
1034}
1035
1036void KisConfig::setPasteBehaviour(qint32 renderIntent) const
1037{
1038 m_cfg.writeEntry("pasteBehaviour", renderIntent);
1039}
1040
1041qint32 KisConfig::pasteFormat(bool defaultValue) const
1042{
1043 return defaultValue ? 0 : m_cfg.readEntry("pasteFormat", 0);
1044}
1045
1046void KisConfig::setPasteFormat(qint32 format)
1047{
1048 m_cfg.writeEntry("pasteFormat", format);
1049}
1050
1051qint32 KisConfig::monitorRenderIntent(bool defaultValue) const
1052{
1053 qint32 intent = m_cfg.readEntry("renderIntent", INTENT_PERCEPTUAL);
1054 if (intent > 3) intent = 3;
1055 if (intent < 0) intent = 0;
1056 return (defaultValue ? INTENT_PERCEPTUAL : intent);
1057}
1058
1059void KisConfig::setRenderIntent(qint32 renderIntent) const
1060{
1061 if (renderIntent > 3) renderIntent = 3;
1062 if (renderIntent < 0) renderIntent = 0;
1063 m_cfg.writeEntry("renderIntent", renderIntent);
1064}
1065
1066bool KisConfig::useOpenGL(bool defaultValue) const
1067{
1068 if (defaultValue) {
1069 return true;
1070 }
1071
1072 const QString configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
1073 QSettings kritarc(configPath + QStringLiteral("/kritadisplayrc"), QSettings::IniFormat);
1074
1075 return kritarc.value("OpenGLRenderer", "auto").toString() != "none";
1076}
1077
1079{
1080 const QString configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
1081 QSettings kritarc(configPath + QStringLiteral("/kritadisplayrc"), QSettings::IniFormat);
1082
1083 kritarc.setValue("OpenGLRenderer", "none");
1084}
1085
1086int KisConfig::openGLFilteringMode(bool defaultValue) const
1087{
1088 return (defaultValue ? 3 : m_cfg.readEntry("OpenGLFilterMode", 3));
1089}
1090
1092{
1093 m_cfg.writeEntry("OpenGLFilterMode", filteringMode);
1094}
1095
1097{
1098 m_cfg.writeEntry("widgetStyle", name);
1099}
1100
1101QString KisConfig::widgetStyle(bool defaultValue)
1102{
1103 return (defaultValue ? "" : m_cfg.readEntry("widgetStyle", ""));
1104}
1105
1106bool KisConfig::useOpenGLTextureBuffer(bool defaultValue) const
1107{
1108 return (defaultValue ? true : m_cfg.readEntry("useOpenGLTextureBuffer", true));
1109}
1110
1112{
1113 m_cfg.writeEntry("useOpenGLTextureBuffer", useBuffer);
1114}
1115
1116int KisConfig::openGLTextureSize(bool defaultValue) const
1117{
1118 return (defaultValue ? 256 : m_cfg.readEntry("textureSize", 256));
1119}
1120
1121bool KisConfig::forceOpenGLFenceWorkaround(bool defaultValue) const
1122{
1123 return (defaultValue ? false : m_cfg.readEntry("forceOpenGLFenceWorkaround", false));
1124}
1125
1126int KisConfig::numMipmapLevels(bool defaultValue) const
1127{
1128 return (defaultValue ? 4 : m_cfg.readEntry("numMipmapLevels", 4));
1129}
1130
1132{
1133 return 1 << qMax(0, numMipmapLevels());
1134}
1135
1136quint32 KisConfig::getGridMainStyle(bool defaultValue) const
1137{
1138 int v = m_cfg.readEntry("gridmainstyle", 0);
1139 v = qBound(0, v, 2);
1140 return (defaultValue ? 0 : v);
1141}
1142
1144{
1145 m_cfg.writeEntry("gridmainstyle", v);
1146}
1147
1148quint32 KisConfig::getGridSubdivisionStyle(bool defaultValue) const
1149{
1150 quint32 v = m_cfg.readEntry("gridsubdivisionstyle", 1);
1151 if (v > 2) v = 2;
1152 return (defaultValue ? 1 : v);
1153}
1154
1156{
1157 m_cfg.writeEntry("gridsubdivisionstyle", v);
1158}
1159
1160quint32 KisConfig::getGridIsoVerticalStyle(bool defaultValue) const
1161{
1162 int v = m_cfg.readEntry("gridisoverticalstyle", 0);
1163 v = qBound(0, v, 3);
1164 return (defaultValue ? 0 : v);
1165}
1166
1168{
1169 m_cfg.writeEntry("gridisoverticalstyle", v);
1170}
1171
1172QColor KisConfig::getGridMainColor(bool defaultValue) const
1173{
1174 QColor col(99, 99, 99);
1175 return (defaultValue ? col : m_cfg.readEntry("gridmaincolor", col));
1176}
1177
1178void KisConfig::setGridMainColor(const QColor & v) const
1179{
1180 m_cfg.writeEntry("gridmaincolor", v);
1181}
1182
1183QColor KisConfig::getGridSubdivisionColor(bool defaultValue) const
1184{
1185 QColor col(150, 150, 150);
1186 return (defaultValue ? col : m_cfg.readEntry("gridsubdivisioncolor", col));
1187}
1188
1189void KisConfig::setGridSubdivisionColor(const QColor & v) const
1190{
1191 m_cfg.writeEntry("gridsubdivisioncolor", v);
1192}
1193
1194QColor KisConfig::getGridIsoVerticalColor(bool defaultValue) const
1195{
1196 QColor col(150, 150, 150);
1197 return (defaultValue ? col : m_cfg.readEntry("gridisoverticalcolor", col));
1198}
1199
1200void KisConfig::setGridIsoVerticalColor(const QColor & v) const
1201{
1202 m_cfg.writeEntry("gridisoverticalcolor", v);
1203}
1204
1205QColor KisConfig::getPixelGridColor(bool defaultValue) const
1206{
1207 QColor col(255, 255, 255);
1208 return (defaultValue ? col : m_cfg.readEntry("pixelGridColor", col));
1209}
1210
1211void KisConfig::setPixelGridColor(const QColor & v) const
1212{
1213 m_cfg.writeEntry("pixelGridColor", v);
1214}
1215
1216qreal KisConfig::getPixelGridDrawingThreshold(bool defaultValue) const
1217{
1218 qreal border = 24.0f;
1219 return (defaultValue ? border : m_cfg.readEntry("pixelGridDrawingThreshold", border));
1220}
1221
1223{
1224 m_cfg.writeEntry("pixelGridDrawingThreshold", v);
1225}
1226
1227bool KisConfig::pixelGridEnabled(bool defaultValue) const
1228{
1229 bool enabled = true;
1230 return (defaultValue ? enabled : m_cfg.readEntry("pixelGridEnabled", enabled));
1231}
1232
1234{
1235 m_cfg.writeEntry("pixelGridEnabled", v);
1236}
1237
1238quint32 KisConfig::guidesLineStyle(bool defaultValue) const
1239{
1240 int v = m_cfg.readEntry("guidesLineStyle", 0);
1241 v = qBound(0, v, 2);
1242 return (defaultValue ? 0 : v);
1243}
1244
1246{
1247 m_cfg.writeEntry("guidesLineStyle", v);
1248}
1249
1250QColor KisConfig::guidesColor(bool defaultValue) const
1251{
1252 QColor col(99, 99, 99);
1253 return (defaultValue ? col : m_cfg.readEntry("guidesColor", col));
1254}
1255
1256void KisConfig::setGuidesColor(const QColor & v) const
1257{
1258 m_cfg.writeEntry("guidesColor", v);
1259}
1260
1261void KisConfig::loadSnapConfig(KisSnapConfig *config, bool defaultValue) const
1262{
1263 KisSnapConfig defaultConfig(false);
1264
1265 if (defaultValue) {
1266 *config = defaultConfig;
1267 return;
1268 }
1269
1270 config->setOrthogonal(m_cfg.readEntry("globalSnapOrthogonal", defaultConfig.orthogonal()));
1271 config->setNode(m_cfg.readEntry("globalSnapNode", defaultConfig.node()));
1272 config->setExtension(m_cfg.readEntry("globalSnapExtension", defaultConfig.extension()));
1273 config->setIntersection(m_cfg.readEntry("globalSnapIntersection", defaultConfig.intersection()));
1274 config->setBoundingBox(m_cfg.readEntry("globalSnapBoundingBox", defaultConfig.boundingBox()));
1275 config->setImageBounds(m_cfg.readEntry("globalSnapImageBounds", defaultConfig.imageBounds()));
1276 config->setImageCenter(m_cfg.readEntry("globalSnapImageCenter", defaultConfig.imageCenter()));
1277 config->setToPixel(m_cfg.readEntry("globalSnapToPixel", defaultConfig.toPixel()));
1278}
1279
1281{
1282 m_cfg.writeEntry("globalSnapOrthogonal", config.orthogonal());
1283 m_cfg.writeEntry("globalSnapNode", config.node());
1284 m_cfg.writeEntry("globalSnapExtension", config.extension());
1285 m_cfg.writeEntry("globalSnapIntersection", config.intersection());
1286 m_cfg.writeEntry("globalSnapBoundingBox", config.boundingBox());
1287 m_cfg.writeEntry("globalSnapImageBounds", config.imageBounds());
1288 m_cfg.writeEntry("globalSnapImageCenter", config.imageCenter());
1289 m_cfg.writeEntry("globalSnapToPixel", config.toPixel());
1290}
1291
1292qint32 KisConfig::checkSize(bool defaultValue) const
1293{
1294 qint32 size = (defaultValue ? 32 : m_cfg.readEntry("checksize", 32));
1295 if (size == 0) size = 32;
1296 return size;
1297}
1298
1299void KisConfig::setCheckSize(qint32 checksize) const
1300{
1301 if (checksize == 0) {
1302 checksize = 32;
1303 }
1304 m_cfg.writeEntry("checksize", checksize);
1305}
1306
1307bool KisConfig::scrollCheckers(bool defaultValue) const
1308{
1309 return (defaultValue ? false : m_cfg.readEntry("scrollingcheckers", false));
1310}
1311
1313{
1314 m_cfg.writeEntry("scrollingcheckers", sc);
1315}
1316
1317QColor KisConfig::canvasBorderColor(bool defaultValue) const
1318{
1319 QColor color(QColor(128,128,128));
1320 return (defaultValue ? color : m_cfg.readEntry("canvasBorderColor", color));
1321}
1322
1323void KisConfig::setCanvasBorderColor(const QColor& color) const
1324{
1325 m_cfg.writeEntry("canvasBorderColor", color);
1326}
1327
1328bool KisConfig::hideScrollbars(bool defaultValue) const
1329{
1330 return (defaultValue ? false : m_cfg.readEntry("hideScrollbars", false));
1331}
1332
1334{
1335 m_cfg.writeEntry("hideScrollbars", value);
1336}
1337
1338bool KisConfig::scrollbarZoomEnabled(bool defaultValue) const
1339{
1340 return (defaultValue ? true : m_cfg.readEntry("scrollbarZoomEnabled", true));
1341}
1342
1344{
1345 m_cfg.writeEntry("scrollbarZoomEnabled", enabled);
1346}
1347
1348QColor KisConfig::checkersColor1(bool defaultValue) const
1349{
1350 QColor col(220, 220, 220);
1351 return (defaultValue ? col : m_cfg.readEntry("checkerscolor", col));
1352}
1353
1354void KisConfig::setCheckersColor1(const QColor & v) const
1355{
1356 m_cfg.writeEntry("checkerscolor", v);
1357}
1358
1359QColor KisConfig::checkersColor2(bool defaultValue) const
1360{
1361 return (defaultValue ? QColor(Qt::white) : m_cfg.readEntry("checkerscolor2", QColor(Qt::white)));
1362}
1363
1364void KisConfig::setCheckersColor2(const QColor & v) const
1365{
1366 m_cfg.writeEntry("checkerscolor2", v);
1367}
1368
1369bool KisConfig::antialiasCurves(bool defaultValue) const
1370{
1371 return (defaultValue ? true : m_cfg.readEntry("antialiascurves", true));
1372}
1373
1375{
1376 m_cfg.writeEntry("antialiascurves", v);
1377}
1378
1379bool KisConfig::antialiasSelectionOutline(bool defaultValue) const
1380{
1381 return (defaultValue ? false : m_cfg.readEntry("AntialiasSelectionOutline", false));
1382}
1383
1385{
1386 m_cfg.writeEntry("AntialiasSelectionOutline", v);
1387}
1388
1389bool KisConfig::showRootLayer(bool defaultValue) const
1390{
1391 return (defaultValue ? false : m_cfg.readEntry("ShowRootLayer", false));
1392}
1393
1394void KisConfig::setShowRootLayer(bool showRootLayer) const
1395{
1396 m_cfg.writeEntry("ShowRootLayer", showRootLayer);
1397}
1398
1399bool KisConfig::showGlobalSelection(bool defaultValue) const
1400{
1401 return (defaultValue ? false : m_cfg.readEntry("ShowGlobalSelection", false));
1402}
1403
1404void KisConfig::setShowGlobalSelection(bool showGlobalSelection) const
1405{
1406 m_cfg.writeEntry("ShowGlobalSelection", showGlobalSelection);
1407}
1408
1409// brush outline settings
1410
1411bool KisConfig::showOutlineWhilePainting(bool defaultValue) const
1412{
1413 return (defaultValue ? true : m_cfg.readEntry("ShowOutlineWhilePainting", true));
1414}
1415
1416void KisConfig::setShowOutlineWhilePainting(bool showOutlineWhilePainting) const
1417{
1418 m_cfg.writeEntry("ShowOutlineWhilePainting", showOutlineWhilePainting);
1419}
1420
1421bool KisConfig::forceAlwaysFullSizedOutline(bool defaultValue) const
1422{
1423 return (defaultValue ? false : m_cfg.readEntry("forceAlwaysFullSizedOutline", false));
1424}
1425
1427{
1428 m_cfg.writeEntry("forceAlwaysFullSizedOutline", value);
1429}
1430
1431// eraser outline settings
1432
1434{
1435 return (defaultValue ? true : m_cfg.readEntry("ShowEraserOutlineWhilePainting", true));
1436}
1437
1438void KisConfig::setShowEraserOutlineWhilePainting(bool showEraserOutlineWhilePainting) const
1439{
1440 m_cfg.writeEntry("ShowEraserOutlineWhilePainting", showEraserOutlineWhilePainting);
1441}
1442
1444{
1445 return (defaultValue ? false : m_cfg.readEntry("forceAlwaysFullSizedEraserOutline", false));
1446}
1447
1449{
1450 m_cfg.writeEntry("forceAlwaysFullSizedEraserOutline", value);
1451}
1452
1454{
1455 int value = defaultValue ? SOS_BlankSession : m_cfg.readEntry("sessionOnStartup", (int)SOS_BlankSession);
1457}
1459{
1460 m_cfg.writeEntry("sessionOnStartup", (int)value);
1461}
1462
1463bool KisConfig::saveSessionOnQuit(bool defaultValue) const
1464{
1465 return defaultValue ? false : m_cfg.readEntry("saveSessionOnQuit", false);
1466}
1468{
1469 m_cfg.writeEntry("saveSessionOnQuit", value);
1470}
1471
1472bool KisConfig::hideDevFundBanner(bool defaultValue) const
1473{
1474 return defaultValue ? false : m_cfg.readEntry("hideDevFundBanner", false);
1475}
1476
1478{
1479 m_cfg.writeEntry("hideDevFundBanner", value);
1480}
1481
1482qreal KisConfig::outlineSizeMinimum(bool defaultValue) const
1483{
1484 return (defaultValue ? 1.0 : m_cfg.readEntry("OutlineSizeMinimum", 1.0));
1485}
1486
1487void KisConfig::setOutlineSizeMinimum(qreal outlineSizeMinimum) const
1488{
1489 m_cfg.writeEntry("OutlineSizeMinimum", outlineSizeMinimum);
1490}
1491
1492qreal KisConfig::selectionViewSizeMinimum(bool defaultValue) const
1493{
1494 return (defaultValue ? 5.0 : m_cfg.readEntry("SelectionViewSizeMinimum", 5.0));
1495}
1496
1497void KisConfig::setSelectionViewSizeMinimum(qreal outlineSizeMinimum) const
1498{
1499 m_cfg.writeEntry("SelectionViewSizeMinimum", outlineSizeMinimum);
1500}
1501
1502int KisConfig::autoSaveInterval(bool defaultValue) const
1503{
1504 int def = 7 * 60;
1505 return (defaultValue ? def : m_cfg.readEntry("AutoSaveInterval", def));
1506}
1507
1508void KisConfig::setAutoSaveInterval(int seconds) const
1509{
1510 return m_cfg.writeEntry("AutoSaveInterval", seconds);
1511}
1512
1513bool KisConfig::backupFile(bool defaultValue) const
1514{
1515 return (defaultValue ? true : m_cfg.readEntry("CreateBackupFile", true));
1516}
1517
1518void KisConfig::setBackupFile(bool backupFile) const
1519{
1520 m_cfg.writeEntry("CreateBackupFile", backupFile);
1521}
1522
1523bool KisConfig::showFilterGallery(bool defaultValue) const
1524{
1525 return (defaultValue ? false : m_cfg.readEntry("showFilterGallery", false));
1526}
1527
1528void KisConfig::setShowFilterGallery(bool showFilterGallery) const
1529{
1530 m_cfg.writeEntry("showFilterGallery", showFilterGallery);
1531}
1532
1534{
1535 return (defaultValue ? true : m_cfg.readEntry("showFilterGalleryLayerMaskDialog", true));
1536}
1537
1538void KisConfig::setShowFilterGalleryLayerMaskDialog(bool showFilterGallery) const
1539{
1540 m_cfg.writeEntry("setShowFilterGalleryLayerMaskDialog", showFilterGallery);
1541}
1542
1543QString KisConfig::canvasState(bool defaultValue) const
1544{
1545 const QString configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
1546 QSettings kritarc(configPath + QStringLiteral("/kritadisplayrc"), QSettings::IniFormat);
1547 return (defaultValue ? "OPENGL_NOT_TRIED" : kritarc.value("canvasState", "OPENGL_NOT_TRIED").toString());
1548}
1549
1550void KisConfig::setCanvasState(const QString& state) const
1551{
1552 static QStringList acceptableStates;
1553 if (acceptableStates.isEmpty()) {
1554 acceptableStates << "OPENGL_SUCCESS" << "TRY_OPENGL" << "OPENGL_NOT_TRIED" << "OPENGL_FAILED";
1555 }
1556 if (acceptableStates.contains(state)) {
1557 const QString configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
1558 QSettings kritarc(configPath + QStringLiteral("/kritadisplayrc"), QSettings::IniFormat);
1559 kritarc.setValue("canvasState", state);
1560 }
1561}
1562
1563bool KisConfig::toolOptionsPopupDetached(bool defaultValue) const
1564{
1565 return (defaultValue ? false : m_cfg.readEntry("ToolOptionsPopupDetached", false));
1566}
1567
1569{
1570 m_cfg.writeEntry("ToolOptionsPopupDetached", detached);
1571}
1572
1573
1574bool KisConfig::paintopPopupDetached(bool defaultValue) const
1575{
1576 return (defaultValue ? true : m_cfg.readEntry("PaintopPopupDetached", true));
1577}
1578
1579void KisConfig::setPaintopPopupDetached(bool detached) const
1580{
1581 m_cfg.writeEntry("PaintopPopupDetached", detached);
1582}
1583
1584QString KisConfig::pressureTabletCurve(bool defaultValue) const
1585{
1586 QString fallback = DEFAULT_CURVE_STRING;
1587#ifdef Q_OS_ANDROID
1588 // Xiaomi styluses need superhuman strength to reach full input pressure.
1589 // We use a much steeper default pressure curve for them by default that
1590 // effectively caps out at 70% pressure to make it at least bearable. A
1591 // note for a possible future: Apple styluses have an even greater range,
1592 // so if we somehow end up on iPads, we'll probably need to make those cap
1593 // out at 50% pressure at most something like: "0,0;0.5,1.0;"
1595 fallback = QStringLiteral("0,0;0.7,1;");
1596 }
1597#endif
1598 return (defaultValue ? fallback : m_cfg.readEntry("tabletPressureCurve", fallback));
1599}
1600
1601void KisConfig::setPressureTabletCurve(const QString& curveString) const
1602{
1603 m_cfg.writeEntry("tabletPressureCurve", curveString);
1604}
1605
1606bool KisConfig::useWin8PointerInput(bool defaultValue) const
1607{
1608#ifdef Q_OS_WIN
1609 const QString configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
1610 QSettings kritarc(configPath + QStringLiteral("/kritadisplayrc"), QSettings::IniFormat);
1611
1612 return useWin8PointerInputNoApp(&kritarc, defaultValue);
1613#else
1614 Q_UNUSED(defaultValue);
1615 return false;
1616#endif
1617}
1618
1620{
1621#ifdef Q_OS_WIN
1622
1623 // Special handling: Only set value if changed
1624 // I don't want it to be set if the user hasn't touched it
1625 if (useWin8PointerInput() != value) {
1626 const QString configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
1627 QSettings kritarc(configPath + QStringLiteral("/kritadisplayrc"), QSettings::IniFormat);
1629 }
1630
1631#else
1632 Q_UNUSED(value);
1633#endif
1634}
1635
1636bool KisConfig::useWin8PointerInputNoApp(QSettings *settings, bool defaultValue)
1637{
1638 return defaultValue ? false : settings->value("useWin8PointerInput", false).toBool();
1639}
1640
1641void KisConfig::setUseWin8PointerInputNoApp(QSettings *settings, bool value)
1642{
1643 settings->setValue("useWin8PointerInput", value);
1644}
1645
1647{
1648 return (defaultValue ? false : m_cfg.readEntry("useRightMiddleTabletButtonWorkaround", false));
1649}
1650
1652{
1653 m_cfg.writeEntry("useRightMiddleTabletButtonWorkaround", value);
1654}
1655
1656#ifdef Q_OS_ANDROID
1657bool KisConfig::usePageUpDownMouseButtonEmulationWorkaround(bool defaultValue) const
1658{
1660 if (defaultValue) {
1661 return fallback;
1662 } else {
1663 return m_cfg.readEntry("usePageUpDownMouseButtonEmulationWorkaround", fallback);
1664 }
1665}
1666
1667void KisConfig::setUsePageUpDownMouseButtonEmulationWorkaround(bool value)
1668{
1669 m_cfg.writeEntry("usePageUpDownMouseButtonEmulationWorkaround", value);
1670 KisConfigNotifier::instance()->notifyUsePageUpDownMouseButtonEmulationWorkaroundChanged(value);
1671}
1672
1673bool KisConfig::useIgnoreHistoricTabletEventsWorkaround(bool defaultValue) const
1674{
1676 if (defaultValue) {
1677 return fallback;
1678 } else {
1679 return m_cfg.readEntry("useIgnoreHistoricTabletEventsWorkaround", fallback);
1680 }
1681}
1682
1683void KisConfig::setUseIgnoreHistoricTabletEventsWorkaround(bool value)
1684{
1685 m_cfg.writeEntry("useIgnoreHistoricTabletEventsWorkaround", value);
1686 KisConfigNotifier::instance()->notifyUseIgnoreHistoricTabletEventsWorkaroundChanged(value);
1687}
1688#endif
1689
1690qreal KisConfig::vastScrolling(bool defaultValue) const
1691{
1692 return (defaultValue ? 0.9 : m_cfg.readEntry("vastScrolling", 0.9));
1693}
1694
1695void KisConfig::setVastScrolling(const qreal factor) const
1696{
1697 m_cfg.writeEntry("vastScrolling", factor);
1698}
1699
1700int KisConfig::presetChooserViewMode(bool defaultValue) const
1701{
1702 return (defaultValue ? 0 : m_cfg.readEntry("presetChooserViewMode", 0));
1703}
1704
1705void KisConfig::setPresetChooserViewMode(const int mode) const
1706{
1707 m_cfg.writeEntry("presetChooserViewMode", mode);
1708}
1709
1710int KisConfig::presetIconSize(bool defaultValue) const
1711{
1712 return (defaultValue ? 60 : m_cfg.readEntry("presetIconSize", 60));
1713}
1714
1716{
1717 m_cfg.writeEntry("presetIconSize", value);
1718}
1719
1720bool KisConfig::firstRun(bool defaultValue) const
1721{
1722 return (defaultValue ? true : m_cfg.readEntry("firstRun", true));
1723}
1724
1725void KisConfig::setFirstRun(const bool first) const
1726{
1727 m_cfg.writeEntry("firstRun", first);
1728}
1729
1730int KisConfig::horizontalSplitLines(bool defaultValue) const
1731{
1732 return (defaultValue ? 1 : m_cfg.readEntry("horizontalSplitLines", 1));
1733}
1734void KisConfig::setHorizontalSplitLines(const int numberLines) const
1735{
1736 m_cfg.writeEntry("horizontalSplitLines", numberLines);
1737}
1738
1739int KisConfig::verticalSplitLines(bool defaultValue) const
1740{
1741 return (defaultValue ? 1 : m_cfg.readEntry("verticalSplitLines", 1));
1742}
1743
1744void KisConfig::setVerticalSplitLines(const int numberLines) const
1745{
1746 m_cfg.writeEntry("verticalSplitLines", numberLines);
1747}
1748
1749bool KisConfig::clicklessSpacePan(bool defaultValue) const
1750{
1751 return (defaultValue ? true : m_cfg.readEntry("clicklessSpacePan", true));
1752}
1753
1754void KisConfig::setClicklessSpacePan(const bool toggle) const
1755{
1756 m_cfg.writeEntry("clicklessSpacePan", toggle);
1757}
1758
1759
1760bool KisConfig::hideDockersFullscreen(bool defaultValue) const
1761{
1762 return (defaultValue ? true : m_cfg.readEntry("hideDockersFullScreen", true));
1763}
1764
1766{
1767 m_cfg.writeEntry("hideDockersFullScreen", value);
1768}
1769
1770bool KisConfig::showDockerTitleBars(bool defaultValue) const
1771{
1772 return (defaultValue ? true : m_cfg.readEntry("showDockerTitleBars", true));
1773}
1774
1776{
1777 m_cfg.writeEntry("showDockerTitleBars", value);
1778}
1779
1780bool KisConfig::showDockers(bool defaultValue) const
1781{
1782 return (defaultValue ? true : m_cfg.readEntry("showDockers", true));
1783}
1784
1785void KisConfig::setShowDockers(const bool value) const
1786{
1787 m_cfg.writeEntry("showDockers", value);
1788}
1789
1790bool KisConfig::showStatusBar(bool defaultValue) const
1791{
1792 return (defaultValue ? true : m_cfg.readEntry("showStatusBar", true));
1793}
1794
1796{
1797 m_cfg.writeEntry("showStatusBar", value);
1798}
1799
1800bool KisConfig::hideMenuFullscreen(bool defaultValue) const
1801{
1802 return (defaultValue ? true: m_cfg.readEntry("hideMenuFullScreen", true));
1803}
1804
1806{
1807 m_cfg.writeEntry("hideMenuFullScreen", value);
1808}
1809
1810bool KisConfig::hideScrollbarsFullscreen(bool defaultValue) const
1811{
1812 return (defaultValue ? true : m_cfg.readEntry("hideScrollbarsFullScreen", true));
1813}
1814
1816{
1817 m_cfg.writeEntry("hideScrollbarsFullScreen", value);
1818}
1819
1820bool KisConfig::hideStatusbarFullscreen(bool defaultValue) const
1821{
1822 return (defaultValue ? true: m_cfg.readEntry("hideStatusbarFullScreen", true));
1823}
1824
1826{
1827 m_cfg.writeEntry("hideStatusbarFullScreen", value);
1828}
1829
1830bool KisConfig::hideTitlebarFullscreen(bool defaultValue) const
1831{
1832 return (defaultValue ? true : m_cfg.readEntry("hideTitleBarFullscreen", true));
1833}
1834
1836{
1837 m_cfg.writeEntry("hideTitleBarFullscreen", value);
1838}
1839
1840bool KisConfig::hideToolbarFullscreen(bool defaultValue) const
1841{
1842 return (defaultValue ? true : m_cfg.readEntry("hideToolbarFullscreen", true));
1843}
1844
1846{
1847 m_cfg.writeEntry("hideToolbarFullscreen", value);
1848}
1849
1850bool KisConfig::fullscreenMode(bool defaultValue) const
1851{
1852 return (defaultValue ? true : m_cfg.readEntry("fullscreenMode", false));
1853}
1854
1856{
1857 m_cfg.writeEntry("fullscreenMode", value);
1858}
1859
1861{
1862 return (defaultValue ? QStringList() :
1863 m_cfg.readEntry("favoriteCompositeOps",
1864 QString("normal,erase,multiply,burn,darken,add,dodge,screen,overlay,soft_light_svg,luminize,lighten,saturation,color,divide").split(',')));
1865}
1866
1868{
1869 m_cfg.writeEntry("favoriteCompositeOps", compositeOps);
1870}
1871
1872QString KisConfig::exportConfigurationXML(const QString &filterId, bool defaultValue) const
1873{
1874 return (defaultValue ? QString() : m_cfg.readEntry("ExportConfiguration-" + filterId, QString()));
1875}
1876
1877KisPropertiesConfigurationSP KisConfig::exportConfiguration(const QString &filterId, bool defaultValue) const
1878{
1880 const QString xmlData = exportConfigurationXML(filterId, defaultValue);
1881 cfg->fromXML(xmlData);
1882 return cfg;
1883}
1884
1885void KisConfig::setExportConfiguration(const QString &filterId, KisPropertiesConfigurationSP properties) const
1886{
1887 QString exportConfig = properties->toXML();
1888 m_cfg.writeEntry("ExportConfiguration-" + filterId, exportConfig);
1889}
1890
1891QString KisConfig::importConfiguration(const QString &filterId, bool defaultValue) const
1892{
1893 return (defaultValue ? QString() : m_cfg.readEntry("ImportConfiguration-" + filterId, QString()));
1894}
1895
1896void KisConfig::setImportConfiguration(const QString &filterId, KisPropertiesConfigurationSP properties) const
1897{
1898 QString importConfig = properties->toXML();
1899 m_cfg.writeEntry("ImportConfiguration-" + filterId, importConfig);
1900}
1901
1902bool KisConfig::useOcio(bool defaultValue) const
1903{
1904#ifdef HAVE_OCIO
1905 return (defaultValue ? false : m_cfg.readEntry("Krita/Ocio/UseOcio", false));
1906#else
1907 Q_UNUSED(defaultValue);
1908 return false;
1909#endif
1910}
1911
1912void KisConfig::setUseOcio(bool useOCIO) const
1913{
1914 m_cfg.writeEntry("Krita/Ocio/UseOcio", useOCIO);
1915}
1916
1917int KisConfig::favoritePresets(bool defaultValue) const
1918{
1919 return (defaultValue ? 10: m_cfg.readEntry("numFavoritePresets", 10));
1920}
1921
1923{
1924 m_cfg.writeEntry("numFavoritePresets", value);
1925}
1926
1927bool KisConfig::levelOfDetailEnabled(bool defaultValue) const
1928{
1929 return (defaultValue ? false : m_cfg.readEntry("levelOfDetailEnabled", false));
1930}
1931
1933{
1934 m_cfg.writeEntry("levelOfDetailEnabled", value);
1935}
1936
1938{
1940
1941 if (!defaultValue) {
1942 cfg.mode = (KisOcioConfiguration::Mode)m_cfg.readEntry("Krita/Ocio/OcioColorManagementMode", 0);
1943 cfg.configurationPath = m_cfg.readEntry("Krita/Ocio/OcioConfigPath", QString());
1944 cfg.lutPath = m_cfg.readEntry("Krita/Ocio/OcioLutPath", QString());
1945 cfg.inputColorSpace = m_cfg.readEntry("Krita/Ocio/InputColorSpace", QString());
1946 cfg.displayDevice = m_cfg.readEntry("Krita/Ocio/DisplayDevice", QString());
1947 cfg.displayView = m_cfg.readEntry("Krita/Ocio/DisplayView", QString());
1948 cfg.look = m_cfg.readEntry("Krita/Ocio/DisplayLook", QString());
1949 }
1950
1951 return cfg;
1952}
1953
1955{
1956 m_cfg.writeEntry("Krita/Ocio/OcioColorManagementMode", (int) cfg.mode);
1957 m_cfg.writeEntry("Krita/Ocio/OcioConfigPath", cfg.configurationPath);
1958 m_cfg.writeEntry("Krita/Ocio/OcioLutPath", cfg.lutPath);
1959 m_cfg.writeEntry("Krita/Ocio/InputColorSpace", cfg.inputColorSpace);
1960 m_cfg.writeEntry("Krita/Ocio/DisplayDevice", cfg.displayDevice);
1961 m_cfg.writeEntry("Krita/Ocio/DisplayView", cfg.displayView);
1962 m_cfg.writeEntry("Krita/Ocio/DisplayLook", cfg.look);
1963}
1964
1967{
1968 // FIXME: this option duplicates ocioConfiguration(), please deprecate it
1969 return (OcioColorManagementMode)(defaultValue ? INTERNAL
1970 : m_cfg.readEntry("Krita/Ocio/OcioColorManagementMode", (int) INTERNAL));
1971}
1972
1974{
1975 // FIXME: this option duplicates ocioConfiguration(), please deprecate it
1976 m_cfg.writeEntry("Krita/Ocio/OcioColorManagementMode", (int) mode);
1977}
1978
1979int KisConfig::ocioLutEdgeSize(bool defaultValue) const
1980{
1981 return (defaultValue ? 64 : m_cfg.readEntry("Krita/Ocio/LutEdgeSize", 64));
1982}
1983
1985{
1986 m_cfg.writeEntry("Krita/Ocio/LutEdgeSize", value);
1987}
1988
1990{
1991 return (defaultValue ? false : m_cfg.readEntry("Krita/Ocio/OcioLockColorVisualRepresentation", false));
1992}
1993
1995{
1996 m_cfg.writeEntry("Krita/Ocio/OcioLockColorVisualRepresentation", value);
1997}
1998
1999QString KisConfig::defaultPalette(bool defaultValue) const
2000{
2001 return (defaultValue ? QString() : m_cfg.readEntry("defaultPalette", "Default"));
2002}
2003
2004void KisConfig::setDefaultPalette(const QString& name) const
2005{
2006 m_cfg.writeEntry("defaultPalette", name);
2007}
2008
2009QString KisConfig::toolbarSlider(int sliderNumber, bool defaultValue) const
2010{
2011 QString def = "flow";
2012 if (sliderNumber == 1) {
2013 def = "opacity";
2014 }
2015 if (sliderNumber == 2) {
2016 def = "size";
2017 }
2018 return (defaultValue ? def : m_cfg.readEntry(QString("toolbarslider_%1").arg(sliderNumber), def));
2019}
2020
2021void KisConfig::setToolbarSlider(int sliderNumber, const QString &slider)
2022{
2023 m_cfg.writeEntry(QString("toolbarslider_%1").arg(sliderNumber), slider);
2024}
2025
2026int KisConfig::layerThumbnailSize(bool defaultValue) const
2027{
2028 return (defaultValue ? 20 : m_cfg.readEntry("layerThumbnailSize", 20));
2029}
2030
2032{
2033 m_cfg.writeEntry("layerThumbnailSize", size);
2034}
2035
2036int KisConfig::layerTreeIndentation(bool defaultValue) const
2037{
2038 return (defaultValue ? 50 : m_cfg.readEntry("layerTreeIndentation", 50));
2039}
2040
2042{
2043 m_cfg.writeEntry("layerTreeIndentation", percentage);
2044}
2045
2046bool KisConfig::sliderLabels(bool defaultValue) const
2047{
2048 return (defaultValue ? true : m_cfg.readEntry("sliderLabels", true));
2049}
2050
2052{
2053 m_cfg.writeEntry("sliderLabels", enabled);
2054}
2055
2056QString KisConfig::currentInputProfile(bool defaultValue) const
2057{
2058 return (defaultValue ? QString() : m_cfg.readEntry("currentInputProfile", QString()));
2059}
2060
2061void KisConfig::setCurrentInputProfile(const QString& name)
2062{
2063 m_cfg.writeEntry("currentInputProfile", name);
2064}
2065
2066bool KisConfig::useSystemMonitorProfile(bool defaultValue) const
2067{
2068 return (defaultValue ? false : m_cfg.readEntry("ColorManagement/UseSystemMonitorProfile", false));
2069}
2070
2071void KisConfig::setUseSystemMonitorProfile(bool _useSystemMonitorProfile) const
2072{
2073 m_cfg.writeEntry("ColorManagement/UseSystemMonitorProfile", _useSystemMonitorProfile);
2074}
2075
2076bool KisConfig::presetStripVisible(bool defaultValue) const
2077{
2078 return (defaultValue ? true : m_cfg.readEntry("presetStripVisible", true));
2079}
2080
2082{
2083 m_cfg.writeEntry("presetStripVisible", visible);
2084}
2085
2086bool KisConfig::scratchpadVisible(bool defaultValue) const
2087{
2088 return (defaultValue ? true : m_cfg.readEntry("scratchpadVisible", true));
2089}
2090
2092{
2093 m_cfg.writeEntry("scratchpadVisible", visible);
2094}
2095
2096bool KisConfig::showSingleChannelAsColor(bool defaultValue) const
2097{
2098 return (defaultValue ? false : m_cfg.readEntry("showSingleChannelAsColor", false));
2099}
2100
2102{
2103 m_cfg.writeEntry("showSingleChannelAsColor", asColor);
2104}
2105
2106bool KisConfig::hidePopups(bool defaultValue) const
2107{
2108 return (defaultValue ? false : m_cfg.readEntry("hidePopups", false));
2109}
2110
2111void KisConfig::setHidePopups(bool hidePopups)
2112{
2113 m_cfg.writeEntry("hidePopups", hidePopups);
2114}
2115
2116int KisConfig::numDefaultLayers(bool defaultValue) const
2117{
2118 return (defaultValue ? 2 : m_cfg.readEntry("NumberOfLayersForNewImage", 2));
2119}
2120
2122{
2123 m_cfg.writeEntry("NumberOfLayersForNewImage", num);
2124}
2125
2126quint8 KisConfig::defaultBackgroundOpacity(bool defaultValue) const
2127{
2128 return (defaultValue ? (int)OPACITY_OPAQUE_U8 : m_cfg.readEntry("BackgroundOpacityForNewImage", (int)OPACITY_OPAQUE_U8));
2129}
2130
2132{
2133 m_cfg.writeEntry("BackgroundOpacityForNewImage", (int)value);
2134}
2135
2136QColor KisConfig::defaultBackgroundColor(bool defaultValue) const
2137{
2138 return (defaultValue ? QColor(Qt::white) : m_cfg.readEntry("BackgroundColorForNewImage", QColor(Qt::white)));
2139}
2140
2142{
2143 m_cfg.writeEntry("BackgroundColorForNewImage", value);
2144}
2145
2147{
2148 return (KisConfig::BackgroundStyle)(defaultValue ? RASTER_LAYER : m_cfg.readEntry("BackgroundStyleForNewImage", (int)RASTER_LAYER));
2149}
2150
2152{
2153 m_cfg.writeEntry("BackgroundStyleForNewImage", (int)value);
2154}
2155
2156int KisConfig::lineSmoothingType(bool defaultValue) const
2157{
2158 return (defaultValue ? 1 : m_cfg.readEntry("LineSmoothingType", 1));
2159}
2160
2162{
2163 m_cfg.writeEntry("LineSmoothingType", value);
2164}
2165
2166qreal KisConfig::lineSmoothingDistanceMin(bool defaultValue) const
2167{
2168 return (defaultValue ? 50.0 : m_cfg.readEntry("LineSmoothingDistanceMin", 50.0));
2169}
2170
2172{
2173 m_cfg.writeEntry("LineSmoothingDistanceMin", value);
2174}
2175
2176qreal KisConfig::lineSmoothingDistanceMax(bool defaultValue) const
2177{
2178 return (defaultValue ? 50.0 : m_cfg.readEntry("LineSmoothingDistanceMax", 50.0));
2179}
2180
2182{
2183 m_cfg.writeEntry("LineSmoothingDistanceMax", value);
2184}
2185
2187{
2188 return (defaultValue ? true : m_cfg.readEntry("LineSmoothingDistanceKeepAspectRatio", true));
2189}
2190
2192{
2193 m_cfg.writeEntry("LineSmoothingDistanceKeepAspectRatio", value);
2194}
2195
2197{
2198 return (defaultValue ? 0.15 : m_cfg.readEntry("LineSmoothingTailAggressiveness", 0.15));
2199}
2200
2202{
2203 m_cfg.writeEntry("LineSmoothingTailAggressiveness", value);
2204}
2205
2206bool KisConfig::lineSmoothingSmoothPressure(bool defaultValue) const
2207{
2208 return (defaultValue ? false : m_cfg.readEntry("LineSmoothingSmoothPressure", false));
2209}
2210
2212{
2213 m_cfg.writeEntry("LineSmoothingSmoothPressure", value);
2214}
2215
2216bool KisConfig::lineSmoothingScalableDistance(bool defaultValue) const
2217{
2218 return (defaultValue ? true : m_cfg.readEntry("LineSmoothingScalableDistance", true));
2219}
2220
2222{
2223 m_cfg.writeEntry("LineSmoothingScalableDistance", value);
2224}
2225
2226qreal KisConfig::lineSmoothingDelayDistance(bool defaultValue) const
2227{
2228 return (defaultValue ? 50.0 : m_cfg.readEntry("LineSmoothingDelayDistance", 50.0));
2229}
2230
2232{
2233 m_cfg.writeEntry("LineSmoothingDelayDistance", value);
2234}
2235
2236bool KisConfig::lineSmoothingUseDelayDistance(bool defaultValue) const
2237{
2238 return (defaultValue ? true : m_cfg.readEntry("LineSmoothingUseDelayDistance", true));
2239}
2240
2242{
2243 m_cfg.writeEntry("LineSmoothingUseDelayDistance", value);
2244}
2245
2247{
2248 return (defaultValue ? true : m_cfg.readEntry("LineSmoothingFinishStabilizedCurve", true));
2249}
2250
2252{
2253 m_cfg.writeEntry("LineSmoothingFinishStabilizedCurve", value);
2254}
2255
2256bool KisConfig::lineSmoothingStabilizeSensors(bool defaultValue) const
2257{
2258 return (defaultValue ? true : m_cfg.readEntry("LineSmoothingStabilizeSensors", true));
2259}
2260
2262{
2263 m_cfg.writeEntry("LineSmoothingStabilizeSensors", value);
2264}
2265
2266int KisConfig::tabletEventsDelay(bool defaultValue) const
2267{
2268 return (defaultValue ? 10 : m_cfg.readEntry("tabletEventsDelay", 10));
2269}
2270
2272{
2273 m_cfg.writeEntry("tabletEventsDelay", value);
2274}
2275
2276bool KisConfig::trackTabletEventLatency(bool defaultValue) const
2277{
2278 return (defaultValue ? false : m_cfg.readEntry("trackTabletEventLatency", false));
2279}
2280
2282{
2283 m_cfg.writeEntry("trackTabletEventLatency", value);
2284}
2285
2286bool KisConfig::ignoreHighFunctionKeys(bool defaultValue) const
2287{
2288 return (defaultValue ? true : m_cfg.readEntry("ignoreHighFunctionKeys", true));
2289}
2290
2292{
2293 m_cfg.writeEntry("ignoreHighFunctionKeys", value);
2294}
2295
2297{
2298 return (defaultValue ? false : m_cfg.readEntry("testingAcceptCompressedTabletEvents", false));
2299}
2300
2302{
2303 m_cfg.writeEntry("testingAcceptCompressedTabletEvents", value);
2304}
2305
2306bool KisConfig::shouldEatDriverShortcuts(bool defaultValue) const
2307{
2308 return (defaultValue ? false : m_cfg.readEntry("shouldEatDriverShortcuts", false));
2309}
2310
2311bool KisConfig::testingCompressBrushEvents(bool defaultValue) const
2312{
2313 return (defaultValue ? false : m_cfg.readEntry("testingCompressBrushEvents", false));
2314}
2315
2317{
2318 m_cfg.writeEntry("testingCompressBrushEvents", value);
2319}
2320
2322{
2323 return (defaultValue ? 0 : m_cfg.readEntry("workaroundX11SmoothPressureSteps", 0));
2324}
2325
2326bool KisConfig::showCanvasMessages(bool defaultValue) const
2327{
2328 return (defaultValue ? true : m_cfg.readEntry("showOnCanvasMessages", true));
2329}
2330
2332{
2333 m_cfg.writeEntry("showOnCanvasMessages", show);
2334}
2335
2336bool KisConfig::compressKra(bool defaultValue) const
2337{
2338 return (defaultValue ? false : m_cfg.readEntry("compressLayersInKra", false));
2339}
2340
2341void KisConfig::setCompressKra(bool compress)
2342{
2343 m_cfg.writeEntry("compressLayersInKra", compress);
2344}
2345
2346bool KisConfig::trimKra(bool defaultValue) const
2347{
2348 return (defaultValue ? false : m_cfg.readEntry("TrimKra", false));
2349}
2350
2352{
2353 m_cfg.writeEntry("TrimKra", trim);
2354}
2355
2356bool KisConfig::trimFramesImport(bool defaultValue) const
2357{
2358 return (defaultValue ? false : m_cfg.readEntry("TrimFramesImport", false));
2359}
2361{
2362 m_cfg.writeEntry("TrimFramesImport", trim);
2363}
2364
2365QString KisConfig::exportMimeType(bool defaultValue) const
2366{
2367 return (defaultValue ? 0 : m_cfg.readEntry("defaultExportMimeType", QString()));
2368}
2369
2370void KisConfig::setExportMimeType(const QString &defaultExportMimeType)
2371{
2372 m_cfg.writeEntry("defaultExportMimeType", defaultExportMimeType);
2373}
2374
2375bool KisConfig::toolOptionsInDocker(bool defaultValue) const
2376{
2377 return (defaultValue ? true : m_cfg.readEntry("ToolOptionsInDocker", true));
2378}
2379
2381{
2382 m_cfg.writeEntry("ToolOptionsInDocker", inDocker);
2383}
2384
2385bool KisConfig::kineticScrollingEnabled(bool defaultValue) const
2386{
2387 return (defaultValue ? true : m_cfg.readEntry("KineticScrollingEnabled", true));
2388}
2389
2391{
2392 m_cfg.writeEntry("KineticScrollingEnabled", value);
2393}
2394
2395int KisConfig::kineticScrollingGesture(bool defaultValue) const
2396{
2397#ifdef Q_OS_ANDROID
2398 int defaultGesture = 1; // LeftMouseButtonGesture
2399#else
2400 int defaultGesture = 2; // MiddleMouseButtonGesture
2401#endif
2402
2403 return (defaultValue ? defaultGesture : m_cfg.readEntry("KineticScrollingGesture", defaultGesture));
2404}
2405
2407{
2408 m_cfg.writeEntry("KineticScrollingGesture", gesture);
2409}
2410
2411int KisConfig::kineticScrollingSensitivity(bool defaultValue) const
2412{
2413 return (defaultValue ? 75 : m_cfg.readEntry("KineticScrollingSensitivity", 75));
2414}
2415
2417{
2418 m_cfg.writeEntry("KineticScrollingSensitivity", sensitivity);
2419}
2420
2422{
2423 return (defaultValue ? false : m_cfg.readEntry("KineticScrollingHideScrollbar", false));
2424}
2425
2427{
2428 m_cfg.writeEntry("KineticScrollingHideScrollbar", scrollbar);
2429}
2430
2431int KisConfig::zoomSteps(bool defaultValue) const
2432{
2433 return (defaultValue ? 2 : m_cfg.readEntry("zoomSteps", 2));
2434}
2435
2437{
2438 m_cfg.writeEntry("zoomSteps", steps);
2439}
2440
2441int KisConfig::zoomMarginSize(bool defaultValue) const
2442{
2443 return (defaultValue ? 0 : m_cfg.readEntry("zoomMarginSize", 0));
2444}
2445
2446void KisConfig::setZoomMarginSize(int zoomMarginSize)
2447{
2448 m_cfg.writeEntry("zoomMarginSize", zoomMarginSize);
2449}
2450
2452{
2453 const KoColorSpace *cs = 0;
2454
2455 KConfigGroup cfg = KSharedConfig::openConfig()->group("advancedColorSelector");
2456 if (defaultValue || cfg.readEntry("useCustomColorSpace", true)) {
2458 QString modelID = cfg.readEntry("customColorSpaceModel", "RGBA");
2459 QString depthID = cfg.readEntry("customColorSpaceDepthID", "U8");
2460 QString profile = cfg.readEntry("customColorSpaceProfile", "sRGB built-in - (lcms internal)");
2461 if (profile == "default") {
2462 // qDebug() << "Falling back to default color profile.";
2463 profile = "sRGB built-in - (lcms internal)";
2464 }
2465 cs = csr->colorSpace(modelID, depthID, profile);
2466 }
2467
2468 return cs;
2469}
2470
2472{
2473 KConfigGroup cfg = KSharedConfig::openConfig()->group("advancedColorSelector");
2474 cfg.writeEntry("useCustomColorSpace", bool(cs));
2475 if(cs) {
2476 cfg.writeEntry("customColorSpaceModel", cs->colorModelId().id());
2477 cfg.writeEntry("customColorSpaceDepthID", cs->colorDepthId().id());
2478 cfg.writeEntry("customColorSpaceProfile", cs->profile()->name());
2479 }
2480}
2481
2482bool KisConfig::enableOpenGLFramerateLogging(bool defaultValue) const
2483{
2484 return (defaultValue ? false : m_cfg.readEntry("enableOpenGLFramerateLogging", false));
2485}
2486
2488{
2489 m_cfg.writeEntry("enableOpenGLFramerateLogging", value);
2490}
2491
2492bool KisConfig::enableBrushSpeedLogging(bool defaultValue) const
2493{
2494 return (defaultValue ? false : m_cfg.readEntry("enableBrushSpeedLogging", false));
2495}
2496
2498{
2499 m_cfg.writeEntry("enableBrushSpeedLogging", value);
2500}
2501
2503{
2504 // use the old key name for compatibility
2505 m_cfg.writeEntry("amdDisableVectorWorkaround", value);
2506}
2507
2508bool KisConfig::disableVectorOptimizations(bool defaultValue) const
2509{
2510 // use the old key name for compatibility
2511 return (defaultValue ? false : m_cfg.readEntry("amdDisableVectorWorkaround", false));
2512}
2513
2515{
2516 m_cfg.writeEntry("disableAVXOptimizations", value);
2517}
2518
2519bool KisConfig::disableAVXOptimizations(bool defaultValue) const
2520{
2521 return (defaultValue ? false : m_cfg.readEntry("disableAVXOptimizations", false));
2522}
2523
2525{
2526 m_cfg.writeEntry("animationPlaybackBackend", value);
2527}
2528
2529int KisConfig::animationPlaybackBackend(bool defaultValue) const
2530{
2531 return (defaultValue ? 1 : m_cfg.readEntry("animationPlaybackBackend", 1));
2532}
2533
2535{
2536 bool oldValue = animationDropFrames();
2537
2538 if (value == oldValue) return;
2539
2540 m_cfg.writeEntry("animationDropFrames", value);
2542}
2543
2544bool KisConfig::autoPinLayersToTimeline(bool defaultValue) const
2545{
2546 return (defaultValue ? true : m_cfg.readEntry("autoPinLayers", true));
2547}
2548
2550{
2551 m_cfg.writeEntry("autoPinLayers", value);
2552}
2553
2554bool KisConfig::adaptivePlaybackRange(bool defaultValue) const
2555{
2556 return (defaultValue ? true : m_cfg.readEntry("adaptivePlaybackRange", true));
2557}
2558
2560{
2561 m_cfg.writeEntry("adaptivePlaybackRange", value);
2562}
2563
2565{
2566 return (defaultValue ? true : m_cfg.readEntry("autoZoomTimelineToPlaybackRange", true));
2567}
2568
2570{
2571 m_cfg.writeEntry("autoZoomTimelineToPlaybackRange", value);
2572}
2573
2574QString KisConfig::ffmpegLocation(bool defaultValue) const {
2575 return (defaultValue ? "" : m_cfg.readEntry("ffmpegLocation", ""));
2576}
2577
2579 m_cfg.writeEntry("ffmpegLocation", value);
2580}
2581
2582qreal KisConfig::timelineZoom(bool defaultValue) const
2583{
2584 return (defaultValue ? 1.0f : m_cfg.readEntry("timelineZoom", 1.0f));
2585}
2586
2588{
2589 m_cfg.writeEntry("timelineZoom", value);
2590}
2591
2592bool KisConfig::animationDropFrames(bool defaultValue) const
2593{
2594 return (defaultValue ? true : m_cfg.readEntry("animationDropFrames", true));
2595}
2596
2597int KisConfig::scrubbingUpdatesDelay(bool defaultValue) const
2598{
2599 return (defaultValue ? 30 : m_cfg.readEntry("scrubbingUpdatesDelay", 30));
2600}
2601
2603{
2604 m_cfg.writeEntry("scrubbingUpdatesDelay", value);
2605}
2606
2607int KisConfig::scrubbingAudioUpdatesDelay(bool defaultValue) const
2608{
2609 return (defaultValue ? -1 : m_cfg.readEntry("scrubbingAudioUpdatesDelay", -1));
2610}
2611
2613{
2614 m_cfg.writeEntry("scrubbingAudioUpdatesDelay", value);
2615}
2616
2617int KisConfig::audioOffsetTolerance(bool defaultValue) const
2618{
2619 return (defaultValue ? -1 : m_cfg.readEntry("audioOffsetTolerance", -1));
2620}
2621
2623{
2624 m_cfg.writeEntry("audioOffsetTolerance", value);
2625}
2626
2627bool KisConfig::switchSelectionCtrlAlt(bool defaultValue) const
2628{
2629 return defaultValue ? false : m_cfg.readEntry("switchSelectionCtrlAlt", false);
2630}
2631
2633{
2634 m_cfg.writeEntry("switchSelectionCtrlAlt", value);
2635}
2636
2638{
2639 return defaultValue ? false : m_cfg.readEntry("ConvertToImageColorSpaceOnImport", false);
2640}
2641
2643{
2644 m_cfg.writeEntry("ConvertToImageColorSpaceOnImport", value);
2645}
2646
2647int KisConfig::stabilizerSampleSize(bool defaultValue) const
2648{
2649#ifdef Q_OS_WIN
2650 const int defaultSampleSize = 50;
2651#else
2652 const int defaultSampleSize = 15;
2653#endif
2654
2655 return defaultValue ?
2656 defaultSampleSize : m_cfg.readEntry("stabilizerSampleSize", defaultSampleSize);
2657}
2658
2660{
2661 m_cfg.writeEntry("stabilizerSampleSize", value);
2662}
2663
2664bool KisConfig::stabilizerDelayedPaint(bool defaultValue) const
2665{
2666 const bool defaultEnabled = true;
2667
2668 return defaultValue ?
2669 defaultEnabled : m_cfg.readEntry("stabilizerDelayedPaint", defaultEnabled);
2670}
2671
2673{
2674 m_cfg.writeEntry("stabilizerDelayedPaint", value);
2675}
2676
2677bool KisConfig::showBrushHud(bool defaultValue) const
2678{
2679 return defaultValue ? false : m_cfg.readEntry("showBrushHud", false);
2680}
2681
2683{
2684 m_cfg.writeEntry("showBrushHud", value);
2685}
2686
2687bool KisConfig::showPaletteBottomBar(bool defaultValue) const
2688{
2689 return defaultValue ? true : m_cfg.readEntry("showPaletteBottomBar", true);
2690}
2691
2693{
2694 m_cfg.writeEntry("showPaletteBottomBar", value);
2695}
2696
2697QString KisConfig::brushHudSetting(bool defaultValue) const
2698{
2699 QString defaultDoc = "<!DOCTYPE hud_properties>\n<hud_properties>\n <version value=\"1\" type=\"value\"/>\n <paintbrush>\n <properties_list type=\"array\">\n <item_0 value=\"size\" type=\"value\"/>\n <item_1 value=\"opacity\" type=\"value\"/>\n <item_2 value=\"angle\" type=\"value\"/>\n </properties_list>\n </paintbrush>\n <colorsmudge>\n <properties_list type=\"array\">\n <item_0 value=\"size\" type=\"value\"/>\n <item_1 value=\"opacity\" type=\"value\"/>\n <item_2 value=\"smudge_mode\" type=\"value\"/>\n <item_3 value=\"smudge_length\" type=\"value\"/>\n <item_4 value=\"smudge_color_rate\" type=\"value\"/>\n </properties_list>\n </colorsmudge>\n <sketchbrush>\n <properties_list type=\"array\">\n <item_0 value=\"opacity\" type=\"value\"/>\n <item_1 value=\"size\" type=\"value\"/>\n </properties_list>\n </sketchbrush>\n <hairybrush>\n <properties_list type=\"array\">\n <item_0 value=\"size\" type=\"value\"/>\n <item_1 value=\"opacity\" type=\"value\"/>\n </properties_list>\n </hairybrush>\n <experimentbrush>\n <properties_list type=\"array\">\n <item_0 value=\"opacity\" type=\"value\"/>\n <item_1 value=\"shape_windingfill\" type=\"value\"/>\n </properties_list>\n </experimentbrush>\n <spraybrush>\n <properties_list type=\"array\">\n <item_0 value=\"size\" type=\"value\"/>\n <item_1 value=\"opacity\" type=\"value\"/>\n <item_2 value=\"spray_particlecount\" type=\"value\"/>\n <item_3 value=\"spray_density\" type=\"value\"/>\n </properties_list>\n </spraybrush>\n <hatchingbrush>\n <properties_list type=\"array\">\n <item_0 value=\"size\" type=\"value\"/>\n <item_1 value=\"opacity\" type=\"value\"/>\n <item_2 value=\"hatching_angle\" type=\"value\"/>\n <item_3 value=\"hatching_thickness\" type=\"value\"/>\n <item_4 value=\"hatching_separation\" type=\"value\"/>\n </properties_list>\n </hatchingbrush>\n <gridbrush>\n <properties_list type=\"array\">\n <item_0 value=\"size\" type=\"value\"/>\n <item_1 value=\"opacity\" type=\"value\"/>\n <item_2 value=\"grid_divisionlevel\" type=\"value\"/>\n </properties_list>\n </gridbrush>\n <curvebrush>\n <properties_list type=\"array\">\n <item_0 value=\"opacity\" type=\"value\"/>\n <item_1 value=\"curve_historysize\" type=\"value\"/>\n <item_2 value=\"curve_linewidth\" type=\"value\"/>\n <item_3 value=\"curve_lineopacity\" type=\"value\"/>\n <item_4 value=\"curve_connectionline\" type=\"value\"/>\n </properties_list>\n </curvebrush>\n <dynabrush>\n <properties_list type=\"array\">\n <item_0 value=\"dyna_diameter\" type=\"value\"/>\n <item_1 value=\"opacity\" type=\"value\"/>\n <item_2 value=\"dyna_mass\" type=\"value\"/>\n <item_3 value=\"dyna_drag\" type=\"value\"/>\n </properties_list>\n </dynabrush>\n <particlebrush>\n <properties_list type=\"array\">\n <item_0 value=\"opacity\" type=\"value\"/>\n <item_1 value=\"particle_particles\" type=\"value\"/>\n <item_2 value=\"particle_opecityweight\" type=\"value\"/>\n <item_3 value=\"particle_iterations\" type=\"value\"/>\n </properties_list>\n </particlebrush>\n <duplicate>\n <properties_list type=\"array\">\n <item_0 value=\"size\" type=\"value\"/>\n <item_1 value=\"opacity\" type=\"value\"/>\n <item_2 value=\"clone_healing\" type=\"value\"/>\n <item_3 value=\"clone_movesource\" type=\"value\"/>\n </properties_list>\n </duplicate>\n <deformbrush>\n <properties_list type=\"array\">\n <item_0 value=\"size\" type=\"value\"/>\n <item_1 value=\"opacity\" type=\"value\"/>\n <item_2 value=\"deform_amount\" type=\"value\"/>\n <item_3 value=\"deform_mode\" type=\"value\"/>\n </properties_list>\n </deformbrush>\n <tangentnormal>\n <properties_list type=\"array\">\n <item_0 value=\"size\" type=\"value\"/>\n <item_1 value=\"opacity\" type=\"value\"/>\n </properties_list>\n </tangentnormal>\n <filter>\n <properties_list type=\"array\">\n <item_0 value=\"size\" type=\"value\"/>\n <item_1 value=\"opacity\" type=\"value\"/>\n </properties_list>\n </filter>\n <roundmarker>\n <properties_list type=\"array\">\n <item_0 value=\"opacity\" type=\"value\"/>\n <item_1 value=\"size\" type=\"value\"/>\n </properties_list>\n </roundmarker>\n</hud_properties>\n";
2700 return defaultValue ? defaultDoc : m_cfg.readEntry("brushHudSettings", defaultDoc);
2701}
2702
2703void KisConfig::setBrushHudSetting(const QString &value) const
2704{
2705 m_cfg.writeEntry("brushHudSettings", value);
2706}
2707
2709{
2710 return defaultValue ? true : m_cfg.readEntry("calculateAnimationCacheInBackground", true);
2711}
2712
2714{
2715 m_cfg.writeEntry("calculateAnimationCacheInBackground", value);
2716}
2717
2718QColor KisConfig::defaultAssistantsColor(bool defaultValue) const
2719{
2720 static const QColor defaultColor = QColor(176, 176, 176, 255);
2721 return defaultValue ? defaultColor : m_cfg.readEntry("defaultAssistantsColor", defaultColor);
2722}
2723
2724void KisConfig::setDefaultAssistantsColor(const QColor &color) const
2725{
2726 m_cfg.writeEntry("defaultAssistantsColor", color);
2727}
2728
2729bool KisConfig::autoSmoothBezierCurves(bool defaultValue) const
2730{
2731 return defaultValue ? false : m_cfg.readEntry("autoSmoothBezierCurves", false);
2732}
2733
2735{
2736 m_cfg.writeEntry("autoSmoothBezierCurves", value);
2737}
2738
2740{
2741 return defaultValue ? false : m_cfg.readEntry("activateTransformToolAfterPaste", false);
2742}
2743
2745{
2746 m_cfg.writeEntry("activateTransformToolAfterPaste", value);
2747}
2748
2749bool KisConfig::zoomHorizontal(bool defaultValue) const
2750{
2751 return defaultValue ? false : m_cfg.readEntry("zoomHorizontal", false);
2752}
2753
2755{
2756 m_cfg.writeEntry("zoomHorizontal", value);
2757}
2758
2759bool KisConfig::selectionActionBar(bool defaultValue) const
2760{
2761 return defaultValue ? true : m_cfg.readEntry("selectionActionBar", true);
2762}
2763
2765{
2766 m_cfg.writeEntry("selectionActionBar", value);
2767}
2768
2770{
2771 const QString configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
2772 QSettings kritarc(configPath + QStringLiteral("/kritadisplayrc"), QSettings::IniFormat);
2773
2774 return rootSurfaceFormat(&kritarc, defaultValue);
2775}
2776
2778{
2779 const QString configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
2780 QSettings kritarc(configPath + QStringLiteral("/kritadisplayrc"), QSettings::IniFormat);
2781
2782 setRootSurfaceFormat(&kritarc, value);
2783}
2784
2785KisConfig::RootSurfaceFormat KisConfig::rootSurfaceFormat(QSettings *displayrc, bool defaultValue)
2786{
2787 QString textValue = "bt709-g22";
2788
2789 if (!defaultValue) {
2790 textValue = displayrc->value("rootSurfaceFormat", textValue).toString();
2791 }
2792
2793 return textValue == "bt709-g10" ? BT709_G10 :
2794 textValue == "bt2020-pq" ? BT2020_PQ :
2795 BT709_G22;
2796}
2797
2799{
2800 const QString textValue =
2801 value == BT709_G10 ? "bt709-g10" :
2802 value == BT2020_PQ ? "bt2020-pq" :
2803 "bt709-g22";
2804
2805 displayrc->setValue("rootSurfaceFormat", textValue);
2806}
2807
2808bool KisConfig::useZip64(bool defaultValue) const
2809{
2810 return defaultValue ? false : m_cfg.readEntry("UseZip64", false);
2811}
2812
2814{
2815 m_cfg.writeEntry("UseZip64", value);
2816}
2817
2819{
2820 return defaultValue ? true : m_cfg.readEntry("convertLayerColorSpaceInProperties", true);
2821}
2822
2824{
2825 m_cfg.writeEntry("convertLayerColorSpaceInProperties", value);
2826}
2827
2828bool KisConfig::renamePastedLayers(bool defaultValue) const
2829{
2830 return defaultValue ? true : m_cfg.readEntry("renamePastedLayers", true);
2831}
2832
2834{
2835 m_cfg.writeEntry("renamePastedLayers", value);
2836}
2837
2839{
2840 return (KisConfig::LayerInfoTextStyle)(defaultValue ? INFOTEXT_NONE : m_cfg.readEntry("layerInfoTextStyle", (int)INFOTEXT_NONE));
2841}
2842
2844{
2845 m_cfg.writeEntry("layerInfoTextStyle", (int)value);
2846}
2847
2848int KisConfig::layerInfoTextOpacity(bool defaultValue) const
2849{
2850 return defaultValue ? 55 : m_cfg.readEntry("layerInfoTextOpacity", 55);
2851}
2852
2854{
2855 m_cfg.writeEntry("layerInfoTextOpacity", value);
2856}
2857
2858bool KisConfig::useInlineLayerInfoText(bool defaultValue) const
2859{
2860 return defaultValue ? false : m_cfg.readEntry("useInlineLayerInfoText", false);
2861}
2862
2864{
2865 m_cfg.writeEntry("useInlineLayerInfoText", value);
2866}
2867
2868bool KisConfig::useLayerSelectionCheckbox(bool defaultValue) const
2869{
2870 return defaultValue ? false : m_cfg.readEntry("useLayerSelectionCheckbox", true);
2871}
2872
2874{
2875 m_cfg.writeEntry("useLayerSelectionCheckbox", value);
2876}
2877
2879{
2880 if (defaultValue) {
2882 }
2883
2884 return static_cast<AssistantsDrawMode>(
2885 m_cfg.readEntry("assistantsDrawMode", static_cast<int>(ASSISTANTS_DRAW_MODE_DIRECT)));
2886}
2887
2889{
2890 m_cfg.writeEntry("assistantsDrawMode", static_cast<int>(value));
2891}
2892
2893bool KisConfig::longPressEnabled(bool defaultValue) const
2894{
2895#ifdef Q_OS_ANDROID
2896 bool defaultEnabled = true;
2897#else
2898 bool defaultEnabled = false;
2899#endif
2900 if (defaultValue) {
2901 return defaultEnabled;
2902 } else {
2903 return m_cfg.readEntry("longPressEnabled", defaultEnabled);
2904 }
2905}
2906
2908{
2909 m_cfg.writeEntry("longPressEnabled", value);
2911}
2912
2913#include <QDomDocument>
2914#include <QDomElement>
2915
2916void KisConfig::writeKoColor(const QString& name, const KoColor& color) const
2917{
2918 QDomDocument doc = QDomDocument(name);
2919 QDomElement el = doc.createElement(name);
2920 doc.appendChild(el);
2921 color.toXML(doc, el);
2922 m_cfg.writeEntry(name, doc.toString());
2923}
2924
2925//ported from kispropertiesconfig.
2926KoColor KisConfig::readKoColor(const QString& name, const KoColor& _color) const
2927{
2928 QDomDocument doc;
2929
2930 KoColor color = _color;
2931
2932 if (!m_cfg.readEntry(name).isNull()) {
2933 doc.setContent(m_cfg.readEntry(name));
2934 QDomElement e = doc.documentElement().firstChild().toElement();
2936 }
2937 else {
2938 QString blackColor = "<!DOCTYPE Color>\n<Color>\n <RGB r=\"0\" space=\"sRGB-elle-V2-srgbtrc.icc\" b=\"0\" g=\"0\"/>\n</Color>\n";
2939 doc.setContent(blackColor);
2940 QDomElement e = doc.documentElement().firstChild().toElement();
2942 }
2943 return color;
2944}
2945
2946void KisConfig::writeKoColors(const QString& name, const QList<KoColor>& colors) const
2947{
2948 QDomDocument doc = QDomDocument(name);
2949 QDomElement colorsElement = doc.createElement("colors");
2950 doc.appendChild(colorsElement);
2951
2952 // Writes like <colors><RGB ../><RGB .. /> ... </colors>
2953 Q_FOREACH(const KoColor & color, colors) {
2954 color.toXML(doc, colorsElement);
2955 }
2956 m_cfg.writeEntry(name, doc.toString());
2957}
2958
2959QList<KoColor> KisConfig::readKoColors(const QString& name) const
2960{
2961 QList<KoColor> colors;
2962 QString colorListXML = m_cfg.readEntry(name);
2963
2964 if (!colorListXML.isNull()) {
2965 QDomDocument doc;
2966 doc.setContent(colorListXML);
2967 QDomElement colorsElement = doc.firstChildElement();
2968 if (!colorsElement.isNull()) {
2969 QDomNodeList colorNodes = colorsElement.childNodes();
2970 colors.reserve(colorNodes.size());
2971
2972 for (int k = 0; k < colorNodes.size(); k++) {
2973 QDomElement colorElement = colorNodes.at(k).toElement();
2974 KoColor color = KoColor::fromXML(colorElement, Integer16BitsColorDepthID.id());
2975 colors.push_back(color);
2976 }
2977 }
2978 }
2979
2980 return colors;
2981}
2982
2983QDebug operator<<(QDebug debug, const KisConfig::CanvasSurfaceMode &mode)
2984{
2985 QDebugStateSaver saver(debug);
2986 debug.nospace() << "CanvasSurfaceMode(";
2987
2988 switch (mode) {
2990 debug.nospace() << "Preferred";
2991 break;
2993 debug.nospace() << "Rec709g22";
2994 break;
2996 debug.nospace() << "Rec709g10";
2997 break;
2999 debug.nospace() << "Rec2020pq";
3000 break;
3002 debug.nospace() << "Unmanaged";
3003 break;
3004 default:
3005 debug.nospace() << "unknown(" << static_cast<int>(mode) << ")";
3006 break;
3007 }
3008
3009 debug.nospace() << ")";
3010
3011 return debug.space();
3012}
3013
3014QDebug operator<<(QDebug debug, const KisConfig::CanvasSurfaceBitDepthMode &mode)
3015{
3016
3017 QDebugStateSaver saver(debug);
3018 debug.nospace() << "CanvasSurfaceBitDepthMode(";
3019
3020 switch (mode) {
3022 debug.nospace() << "DepthAuto";
3023 break;
3025 debug.nospace() << "Depth8Bit";
3026 break;
3028 debug.nospace() << "Depth10Bit";
3029 break;
3030 default:
3031 debug.nospace() << "unknown(" << static_cast<int>(mode) << ")";
3032 break;
3033 }
3034
3035 debug.nospace() << ")";
3036
3037 return debug.space();
3038}
3039
qreal length(const QPointF &vec)
Definition Ellipse.cc:82
float value(const T *src, size_t ch)
qreal v
QList< QString > QStringList
const KoID Integer8BitsColorDepthID("U8", ki18n("8-bit integer/channel"))
const KoID Integer16BitsColorDepthID("U16", ki18n("16-bit integer/channel"))
const KoID RGBAColorModelID("RGBA", ki18n("RGB/Alpha"))
const quint8 OPACITY_OPAQUE_U8
QByteArray displayProfile(const QString &device, int profile=0) const
Return the icc profile for the given device and index (if a device has more than one profile)
static KisColorManager * instance()
void notifyLongPressChanged(bool enabled)
static KisConfigNotifier * instance()
void notifyColorSamplerPreviewStyleChanged()
QString widgetStyle(bool defaultValue=false)
void setCumulativeUndoData(KisCumulativeUndoData value)
qreal lineSmoothingDistanceMin(bool defaultValue=false) const
bool testingAcceptCompressedTabletEvents(bool defaultValue=false) const
void setForceShowSaveMessages(bool value) const
QString importConfiguration(const QString &filterId, bool defaultValue=false) const
void setPreferredVectorImportResolutionPPI(int value) const
bool backupFile(bool defaultValue=false) const
void setAntialiasCurves(bool v) const
bool useOcio(bool defaultValue=false) const
void setSwitchSelectionCtrlAlt(bool value)
qint32 defImageHeight(bool defaultValue=false) const
bool antialiasSelectionOutline(bool defaultValue=false) const
void setZoomSteps(int steps)
@ ASSISTANTS_DRAW_MODE_DIRECT
Definition kis_config.h:798
int zoomSteps(bool defaultValue=false) const
qreal lineSmoothingTailAggressiveness(bool defaultValue=false) const
OcioColorManagementMode ocioColorManagementMode(bool defaultValue=false) const
void setHideDockersFullscreen(const bool value) const
void setUseEraserBrushOpacity(bool value)
LayerInfoTextStyle layerInfoTextStyle(bool defaultValue=false) const
static CanvasSurfaceBitDepthMode canvasSurfaceBitDepthMode(QSettings *settings, bool defaultValue=false)
void setCurrentInputProfile(const QString &name)
int preferredVectorImportResolutionPPI(bool defaultValue=false) const
void setAdaptivePlaybackRange(bool value)
void setEnableCanvasSurfaceColorSpaceManagement(bool value)
void setLineSmoothingTailAggressiveness(qreal value)
void loadSnapConfig(KisSnapConfig *config, bool defaultValue=false) const
bool colorSamplerPreviewCircleOutlineEnabled(bool defaultValue=false) const
void setPasteFormat(qint32 format)
KConfigGroup m_cfg
Definition kis_config.h:837
QColor checkersColor2(bool defaultValue=false) const
void setColorSamplerPreviewCircleOutlineEnabled(bool enabled)
void setGridSubdivisionColor(const QColor &v) const
void setUseRightMiddleTabletButtonWorkaround(bool value)
int lineSmoothingType(bool defaultValue=false) const
void setCheckersColor1(const QColor &v) const
QString toolbarSlider(int sliderNumber, bool defaultValue=false) const
int stabilizerSampleSize(bool defaultValue=false) const
quint32 guidesLineStyle(bool defaultValue=false) const
void setHidePopups(bool hidePopups)
void setFullscreenMode(const bool value) const
void setLineSmoothingUseDelayDistance(bool value)
void setMDIBackgroundColor(const QString &v) const
QString pressureTabletCurve(bool defaultValue=false) const
void setUndoStackLimit(int limit) const
qint32 defImageWidth(bool defaultValue=false) const
bool showGlobalSelection(bool defaultValue=false) const
bool hideScrollbars(bool defaultValue=false) const
int verticalSplitLines(bool defaultValue=false) const
int openGLFilteringMode(bool defaultValue=false) const
void setUseZip64(bool value)
bool showSingleChannelAsColor(bool defaultValue=false) const
void setWidgetStyle(QString name)
void setHideToolbarFullscreen(const bool value) const
void setCanvasState(const QString &state) const
void setLineSmoothingDistanceKeepAspectRatio(bool value)
int kineticScrollingSensitivity(bool defaultValue=false) const
bool convertToImageColorspaceOnImport(bool defaultValue=false) const
QString exportConfigurationXML(const QString &filterId, bool defaultValue=false) const
int zoomMarginSize(bool defaultValue=false) const
void setFFMpegLocation(const QString &value)
void setAutoZoomTimelineToPlaybackRange(bool value)
bool showRootLayer(bool defaultValue=false) const
void setTestingAcceptCompressedTabletEvents(bool value)
qint32 pasteFormat(bool defaultValue) const
void setEnableBrushSpeedLogging(bool value) const
void setShowDockers(const bool value) const
void setExportMimeType(const QString &defaultExportMimeType)
bool forceShowSaveMessages(bool defaultValue=true) const
bool useInlineLayerInfoText(bool defaultValue=false) const
void setUseWin8PointerInput(bool value)
QPoint getDefaultGridSpacing(bool defaultValue=false) const
void setShowBrushHud(bool value)
void enablePixelGrid(bool v) const
void setShowStatusBar(const bool value) const
bool useDirtyPresets(bool defaultValue=false) const
void setOcioLutEdgeSize(int value)
void setDefaultPalette(const QString &name) const
qreal getPixelGridDrawingThreshold(bool defaultValue=false) const
bool switchSelectionCtrlAlt(bool defaultValue=false) const
void setRenamePastedLayers(bool value)
bool shouldEatDriverShortcuts(bool defaultValue=false) const
BackgroundStyle defaultBackgroundStyle(bool defaultValue=false) const
QColor checkersColor1(bool defaultValue=false) const
void setHideScrollbars(bool value) const
void writeKoColors(const QString &name, const QList< KoColor > &colors) const
bool allowLCMSOptimization(bool defaultValue=false) const
KisConfig(bool readOnly)
KisConfig create a kisconfig object.
Definition kis_config.cc:56
int animationPlaybackBackend(bool defaultValue=false) const
void setShowPaletteBottomBar(bool value)
CanvasSurfaceBitDepthMode effectiveCanvasSurfaceBitDepthMode(const QSurfaceFormat &format) const
static void setCanvasSurfaceBitDepthMode(QSettings *settings, CanvasSurfaceBitDepthMode value)
int numMipmapLevels(bool defaultValue=false) const
void setIgnoreHighFunctionKeys(bool value)
const KoColorSpace * customColorSelectorColorSpace(bool defaultValue=false) const
bool showFilterGalleryLayerMaskDialog(bool defaultValue=false) const
bool activateTransformToolAfterPaste(bool defaultValue=false) const
void setNewCursorStyle(CursorStyle style)
bool hideDockersFullscreen(bool defaultValue=false) const
static void setUseWin8PointerInputNoApp(QSettings *settings, bool value)
void setUseInlineLayerInfoText(bool value)
void disableOpenGL() const
void setGridSubdivisionStyle(quint32 v) const
void setEraserCursorStyle(CursorStyle style)
bool compressKra(bool defaultValue=false) const
void setTrackTabletEventLatency(bool value)
int textureOverlapBorder() const
bool disableVectorOptimizations(bool defaultValue=false) const
void setCursorMainColor(const QColor &v) const
void setColorSamplerPreviewCircleThickness(qreal thickness)
void setCanvasSurfaceColorSpaceManagementMode(CanvasSurfaceMode value)
void setUndoEnabled(bool undo) const
bool levelOfDetailEnabled(bool defaultValue=false) const
void setCumulativeUndoRedo(bool value)
void setConvertToImageColorspaceOnImport(bool value)
void setPixelGridColor(const QColor &v) const
void setToolOptionsInDocker(bool inDocker)
void setForceAlwaysFullSizedOutline(bool value) const
void setLongPressEnabled(bool value)
SessionOnStartup sessionOnStartup(bool defaultValue=false) const
bool lineSmoothingScalableDistance(bool defaultValue=false) const
bool forceOpenGLFenceWorkaround(bool defaultValue=false) const
void setForcePaletteColors(bool forcePaletteColors)
void setHideTitlebarFullscreen(const bool value) const
void setScrubbingAudioUpdatesDelay(int value)
int layerThumbnailSize(bool defaultValue=false) const
bool enableOpenGLFramerateLogging(bool defaultValue=false) const
QColor getPixelGridColor(bool defaultValue=false) const
void setGridIsoVerticalStyle(quint32 v) const
qreal vastScrolling(bool defaultValue=false) const
void setSelectionViewSizeMinimum(qreal outlineSizeMinimum) const
bool fullscreenMode(bool defaultValue=false) const
bool useDefaultColorSpace(bool defaultvalue=false) const
bool toolOptionsPopupDetached(bool defaultValue=false) const
bool autoSmoothBezierCurves(bool defaultValue=false) const
bool pixelGridEnabled(bool defaultValue=false) const
void setRulersTrackMouse(bool value) const
QColor defaultAssistantsColor(bool defaultValue=false) const
bool hideMenuFullscreen(bool defaultValue=false) const
QString getMDIBackgroundColor(bool defaultValue=false) const
void setMonitorProfile(int screen, const QString &monitorProfile, bool override) const
bool showPaletteBottomBar(bool defaultValue=false) const
bool lineSmoothingFinishStabilizedCurve(bool defaultValue=false) const
void setLineSmoothingFinishStabilizedCurve(bool value)
void setUseDefaultColorSpace(bool value) const
void setDefaultColorDepth(const QString &depth) const
bool hideScrollbarsFullscreen(bool defaultValue=false) const
QString printerProfile(bool defaultValue=false) const
void setStabilizerDelayedPaint(bool value)
TouchPainting touchPainting(bool defaultValue=false) const
void setSeparateEraserCursor(bool value) const
qint32 monitorRenderIntent(bool defaultValue=false) const
bool showFilterGallery(bool defaultValue=false) const
void setActivateTransformToolAfterPaste(bool value)
void setShowFilterGallery(bool showFilterGallery) const
bool m_readOnly
Definition kis_config.h:838
int kineticScrollingGesture(bool defaultValue=false) const
bool useZip64(bool defaultValue=false) const
bool calculateAnimationCacheInBackground(bool defaultValue=false) const
void setLineSmoothingDistanceMin(qreal value)
int favoritePresets(bool defaultValue=false) const
bool zoomHorizontal(bool defaultValue=false) const
QString getMDIBackgroundImage(bool defaultValue=false) const
KisPropertiesConfigurationSP exportConfiguration(const QString &filterId, bool defaultValue=false) const
void setAssistantsDrawMode(AssistantsDrawMode value)
void setShowGlobalSelection(bool showGlobalSelection) const
quint32 getGridMainStyle(bool defaultValue=false) const
void setScrubbingUpdatesDelay(int value)
CanvasSurfaceMode canvasSurfaceColorSpaceManagementMode(bool defaultValue=false) const
bool hideToolbarFullscreen(bool defaultValue=false) const
void setScratchpadVisible(bool visible)
qreal outlineSizeMinimum(bool defaultValue=false) const
bool showCanvasMessages(bool defaultValue=false) const
void setNumDefaultLayers(int num)
QList< KoColor > readKoColors(const QString &name) const
QColor getGridMainColor(bool defaultValue=false) const
void setUseSystemMonitorProfile(bool _useSystemMonitorProfile) const
bool hideDevFundBanner(bool defaultValue=false) const
void setAnimationDropFrames(bool value)
int openGLTextureSize(bool defaultValue=false) const
qreal timelineZoom(bool defaultValue=false) const
void setDefaultGridSpacing(QPoint gridSpacing)
bool useWin8PointerInput(bool defaultValue=false) const
void setPrinterColorSpace(const QString &printerColorSpace) const
bool useOpenGLTextureBuffer(bool defaultValue=false) const
void setToolOptionsPopupDetached(bool detached) const
void setLineSmoothingDelayDistance(qreal value)
OutlineStyle lastUsedOutlineStyle(bool defaultValue=false) const
void setCalculateAnimationCacheInBackground(bool value)
void setGridMainStyle(quint32 v) const
void setColorSamplerPreviewCircleExtraCirclesEnabled(bool enabled)
void setAutoSaveInterval(int seconds) const
void setShowSingleChannelAsColor(bool asColor)
void setTrimFramesImport(bool trim)
bool forcePaletteColors(bool defaultValue=false) const
void setClicklessSpacePan(const bool toggle) const
bool convertLayerColorSpaceInProperties(bool defaultValue=false) const
bool showDockerTitleBars(bool defaultValue=false) const
qreal defImageResolution(bool defaultValue=false) const
void setTimelineZoom(qreal value)
void setAllowLCMSOptimization(bool allowLCMSOptimization)
void setPrinterProfile(const QString &printerProfile) const
void setUseLayerSelectionCheckbox(bool value)
void setVerticalSplitLines(const int numberLines) const
KisOcioConfiguration ocioConfiguration(bool defaultValue=false) const
void setColorSamplerPreviewCircleDiameter(int style)
void setSliderLabels(bool enabled)
void setRenderIntent(qint32 monitorRenderIntent) const
void setBrushHudSetting(const QString &value) const
void setFavoritePresets(const int value)
void setEraserOutlineStyle(OutlineStyle style)
void setShowOutlineWhilePainting(bool showOutlineWhilePainting) const
bool lineSmoothingDistanceKeepAspectRatio(bool defaultValue=false) const
RootSurfaceFormat rootSurfaceFormat(bool defaultValue=false) const
QColor canvasBorderColor(bool defaultValue=false) const
void setPresetStripVisible(bool visible)
int colorSamplerPreviewCircleDiameter(bool defaultValue=false) const
int tabletEventsDelay(bool defaultValue=false) const
QString exportMimeType(bool defaultValue) const
void setScrollingCheckers(bool scrollCheckers) const
const QString getScreenStringIdentfier(int screenNo) const
bool firstRun(bool defaultValue=false) const
void setBackupFile(bool backupFile) const
void setTabletEventsDelay(int value)
KoColor readKoColor(const QString &name, const KoColor &color=KoColor()) const
void logImportantSettings() const
Log the most interesting settings to the usage log.
Definition kis_config.cc:77
QString ffmpegLocation(bool defaultValue=false) const
void setImportConfiguration(const QString &filterId, KisPropertiesConfigurationSP properties) const
bool useLayerSelectionCheckbox(bool defaultValue=false) const
QColor guidesColor(bool defaultValue=false) const
CursorStyle newCursorStyle(bool defaultValue=false) const
bool useCumulativeUndoRedo(bool defaultValue=false) const
void setCheckSize(qint32 checkSize) const
void setLevelOfDetailEnabled(bool value)
bool paintopPopupDetached(bool defaultValue=false) const
void setToolbarSlider(int sliderNumber, const QString &slider)
CursorStyle eraserCursorStyle(bool defaultValue=false) const
void setKineticScrollingGesture(int kineticScroll)
QString defColorProfile(bool defaultValue=false) const
void setLineSmoothingSmoothPressure(bool value)
void setPixelGridDrawingThreshold(qreal v) const
void setStabilizerSampleSize(int value)
void setMonitorForScreen(int screen, const QString &monitor)
QString currentInputProfile(bool defaultValue=false) const
void setCanvasBorderColor(const QColor &color) const
QString monitorProfile(int screen) const
get the profile the user has selected for the given screen
void setDefaultBackgroundOpacity(quint8 value)
void setGridIsoVerticalColor(const QColor &v) const
void setVastScrolling(const qreal factor) const
@ TOUCH_PAINTING_DISABLED
Definition kis_config.h:50
@ TOUCH_PAINTING_ENABLED
Definition kis_config.h:49
@ TOUCH_PAINTING_AUTO
Definition kis_config.h:48
void setShowCanvasMessages(bool show)
void setDefaultAssistantsColor(const QColor &color) const
qint32 checkSize(bool defaultValue=false) const
void setConvertLayerColorSpaceInProperties(bool value)
void setWorkingColorSpace(const QString &workingColorSpace) const
KisCumulativeUndoData cumulativeUndoData(bool defaultValue=false) const
bool scratchpadVisible(bool defaultValue=false) const
OutlineStyle newOutlineStyle(bool defaultValue=false) const
bool forceAlwaysFullSizedOutline(bool defaultValue=false) const
void setCustomColorSelectorColorSpace(const KoColorSpace *cs)
ColorSamplerPreviewStyle
Definition kis_config.h:138
void setLineSmoothingType(int value)
void setPressureTabletCurve(const QString &curveString) const
qreal colorSamplerPreviewCircleThickness(bool defaultValue=false) const
bool clicklessSpacePan(bool defaultValue=false) const
QString workingColorSpace(bool defaultValue=false) const
void setEnableOpenGLFramerateLogging(bool value) const
bool trackTabletEventLatency(bool defaultValue=false) const
bool renamePastedLayers(bool defaultValue=false) const
int horizontalSplitLines(bool defaultValue=false) const
void setShowDockerTitleBars(const bool value) const
void setFirstRun(const bool firstRun) const
void setNewOutlineStyle(OutlineStyle style)
void setCheckersColor2(const QColor &v) const
void setShowRootLayer(bool showRootLayer) const
void setAutoSmoothBezierCurves(bool value)
OutlineStyle eraserOutlineStyle(bool defaultValue=false) const
void saveSnapConfig(const KisSnapConfig &config)
void setScrollbarZoomEnabled(bool enabled) const
int presetChooserViewMode(bool defaultValue=false) const
void setUseBlackPointCompensation(bool useBlackPointCompensation) const
bool kineticScrollingEnabled(bool defaultValue=false) const
bool animationDropFrames(bool defaultValue=false) const
void setLineSmoothingStabilizeSensors(bool value)
QColor defaultBackgroundColor(bool defaultValue=false) const
bool disableTouchOnCanvas() const
int ocioLutEdgeSize(bool defaultValue=false) const
void setAudioOffsetTolerance(int value)
void setUseOpenGLTextureBuffer(bool useBuffer)
void setTrimKra(bool trim)
void setOcioConfiguration(const KisOcioConfiguration &cfg)
void setPresetIconSize(const int value) const
OcioColorManagementMode
Definition kis_config.h:501
bool hideTitlebarFullscreen(bool defaultValue=false) const
QString defaultPalette(bool defaultValue=false) const
bool useRightMiddleTabletButtonWorkaround(bool defaultValue=false) const
void setDefaultBackgroundStyle(BackgroundStyle value)
bool longPressEnabled(bool defaultValue=false) const
QStringList favoriteCompositeOps(bool defaultValue=false) const
bool useEraserBrushOpacity(bool defaultValue=false) const
void setColorSamplerPreviewStyle(ColorSamplerPreviewStyle style)
bool sliderLabels(bool defaultValue=false) const
bool hidePopups(bool defaultValue=false) const
bool enableCanvasSurfaceColorSpaceManagement(bool defaultValue=false) const
void setGuidesLineStyle(quint32 v) const
QString printerColorSpace(bool defaultValue=false) const
bool showBrushHud(bool defaultValue=false) const
void setRootSurfaceFormat(RootSurfaceFormat value)
bool autoPinLayersToTimeline(bool defaultValue=false) const
bool scrollbarZoomEnabled(bool defaultValue=false) const
bool toolOptionsInDocker(bool defaultValue=false) const
void setPresetChooserViewMode(const int mode) const
void setOpenGLFilteringMode(int filteringMode)
void setKineticScrollingHideScrollbars(bool scrollbar)
void setAntialiasSelectionOutline(bool v) const
bool trimKra(bool defaultValue=false) const
static bool useWin8PointerInputNoApp(QSettings *settings, bool defaultValue=false)
bool forceShowAutosaveMessages(bool defaultValue=true) const
int layerTreeIndentation(bool defaultValue=false) const
void setFavoriteCompositeOps(const QStringList &compositeOps) const
void setOcioColorManagementMode(OcioColorManagementMode mode) const
bool enableBrushSpeedLogging(bool defaultValue=false) const
bool forceAlwaysFullSizedEraserOutline(bool defaultValue=false) const
int autoSaveInterval(bool defaultValue=false) const
int workaroundX11SmoothPressureSteps(bool defaultValue=false) const
QString defColorModel(bool defaultValue=false) const
void setPaintopPopupDetached(bool detached) const
void setDisableVectorOptimizations(bool value)
void setHideStatusbarFullscreen(const bool value) const
void setCompressKra(bool compress)
void setTouchPainting(TouchPainting value) const
int audioOffsetTolerance(bool defaultValue=false) const
bool showOutlineWhilePainting(bool defaultValue=false) const
qreal lineSmoothingDelayDistance(bool defaultValue=false) const
void setUseEraserBrushSize(bool value)
quint32 getGridIsoVerticalStyle(bool defaultValue=false) const
void setShowEraserOutlineWhilePainting(bool showEraserOutlineWhilePainting) const
bool lineSmoothingSmoothPressure(bool defaultValue=false) const
QString canvasState(bool defaultValue=false) const
void setHideMenuFullscreen(const bool value) const
int scrubbingUpdatesDelay(bool defaultValue=false) const
bool useSystemMonitorProfile(bool defaultValue=false) const
bool autoZoomTimelineToPlaybackRange(bool defaultValue=false) const
bool scrollCheckers(bool defaultValue=false) const
void setForceShowAutosaveMessages(bool ShowAutosaveMessages) const
QColor getGridIsoVerticalColor(bool defaultValue=false) const
bool colorHistoryPerDocument(bool defaultValue=false) const
bool stabilizerDelayedPaint(bool defaultValue=false) const
void setOutlineSizeMinimum(qreal outlineSizeMinimum) const
CanvasSurfaceBitDepthMode
Definition kis_config.h:189
bool useEraserBrushSize(bool defaultValue=false) const
void setLayerThumbnailSize(int size)
void setZoomMarginSize(int zoomMarginSize)
@ SOS_BlankSession
Definition kis_config.h:366
void setShowRulers(bool rulers) const
void setLayerInfoTextOpacity(int value)
bool hideStatusbarFullscreen(bool defaultValue=false) const
void setGridMainColor(const QColor &v) const
qreal lineSmoothingDistanceMax(bool defaultValue=false) const
static const KoColorProfile * getScreenProfile(int screen)
get the profile the color management system has stored for the given screen
bool presetStripVisible(bool defaultValue=false) const
bool lineSmoothingUseDelayDistance(bool defaultValue=false) const
bool colorSamplerPreviewCircleExtraCirclesEnabled(bool defaultValue=false) const
void setZoomHorizontal(bool value)
void setLineSmoothingScalableDistance(bool value)
void setHideDevFundBanner(bool value=true)
bool kineticScrollingHiddenScrollbars(bool defaultValue=false) const
bool showDockers(bool defaultValue=false) const
void setExportConfiguration(const QString &filterId, KisPropertiesConfigurationSP properties) const
const KoColorProfile * displayProfile(int screen) const
void setLineSmoothingDistanceMax(qreal value)
bool useOpenGL(bool defaultValue=false) const
void setTestingCompressBrushEvents(bool value)
bool trimFramesImport(bool defaultValue=false) const
int presetIconSize(bool defaultValue=false) const
bool testingCompressBrushEvents(bool defaultValue=false) const
void setForceAlwaysFullSizedEraserOutline(bool value) const
bool selectionActionBar(bool defaultValue=false) const
QString defaultColorDepth(bool defaultValue=false) const
void setDefaultBackgroundColor(const QColor &value)
int undoStackLimit(bool defaultValue=false) const
bool useBlackPointCompensation(bool defaultValue=false) const
bool saveSessionOnQuit(bool defaultValue) const
ColorSamplerPreviewStyle colorSamplerPreviewStyle(bool defaultValue=false) const
void setMDIBackgroundImage(const QString &fileName) const
QColor getCursorMainColor(bool defaultValue=false) const
void setUseProjections(bool useProj) const
void setSelectionActionBar(bool value)
qint32 pasteBehaviour(bool defaultValue=false) const
AssistantsDrawMode assistantsDrawMode(bool defaultValue=false) const
bool rulersTrackMouse(bool defaultValue=false) const
void setUseDirtyPresets(bool value)
quint32 getGridSubdivisionStyle(bool defaultValue=false) const
bool separateEraserCursor(bool defaultValue=false) const
int numDefaultLayers(bool defaultValue=false) const
void setGuidesColor(const QColor &v) const
void setEraserCursorMainColor(const QColor &v) const
void setSaveSessionOnQuit(bool value)
bool disableAVXOptimizations(bool defaultValue=false) const
bool showEraserOutlineWhilePainting(bool defaultValue=false) const
bool showStatusBar(bool defaultValue=false) const
bool showRulers(bool defaultValue=false) const
void setPasteBehaviour(qint32 behaviour) const
void setLayerInfoTextStyle(LayerInfoTextStyle value)
quint8 defaultBackgroundOpacity(bool defaultValue=false) const
void setSessionOnStartup(SessionOnStartup value)
void setLayerTreeIndentation(int percentage)
int scrubbingAudioUpdatesDelay(bool defaultValue=false) const
void setHideScrollbarsFullscreen(const bool value) const
int layerInfoTextOpacity(bool defaultValue=false) const
QString monitorForScreen(int screen, const QString &defaultMonitor, bool defaultValue=true) const
QColor getGridSubdivisionColor(bool defaultValue=false) const
void setAnimationPlaybackBackend(int value)
void setAutoPinLayersToTimeline(bool value)
QColor getEraserCursorMainColor(bool defaultValue=false) const
void setUseOcio(bool useOCIO) const
void setLastUsedOutlineStyle(OutlineStyle style)
bool lineSmoothingStabilizeSensors(bool defaultValue=false) const
bool antialiasCurves(bool defaultValue=false) const
void setKineticScrollingSensitivity(int sensitivity)
QString brushHudSetting(bool defaultValue=false) const
bool ignoreHighFunctionKeys(bool defaultValue=false) const
bool useProjections(bool defaultValue=false) const
void setDisableAVXOptimizations(bool value)
qreal selectionViewSizeMinimum(bool defaultValue=false) const
bool adaptivePlaybackRange(bool defaultValue=false) const
void writeKoColor(const QString &name, const KoColor &color) const
void setOcioLockColorVisualRepresentation(bool value)
void setShowFilterGalleryLayerMaskDialog(bool showFilterGallery) const
void setHorizontalSplitLines(const int numberLines) const
bool undoEnabled(bool defaultValue=false) const
void setKineticScrollingEnabled(bool enabled)
bool ocioLockColorVisualRepresentation(bool defaultValue=false) const
static const QString resourceLocationKey
bool orthogonal() const
void setImageCenter(bool value)
void setIntersection(bool value)
bool node() const
bool toPixel() const
bool imageBounds() const
void setOrthogonal(bool value)
bool boundingBox() const
void setExtension(bool value)
void setToPixel(bool value)
void setBoundingBox(bool value)
bool intersection() const
bool extension() const
void setImageBounds(bool value)
bool imageCenter() const
void setNode(bool value)
static void log(const QString &message)
Logs with date/time.
static void writeSysInfo(const QString &message)
Writes to the system information file and Krita log.
virtual KoID colorModelId() const =0
virtual KoID colorDepthId() const =0
virtual const KoColorProfile * profile() const =0
static KoColor fromXML(const QDomElement &elt, const QString &channelDepthId)
Definition KoColor.cpp:350
void toXML(QDomDocument &doc, QDomElement &colorElt) const
Definition KoColor.cpp:304
void fromQColor(const QColor &c)
Convenient function for converting from a QColor.
Definition KoColor.cpp:213
QString id() const
Definition KoID.cpp:63
static bool tabletInputReceived()
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
void cleanOldCursorStyleKeys(KConfigGroup &cfg)
QDebug operator<<(QDebug debug, const KisConfig::CanvasSurfaceMode &mode)
const QString DEFAULT_CURVE_STRING
QString kisBacktrace()
Definition kis_debug.cpp:51
#define dbgKrita
Definition kis_debug.h:45
@ OLD_CURSOR_STYLE_OUTLINE_TRIANGLE_RIGHTHANDED
Definition kis_global.h:93
@ OLD_CURSOR_STYLE_OUTLINE
Definition kis_global.h:82
@ OLD_CURSOR_STYLE_OUTLINE_CENTER_CROSS
Definition kis_global.h:88
@ OLD_CURSOR_STYLE_CROSSHAIR
Definition kis_global.h:79
@ OLD_CURSOR_STYLE_NO_CURSOR
Definition kis_global.h:84
@ OLD_CURSOR_STYLE_TOOLICON
Definition kis_global.h:78
@ OLD_CURSOR_STYLE_TRIANGLE_LEFTHANDED
Definition kis_global.h:91
@ OLD_CURSOR_STYLE_POINTER
Definition kis_global.h:80
@ OLD_CURSOR_STYLE_OUTLINE_CENTER_DOT
Definition kis_global.h:87
@ OLD_CURSOR_STYLE_OUTLINE_TRIANGLE_LEFTHANDED
Definition kis_global.h:94
@ OLD_CURSOR_STYLE_TRIANGLE_RIGHTHANDED
Definition kis_global.h:90
@ OLD_CURSOR_STYLE_SMALL_ROUND
Definition kis_global.h:85
OutlineStyle
Definition kis_global.h:53
@ N_OUTLINE_STYLE_SIZE
Definition kis_global.h:59
@ OUTLINE_FULL
Definition kis_global.h:56
@ OUTLINE_NONE
Definition kis_global.h:54
#define INTENT_PERCEPTUAL
Definition kis_global.h:103
CursorStyle
Definition kis_global.h:62
@ CURSOR_STYLE_POINTER
Definition kis_global.h:65
@ CURSOR_STYLE_SMALL_ROUND
Definition kis_global.h:66
@ CURSOR_STYLE_CROSSHAIR
Definition kis_global.h:67
@ CURSOR_STYLE_TOOLICON
Definition kis_global.h:64
@ CURSOR_STYLE_TRIANGLE_RIGHTHANDED
Definition kis_global.h:68
@ N_CURSOR_STYLE_SIZE
Definition kis_global.h:74
@ CURSOR_STYLE_TRIANGLE_LEFTHANDED
Definition kis_global.h:69
@ CURSOR_STYLE_NO_CURSOR
Definition kis_global.h:63
@ CURSOR_STYLE_ERASER
Definition kis_global.h:72
static const KisCumulativeUndoData defaultValue
bool read(const KConfigGroup *config)
void write(KConfigGroup *config) const
virtual bool isSuitableForDisplay() const =0
const KoColorProfile * profileByName(const QString &name) const
const KoColorSpace * colorSpace(const QString &colorModelId, const QString &colorDepthId, const KoColorProfile *profile)
static KoColorSpaceRegistry * instance()
const KoColorProfile * createColorProfile(const QString &colorModelId, const QString &colorDepthId, const QByteArray &rawData)