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

#include <kis_lod_availability_widget.h>

+ Inheritance diagram for KisLodAvailabilityWidget:

Classes

struct  Private
 

Public Slots

void slotLodAvailabilityStateChanged (KisLodAvailabilityModel::AvailabilityState state, const KisPaintopLodLimitations &l, bool isLodUserAllowed)
 

Signals

void sigUserChangedLodAvailability (bool value)
 
void sigUserChangedLodThreshold (qreal value)
 

Public Member Functions

 KisLodAvailabilityWidget (QWidget *parent)
 
void setLodAvailabilityModel (KisLodAvailabilityModel *model)
 
 ~KisLodAvailabilityWidget () override
 

Private Slots

void showLodThresholdWidget (const QPoint &pos)
 
void showLodToolTip ()
 

Private Attributes

const QScopedPointer< Privatem_d
 

Detailed Description

Definition at line 19 of file kis_lod_availability_widget.h.

Constructor & Destructor Documentation

◆ KisLodAvailabilityWidget()

KisLodAvailabilityWidget::KisLodAvailabilityWidget ( QWidget * parent)

Definition at line 45 of file kis_lod_availability_widget.cpp.

46 : QWidget(parent),
47 m_d(new Private)
48{
49 m_d->chkLod = new QCheckBox(this);
50
51 m_d->btnLod = new QPushButton(this);
52 m_d->btnLod->setFlat(true);
53 m_d->btnLod->setProperty(KisLongPressEventFilter::ENABLED_PROPERTY, true);
54
55 connect(m_d->btnLod, SIGNAL(clicked()), SLOT(showLodToolTip()));
56
57 {
58 m_d->thresholdMenu.reset(new QMenu());
59 m_d->thresholdMenu->addSection(i18n("Enable after:"));
60
61 m_d->btnLod->setContextMenuPolicy(Qt::CustomContextMenu);
62 connect(m_d->btnLod, SIGNAL(customContextMenuRequested(QPoint)),
63 this, SLOT(showLodThresholdWidget(QPoint)));
64
65 KisImageConfig cfg(true);
66 m_d->thresholdSlider = new KisDoubleSliderSpinBox(m_d->thresholdMenu.data());
67
68 m_d->thresholdSlider->setRange(0, cfg.maxBrushSize(), 2);
69 m_d->thresholdSlider->setValue(100);
70 m_d->thresholdSlider->setSingleStep(1);
71 m_d->thresholdSlider->setExponentRatio(3.0);
72 m_d->thresholdSlider->setSuffix(i18n(" px"));
73 m_d->thresholdSlider->setBlockUpdateSignalOnDrag(true);
74
75 QWidgetAction *sliderAction = new QWidgetAction(this);
76 sliderAction->setDefaultWidget(m_d->thresholdSlider);
77
78 m_d->thresholdMenu->addAction(sliderAction);
79 }
80
81 QHBoxLayout *layout = new QHBoxLayout(this);
82 layout->setSpacing(0);
83 layout->addWidget(m_d->chkLod);
84 layout->addWidget(m_d->btnLod);
85}
This class is a spinbox in which you can click and drag to set the value. A slider like bar is displa...
void showLodThresholdWidget(const QPoint &pos)
const QScopedPointer< Private > m_d
static constexpr char ENABLED_PROPERTY[]

References KisLongPressEventFilter::ENABLED_PROPERTY, m_d, KisImageConfig::maxBrushSize(), showLodThresholdWidget(), and showLodToolTip().

◆ ~KisLodAvailabilityWidget()

KisLodAvailabilityWidget::~KisLodAvailabilityWidget ( )
override

Definition at line 87 of file kis_lod_availability_widget.cpp.

88{
89}

Member Function Documentation

◆ setLodAvailabilityModel()

void KisLodAvailabilityWidget::setLodAvailabilityModel ( KisLodAvailabilityModel * model)

Definition at line 91 of file kis_lod_availability_widget.cpp.

92{
93 m_d->model.reset(model);
94
95 m_d->model->LAGER_QT(availabilityState).bind(
97 this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)));
98
99 connect(m_d->chkLod, &QCheckBox::toggled,
100 m_d->model.data(), &KisLodAvailabilityModel::setisLodUserAllowed);
101
102 using namespace KisWidgetConnectionUtils;
103 connectControl(m_d->thresholdSlider, m_d->model.data(), "lodSizeThreshold");
104}
void slotLodAvailabilityStateChanged(KisLodAvailabilityModel::AvailabilityState state, const KisPaintopLodLimitations &l, bool isLodUserAllowed)
void connectControl(KisCompositeOpListWidget *widget, QObject *source, const char *property)
constexpr auto unzip_wrapper
Definition KisMpl.h:70

References m_d, slotLodAvailabilityStateChanged(), and kismpl::unzip_wrapper.

◆ showLodThresholdWidget

void KisLodAvailabilityWidget::showLodThresholdWidget ( const QPoint & pos)
privateslot

Definition at line 111 of file kis_lod_availability_widget.cpp.

112{
113 Q_UNUSED(pos);
114
115 if (m_d->model && m_d->model->isLodSizeThresholdSupported()) {
116 m_d->thresholdMenu->popup(QCursor::pos());
117 }
118}

References m_d.

◆ showLodToolTip

void KisLodAvailabilityWidget::showLodToolTip ( )
privateslot

Definition at line 106 of file kis_lod_availability_widget.cpp.

107{
108 QToolTip::showText(QCursor::pos(), m_d->btnLod->toolTip(), m_d->btnLod);
109}

References m_d.

◆ sigUserChangedLodAvailability

void KisLodAvailabilityWidget::sigUserChangedLodAvailability ( bool value)
signal

◆ sigUserChangedLodThreshold

void KisLodAvailabilityWidget::sigUserChangedLodThreshold ( qreal value)
signal

◆ slotLodAvailabilityStateChanged

void KisLodAvailabilityWidget::slotLodAvailabilityStateChanged ( KisLodAvailabilityModel::AvailabilityState state,
const KisPaintopLodLimitations & l,
bool isLodUserAllowed )
slot

If LoD is really blocked by some limitation we sneakily reset the checkbox to let the user know it is fully disabled.

Definition at line 120 of file kis_lod_availability_widget.cpp.

121{
122 QString toolTip;
123
125 QString blockersText;
126 Q_FOREACH (const KoID &id, l.blockers) {
127 blockersText.append("<li>");
128 blockersText.append(id.name());
129 blockersText.append("</li>");
130 }
131
132 toolTip = i18nc("@info:tooltip",
133 "<p>Instant Preview Mode is "
134 "disabled by the following options:"
135 "<ul>%1</ul></p>", blockersText);
137
138 const qreal effectiveBrushSize = m_d->model->effectiveBrushSize.get();
139 const qreal sizeThreshold = m_d->model->lodSizeThreshold();
140
141 toolTip = i18nc("@info:tooltip",
142 "<p>Instant Preview Mode is "
143 "disabled by instant preview threshold. "
144 "Please right-click here to change the threshold"
145 "<ul><li>Brush size %1</li>"
146 "<li>Threshold: %2</li></ul></p>",
147 effectiveBrushSize, sizeThreshold);
148
149 } else if (state == KisLodAvailabilityModel::Limited) {
150
151 QString limitationsText;
152 Q_FOREACH (const KoID &id, l.limitations) {
153 limitationsText.append("<li>");
154 limitationsText.append(id.name());
155 limitationsText.append("</li>");
156 }
157
158 toolTip = i18nc("@info:tooltip",
159 "<p>Instant Preview may look different "
160 "from the final result. In case of troubles "
161 "try disabling the following options:"
162 "<ul>%1</ul></p>", limitationsText);
163 } else {
164 toolTip = i18nc("@info:tooltip", "<p>Instant Preview Mode is available</p>");
165 }
166
167 const QString text = state == KisLodAvailabilityModel::Limited ?
168 i18n("(Instant Preview)*") : i18n("Instant Preview");
169
170
171 {
172 QFont font;
173 font.setStrikeOut(state >= KisLodAvailabilityModel::BlockedByThreshold);
174 m_d->chkLod->setEnabled(state < KisLodAvailabilityModel::BlockedFully);
175 m_d->btnLod->setEnabled(state < KisLodAvailabilityModel::BlockedFully);
176 m_d->btnLod->setFont(font);
177 m_d->btnLod->setText(text);
178 m_d->btnLod->setToolTip(toolTip);
179
186 KisSignalsBlocker b(m_d->chkLod);
187 m_d->chkLod->setChecked(false);
188 } else {
189 KisSignalsBlocker b(m_d->chkLod);
190 m_d->chkLod->setChecked(isLodUserAllowed);
191 }
192 }
193}
Definition KoID.h:30
const char * name(StandardAction id)

References KisLodAvailabilityModel::BlockedByThreshold, KisLodAvailabilityModel::BlockedFully, KisPaintopLodLimitations::blockers, KisPaintopLodLimitations::limitations, KisLodAvailabilityModel::Limited, and m_d.

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisLodAvailabilityWidget::m_d
private

Definition at line 42 of file kis_lod_availability_widget.h.


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