diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2018-06-27 15:40:19 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2018-06-27 15:40:03 +0000 |
commit | 465098088e3dd9bb14e884351f15cffd1471fe2c (patch) | |
tree | 87d8e25b48d18cfea0ef05f8604593fecc1f2860 | |
parent | fc926985a102e26869ad98abb697e801aef72bd0 (diff) |
Harden logic for converting from CSS gradients to QGradient
Some of the gradients from https://webgradients.com/ are not minified
completely, so we need to be a bit more lenient when converting them
to the internal format used by QGradient.
Change-Id: I47466b6a77abd6d2fefc1326fbf6ba5713dd74cb
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r-- | src/gui/painting/qbrush.cpp | 2 | ||||
-rw-r--r-- | src/gui/painting/webgradients.binaryjson | bin | 49052 -> 50792 bytes | |||
-rwxr-xr-x | util/gradientgen/gradientgen.js | 17 |
3 files changed, 13 insertions, 6 deletions
diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp index f9331d5cf6..f3a1251c4f 100644 --- a/src/gui/painting/qbrush.cpp +++ b/src/gui/painting/qbrush.cpp @@ -1393,7 +1393,7 @@ QGradient::QGradient(Preset preset) m_data.linear.y2 = end[QLatin1Literal("y")].toDouble(); for (const QJsonValue &stop : presetData[QLatin1String("stops")].toArray()) { - setColorAt(stop[QLatin1Literal("stop")].toDouble(), + setColorAt(stop[QLatin1Literal("position")].toDouble(), QColor(QRgb(stop[QLatin1Literal("color")].toInt()))); } diff --git a/src/gui/painting/webgradients.binaryjson b/src/gui/painting/webgradients.binaryjson Binary files differindex 15b798f7ba..75edd487be 100644 --- a/src/gui/painting/webgradients.binaryjson +++ b/src/gui/painting/webgradients.binaryjson diff --git a/util/gradientgen/gradientgen.js b/util/gradientgen/gradientgen.js index ff256d16d6..2c0539c759 100755 --- a/util/gradientgen/gradientgen.js +++ b/util/gradientgen/gradientgen.js @@ -44,7 +44,7 @@ if (argc < 3) { } const filename = process.argv[argc - 1]; -const mode = argc > 3 ? process.argv[argc - 2] : ''; +const mode = argc > 3 ? process.argv[argc - 2] : 'json'; fs.readFile(filename, (err, css) => { postcss([minifyGradients]).process(css) @@ -99,15 +99,22 @@ fs.readFile(filename, (err, css) => { const end = { x: 0.5 + x, y: 0.5 + y }; let stops = [] + + let lastPosition = 0; args.slice(1).forEach((arg, index) => { - let [color, stop = !index ? '0%' : '100%'] = arg; - stop = parseInt(stop) / 100; + let [color, position = !index ? '0%' : '100%'] = arg; + position = parseInt(position) / 100; + if (position < lastPosition) + position = lastPosition; + lastPosition = position; color = parseColor(color).hex; color = parseInt(color.slice(1), 16) - stops.push({ color, stop }) + stops.push({ color, position }) }); gradients[gradients.length - 1] = { start, end, stops }; + if (mode == 'debug') + console.log(name, args, gradients[gradients.length - 1]) }); enums.push(name); @@ -117,7 +124,7 @@ fs.readFile(filename, (err, css) => { }); // Done walking declarations - if (mode != 'enums') + if (mode == 'json') console.log(JSON.stringify(gradients, undefined, 4)); }); }); |