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

#include <kis_dlg_image_properties.h>

+ Inheritance diagram for KisDlgImageProperties:

Classes

struct  Private
 

Public Member Functions

const KoColorSpacecolorSpace () const
 
bool convertLayerPixels () const
 
virtual int exec () override
 
 KisDlgImageProperties (KisImageWSP image, KisDisplayColorConverter *colorConverter, QWidget *parent=0, const char *name=0)
 
 ~KisDlgImageProperties () override
 
- Public Member Functions inherited from KoDialog
QPushButton * button (ButtonCode id) const
 
QIcon buttonIcon (ButtonCode id) const
 
QString buttonText (ButtonCode id) const
 
QString buttonToolTip (ButtonCode id) const
 
QString buttonWhatsThis (ButtonCode id) const
 
ButtonCode defaultButton () const
 
QString helpLinkText () const
 
void incrementInitialSize (const QSize &size)
 
bool isButtonEnabled (ButtonCode id) const
 
 KoDialog (QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags())
 
QWidget * mainWidget ()
 
QSize minimumSizeHint () const override
 
void setButtonFocus (ButtonCode id)
 
void setButtonGuiItem (ButtonCode id, const KGuiItem &item)
 
void setButtonIcon (ButtonCode id, const QIcon &icon)
 
void setButtons (ButtonCodes buttonMask)
 
void setButtonsOrientation (Qt::Orientation orientation)
 
void setButtonText (ButtonCode id, const QString &text)
 
void setButtonToolTip (ButtonCode id, const QString &text)
 
void setButtonWhatsThis (ButtonCode id, const QString &text)
 
void setDefaultButton (ButtonCode id)
 
void setEscapeButton (ButtonCode id)
 
void setInitialSize (const QSize &size)
 
void setMainWidget (QWidget *widget)
 
void showButton (ButtonCode id, bool state)
 
void showButtonSeparator (bool state)
 
QSize sizeHint () const override
 
 ~KoDialog () override
 

Private Slots

void setAnnotation (const QString &type)
 
void setCurrentColor ()
 
void setProofingConfigToImage ()
 
void slotCalculateLightLevels ()
 
void slotColorSpaceChanged (const KoColorSpace *)
 
void updateDisplayConfigInfo ()
 

Private Attributes

QScopedPointer< Privated
 
WdgImagePropertiesm_page
 

Additional Inherited Members

- Public Types inherited from KoDialog
enum  ButtonCode {
  None = 0x00000000 , Help = 0x00000001 , Default = 0x00000002 , Ok = 0x00000004 ,
  Apply = 0x00000008 , Try = 0x00000010 , Cancel = 0x00000020 , Close = 0x00000040 ,
  No = 0x00000080 , Yes = 0x00000100 , Reset = 0x00000200 , Details = 0x00000400 ,
  User1 = 0x00001000 , User2 = 0x00002000 , User3 = 0x00004000 , NoDefault = 0x00008000
}
 
enum  ButtonPopupMode { InstantPopup = 0 , DelayedPopup = 1 }
 
enum  CaptionFlag { NoCaptionFlags = 0 , AppNameCaption = 1 , ModifiedCaption = 2 , HIGCompliantCaption = AppNameCaption }
 
- Public Slots inherited from KoDialog
void delayedDestruct ()
 
void enableButton (ButtonCode id, bool state)
 
void enableButtonApply (bool state)
 
void enableButtonCancel (bool state)
 
void enableButtonOk (bool state)
 
void enableLinkedHelp (bool state)
 
bool isDetailsWidgetVisible () const
 
virtual void setCaption (const QString &caption)
 
virtual void setCaption (const QString &caption, bool modified)
 
void setDetailsWidget (QWidget *detailsWidget)
 
void setDetailsWidgetVisible (bool visible)
 
void setHelp (const QString &anchor, const QString &appname=QString())
 
void setHelpLinkText (const QString &text)
 
virtual void setPlainCaption (const QString &caption)
 
- Signals inherited from KoDialog
void aboutToShowDetails ()
 
void applyClicked ()
 
void buttonClicked (KoDialog::ButtonCode button)
 
void cancelClicked ()
 
void closeClicked ()
 
void defaultClicked ()
 
void finished ()
 
void helpClicked ()
 
void hidden ()
 
void layoutHintChanged ()
 
void noClicked ()
 
void okClicked ()
 
void resetClicked ()
 
void tryClicked ()
 
void user1Clicked ()
 
void user2Clicked ()
 
void user3Clicked ()
 
void yesClicked ()
 
- Static Public Member Functions inherited from KoDialog
static int groupSpacingHint ()
 
static QString makeStandardCaption (const QString &userCaption, QWidget *window=0, CaptionFlags flags=HIGCompliantCaption)
 
static int marginHint ()
 
static void resizeLayout (QLayout *lay, int margin, int spacing)
 
static void resizeLayout (QWidget *widget, int margin, int spacing)
 
static int spacingHint ()
 
- Protected Slots inherited from KoDialog
virtual void slotButtonClicked (int button)
 
- Protected Member Functions inherited from KoDialog
void closeEvent (QCloseEvent *e) override
 
void hideEvent (QHideEvent *) override
 
void keyPressEvent (QKeyEvent *) override
 
void showEvent (QShowEvent *e) override
 

Detailed Description

Definition at line 26 of file kis_dlg_image_properties.h.

Constructor & Destructor Documentation

◆ KisDlgImageProperties()

KisDlgImageProperties::KisDlgImageProperties ( KisImageWSP image,
KisDisplayColorConverter * colorConverter,
QWidget * parent = 0,
const char * name = 0 )

Definition at line 60 of file kis_dlg_image_properties.cc.

61 : KoDialog(parent)
62 , d(new Private(colorConverter))
63{
66 setObjectName(name);
67 setCaption(i18n("Image Properties"));
68 m_page = new WdgImageProperties(this);
69
70 d->image = image;
71
73 resize(m_page->sizeHint());
74
75 m_page->lblWidthValue->setText(QString::number(image->width()));
76 m_page->lblHeightValue->setText(QString::number(image->height()));
77 m_page->lblLayerCount->setText(QString::number(image->nChildLayers()));
78
79 m_page->lblResolutionValue->setText(QLocale().toString(image->xRes()*72, 2)); // XXX: separate values for x & y?
80
81 //Set the canvas projection color: backgroundColor
82 KoColor background = d->image->defaultProjectionColor();
83 background.setOpacity(1.0);
84 m_page->bnBackgroundColor->setColor(background);
85 m_page->sldBackgroundColor->setRange(0.0,1.0,2);
86 m_page->sldBackgroundColor->setSingleStep(0.05);
87 m_page->sldBackgroundColor->setValue(d->image->defaultProjectionColor().opacityF());
88
89 connect(m_page->bnBackgroundColor, SIGNAL(changed(KoColor)), &d->compressor, SLOT(start()));
90 connect(m_page->sldBackgroundColor, SIGNAL(valueChanged(qreal)), &d->compressor, SLOT(start()));
91 connect(&d->compressor, SIGNAL(timeout()), this, SLOT(setCurrentColor()));
92
93 //Set the color space
94 m_page->colorSpaceSelector->setCurrentColorSpace(image->colorSpace());
95 m_page->chkConvertLayers->setChecked(KisConfig(true).convertLayerColorSpaceInProperties());
96
97 // fetch the proofing space
98 KisProofingConfigurationSP config = d->image->proofingConfiguration();
99 const bool hasImageLocalConfig = bool(config);
100
101 if (config) {
102 // create a copy of the original config
103 d->originalProofingConfig.reset(new KisProofingConfiguration(*config));
104 } else {
106 }
107
108 // enable proofing config widgets only when the image has its
109 // own config
110 m_page->chkSaveProofing->setChecked(hasImageLocalConfig);
111 connect(m_page->chkSaveProofing, &QCheckBox::toggled,
112 m_page->wdgProofingOptions, &KisProofingOptionsWidget::setEnabled);
113 m_page->wdgProofingOptions->setEnabled(m_page->chkSaveProofing->isChecked());
114
115 // we should reset to the global settings when when the checkbox
116 // is toggled
117 connect(m_page->chkSaveProofing, &QCheckBox::toggled,
119
120 // initialize the proofing configuration widget
121 m_page->wdgProofingOptions->setProofingConfig(config);
122 connect(d->colorConverter, SIGNAL(displayConfigurationChanged()), this, SLOT(updateDisplayConfigInfo()));
124
125 connect(m_page->wdgProofingOptions,
127 this,
129
130 d->hdrMetadataModel.setImageProfileHdrReferenceWhite(d->image->colorSpace()->profile()->hdrReferenceWhite());
131 d->hdrMetadataModel.setImageHdrReferenceWhiteMetadata(d->image->hdrReferenceWhiteLightLevel());
132 d->hdrMetadataModel.setClli(d->image->relativeContentLightLevelInformation());
133 d->hdrMetadataModel.setCvi(d->image->colorVolumeInformation());
134 connect(m_page->btnCalculateClli, &QPushButton::clicked, this, &KisDlgImageProperties::slotCalculateLightLevels);
135
136 KisWidgetConnectionUtils::connectControlState( m_page->cmbHdrReferenceWhite, &d->hdrMetadataModel, "referenceWhiteState", "referenceWhiteIndex");
137
138 KisWidgetConnectionUtils::connectControlState( m_page->gbxHdrReferenceWhite, &d->hdrMetadataModel, "referenceWhitePresentState", "referenceWhitePresent");
139
140 KisWidgetConnectionUtils::connectControlState( m_page->gbxContentLightLevel, &d->hdrMetadataModel, "clliPresentState", "clliPresent");
141 KisWidgetConnectionUtils::connectControl( m_page->spnMaxCll, &d->hdrMetadataModel, "maxContentLightLevel");
142 KisWidgetConnectionUtils::connectControl( m_page->spnMaxFall, &d->hdrMetadataModel, "maxFrameAverageLightLevel");
143 KisWidgetConnectionUtils::connectControlState( m_page->cmbLumiCalcType, &d->hdrMetadataModel, "clliCalculationTypeState", "clliCalculationType");
144
145 KisWidgetConnectionUtils::connectControl( m_page->gbxColorVolume, &d->hdrMetadataModel, "cviPresent");
146
147 KisWidgetConnectionUtils::connectControl( m_page->spnWhiteX, &d->hdrMetadataModel, "cviWhiteX");
148 KisWidgetConnectionUtils::connectControl( m_page->spnWhiteY, &d->hdrMetadataModel, "cviWhiteY");
149 KisWidgetConnectionUtils::connectControl( m_page->spnRedX, &d->hdrMetadataModel, "cviRedX");
150 KisWidgetConnectionUtils::connectControl( m_page->spnRedY, &d->hdrMetadataModel, "cviRedY");
151 KisWidgetConnectionUtils::connectControl( m_page->spnGreenX, &d->hdrMetadataModel, "cviGreenX");
152 KisWidgetConnectionUtils::connectControl( m_page->spnGreenY, &d->hdrMetadataModel, "cviGreenY");
153 KisWidgetConnectionUtils::connectControl( m_page->spnBlueX, &d->hdrMetadataModel, "cviBlueX");
154 KisWidgetConnectionUtils::connectControl( m_page->spnBlueY, &d->hdrMetadataModel, "cviBlueY");
155 KisWidgetConnectionUtils::connectControl( m_page->spnMinLuminance, &d->hdrMetadataModel, "cviMinLuminance");
156 KisWidgetConnectionUtils::connectControl( m_page->spnMaxLuminance, &d->hdrMetadataModel, "cviMaxLuminance");
157
158 KisWidgetConnectionUtils::connectControlState( m_page->cmbColorVolumePresets, &d->hdrMetadataModel, "cviEffectivePresetIndexState", "cviEffectivePresetIndex");
159
160 const bool hdr = d->image->colorSpace()->hasHighDynamicRange() ||
161 d->image->colorSpace()->profile()->getTransferCharacteristics() == TRC_ITU_R_BT_2100_0_PQ;
162 m_page->grpHdrMeta->setEnabled(hdr);
163
164 //annotations
165 vKisAnnotationSP_it beginIt = image->beginAnnotations();
166 vKisAnnotationSP_it endIt = image->endAnnotations();
167
168 vKisAnnotationSP_it it = beginIt;
169 while (it != endIt) {
170
171 if (!(*it) || (*it)->type().isEmpty()) {
172 dbgFile << "Warning: empty annotation";
173 it++;
174 continue;
175 }
176
177 m_page->cmbAnnotations->addItem((*it)->type());
178 it++;
179 }
180 connect(m_page->cmbAnnotations, SIGNAL(textActivated(QString)), SLOT(setAnnotation(QString)));
181 setAnnotation(m_page->cmbAnnotations->currentText());
182
183 connect(m_page->colorSpaceSelector,
184 SIGNAL(colorSpaceChanged(const KoColorSpace*)),
185 SLOT(slotColorSpaceChanged(const KoColorSpace*)));
186 slotColorSpaceChanged(d->image->colorSpace());
187}
@ TRC_ITU_R_BT_2100_0_PQ
void slotColorSpaceChanged(const KoColorSpace *)
void setAnnotation(const QString &type)
QScopedPointer< Private > d
KisProofingConfigurationSP defaultProofingconfiguration(bool requestDefault=false)
vKisAnnotationSP_it endAnnotations()
qint32 nChildLayers() const
const KoColorSpace * colorSpace() const
qint32 width() const
double xRes() const
qint32 height() const
vKisAnnotationSP_it beginAnnotations()
The KisProofingConfiguration struct Little struct that stores the proofing configuration for a given ...
void sigProofingConfigChanged(KisProofingConfigurationSP config)
void setOpacity(quint8 alpha)
Definition KoColor.cpp:333
void setMainWidget(QWidget *widget)
Definition KoDialog.cpp:345
virtual void setCaption(const QString &caption)
Definition KoDialog.cpp:489
void setButtons(ButtonCodes buttonMask)
Definition KoDialog.cpp:195
void setDefaultButton(ButtonCode id)
Definition KoDialog.cpp:293
@ Ok
Show Ok button. (this button accept()s the dialog; result set to QDialog::Accepted)
Definition KoDialog.h:127
@ Cancel
Show Cancel-button. (this button reject()s the dialog; result set to QDialog::Rejected)
Definition KoDialog.h:130
KoDialog(QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags())
Definition KoDialog.cpp:176
#define dbgFile
Definition kis_debug.h:56
vKisAnnotationSP::iterator vKisAnnotationSP_it
Definition kis_types.h:181
QString toString(const QString &value)
void connectControl(KisCompositeOpListWidget *widget, QObject *source, const char *property)
void connectControlState(QSpinBox *spinBox, QObject *source, const char *readStateProperty, const char *writeProperty)

References KisImage::beginAnnotations(), KoDialog::Cancel, KisImage::colorSpace(), KisWidgetConnectionUtils::connectControl(), KisWidgetConnectionUtils::connectControlState(), d, dbgFile, KisImageConfig::defaultProofingconfiguration(), KisImage::endAnnotations(), KisImage::height(), m_page, KisImage::nChildLayers(), KoDialog::Ok, setAnnotation(), KoDialog::setButtons(), KoDialog::setCaption(), setCurrentColor(), KoDialog::setDefaultButton(), KoDialog::setMainWidget(), KoColor::setOpacity(), setProofingConfigToImage(), KisProofingOptionsWidget::sigProofingConfigChanged(), slotCalculateLightLevels(), slotColorSpaceChanged(), TRC_ITU_R_BT_2100_0_PQ, updateDisplayConfigInfo(), KisImage::width(), and KisImage::xRes().

◆ ~KisDlgImageProperties()

KisDlgImageProperties::~KisDlgImageProperties ( )
override

Definition at line 189 of file kis_dlg_image_properties.cc.

190{
191 if (d->compressor.isActive()) {
192 d->compressor.stop();
194 }
195
196 delete m_page;
197}

References d, m_page, and setCurrentColor().

Member Function Documentation

◆ colorSpace()

const KoColorSpace * KisDlgImageProperties::colorSpace ( ) const

Definition at line 246 of file kis_dlg_image_properties.cc.

247{
248 return m_page->colorSpaceSelector->currentColorSpace();
249}

References m_page.

◆ convertLayerPixels()

bool KisDlgImageProperties::convertLayerPixels ( ) const

Definition at line 241 of file kis_dlg_image_properties.cc.

242{
243 return m_page->chkConvertLayers->isChecked();
244}

References m_page.

◆ exec()

int KisDlgImageProperties::exec ( )
overridevirtual

Definition at line 199 of file kis_dlg_image_properties.cc.

200{
201 int resultCode = KoDialog::exec();
202
203 m_page->wdgProofingOptions->stopPendingUpdates();
204
205 if (resultCode == QDialog::Accepted) {
206 if (m_page->chkSaveProofing->isChecked()) {
207 d->image->setProofingConfiguration(m_page->wdgProofingOptions->currentProofingConfig());
208 } else {
209 d->image->setProofingConfiguration(nullptr);
210 }
211
212 std::optional<double> effectiveHdrReferenceWhite = d->hdrMetadataModel.effectiveReferenceWhite();
213 std::optional<KisRelativeContentLightLevelInformation> effectiveClli;
214 std::optional<KisColorVolumeInformation> effectiveCvi;
215
216 if (d->hdrMetadataModel.effectiveClliPresent()) {
217 effectiveClli = d->hdrMetadataModel.clliData.get();
218 }
219
220 if (d->hdrMetadataModel.cviPresent()) {
221 effectiveCvi = d->hdrMetadataModel.cviData.get();
222 }
223
224 if (effectiveHdrReferenceWhite != d->image->hdrReferenceWhiteLightLevel() ||
225 effectiveClli != d->image->relativeContentLightLevelInformation() ||
226 effectiveCvi != d->image->colorVolumeInformation()) {
227
228 KUndo2Command *cmd = new KisChangeImageHdrMetadataCommand(d->image, effectiveHdrReferenceWhite, effectiveClli, effectiveCvi);
230 }
231 } else {
232 d->image->setProofingConfiguration(d->originalProofingConfig);
233 }
234
235 KisConfig cfg(false);
236 cfg.setConvertLayerColorSpaceInProperties(m_page->chkConvertLayers->isChecked());
237
238 return resultCode;
239}
static void runSingleCommandStroke(KisImageSP image, KUndo2Command *cmd, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
runSingleCommandStroke creates a stroke and runs cmd in it. The text() field of cmd is used as a titl...

References d, m_page, KisProcessingApplicator::runSingleCommandStroke(), and KisConfig::setConvertLayerColorSpaceInProperties().

◆ setAnnotation

void KisDlgImageProperties::setAnnotation ( const QString & type)
privateslot

Definition at line 319 of file kis_dlg_image_properties.cc.

320{
321 KisAnnotationSP annotation = d->image->annotation(type);
322 if (annotation) {
323 m_page->lblDescription->clear();
324 m_page->txtAnnotation->clear();
325 m_page->lblDescription->setText(annotation->description());
326 m_page->txtAnnotation->appendPlainText(annotation->displayText());
327 }
328 else {
329 m_page->lblDescription->clear();
330 m_page->txtAnnotation->clear();
331 }
332}

References d, and m_page.

◆ setCurrentColor

void KisDlgImageProperties::setCurrentColor ( )
privateslot

Definition at line 251 of file kis_dlg_image_properties.cc.

252{
253 KoColor background = m_page->bnBackgroundColor->color();
254 background.setOpacity(m_page->sldBackgroundColor->value());
256}
void changeImageDefaultProjectionColor(KisImageSP image, const KoColor &color)

References KisLayerUtils::changeImageDefaultProjectionColor(), d, m_page, and KoColor::setOpacity().

◆ setProofingConfigToImage

void KisDlgImageProperties::setProofingConfigToImage ( )
privateslot

Definition at line 258 of file kis_dlg_image_properties.cc.

259{
260 if (m_page->chkSaveProofing->isChecked()) {
261 d->image->setProofingConfiguration(m_page->wdgProofingOptions->currentProofingConfig());
262 } else {
263 d->image->setProofingConfiguration(nullptr);
264 }
265}

References d, and m_page.

◆ slotCalculateLightLevels

void KisDlgImageProperties::slotCalculateLightLevels ( )
privateslot

Definition at line 272 of file kis_dlg_image_properties.cc.

273{
274 KisRelativeContentLightLevelInformation::CalculationType type = d->hdrMetadataModel.clliCalculationType();
276 new KisContentLightLevelProcessingVistor(type, d->image->bounds());
277
278 KisProcessingApplicator::ProcessingFlags flags =
280 KisProcessingApplicator applicator(d->image, d->image->rootLayer(), flags);
281
282 applicator.applyVisitorAllFrames(visitor);
283
284 // a poor-man implementation of a QFuture (which is Qt6-only),
285 // the proxy object will notify us manually when the visitor
286 // has completed its execution
288 connect(completionSignalProxy.get(), &FunctionToSignalProxy::timeout, this,
289 [visitor, model = &d->hdrMetadataModel, image = d->image]() {
290 auto info = visitor->contentLightLevelInformation();
291
292 model->setClli(info);
293 });
294
295 // add the command **after** the signal has been set up; this
296 // is not a QFuture, so it cannot store the actual "finished"
297 // state
298 applicator.applyCommand(new KisCommandUtils::LambdaCommand([completionSignalProxy]() {
299 completionSignalProxy->start();
300 return nullptr;
301 }));
302
303 applicator.end();
304}
The KisContentLightLevelProcessingVistor class This processing visitor checks the projection of the r...
@ RECURSIVE_FRAME_TIMES
you might want to have the frame times be recursive, useful for group layers.
The LambdaCommand struct is a shorthand for creation of AggregateCommand commands using C++ lambda fe...

References KisProcessingApplicator::applyCommand(), KisProcessingApplicator::applyVisitorAllFrames(), d, KisProcessingApplicator::end(), KisProcessingApplicator::READ_ONLY_ACTION, KisProcessingApplicator::RECURSIVE_FRAME_TIMES, and FunctionToSignalProxy::timeout().

◆ slotColorSpaceChanged

void KisDlgImageProperties::slotColorSpaceChanged ( const KoColorSpace * cs)
privateslot

Definition at line 306 of file kis_dlg_image_properties.cc.

307{
308 if (*d->image->profile() != *cs->profile() &&
310
311 m_page->wdgWarningNotice->setVisible(true);
312 m_page->wdgWarningNotice->setText(
313 m_page->wdgWarningNotice->changeImageProfileWarningText());
314 } else {
315 m_page->wdgWarningNotice->setVisible(false);
316 }
317}
virtual const KoColorProfile * profile() const =0
bool canChangeImageProfileInvisibly(KisImageSP image)

References KisLayerUtils::canChangeImageProfileInvisibly(), d, m_page, and KoColorSpace::profile().

◆ updateDisplayConfigInfo

void KisDlgImageProperties::updateDisplayConfigInfo ( )
privateslot

Definition at line 267 of file kis_dlg_image_properties.cc.

268{
269 m_page->wdgProofingOptions->setDisplayConfigOptions(d->colorConverter->conversionOptions());
270}

References d, and m_page.

Member Data Documentation

◆ d

QScopedPointer<Private> KisDlgImageProperties::d
private

Definition at line 54 of file kis_dlg_image_properties.h.

◆ m_page

WdgImageProperties* KisDlgImageProperties::m_page
private

Definition at line 55 of file kis_dlg_image_properties.h.


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