Merge lp:~aacid/ubuntu-ui-toolkit/dpr_rebase_qt_5.1_with_ifdefs into lp:ubuntu-ui-toolkit

Proposed by Albert Astals Cid on 2013-11-22
Status: Rejected
Rejected by: Florian Boucault on 2013-11-22
Proposed branch: lp:~aacid/ubuntu-ui-toolkit/dpr_rebase_qt_5.1_with_ifdefs
Merge into: lp:ubuntu-ui-toolkit
Diff against target: 449 lines (+172/-7)
9 files modified
modules/Ubuntu/Components/Themes/Ambiance/HeaderStyle.qml (+1/-0)
modules/Ubuntu/Components/plugin/shapeitem.cpp (+17/-0)
modules/Ubuntu/Components/plugin/ucqquickimageextension.cpp (+47/-3)
modules/Ubuntu/Components/plugin/ucscalingimageprovider.cpp (+20/-0)
modules/Ubuntu/Components/plugin/ucunits.cpp (+17/-1)
modules/Ubuntu/Components/plugin/ucunits.h (+2/-0)
tests/unit/tst_qquick_image_extension/tst_qquick_image_extension.cpp (+4/-0)
tests/unit/tst_scaling_image_provider/tst_scaling_image_provider.cpp (+10/-3)
tests/unit/tst_units/tst_units.cpp (+54/-0)
To merge this branch: bzr merge lp:~aacid/ubuntu-ui-toolkit/dpr_rebase_qt_5.1_with_ifdefs
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Approve on 2013-11-22
Ubuntu SDK team 2013-11-22 Pending
Review via email: mp+196253@code.launchpad.net

Commit message

Rebase resolution independence on Qt's infrastructure:
- QPlatformScreen::devicePixelRatio
- QPlatformWindow::devicePixelRatio

To post a comment you must log in.
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)

Unmerged revisions

749. By Albert Astals Cid on 2013-11-22

Forgot this ifdef

748. By Albert Astals Cid on 2013-11-22

Add ifdefs for simultaneous 5.0 and 5.1/2 compilation

747. By Albert Astals Cid on 2013-11-22

Merge

746. By Florian Boucault on 2013-11-20

Merged trunk

745. By Florian Boucault on 2013-11-19

Merged trunk

744. By Florian Boucault on 2013-11-05

Merged from trunk

743. By Florian Boucault on 2013-09-03

Rebase resolution independence on Qt's infrastructure:
- QPlatformScreen::devicePixelRatio
- QPlatformWindow::devicePixelRatio

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'modules/Ubuntu/Components/Themes/Ambiance/HeaderStyle.qml'
2--- modules/Ubuntu/Components/Themes/Ambiance/HeaderStyle.qml 2013-11-12 06:41:24 +0000
3+++ modules/Ubuntu/Components/Themes/Ambiance/HeaderStyle.qml 2013-11-22 10:29:14 +0000
4@@ -50,6 +50,7 @@
5 left: parent.left
6 right: parent.right
7 }
8+ height: units.dp(15)
9 source: headerStyle.separatorSource
10 }
11 Image {
12
13=== modified file 'modules/Ubuntu/Components/plugin/shapeitem.cpp'
14--- modules/Ubuntu/Components/plugin/shapeitem.cpp 2013-10-18 08:56:39 +0000
15+++ modules/Ubuntu/Components/plugin/shapeitem.cpp 2013-11-22 10:29:14 +0000
16@@ -31,6 +31,9 @@
17
18 // Threshold in grid unit defining the texture quality to be used.
19 const float lowHighTextureThreshold = 11.0f;
20+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
21+const float defaultGridUnit = 8.0f;
22+#endif
23
24 static const char* const shapeVertexShader =
25 "uniform lowp mat4 matrix; \n"
26@@ -146,8 +149,13 @@
27 setFlag(ItemHasContents);
28 QObject::connect(&UCUnits::instance(), SIGNAL(gridUnitChanged()), this,
29 SLOT(gridUnitChanged()));
30+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
31+ setImplicitWidth(8 * defaultGridUnit);
32+ setImplicitHeight(8 * defaultGridUnit);
33+#else
34 setImplicitWidth(8 * gridUnit_);
35 setImplicitHeight(8 * gridUnit_);
36+#endif
37 update();
38 }
39
40@@ -324,8 +332,13 @@
41 void ShapeItem::gridUnitChanged()
42 {
43 gridUnit_ = UCUnits::instance().gridUnit();
44+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
45+ setImplicitWidth(8 * defaultGridUnit);
46+ setImplicitHeight(8 * defaultGridUnit);
47+#else
48 setImplicitWidth(8 * gridUnit_);
49 setImplicitHeight(8 * gridUnit_);
50+#endif
51 dirtyFlags_ |= ShapeItem::DirtyGridUnit;
52 update();
53 }
54@@ -390,7 +403,11 @@
55 // is less than 2 radii, the radius is scaled down anyhow.
56 float radius = (radius_ == ShapeItem::SmallRadius) ?
57 textureData->smallRadius : textureData->mediumRadius;
58+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
59+ const float scaleFactor = defaultGridUnit / textureData->gridUnit;
60+#else
61 const float scaleFactor = gridUnit_ / textureData->gridUnit;
62+#endif
63 radius *= scaleFactor;
64 int scaledDown = 0;
65 if (scaleFactor != 1.0f) {
66
67=== modified file 'modules/Ubuntu/Components/plugin/ucqquickimageextension.cpp'
68--- modules/Ubuntu/Components/plugin/ucqquickimageextension.cpp 2013-10-18 08:56:39 +0000
69+++ modules/Ubuntu/Components/plugin/ucqquickimageextension.cpp 2013-11-22 10:29:14 +0000
70@@ -75,6 +75,39 @@
71 QString scaleFactor = resolved.left(separatorPosition);
72 QString selectedFilePath = resolved.mid(separatorPosition+1);
73
74+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
75+ // Prepend "image://scaling" for the image to be loaded by UCScalingImageProvider.
76+ if (!m_source.path().endsWith(".sci")) {
77+ // Regular image file
78+ m_image->setSource(QUrl("image://scaling/" + resolved));
79+ } else {
80+ // .sci image file. Rewrite the .sci file into a temporary file.
81+ bool rewritten = true;
82+ QTemporaryFile* rewrittenSciFile;
83+
84+ /* Ensure that only one temporary rewritten .sci file is created
85+ for each source .sci file by storing the path to the temporary
86+ file in a global hash.
87+ */
88+ rewrittenSciFile = UCQQuickImageExtension::s_rewrittenSciFiles.value(m_source).data();
89+ if (rewrittenSciFile == NULL) {
90+ rewrittenSciFile = new QTemporaryFile;
91+ rewrittenSciFile->setFileTemplate(QDir::tempPath() + QDir::separator() + "XXXXXX.sci");
92+ rewrittenSciFile->open();
93+ QTextStream output(rewrittenSciFile);
94+ rewritten = rewriteSciFile(selectedFilePath, scaleFactor, output);
95+ rewrittenSciFile->close();
96+
97+ s_rewrittenSciFiles.insert(m_source, QSharedPointer<QTemporaryFile>(rewrittenSciFile));
98+ }
99+
100+ if (rewritten) {
101+ m_image->setSource(QUrl::fromLocalFile(rewrittenSciFile->fileName()));
102+ } else {
103+ m_image->setSource(m_source);
104+ }
105+ }
106+#else
107 if (scaleFactor == "1") {
108 // No scaling. Just pass the file as is.
109 m_image->setSource(QUrl::fromLocalFile(selectedFilePath));
110@@ -89,8 +122,8 @@
111 QTemporaryFile* rewrittenSciFile;
112
113 /* Ensure that only one temporary rewritten .sci file is created
114- for each source .sci file by storing the path to the temporary
115- file in a global hash.
116+ for each source .sci file by storing the path to the temporary
117+ file in a global hash.
118 */
119 rewrittenSciFile = UCQQuickImageExtension::s_rewrittenSciFiles.value(m_source).data();
120 if (rewrittenSciFile == NULL) {
121@@ -111,6 +144,7 @@
122 }
123 }
124 }
125+#endif
126 }
127
128 bool UCQQuickImageExtension::rewriteSciFile(const QString &sciFilePath, const QString &scaleFactor, QTextStream& output)
129@@ -137,8 +171,18 @@
130 QString UCQQuickImageExtension::scaledBorder(const QString &border, const QString &scaleFactor)
131 {
132 // Rewrite the border line with a scaled border value
133+ float scaledValue;
134 QStringList parts = border.split(":");
135- float scaledValue = parts[1].toFloat() * scaleFactor.toFloat();
136+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
137+ if (scaleFactor.toFloat() < 1.0) {
138+ scaledValue = parts[1].toFloat() * scaleFactor.toFloat();
139+ } else {
140+ // match the behaviour of UCScalingImageProvider and do not upscale
141+ scaledValue = parts[1].toFloat();
142+ }
143+#else
144+ scaledValue = parts[1].toFloat() * scaleFactor.toFloat();
145+#endif
146 return parts[0] + ": " + QString::number(qRound(scaledValue));
147 }
148
149
150=== modified file 'modules/Ubuntu/Components/plugin/ucscalingimageprovider.cpp'
151--- modules/Ubuntu/Components/plugin/ucscalingimageprovider.cpp 2013-04-20 01:14:43 +0000
152+++ modules/Ubuntu/Components/plugin/ucscalingimageprovider.cpp 2013-11-22 10:29:14 +0000
153@@ -17,9 +17,11 @@
154 */
155
156 #include "ucscalingimageprovider.h"
157+#include "ucunits.h"
158
159 #include <QtCore/QFile>
160 #include <QtGui/QImageReader>
161+#include <QtCore/QDebug>
162
163 /*!
164 \internal
165@@ -29,6 +31,10 @@
166 - 'scale' is the scaling factor applied to the image
167 - 'path' is the full path of the image on the filesystem
168
169+ If the scaling factor is bigger than 1.0 then do not scale: UCScalingImageProvider
170+ never upscales but instead set the devicePixelRatio appropriately so that upscaling
171+ is done in the GPU.
172+
173 Example:
174 * image://scaling/0.5/arrow.png
175 */
176@@ -50,7 +56,11 @@
177 QSize scaledSize = realSize;
178 QSize constrainedSize;
179
180+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
181+ if (!qFuzzyCompare(scaleFactor, (float)1.0) && scaleFactor < 1.0) {
182+#else
183 if (!qFuzzyCompare(scaleFactor, (float)1.0)) {
184+#endif
185 scaledSize = realSize * scaleFactor;
186 }
187 if (requestedSize.isValid() && (requestedSize.width() < realSize.width() || requestedSize.height() < realSize.height())) {
188@@ -65,6 +75,16 @@
189
190 imageReader.read(&image);
191 *size = scaledSize;
192+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
193+ float windowPixelRatio = UCUnits::instance().gridUnit() / DEFAULT_GRID_UNIT_PX;
194+ if (scaleFactor < 1.0) {
195+ image.setDevicePixelRatio(windowPixelRatio);
196+ } else {
197+ /* When image needs to be upscaled, do not upscale it here but set its
198+ devicePixelRatio appropriately so that upscaling is done when rendering. */
199+ image.setDevicePixelRatio(windowPixelRatio / scaleFactor);
200+ }
201+#endif
202 return image;
203 } else {
204 return QImage();
205
206=== modified file 'modules/Ubuntu/Components/plugin/ucunits.cpp'
207--- modules/Ubuntu/Components/plugin/ucunits.cpp 2013-10-18 08:56:39 +0000
208+++ modules/Ubuntu/Components/plugin/ucunits.cpp 2013-11-22 10:29:14 +0000
209@@ -24,9 +24,9 @@
210 #include <QtCore/QDir>
211 #include <QtCore/QRegularExpression>
212 #include <QtCore/qmath.h>
213+#include <QtCore/QDebug>
214
215 #define ENV_GRID_UNIT_PX "GRID_UNIT_PX"
216-#define DEFAULT_GRID_UNIT_PX 8
217
218 static float getenvFloat(const char* name, float defaultValue)
219 {
220@@ -80,6 +80,14 @@
221
222 void UCUnits::setGridUnit(float gridUnit)
223 {
224+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
225+ /* Implementation of resolution independence is spread accross
226+ the toolkit and qtubuntu. The number of pixels for a grid unit
227+ is read by both from the environment variable GRID_UNIT_PX.
228+ Setting the 'gridUnit' property here has no effect.
229+ */
230+ qWarning() << "UCUnits::setGridUnit is deprecated.";
231+#endif
232 m_gridUnit = gridUnit;
233 Q_EMIT gridUnitChanged();
234 }
235@@ -91,6 +99,9 @@
236 */
237 float UCUnits::dp(float value)
238 {
239+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
240+ return qRound(value);
241+#else
242 const float ratio = m_gridUnit / DEFAULT_GRID_UNIT_PX;
243 if (value <= 2.0) {
244 // for values under 2dp, return only multiples of the value
245@@ -98,6 +109,7 @@
246 } else {
247 return qRound(value * ratio);
248 }
249+#endif
250 }
251
252 /*!
253@@ -107,7 +119,11 @@
254 */
255 float UCUnits::gu(float value)
256 {
257+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
258+ return qRound(value * DEFAULT_GRID_UNIT_PX);
259+#else
260 return qRound(value * m_gridUnit);
261+#endif
262 }
263
264 QString UCUnits::resolveResource(const QUrl& url)
265
266=== modified file 'modules/Ubuntu/Components/plugin/ucunits.h'
267--- modules/Ubuntu/Components/plugin/ucunits.h 2013-10-18 08:56:39 +0000
268+++ modules/Ubuntu/Components/plugin/ucunits.h 2013-11-22 10:29:14 +0000
269@@ -23,6 +23,8 @@
270 #include <QtCore/QHash>
271 #include <QtCore/QUrl>
272
273+#define DEFAULT_GRID_UNIT_PX 8
274+
275 class UCUnits : public QObject
276 {
277 Q_OBJECT
278
279=== modified file 'tests/unit/tst_qquick_image_extension/tst_qquick_image_extension.cpp'
280--- tests/unit/tst_qquick_image_extension/tst_qquick_image_extension.cpp 2013-05-06 16:33:54 +0000
281+++ tests/unit/tst_qquick_image_extension/tst_qquick_image_extension.cpp 2013-11-22 10:29:14 +0000
282@@ -55,7 +55,11 @@
283 void scaledBorderDouble() {
284 UCQQuickImageExtension image;
285 QString border = "border: 13";
286+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
287+ QString expected = "border: 13";
288+#else
289 QString expected = "border: 26";
290+#endif
291 QString result = image.scaledBorder(border, "2");
292 QCOMPARE(result, expected);
293 }
294
295=== modified file 'tests/unit/tst_scaling_image_provider/tst_scaling_image_provider.cpp'
296--- tests/unit/tst_scaling_image_provider/tst_scaling_image_provider.cpp 2013-04-20 00:39:40 +0000
297+++ tests/unit/tst_scaling_image_provider/tst_scaling_image_provider.cpp 2013-11-22 10:29:14 +0000
298@@ -67,10 +67,17 @@
299 QTest::newRow("downscaling, smaller width") << inputFile << "0.5" << QSize(50, 1000) << QSize(64, 128) << QSize(50, 100);
300 QTest::newRow("downscaling, smaller height") << inputFile << "0.5" << QSize(1000, 50) << QSize(64, 128) << QSize(25, 50);
301 QTest::newRow("downscaling, smaller width and height")<< inputFile << "0.5" << QSize(50, 50) << QSize(64, 128) << QSize(25, 50);
302- QTest::newRow("upscaling, bigger width and height") << inputFile << "2.0" << QSize(1000, 1000) << QSize(256, 512) << QSize(256, 512);
303- QTest::newRow("upscaling, smaller width") << inputFile << "2.0" << QSize(50, 1000) << QSize(256, 512) << QSize(50, 100);
304- QTest::newRow("upscaling, smaller height") << inputFile << "2.0" << QSize(1000, 50) << QSize(256, 512) << QSize(25, 50);
305+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
306+ QTest::newRow("upscaling, bigger width and height") << inputFile << "2.0" << QSize(1000, 1000) << QSize(128, 256) << QSize(128, 256);
307+ QTest::newRow("upscaling, smaller width") << inputFile << "2.0" << QSize(50, 1000) << QSize(128, 256) << QSize(50, 100);
308+ QTest::newRow("upscaling, smaller height") << inputFile << "2.0" << QSize(1000, 50) << QSize(128, 256) << QSize(25, 50);
309+ QTest::newRow("upscaling, smaller width and height") << inputFile << "2.0" << QSize(50, 50) << QSize(128, 256) << QSize(25, 50);
310+#else
311+ QTest::newRow("upscaling, bigger width and height") << inputFile << "2.0" << QSize(1000, 1000) << QSize(256, 512) << QSize(256, 512);
312+ QTest::newRow("upscaling, smaller width") << inputFile << "2.0" << QSize(50, 1000) << QSize(256, 512) << QSize(50, 100);
313+ QTest::newRow("upscaling, smaller height") << inputFile << "2.0" << QSize(1000, 50) << QSize(256, 512) << QSize(25, 50);
314 QTest::newRow("upscaling, smaller width and height") << inputFile << "2.0" << QSize(50, 50) << QSize(256, 512) << QSize(25, 50);
315+#endif
316 }
317
318 void respectRequestedSize() {
319
320=== modified file 'tests/unit/tst_units/tst_units.cpp'
321--- tests/unit/tst_units/tst_units.cpp 2013-02-05 17:10:20 +0000
322+++ tests/unit/tst_units/tst_units.cpp 2013-11-22 10:29:14 +0000
323@@ -85,13 +85,26 @@
324 QCOMPARE(units.dp(0.23), 0.0f);
325 QCOMPARE(units.dp(0.51), 1.0f);
326 QCOMPARE(units.dp(0.9999), 1.0f);
327+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
328+ QCOMPARE(units.dp(1000.01), 1000.0f);
329+#else
330 QCOMPARE(units.dp(1000.01), 1250.0f);
331+#endif
332 }
333
334 void guGridUnitTen() {
335 UCUnits units;
336 units.setGridUnit(10);
337
338+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
339+ QCOMPARE(units.gu(0.5), 4.0f);
340+ QCOMPARE(units.gu(1), 8.0f);
341+ QCOMPARE(units.gu(1.5), 12.0f);
342+ QCOMPARE(units.gu(2), 16.0f);
343+ QCOMPARE(units.gu(4), 32.0f);
344+ QCOMPARE(units.gu(100000), 800000.0f);
345+ QCOMPARE(units.gu(150.51983), 1204.0f);
346+#else
347 QCOMPARE(units.gu(0.5), 5.0f);
348 QCOMPARE(units.gu(1), 10.0f);
349 QCOMPARE(units.gu(1.5), 15.0f);
350@@ -99,12 +112,22 @@
351 QCOMPARE(units.gu(4), 40.0f);
352 QCOMPARE(units.gu(100000), 1000000.0f);
353 QCOMPARE(units.gu(150.51983), 1505.0f);
354+#endif
355 }
356
357 void dpGridUnitSixteen() {
358 UCUnits units;
359 units.setGridUnit(16);
360
361+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
362+ QCOMPARE(units.dp(1.0), 1.0f);
363+ QCOMPARE(units.dp(1.32), 1.0f);
364+ QCOMPARE(units.dp(1.72), 2.0f);
365+ QCOMPARE(units.dp(0.23), 0.0f);
366+ QCOMPARE(units.dp(0.51), 1.0f);
367+ QCOMPARE(units.dp(0.9999), 1.0f);
368+ QCOMPARE(units.dp(1000.01), 1000.0f);
369+#else
370 QCOMPARE(units.dp(1.0), 2.0f);
371 QCOMPARE(units.dp(1.32), 3.0f);
372 QCOMPARE(units.dp(1.72), 3.0f);
373@@ -112,12 +135,22 @@
374 QCOMPARE(units.dp(0.51), 1.0f);
375 QCOMPARE(units.dp(0.9999), 2.0f);
376 QCOMPARE(units.dp(1000.01), 2000.0f);
377+#endif
378 }
379
380 void guGridUnitSixteen() {
381 UCUnits units;
382 units.setGridUnit(16);
383
384+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
385+ QCOMPARE(units.gu(0.5), 4.0f);
386+ QCOMPARE(units.gu(1), 8.0f);
387+ QCOMPARE(units.gu(1.5), 12.0f);
388+ QCOMPARE(units.gu(2), 16.0f);
389+ QCOMPARE(units.gu(4), 32.0f);
390+ QCOMPARE(units.gu(100000), 800000.0f);
391+ QCOMPARE(units.gu(150.51983), 1204.0f);
392+#else
393 QCOMPARE(units.gu(0.5), 8.0f);
394 QCOMPARE(units.gu(1), 16.0f);
395 QCOMPARE(units.gu(1.5), 24.0f);
396@@ -125,12 +158,22 @@
397 QCOMPARE(units.gu(4), 64.0f);
398 QCOMPARE(units.gu(100000), 1600000.0f);
399 QCOMPARE(units.gu(150.51983), 2408.0f);
400+#endif
401 }
402
403 void dpGridUnitEighteen() {
404 UCUnits units;
405 units.setGridUnit(18);
406
407+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
408+ QCOMPARE(units.dp(1.0), 1.0f);
409+ QCOMPARE(units.dp(1.32), 1.0f);
410+ QCOMPARE(units.dp(1.72), 2.0f);
411+ QCOMPARE(units.dp(0.23), 0.0f);
412+ QCOMPARE(units.dp(0.51), 1.0f);
413+ QCOMPARE(units.dp(0.9999), 1.0f);
414+ QCOMPARE(units.dp(1000.01), 1000.0f);
415+#else
416 QCOMPARE(units.dp(1.0), 2.0f);
417 QCOMPARE(units.dp(1.32), 3.0f);
418 QCOMPARE(units.dp(1.72), 3.0f);
419@@ -138,12 +181,22 @@
420 QCOMPARE(units.dp(0.51), 1.0f);
421 QCOMPARE(units.dp(0.9999), 2.0f);
422 QCOMPARE(units.dp(1000.01), 2250.0f);
423+#endif
424 }
425
426 void dpGridUnitTwenty() {
427 UCUnits units;
428 units.setGridUnit(20);
429
430+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
431+ QCOMPARE(units.dp(1.0), 1.0f);
432+ QCOMPARE(units.dp(1.32), 1.0f);
433+ QCOMPARE(units.dp(1.72), 2.0f);
434+ QCOMPARE(units.dp(0.23), 0.0f);
435+ QCOMPARE(units.dp(0.51), 1.0f);
436+ QCOMPARE(units.dp(0.9999), 1.0f);
437+ QCOMPARE(units.dp(1000.01), 1000.0f);
438+#else
439 QCOMPARE(units.dp(1.0), 2.0f);
440 QCOMPARE(units.dp(1.32), 3.0f);
441 QCOMPARE(units.dp(1.72), 3.0f);
442@@ -151,6 +204,7 @@
443 QCOMPARE(units.dp(0.51), 1.0f);
444 QCOMPARE(units.dp(0.9999), 2.0f);
445 QCOMPARE(units.dp(1000.01), 2500.0f);
446+#endif
447 }
448
449 void resolveEmpty() {

Subscribers

People subscribed via source and target branches

to status/vote changes: