From 4cc14868b86ce9464ffb4d7b96776452670b49d6 Mon Sep 17 00:00:00 2001 From: xylosper Date: Fri, 15 Feb 2019 17:38:40 +0900 Subject: [qt] fix missing alpha channel for `QColor` `QColor::name()` produces `#rrggbb` format where alpha is missing. Use `rgba(...)` string instead when convert `QColor` to mapbox style. Note: `QColor::name(QColor::HexArgb)` produces `#aarrggbb` format string, but mapbox does not support this format apparently. --- platform/qt/src/qmapboxgl.cpp | 6 +++--- platform/qt/src/qt_conversion.hpp | 11 +++++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index 721bba8ff0..c0ea5efd34 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -941,13 +941,13 @@ mbgl::optional asMapboxGLAnnotation(const QMapbox::Annotation return { mbgl::SymbolAnnotation(mbgl::Point { pair.second, pair.first }, symbolAnnotation.icon.toStdString()) }; } else if (annotation.canConvert()) { QMapbox::LineAnnotation lineAnnotation = annotation.value(); - auto color = mbgl::Color::parse(lineAnnotation.color.name().toStdString()); + auto color = mbgl::Color::parse(mbgl::style::conversion::convertColor(lineAnnotation.color)); return { mbgl::LineAnnotation(asMapboxGLGeometry(lineAnnotation.geometry), lineAnnotation.opacity, lineAnnotation.width, { *color }) }; } else if (annotation.canConvert()) { QMapbox::FillAnnotation fillAnnotation = annotation.value(); - auto color = mbgl::Color::parse(fillAnnotation.color.name().toStdString()); + auto color = mbgl::Color::parse(mbgl::style::conversion::convertColor(fillAnnotation.color)); if (fillAnnotation.outlineColor.canConvert()) { - auto outlineColor = mbgl::Color::parse(fillAnnotation.outlineColor.value().name().toStdString()); + auto outlineColor = mbgl::Color::parse(mbgl::style::conversion::convertColor(fillAnnotation.outlineColor.value())); return { mbgl::FillAnnotation(asMapboxGLGeometry(fillAnnotation.geometry), fillAnnotation.opacity, { *color }, { *outlineColor }) }; } else { return { mbgl::FillAnnotation(asMapboxGLGeometry(fillAnnotation.geometry), fillAnnotation.opacity, { *color }, {}) }; diff --git a/platform/qt/src/qt_conversion.hpp b/platform/qt/src/qt_conversion.hpp index 6927f2510a..34d2dcce8e 100644 --- a/platform/qt/src/qt_conversion.hpp +++ b/platform/qt/src/qt_conversion.hpp @@ -13,6 +13,8 @@ namespace mbgl { namespace style { namespace conversion { +std::string convertColor(const QColor &color); + template <> class ConversionTraits { public: @@ -96,7 +98,7 @@ public: if (value.type() == QVariant::String) { return value.toString().toStdString(); } else if (value.type() == QVariant::Color) { - return value.value().name().toStdString(); + return convertColor(value.value()); } else { return {}; } @@ -108,7 +110,7 @@ public: } else if (value.type() == QVariant::String) { return { value.toString().toStdString() }; } else if (value.type() == QVariant::Color) { - return { value.value().name().toStdString() }; + return { convertColor(value.value()) }; } else if (value.type() == QVariant::Int) { return { int64_t(value.toInt()) }; } else if (value.canConvert(QVariant::Double)) { @@ -151,6 +153,11 @@ optional convert(const QVariant& value, Error& error, Args&&...args) { return convert(Convertible(value), error, std::forward(args)...); } +inline std::string convertColor(const QColor &color) { + return QString::asprintf("rgba(%d,%d,%d,%lf)", + color.red(), color.green(), color.blue(), color.alphaF()).toStdString(); +} + } // namespace conversion } // namespace style } // namespace mbgl -- cgit v1.2.1