const QPalette *QAndroidPlatformTheme::palette(Palette type) const { if (m_androidStyleData) { auto it = m_androidStyleData->m_palettes.find(paletteType(type)); if (it != m_androidStyleData->m_palettes.end()) return &(it.value()); } return &m_defaultPalette; }
static std::shared_ptr<AndroidStyle> loadAndroidStyle(QPalette *defaultPalette) { std::shared_ptr<AndroidStyle> style(new AndroidStyle); style->m_styleData = AndroidStyle::loadStyleData(); if (style->m_styleData.isEmpty()) return std::shared_ptr<AndroidStyle>(); for (QJsonObject::const_iterator objectIterator = style->m_styleData.constBegin(); objectIterator != style->m_styleData.constEnd(); ++objectIterator) { QString key = objectIterator.key(); QJsonValue value = objectIterator.value(); if (!value.isObject()) { qWarning("Style.json structure is unrecognized."); continue; } QJsonObject item = value.toObject(); QJsonObject::const_iterator attributeIterator = item.find(QLatin1String("qtClass")); QByteArray qtClassName; if (attributeIterator != item.constEnd()) { // The item has palette and font information for a specific Qt Class (e.g. QWidget, QPushButton, etc.) qtClassName = attributeIterator.value().toString().toLatin1(); } const int ft = fontType(key); if (ft > -1 || !qtClassName.isEmpty()) { // Extract font information QFont font; // Font size (in pixels) attributeIterator = item.find(QLatin1String("TextAppearance_textSize")); if (attributeIterator != item.constEnd()) font.setPixelSize(int(attributeIterator.value().toDouble())); // Font style attributeIterator = item.find(QLatin1String("TextAppearance_textStyle")); if (attributeIterator != item.constEnd()) { const int style = int(attributeIterator.value().toDouble()); font.setBold(style & textStyle_bold); font.setItalic(style & textStyle_italic); } // Font typeface attributeIterator = item.find(QLatin1String("TextAppearance_typeface")); if (attributeIterator != item.constEnd()) { QFont::StyleHint styleHint = QFont::AnyStyle; switch (int(attributeIterator.value().toDouble())) { case typeface_sans: styleHint = QFont::SansSerif; break; case typeface_serif: styleHint = QFont::Serif; break; case typeface_monospace: styleHint = QFont::Monospace; break; } font.setStyleHint(styleHint, QFont::PreferMatch); } if (!qtClassName.isEmpty()) style->m_QWidgetsFonts.insert(qtClassName, font); if (ft > -1) { style->m_fonts.insert(ft, font); if (ft == QPlatformTheme::SystemFont) QGuiApplication::setFont(font); } // Extract font information } const int pt = paletteType(key); if (pt > -1 || !qtClassName.isEmpty()) { // Extract palette information QPalette palette = *defaultPalette; attributeIterator = item.find(QLatin1String("defaultTextColorPrimary")); if (attributeIterator != item.constEnd()) palette.setColor(QPalette::WindowText, QRgb(int(attributeIterator.value().toDouble()))); attributeIterator = item.find(QLatin1String("defaultBackgroundColor")); if (attributeIterator != item.constEnd()) palette.setColor(QPalette::Background, QRgb(int(attributeIterator.value().toDouble()))); attributeIterator = item.find(QLatin1String("TextAppearance_textColor")); if (attributeIterator != item.constEnd()) setPaletteColor(attributeIterator.value().toObject().toVariantMap(), palette, QPalette::WindowText); attributeIterator = item.find(QLatin1String("TextAppearance_textColorLink")); if (attributeIterator != item.constEnd()) setPaletteColor(attributeIterator.value().toObject().toVariantMap(), palette, QPalette::Link); attributeIterator = item.find(QLatin1String("TextAppearance_textColorHighlight")); if (attributeIterator != item.constEnd()) palette.setColor(QPalette::Highlight, QRgb(int(attributeIterator.value().toDouble()))); if (pt == QPlatformTheme::SystemPalette) *defaultPalette = style->m_standardPalette = palette; if (pt > -1) style->m_palettes.insert(pt, palette); // Extract palette information } } return style; }
const QPalette *QAndroidPlatformTheme::palette(Palette type) const { QHash<int, QPalette>::const_iterator it = m_androidPlatformNativeInterface->m_palettes.find(paletteType(type)); if (it != m_androidPlatformNativeInterface->m_palettes.end()) return &(it.value()); return 0; }