Add support for Android xhdpi, xxhdpi and xxxhdpi icons format

Current Android Qt Creator plugin allow to convert a single
icon to the basic format ldpi, mdpi and hdpi. However Android
guidelines require to add xhdpi, xxhdpi and xxxhdpi icons
size also. This patch add conversion of the master icon to
these additional formats

Change-Id: Ie330d6ac146194eb06e6e8896b3af85b6bdab492
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
This commit is contained in:
Fabio Falsini
2020-09-23 17:55:52 +02:00
parent 950aa580ab
commit e6a0babab6
2 changed files with 45 additions and 4 deletions

View File

@@ -35,6 +35,9 @@ namespace Android {
namespace Internal { namespace Internal {
namespace { namespace {
const QString extraExtraExtraHighDpiIconPath = QLatin1String("/res/drawable-xxxhdpi/");
const QString extraExtraHighDpiIconPath = QLatin1String("/res/drawable-xxhdpi/");
const QString extraHighDpiIconPath = QLatin1String("/res/drawable-xhdpi/");
const QString highDpiIconPath = QLatin1String("/res/drawable-hdpi/"); const QString highDpiIconPath = QLatin1String("/res/drawable-hdpi/");
const QString mediumDpiIconPath = QLatin1String("/res/drawable-mdpi/"); const QString mediumDpiIconPath = QLatin1String("/res/drawable-mdpi/");
const QString lowDpiIconPath = QLatin1String("/res/drawable-ldpi/"); const QString lowDpiIconPath = QLatin1String("/res/drawable-ldpi/");
@@ -42,6 +45,9 @@ const QString imageSuffix = QLatin1String(".png");
const QSize lowDpiIconSize{32, 32}; const QSize lowDpiIconSize{32, 32};
const QSize mediumDpiIconSize{48, 48}; const QSize mediumDpiIconSize{48, 48};
const QSize highDpiIconSize{72, 72}; const QSize highDpiIconSize{72, 72};
const QSize extraHighDpiIconSize{96, 96};
const QSize extraExtraHighDpiIconSize{144, 144};
const QSize extraExtraExtraHighDpiIconSize{192, 192};
} }
AndroidManifestEditorIconContainerWidget::AndroidManifestEditorIconContainerWidget( AndroidManifestEditorIconContainerWidget::AndroidManifestEditorIconContainerWidget(
@@ -69,7 +75,7 @@ AndroidManifestEditorIconContainerWidget::AndroidManifestEditorIconContainerWidg
auto lIconButton = new AndroidManifestEditorIconWidget(this, auto lIconButton = new AndroidManifestEditorIconWidget(this,
lowDpiIconSize, lowDpiIconSize,
lowDpiIconSize, lowDpiIconSize,
tr("Low DPI icon"), tr("Select low DPI icon."), tr("LDPI icon"), tr("Select an icon suitable for low-density (ldpi) screens (~120dpi)."),
textEditorWidget, textEditorWidget,
lowDpiIconPath, lowDpiIconPath,
iconFileName); iconFileName);
@@ -80,7 +86,7 @@ AndroidManifestEditorIconContainerWidget::AndroidManifestEditorIconContainerWidg
auto mIconButton = new AndroidManifestEditorIconWidget(this, auto mIconButton = new AndroidManifestEditorIconWidget(this,
mediumDpiIconSize, mediumDpiIconSize,
mediumDpiIconSize, mediumDpiIconSize,
tr("Medium DPI icon"), tr("Select medium DPI icon."), tr("MDPI icon"), tr("Select an icon for medium-density (mdpi) screens (~160dpi)."),
textEditorWidget, textEditorWidget,
mediumDpiIconPath, mediumDpiIconPath,
iconFileName); iconFileName);
@@ -91,13 +97,46 @@ AndroidManifestEditorIconContainerWidget::AndroidManifestEditorIconContainerWidg
auto hIconButton = new AndroidManifestEditorIconWidget(this, auto hIconButton = new AndroidManifestEditorIconWidget(this,
highDpiIconSize, highDpiIconSize,
highDpiIconSize, highDpiIconSize,
tr("High DPI icon"), tr("Select high DPI icon."), tr("HDPI icon"), tr("Select an icon for high-density (hdpi) screens (~240dpi)."),
textEditorWidget, textEditorWidget,
highDpiIconPath, highDpiIconPath,
iconFileName); iconFileName);
iconLayout->addWidget(hIconButton); iconLayout->addWidget(hIconButton);
m_iconButtons.push_back(hIconButton); m_iconButtons.push_back(hIconButton);
iconLayout->addStretch(6); iconLayout->addStretch(1);
auto xhIconButton = new AndroidManifestEditorIconWidget(this,
extraHighDpiIconSize,
extraHighDpiIconSize,
tr("XHDPI icon"), tr("Select an icon for extra-high-density (xhdpi) screens (~320dpi)."),
textEditorWidget,
extraHighDpiIconPath,
iconFileName);
iconLayout->addWidget(xhIconButton);
m_iconButtons.push_back(xhIconButton);
iconLayout->addStretch(1);
auto xxhIconButton = new AndroidManifestEditorIconWidget(this,
extraExtraHighDpiIconSize,
extraExtraHighDpiIconSize,
tr("XXHDPI icon"), tr("Select an icon for extra-extra-high-density (xxhdpi) screens (~480dpi)."),
textEditorWidget,
extraExtraHighDpiIconPath,
iconFileName);
iconLayout->addWidget(xxhIconButton);
m_iconButtons.push_back(xxhIconButton);
iconLayout->addStretch(1);
auto xxxhIconButton = new AndroidManifestEditorIconWidget(this,
extraExtraExtraHighDpiIconSize,
extraExtraExtraHighDpiIconSize,
tr("XXXHDPI icon"), tr("Select an icon for extra-extra-extra-high-density (xxxhdpi) screens (~640dpi)."),
textEditorWidget,
extraExtraExtraHighDpiIconPath,
iconFileName);
iconLayout->addWidget(xxxhIconButton);
m_iconButtons.push_back(xxxhIconButton);
iconLayout->addStretch(3);
for (auto &&iconButton : m_iconButtons) { for (auto &&iconButton : m_iconButtons) {
connect(masterIconButton, &AndroidManifestEditorIconWidget::iconSelected, connect(masterIconButton, &AndroidManifestEditorIconWidget::iconSelected,

View File

@@ -93,6 +93,7 @@ AndroidManifestEditorIconWidget::AndroidManifestEditorIconWidget(
auto label = new QLabel(tr("Click to select..."), parent); auto label = new QLabel(tr("Click to select..."), parent);
iconLayout->addWidget(iconTitle); iconLayout->addWidget(iconTitle);
iconLayout->setAlignment(iconTitle, Qt::AlignHCenter); iconLayout->setAlignment(iconTitle, Qt::AlignHCenter);
iconLayout->addStretch(50);
iconButtonLayout->setColumnMinimumWidth(0, 16); iconButtonLayout->setColumnMinimumWidth(0, 16);
iconButtonLayout->addWidget(m_button, 0, 1, 1, 3); iconButtonLayout->addWidget(m_button, 0, 1, 1, 3);
iconButtonLayout->setAlignment(m_button, Qt::AlignVCenter); iconButtonLayout->setAlignment(m_button, Qt::AlignVCenter);
@@ -106,6 +107,7 @@ AndroidManifestEditorIconWidget::AndroidManifestEditorIconWidget(
} }
iconLayout->addLayout(iconButtonLayout); iconLayout->addLayout(iconButtonLayout);
iconLayout->setAlignment(iconButtonLayout, Qt::AlignHCenter); iconLayout->setAlignment(iconButtonLayout, Qt::AlignHCenter);
iconLayout->addStretch(50);
iconLayout->addWidget(label); iconLayout->addWidget(label);
iconLayout->setAlignment(label, Qt::AlignHCenter); iconLayout->setAlignment(label, Qt::AlignHCenter);
this->setLayout(iconLayout); this->setLayout(iconLayout);