Krita Source Code Documentation
Loading...
Searching...
No Matches
KisWdgOptionsJPEGXL Class Reference

#include <kis_wdg_options_jpegxl.h>

+ Inheritance diagram for KisWdgOptionsJPEGXL:

Public Member Functions

KisPropertiesConfigurationSP configuration () const override
 
 KisWdgOptionsJPEGXL (QWidget *parent)
 
void setConfiguration (const KisPropertiesConfigurationSP cfg) override
 
- Public Member Functions inherited from KisConfigWidget
virtual KoCanvasResourcesInterfaceSP canvasResourcesInterface () const
 
virtual void setCanvasResourcesInterface (KoCanvasResourcesInterfaceSP canvasResourcesInterface)
 
virtual void setView (KisViewManager *view)
 
 ~KisConfigWidget () override
 

Private Slots

void toggleExtraHDROptions (int index)
 
void toggleModularTabs (int index)
 

Private Attributes

KisMetaData::FilterRegistryModel m_filterRegistryModel
 

Additional Inherited Members

- Signals inherited from KisConfigWidget
void sigConfigurationItemChanged ()
 
void sigConfigurationUpdated ()
 
void sigDropLockedConfig (KisPropertiesConfigurationSP p)
 
void sigSaveLockedConfig (KisPropertiesConfigurationSP p)
 
- Protected Member Functions inherited from KisConfigWidget
 KisConfigWidget (QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags(), int delay=200)
 

Detailed Description

Definition at line 18 of file kis_wdg_options_jpegxl.h.

Constructor & Destructor Documentation

◆ KisWdgOptionsJPEGXL()

KisWdgOptionsJPEGXL::KisWdgOptionsJPEGXL ( QWidget * parent)

Definition at line 17 of file kis_wdg_options_jpegxl.cpp.

18 : KisConfigWidget(parent)
19{
20 setupUi(this);
21
22 {
23 flattenLayers->setToolTip(i18nc("JPEG-XL encoder options", "Flatten the image and save as single layer image (default)"));
24 haveAnimation->setToolTip(i18nc("JPEG-XL encoder options", "Flatten the image and render animation frames as animated image"));
25 multiLayer->setToolTip(i18nc("JPEG-XL encoder options", "Rasterize layers (including group and filter layers) and save as multi-layered image"));
26 multiPage->setToolTip(i18nc("JPEG-XL encoder options", "Rasterize layers (including group and filter layers) and save as multi-page image"));
27 }
28
29 {
30 resampling->addItem(i18nc("JPEG-XL encoder options", "Default (only for low quality)"), -1);
31 resampling->addItem(i18nc("JPEG-XL encoder options", "No downsampling"), 1);
32 resampling->addItem(i18nc("JPEG-XL encoder options", "2x2 downsampling"), 2);
33 resampling->addItem(i18nc("JPEG-XL encoder options", "4x4 downsampling"), 4);
34 resampling->addItem(i18nc("JPEG-XL encoder options", "8x8 downsampling"), 8);
35
36 extraChannelResampling->addItem(i18nc("JPEG-XL encoder options", "Default (only for low quality)"), -1);
37 extraChannelResampling->addItem(i18nc("JPEG-XL encoder options", "No downsampling"), 1);
38 extraChannelResampling->addItem(i18nc("JPEG-XL encoder options", "2x2 downsampling"), 2);
39 extraChannelResampling->addItem(i18nc("JPEG-XL encoder options", "4x4 downsampling"), 4);
40 extraChannelResampling->addItem(i18nc("JPEG-XL encoder options", "8x8 downsampling"), 8);
41 }
42
43 {
44 dots->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
45 dots->addItem(i18nc("JPEG-XL encoder options", "Disabled"), 0);
46 dots->addItem(i18nc("JPEG-XL encoder options", "Enabled"), 1);
47 }
48
49 {
50 patches->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
51 patches->addItem(i18nc("JPEG-XL encoder options", "Disabled"), 0);
52 patches->addItem(i18nc("JPEG-XL encoder options", "Enabled"), 1);
53 }
54
55 {
56 gaborish->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
57 gaborish->addItem(i18nc("JPEG-XL encoder options", "Disabled"), 0);
58 gaborish->addItem(i18nc("JPEG-XL encoder options", "Enabled"), 1);
59 }
60
61 {
62 modular->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
63 modular->addItem(i18nc("JPEG-XL encoder options", "VarDCT mode (e.g. for photographic images)"), 0);
64 modular->addItem(i18nc("JPEG-XL encoder options", "Modular mode (e.g. for lossless images)"), 1);
65 }
66
67 {
68 keepInvisible->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
69 keepInvisible->addItem(i18nc("JPEG-XL encoder options", "Disabled"), 0);
70 keepInvisible->addItem(i18nc("JPEG-XL encoder options", "Enabled"), 1);
71 }
72
73 {
74 groupOrder->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
75 groupOrder->addItem(i18nc("JPEG-XL encoder options", "Scanline order"), 0);
76 groupOrder->addItem(i18nc("JPEG-XL encoder options", "Center-first order"), 1);
77 }
78
79 {
80 responsive->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
81 responsive->addItem(i18nc("JPEG-XL encoder options", "Disabled"), 0);
82 responsive->addItem(i18nc("JPEG-XL encoder options", "Enabled"), 1);
83 }
84
85 {
86 progressiveAC->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
87 progressiveAC->addItem(i18nc("JPEG-XL encoder options", "Disabled"), 0);
88 progressiveAC->addItem(i18nc("JPEG-XL encoder options", "Enabled"), 1);
89 }
90
91 {
92 qProgressiveAC->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
93 qProgressiveAC->addItem(i18nc("JPEG-XL encoder options", "Disabled"), 0);
94 qProgressiveAC->addItem(i18nc("JPEG-XL encoder options", "Enabled"), 1);
95 }
96
97 {
98 progressiveDC->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
99 progressiveDC->addItem(i18nc("JPEG-XL encoder options", "Disabled"), 0);
100 progressiveDC->addItem(i18nc("JPEG-XL encoder options", "64x64 lower resolution pass"), 1);
101 progressiveDC->addItem(i18nc("JPEG-XL encoder options", "512x512 + 64x64 lower resolution passes"), 2);
102 }
103
104 {
105 lossyPalette->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
106 lossyPalette->addItem(i18nc("JPEG-XL encoder options", "Disabled"), 0);
107 lossyPalette->addItem(i18nc("JPEG-XL encoder options", "Enabled"), 1);
108 }
109
110 {
111 modularGroupSize->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
112 modularGroupSize->addItem(i18nc("JPEG-XL encoder options", "128"), 0);
113 modularGroupSize->addItem(i18nc("JPEG-XL encoder options", "256"), 1);
114 modularGroupSize->addItem(i18nc("JPEG-XL encoder options", "512"), 2);
115 modularGroupSize->addItem(i18nc("JPEG-XL encoder options", "1024"), 3);
116 }
117
118 {
119 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
120 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Zero"), 0);
121 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Left"), 1);
122 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Top"), 2);
123 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Avg0"), 3);
124 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Select"), 4);
125 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Gradient"), 5);
126 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Weighted"), 6);
127 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Top right"), 7);
128 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Top left"), 8);
129 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Left left"), 9);
130 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Avg1"), 10);
131 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Avg2"), 11);
132 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Avg3"), 12);
133 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Toptop predictive average"), 13);
134 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Gradient + Weighted"), 14);
135 modularPredictor->addItem(i18nc("JPEG-XL encoder options", "Use all predictors"), 15);
136 }
137
138 {
139 jpegReconCFL->addItem(i18nc("JPEG-XL encoder options", "Default (encoder chooses)"), -1);
140 jpegReconCFL->addItem(i18nc("JPEG-XL encoder options", "Disabled"), 0);
141 jpegReconCFL->addItem(i18nc("JPEG-XL encoder options", "Enabled"), 1);
142 }
143
144 metaDataFilters->setModel(&m_filterRegistryModel);
145
146 connect(cmbConversionPolicy,
147 qOverload<int>(&QComboBox::currentIndexChanged),
148 this,
150
151 connect(modular, qOverload<int>(&QComboBox::currentIndexChanged), this, &KisWdgOptionsJPEGXL::toggleModularTabs);
152}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisConfigWidget(QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags(), int delay=200)
KisMetaData::FilterRegistryModel m_filterRegistryModel
void toggleExtraHDROptions(int index)

References connect(), m_filterRegistryModel, toggleExtraHDROptions(), and toggleModularTabs().

Member Function Documentation

◆ configuration()

KisPropertiesConfigurationSP KisWdgOptionsJPEGXL::configuration ( ) const
overridevirtual
Returns
the configuration

Implements KisConfigWidget.

Definition at line 286 of file kis_wdg_options_jpegxl.cpp.

287{
289
290 cfg->setProperty("haveAnimation", haveAnimation->isChecked());
291 cfg->setProperty("flattenLayers", flattenLayers->isChecked());
292 cfg->setProperty("multiLayer", multiLayer->isChecked());
293 cfg->setProperty("multiPage", multiPage->isChecked());
294 cfg->setProperty("lossless", !lossyEncoding->isChecked());
295 cfg->setProperty("effort", effort->value());
296 cfg->setProperty("decodingSpeed", decodingSpeed->value());
297 cfg->setProperty("lossyQuality", lossyQuality->value());
298 cfg->setProperty("forceModular", forceModular->isChecked());
299 cfg->setProperty("modularSetVal", modular->currentData());
300 cfg->setProperty("losslessAlpha", losslessAlpha->isChecked());
301
302 cfg->setProperty("forceCicpLossless", forceCicpLossless->isChecked());
303 cfg->setProperty("floatingPointConversionOption", cmbConversionPolicy->currentData(Qt::UserRole).toString());
304 cfg->setProperty("HLGnominalPeak", spnNits->value());
305 cfg->setProperty("HLGgamma", spnGamma->value());
306 cfg->setProperty("removeHGLOOTF", chkHLGOOTF->isChecked());
307
308 cfg->setProperty("resampling", resampling->currentData());
309 cfg->setProperty("extraChannelResampling", extraChannelResampling->currentData());
310 cfg->setProperty("photonNoise", photonNoise->value());
311 cfg->setProperty("dots", dots->currentData());
312 cfg->setProperty("patches", patches->currentData());
313 cfg->setProperty("epf", epf->value());
314 cfg->setProperty("gaborish", gaborish->currentData());
315 // force modular encoding without overriding value in advanced tab
316 if (forceModular->isChecked() && lossyEncoding->isChecked()) {
317 cfg->setProperty("modular", 1);
318 } else {
319 cfg->setProperty("modular", modular->currentData());
320 }
321 cfg->setProperty("keepInvisible", keepInvisible->currentData());
322 cfg->setProperty("groupOrder", groupOrder->currentData());
323 cfg->setProperty("responsive", responsive->currentData());
324 cfg->setProperty("progressiveAC", progressiveAC->currentData());
325 cfg->setProperty("qProgressiveAC", qProgressiveAC->currentData());
326 cfg->setProperty("progressiveDC", progressiveDC->currentData());
327 cfg->setProperty("channelColorsGlobalPercent", channelColorsGlobalPercent->value());
328 cfg->setProperty("channelColorsGroupPercent", channelColorsGroupPercent->value());
329 cfg->setProperty("paletteColors", paletteColors->value());
330 cfg->setProperty("lossyPalette", lossyPalette->currentData());
331 cfg->setProperty("modularGroupSize", modularGroupSize->currentData());
332 cfg->setProperty("modularPredictor", modularPredictor->currentData());
333 cfg->setProperty("modularMATreeLearningPercent", modularMATreeLearningPercent->value());
334 cfg->setProperty("jpegReconCFL", jpegReconCFL->currentData());
335
336 cfg->setProperty("storeAuthor", chkAuthor->isChecked());
337 cfg->setProperty("exif", exif->isChecked());
338 cfg->setProperty("xmp", xmp->isChecked());
339 cfg->setProperty("iptc", iptc->isChecked());
340 cfg->setProperty("storeMetaData", chkMetadata->isChecked());
341
342 QString enabledFilters;
343 for (const auto *filter: m_filterRegistryModel.enabledFilters()) {
344 enabledFilters += filter->id() + ',';
345 }
346 cfg->setProperty("filters", enabledFilters);
347
348 return cfg;
349}

References KisMetaData::FilterRegistryModel::enabledFilters(), and m_filterRegistryModel.

◆ setConfiguration()

void KisWdgOptionsJPEGXL::setConfiguration ( const KisPropertiesConfigurationSP config)
overridevirtual
Parameters
configthe configuration for this configuration widget.

Implements KisConfigWidget.

Definition at line 167 of file kis_wdg_options_jpegxl.cpp.

168{
170
171 haveAnimation->setChecked(cfg->getBool("haveAnimation", false));
172 flattenLayers->setChecked(cfg->getBool("flattenLayers", true));
173 multiLayer->setChecked(cfg->getBool("multiLayer", false));
174 multiPage->setChecked(cfg->getBool("multiPage", false));
175 lossyEncoding->setChecked(!cfg->getBool("lossless", true));
176 effort->setValue(cfg->getInt("effort", 7));
177 decodingSpeed->setValue(cfg->getInt("decodingSpeed", 0));
178 lossyQuality->setValue(cfg->getInt("lossyQuality", 100));
179 forceModular->setChecked(cfg->getBool("forceModular", false));
180
181#if JPEGXL_NUMERIC_VERSION < JPEGXL_COMPUTE_NUMERIC_VERSION(0, 9, 0)
182 losslessAlpha->setEnabled(false);
183#endif
184 losslessAlpha->setChecked(cfg->getBool("losslessAlpha", false));
185
186 const int CicpPrimaries = cfg->getInt(KisImportExportFilter::CICPPrimariesTag, PRIMARIES_UNSPECIFIED);
187 hdrConversionGrp->setEnabled(cfg->getBool(KisImportExportFilter::HDRTag, false)
189 forceCicpLossless->setChecked(cfg->getBool("forceCicpLossless", false));
190
191 SpaceList conversionOptionsList = {
192 {i18nc("Color space option", "Save as is"),
193 i18nc("@tooltip",
194 "The image will be stored without conversion, the ICC profile will be converted to CICP or embedded if "
195 "it was not possible."),
196 "KeepSame"},
197 {i18nc("Color space name", "Rec 2100 PQ"),
198 i18nc("@tooltip",
199 "The image will be converted to Rec 2020 linear first, and then encoded with a perceptual quantizer "
200 "curve"
201 " (also known as SMPTE 2048 curve). Recommended for HDR images where the absolute brightness is "
202 "important."),
203 "Rec2100PQ"},
204 {i18nc("Color space name", "Rec 2100 HLG"),
205 i18nc("@tooltip",
206 "The image will be converted to Rec 2020 linear first, and then encoded with a Hybrid Log Gamma curve."
207 " Recommended for HDR images where the display may not understand HDR."),
208 "Rec2100HLG"}};
209
211 if (CicpPrimaries != PRIMARIES_UNSPECIFIED) {
212 conversionOptionsList << std::make_tuple<QString, QString, QString>(
213 i18nc("Color space option plus transfer function name", "Keep colorants, encode PQ"),
214 i18nc("@tooltip",
215 "The image will be linearized first, and then encoded with a perceptual quantizer curve"
216 " (also known as the SMPTE 2048 curve). Recommended for images where the absolute brightness is "
217 "important."),
218 "ApplyPQ");
219
220 conversionOptionsList << std::make_tuple<QString, QString, QString>(
221 i18nc("Color space option plus transfer function name", "Keep colorants, encode HLG"),
222 i18nc("@tooltip",
223 "The image will be linearized first, and then encoded with a Hybrid Log Gamma curve."
224 " Recommended for images intended for screens which cannot understand PQ"),
225 "ApplyHLG");
226
227 conversionOptionsList << std::make_tuple<QString, QString, QString>(
228 i18nc("Color space option plus transfer function name", "Keep colorants, encode SMPTE ST 428"),
229 i18nc("@tooltip",
230 "The image will be linearized first, and then encoded with SMPTE ST 428."
231 " Krita always opens images like these as linear floating point, this option is there to reverse "
232 "that"),
233 "ApplySMPTE428");
234 }
235 }
236 for (int i = 0; i < conversionOptionsList.size(); i++) {
237 const auto &option = conversionOptionsList.at(i);
238 cmbConversionPolicy->addItem(std::get<0>(option), std::get<2>(option));
239 cmbConversionPolicy->setItemData(i, std::get<1>(option), Qt::ToolTipRole);
240 }
241 const QString optionName = cfg->getString("floatingPointConversionOption", "Rec2100PQ");
242 cmbConversionPolicy->setCurrentIndex(cmbConversionPolicy->findData(optionName, Qt::UserRole));
243 spnNits->setValue(cfg->getDouble("HLGnominalPeak", 1000.0));
244 spnGamma->setValue(cfg->getDouble("HLGgamma", 1.2));
245 chkHLGOOTF->setChecked(cfg->getBool("removeHGLOOTF", true));
246
247 resampling->setCurrentIndex(resampling->findData(cfg->getInt("resampling", -1)));
248 extraChannelResampling->setCurrentIndex(
249 extraChannelResampling->findData(cfg->getInt("extraChannelResampling", -1)));
250 photonNoise->setValue(cfg->getInt("photonNoise", 0));
251 dots->setCurrentIndex(dots->findData(cfg->getInt("dots", -1)));
252 patches->setCurrentIndex(patches->findData(cfg->getInt("patches", -1)));
253 epf->setValue(cfg->getInt("epf", -1));
254 gaborish->setCurrentIndex(gaborish->findData(cfg->getInt("gaborish", -1)));
255 modular->setCurrentIndex(modular->findData(cfg->getInt("modularSetVal", -1)));
256 keepInvisible->setCurrentIndex(keepInvisible->findData(cfg->getInt("keepInvisible", -1)));
257 groupOrder->setCurrentIndex(groupOrder->findData(cfg->getInt("groupOrder", -1)));
258 responsive->setCurrentIndex(responsive->findData(cfg->getInt("responsive", -1)));
259 progressiveAC->setCurrentIndex(progressiveAC->findData(cfg->getInt("progressiveAC", -1)));
260 qProgressiveAC->setCurrentIndex(qProgressiveAC->findData(cfg->getInt("qProgressiveAC", -1)));
261 progressiveDC->setCurrentIndex(progressiveDC->findData(cfg->getInt("progressiveDC", -1)));
262 channelColorsGlobalPercent->setValue(cfg->getInt("channelColorsGlobalPercent", -1));
263 channelColorsGroupPercent->setValue(cfg->getInt("channelColorsGroupPercent", -1));
264 paletteColors->setValue(cfg->getInt("paletteColors", -1));
265 lossyPalette->setCurrentIndex(lossyPalette->findData(cfg->getInt("lossyPalette", -1)));
266 modularGroupSize->setCurrentIndex(modularGroupSize->findData(cfg->getInt("modularGroupSize", -1)));
267 modularPredictor->setCurrentIndex(modularPredictor->findData(cfg->getInt("modularPredictor", -1)));
268 modularMATreeLearningPercent->setValue(cfg->getInt("modularMATreeLearningPercent", -1));
269 jpegReconCFL->setCurrentIndex(jpegReconCFL->findData(cfg->getInt("jpegReconCFL", -1)));
270
271 KisSpinBoxI18nHelper::setText(channelColorsGlobalPercent,
272 i18nc("{n} is the number value, % is the percent sign", "{n}%"));
273 KisSpinBoxI18nHelper::setText(channelColorsGroupPercent,
274 i18nc("{n} is the number value, % is the percent sign", "{n}%"));
275 KisSpinBoxI18nHelper::setText(modularMATreeLearningPercent,
276 i18nc("{n} is the number value, % is the percent sign", "{n}%"));
277
278 chkAuthor->setChecked(cfg->getBool("storeAuthor", false));
279 exif->setChecked(cfg->getBool("exif", true));
280 xmp->setChecked(cfg->getBool("xmp", true));
281 iptc->setChecked(cfg->getBool("iptc", true));
282 chkMetadata->setChecked(cfg->getBool("storeMetaData", true));
283 m_filterRegistryModel.setEnabledFilters(cfg->getString("filters").split(','));
284}
const KoID GrayAColorModelID("GRAYA", ki18n("Grayscale/Alpha"))
const KoID RGBAColorModelID("RGBA", ki18n("RGB/Alpha"))
@ PRIMARIES_UNSPECIFIED
static const QString ColorModelIDTag
static const QString CICPPrimariesTag
static const QString HDRTag
virtual void setEnabledFilters(const QStringList &enabledFilters)
enable the filters in the given list; others will be disabled.
QString id() const
Definition KoID.cpp:63
void setText(QSpinBox *spinBox, const QStringView textTemplate)

References KisImportExportFilter::CICPPrimariesTag, KisImportExportFilter::ColorModelIDTag, GrayAColorModelID, KisImportExportFilter::HDRTag, KoID::id(), m_filterRegistryModel, PRIMARIES_UNSPECIFIED, RGBAColorModelID, KisMetaData::FilterRegistryModel::setEnabledFilters(), and KisSpinBoxI18nHelper::setText().

◆ toggleExtraHDROptions

void KisWdgOptionsJPEGXL::toggleExtraHDROptions ( int index)
privateslot

Definition at line 154 of file kis_wdg_options_jpegxl.cpp.

155{
156 const QString option = cmbConversionPolicy->itemData(index).value<QString>();
157 chkHLGOOTF->setEnabled(option.contains("HLG"));
158}

◆ toggleModularTabs

void KisWdgOptionsJPEGXL::toggleModularTabs ( int index)
privateslot

Definition at line 160 of file kis_wdg_options_jpegxl.cpp.

161{
162 const int id = modular->itemData(index, Qt::UserRole).value<int>();
163 advancedParameters->setTabEnabled(1, id == -1 || id == 0); // vardct
164 advancedParameters->setTabEnabled(2, id == -1 || id == 1); // modular
165}

Member Data Documentation

◆ m_filterRegistryModel

KisMetaData::FilterRegistryModel KisWdgOptionsJPEGXL::m_filterRegistryModel
private

Definition at line 35 of file kis_wdg_options_jpegxl.h.


The documentation for this class was generated from the following files: