Krita Source Code Documentation
Loading...
Searching...
No Matches
KisQmlPopupWidgetManager.cpp
Go to the documentation of this file.
1
/*
2
* SPDX-FileCopyrightText: 2025 Wolthera van Hovell tot Westerflier <griffinvalley@gmail.com>
3
*
4
* SPDX-License-Identifier: GPL-2.0-or-later
5
*/
6
#include "
KisQmlPopupWidgetManager.h
"
7
#include <
KisQQuickPopupWidget.h
>
8
#include <QApplication>
9
10
#include <optional>
11
12
struct
KisQmlPopupWidgetManager::Private
{
13
KisQQuickPopupWidget
*
popup
;
14
15
qreal
x
;
16
qreal
y
;
17
18
qreal
margins
= 0;
19
std::optional<qreal>
topMargin
= std::nullopt;
20
std::optional<qreal>
bottomMargin
= std::nullopt;
21
std::optional<qreal>
leftMargin
= std::nullopt;
22
std::optional<qreal>
rightMargin
= std::nullopt;
23
24
QQuickItem *
itemParent
;
25
};
26
27
KisQmlPopupWidgetManager::KisQmlPopupWidgetManager
(QObject *parent)
28
: QObject(parent)
29
, d(new
Private
)
30
{
31
d
->popup =
new
KisQQuickPopupWidget
();
32
33
connect(
this
, SIGNAL(
marginsChanged
()),
this
, SLOT(
updateMargins
()));
34
connect(
this
, SIGNAL(
topMarginChanged
()),
this
, SLOT(
updateMargins
()));
35
connect(
this
, SIGNAL(
leftMarginChanged
()),
this
, SLOT(
updateMargins
()));
36
connect(
this
, SIGNAL(
rightMarginChanged
()),
this
, SLOT(
updateMargins
()));
37
connect(
this
, SIGNAL(
bottomMarginChanged
()),
this
, SLOT(
updateMargins
()));
38
connect(
d
->popup, SIGNAL(signalRootObjectReady()),
this
, SIGNAL(
rootControlChanged
()));
39
}
40
41
KisQmlPopupWidgetManager::~KisQmlPopupWidgetManager
()
42
{
43
d
->popup->deleteLater();
44
}
45
46
qreal
KisQmlPopupWidgetManager::x
()
const
47
{
48
return
d
->x;
49
}
50
51
void
KisQmlPopupWidgetManager::setX
(
const
qreal
value
)
52
{
53
if
(
qFuzzyCompare
(
d
->x,
value
))
return
;
54
d
->x =
value
;
55
Q_EMIT
xChanged
();
56
}
57
58
qreal
KisQmlPopupWidgetManager::y
()
const
59
{
60
return
d
->y;
61
}
62
63
void
KisQmlPopupWidgetManager::setY
(
const
qreal
value
)
64
{
65
if
(
qFuzzyCompare
(
d
->y,
value
))
return
;
66
d
->y =
value
;
67
Q_EMIT
yChanged
();
68
}
69
70
QQuickItem *
KisQmlPopupWidgetManager::itemParent
()
const
71
{
72
return
d
->itemParent;
73
}
74
75
void
KisQmlPopupWidgetManager::setItemParent
(QQuickItem *item)
76
{
77
if
(
d
->itemParent == item)
return
;
78
d
->itemParent = item;
79
Q_EMIT
itemParentChanged
();
80
}
81
82
QQuickItem *
KisQmlPopupWidgetManager::rootControl
()
const
83
{
84
return
d
->popup->rootObject();
85
}
86
87
qreal
KisQmlPopupWidgetManager::margins
()
const
88
{
89
return
d
->margins;
90
}
91
92
void
KisQmlPopupWidgetManager::setMargins
(
const
qreal
value
)
93
{
94
if
(
qFuzzyCompare
(
d
->margins,
value
))
return
;
95
d
->margins =
value
;
96
Q_EMIT
marginsChanged
();
97
}
98
99
qreal
KisQmlPopupWidgetManager::topMargin
()
const
100
{
101
return
(
d
->topMargin)?
d
->topMargin.value():
d
->margins;
102
}
103
104
qreal
KisQmlPopupWidgetManager::bottomMargin
()
const
105
{
106
return
(
d
->bottomMargin)?
d
->bottomMargin.value():
d
->margins;
107
}
108
109
qreal
KisQmlPopupWidgetManager::leftMargin
()
const
110
{
111
return
(
d
->leftMargin)?
d
->leftMargin.value():
d
->margins;
112
}
113
114
qreal
KisQmlPopupWidgetManager::rightMargin
()
const
115
{
116
return
(
d
->rightMargin)?
d
->rightMargin.value():
d
->margins;
117
}
118
119
void
KisQmlPopupWidgetManager::setTopMargin
(
const
qreal
value
)
120
{
121
if
(
d
->topMargin) {
122
if
(
qFuzzyCompare
(
d
->topMargin.value(),
value
))
return
;
123
}
124
d
->topMargin = std::make_optional(
value
);
125
Q_EMIT
topMarginChanged
();
126
}
127
128
void
KisQmlPopupWidgetManager::setRightMargin
(
const
qreal
value
)
129
{
130
if
(
d
->rightMargin) {
131
if
(
qFuzzyCompare
(
d
->rightMargin.value(),
value
))
return
;
132
}
133
d
->rightMargin = std::make_optional(
value
);
134
Q_EMIT
rightMarginChanged
();
135
}
136
137
void
KisQmlPopupWidgetManager::setLeftMargin
(
const
qreal
value
)
138
{
139
if
(
d
->leftMargin) {
140
if
(
qFuzzyCompare
(
d
->leftMargin.value(),
value
))
return
;
141
}
142
d
->leftMargin = std::make_optional(
value
);
143
Q_EMIT
leftMarginChanged
();
144
}
145
146
void
KisQmlPopupWidgetManager::setBottomMargin
(
const
qreal
value
)
147
{
148
if
(
d
->bottomMargin) {
149
if
(
qFuzzyCompare
(
d
->bottomMargin.value(),
value
))
return
;
150
}
151
d
->bottomMargin = std::make_optional(
value
);
152
Q_EMIT
bottomMarginChanged
();
153
}
154
155
void
KisQmlPopupWidgetManager::resetTopMargin
()
156
{
157
d
->topMargin = std::nullopt;
158
}
159
160
void
KisQmlPopupWidgetManager::resetLeftMargin
()
161
{
162
d
->leftMargin = std::nullopt;
163
}
164
165
void
KisQmlPopupWidgetManager::resetRightMargin
()
166
{
167
d
->rightMargin = std::nullopt;
168
}
169
170
void
KisQmlPopupWidgetManager::resetBottomMargin
()
171
{
172
d
->bottomMargin = std::nullopt;
173
}
174
175
bool
KisQmlPopupWidgetManager::visible
()
const
176
{
177
return
d
->popup->isVisible();
178
}
179
180
void
KisQmlPopupWidgetManager::open
()
181
{
182
if
(!
d
->itemParent) {
183
qWarning() <<
"Parent not set! PopupWidget requires parent to be explicitely set!"
;
184
return
;
185
}
186
d
->popup->raise();
187
d
->popup->show();
188
d
->popup->move(
d
->itemParent->mapToGlobal(QPointF(
d
->x,
d
->y)).toPoint());
189
// The following is probably causing issues with keyboard focus :(
190
d
->popup->activateWindow();
191
Q_EMIT
visibleChanged
();
192
}
193
194
void
KisQmlPopupWidgetManager::close
()
195
{
196
d
->popup->hide();
197
Q_EMIT
visibleChanged
();
198
}
199
200
void
KisQmlPopupWidgetManager::releaseKeyboard
()
201
{
202
d
->popup->releaseKeyboard();
203
}
204
205
void
KisQmlPopupWidgetManager::updateMargins
()
206
{
207
QMargins
margins
;
208
margins
.setTop(qRound(
topMargin
()));
209
margins
.setLeft(qRound(
leftMargin
()));
210
margins
.setRight(qRound(
rightMargin
()));
211
margins
.setBottom(qRound(
bottomMargin
()));
212
d
->popup->setLayoutMargins(
margins
);
213
}
value
float value(const T *src, size_t ch)
Definition
JPEGXLImport.cpp:93
KisQQuickPopupWidget.h
KisQmlPopupWidgetManager.h
KisQQuickPopupWidget
The KisQQuickPopupWidget class.
Definition
KisQQuickPopupWidget.h:22
KisQmlPopupWidgetManager::itemParent
QQuickItem * itemParent() const
Definition
KisQmlPopupWidgetManager.cpp:70
KisQmlPopupWidgetManager::y
qreal y
Definition
KisQmlPopupWidgetManager.h:26
KisQmlPopupWidgetManager::close
Q_INVOKABLE void close()
Definition
KisQmlPopupWidgetManager.cpp:194
KisQmlPopupWidgetManager::bottomMargin
qreal bottomMargin
Definition
KisQmlPopupWidgetManager.h:35
KisQmlPopupWidgetManager::rootControl
QQuickItem * rootControl
Definition
KisQmlPopupWidgetManager.h:29
KisQmlPopupWidgetManager::resetLeftMargin
void resetLeftMargin()
Definition
KisQmlPopupWidgetManager.cpp:160
KisQmlPopupWidgetManager::topMargin
qreal topMargin
Definition
KisQmlPopupWidgetManager.h:32
KisQmlPopupWidgetManager::KisQmlPopupWidgetManager
KisQmlPopupWidgetManager(QObject *parent=nullptr)
Definition
KisQmlPopupWidgetManager.cpp:27
KisQmlPopupWidgetManager::setY
void setY(const qreal value)
Definition
KisQmlPopupWidgetManager.cpp:63
KisQmlPopupWidgetManager::updateMargins
void updateMargins()
Definition
KisQmlPopupWidgetManager.cpp:205
KisQmlPopupWidgetManager::yChanged
void yChanged()
KisQmlPopupWidgetManager::setTopMargin
void setTopMargin(const qreal value)
Definition
KisQmlPopupWidgetManager.cpp:119
KisQmlPopupWidgetManager::rightMarginChanged
void rightMarginChanged()
KisQmlPopupWidgetManager::topMarginChanged
void topMarginChanged()
KisQmlPopupWidgetManager::setX
void setX(const qreal value)
Definition
KisQmlPopupWidgetManager.cpp:51
KisQmlPopupWidgetManager::visibleChanged
void visibleChanged()
KisQmlPopupWidgetManager::leftMargin
qreal leftMargin
Definition
KisQmlPopupWidgetManager.h:33
KisQmlPopupWidgetManager::x
qreal x
Definition
KisQmlPopupWidgetManager.h:25
KisQmlPopupWidgetManager::setBottomMargin
void setBottomMargin(const qreal value)
Definition
KisQmlPopupWidgetManager.cpp:146
KisQmlPopupWidgetManager::itemParentChanged
void itemParentChanged()
KisQmlPopupWidgetManager::rightMargin
qreal rightMargin
Definition
KisQmlPopupWidgetManager.h:34
KisQmlPopupWidgetManager::rootControlChanged
void rootControlChanged()
KisQmlPopupWidgetManager::d
QScopedPointer< Private > d
Definition
KisQmlPopupWidgetManager.h:99
KisQmlPopupWidgetManager::leftMarginChanged
void leftMarginChanged()
KisQmlPopupWidgetManager::resetTopMargin
void resetTopMargin()
Definition
KisQmlPopupWidgetManager.cpp:155
KisQmlPopupWidgetManager::open
Q_INVOKABLE void open()
Definition
KisQmlPopupWidgetManager.cpp:180
KisQmlPopupWidgetManager::resetRightMargin
void resetRightMargin()
Definition
KisQmlPopupWidgetManager.cpp:165
KisQmlPopupWidgetManager::bottomMarginChanged
void bottomMarginChanged()
KisQmlPopupWidgetManager::marginsChanged
void marginsChanged()
KisQmlPopupWidgetManager::setLeftMargin
void setLeftMargin(const qreal value)
Definition
KisQmlPopupWidgetManager.cpp:137
KisQmlPopupWidgetManager::releaseKeyboard
Q_INVOKABLE void releaseKeyboard()
Definition
KisQmlPopupWidgetManager.cpp:200
KisQmlPopupWidgetManager::setItemParent
void setItemParent(QQuickItem *item)
Definition
KisQmlPopupWidgetManager.cpp:75
KisQmlPopupWidgetManager::xChanged
void xChanged()
KisQmlPopupWidgetManager::setRightMargin
void setRightMargin(const qreal value)
Definition
KisQmlPopupWidgetManager.cpp:128
KisQmlPopupWidgetManager::~KisQmlPopupWidgetManager
~KisQmlPopupWidgetManager()
Definition
KisQmlPopupWidgetManager.cpp:41
KisQmlPopupWidgetManager::resetBottomMargin
void resetBottomMargin()
Definition
KisQmlPopupWidgetManager.cpp:170
KisQmlPopupWidgetManager::margins
qreal margins
Definition
KisQmlPopupWidgetManager.h:31
KisQmlPopupWidgetManager::visible
bool visible
Definition
KisQmlPopupWidgetManager.h:37
KisQmlPopupWidgetManager::setMargins
void setMargins(const qreal value)
Definition
KisQmlPopupWidgetManager.cpp:92
qFuzzyCompare
static bool qFuzzyCompare(half p1, half p2)
Definition
exr_converter.cc:233
Private
Definition
SvgTransformParser.cpp:20
KisQmlPopupWidgetManager::Private
Definition
KisQmlPopupWidgetManager.cpp:12
KisQmlPopupWidgetManager::Private::bottomMargin
std::optional< qreal > bottomMargin
Definition
KisQmlPopupWidgetManager.cpp:20
KisQmlPopupWidgetManager::Private::y
qreal y
Definition
KisQmlPopupWidgetManager.cpp:16
KisQmlPopupWidgetManager::Private::margins
qreal margins
Definition
KisQmlPopupWidgetManager.cpp:18
KisQmlPopupWidgetManager::Private::popup
KisQQuickPopupWidget * popup
Definition
KisQmlPopupWidgetManager.cpp:13
KisQmlPopupWidgetManager::Private::rightMargin
std::optional< qreal > rightMargin
Definition
KisQmlPopupWidgetManager.cpp:22
KisQmlPopupWidgetManager::Private::itemParent
QQuickItem * itemParent
Definition
KisQmlPopupWidgetManager.cpp:24
KisQmlPopupWidgetManager::Private::x
qreal x
Definition
KisQmlPopupWidgetManager.cpp:15
KisQmlPopupWidgetManager::Private::topMargin
std::optional< qreal > topMargin
Definition
KisQmlPopupWidgetManager.cpp:19
KisQmlPopupWidgetManager::Private::leftMargin
std::optional< qreal > leftMargin
Definition
KisQmlPopupWidgetManager.cpp:21
qmlmodules
components
KisQmlPopupWidgetManager.cpp
Generated at
2026-06-01 02:30:02+02:00
from
Krita
branch
master
, commit
a9b6c3f4afae3a0c297c10252e67294f96104a6a