|
|
|
@@ -530,10 +530,8 @@ private: |
|
|
|
out << data;
|
|
|
|
}
|
|
|
|
|
|
|
|
void createIconFile() const
|
|
|
|
void getIconImages (OwnedArray<Drawable>& images) const
|
|
|
|
{
|
|
|
|
OwnedArray<Drawable> images;
|
|
|
|
|
|
|
|
ScopedPointer<Drawable> bigIcon (getBigIcon());
|
|
|
|
if (bigIcon != nullptr)
|
|
|
|
images.add (bigIcon.release());
|
|
|
|
@@ -541,6 +539,35 @@ private: |
|
|
|
ScopedPointer<Drawable> smallIcon (getSmallIcon());
|
|
|
|
if (smallIcon != nullptr)
|
|
|
|
images.add (smallIcon.release());
|
|
|
|
}
|
|
|
|
|
|
|
|
void createiOSIconFiles (File appIconSet) const
|
|
|
|
{
|
|
|
|
const Array<AppIconType> types (getiOSAppIconTypes());
|
|
|
|
|
|
|
|
OwnedArray<Drawable> images;
|
|
|
|
getIconImages (images);
|
|
|
|
|
|
|
|
if (images.size() > 0)
|
|
|
|
{
|
|
|
|
for (int i = 0; i < types.size(); ++i)
|
|
|
|
{
|
|
|
|
const AppIconType type = types.getUnchecked(i);
|
|
|
|
const Image image (rescaleImageForIcon (*images.getFirst(), type.size));
|
|
|
|
|
|
|
|
MemoryOutputStream pngData;
|
|
|
|
PNGImageFormat pngFormat;
|
|
|
|
pngFormat.writeImageToStream (image, pngData);
|
|
|
|
|
|
|
|
overwriteFileIfDifferentOrThrow (appIconSet.getChildFile (type.filename), pngData);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void createIconFile() const
|
|
|
|
{
|
|
|
|
OwnedArray<Drawable> images;
|
|
|
|
getIconImages (images);
|
|
|
|
|
|
|
|
if (images.size() > 0)
|
|
|
|
{
|
|
|
|
@@ -1322,33 +1349,55 @@ private: |
|
|
|
return JSON::toString (var (v));
|
|
|
|
}
|
|
|
|
|
|
|
|
struct AppIconType
|
|
|
|
{
|
|
|
|
const char* idiom;
|
|
|
|
const char* sizeString;
|
|
|
|
const char* filename;
|
|
|
|
const char* scale;
|
|
|
|
const int size;
|
|
|
|
};
|
|
|
|
|
|
|
|
Array<AppIconType> getiOSAppIconTypes() const
|
|
|
|
{
|
|
|
|
Array<AppIconType> types;
|
|
|
|
|
|
|
|
types.add ({ "iphone", "29x29", "Icon-Small.png", "1x", 29 });
|
|
|
|
types.add ({ "iphone", "29x29", "Icon-Small@2x.png", "2x", 58 });
|
|
|
|
types.add ({ "iphone", "40x40", "Icon-Spotlight-40@2x.png", "2x", 80 });
|
|
|
|
types.add ({ "iphone", "57x57", "Icon.png", "1x", 57 });
|
|
|
|
types.add ({ "iphone", "57x57", "Icon@2x.png", "2x", 114 });
|
|
|
|
types.add ({ "iphone", "60x60", "Icon-60@2x.png", "2x", 120 });
|
|
|
|
types.add ({ "iphone", "60x60", "Icon-@3x.png", "3x", 180 });
|
|
|
|
types.add ({ "ipad", "29x29", "Icon-Small-1.png", "1x", 29 });
|
|
|
|
types.add ({ "ipad", "29x29", "Icon-Small@2x-1.png", "2x", 58 });
|
|
|
|
types.add ({ "ipad", "40x40", "Icon-Spotlight-40.png", "1x", 40 });
|
|
|
|
types.add ({ "ipad", "40x40", "Icon-Spotlight-40@2x-1.png", "2x", 80 });
|
|
|
|
types.add ({ "ipad", "50x50", "Icon-Small-50.png", "1x", 50 });
|
|
|
|
types.add ({ "ipad", "50x50", "Icon-Small-50@2x.png", "2x", 100 });
|
|
|
|
types.add ({ "ipad", "72x72", "Icon-72.png", "1x", 72 });
|
|
|
|
types.add ({ "ipad", "72x72", "Icon-72@2x.png", "2x", 144 });
|
|
|
|
types.add ({ "ipad", "76x76", "Icon-76.png", "1x", 76 });
|
|
|
|
types.add ({ "ipad", "76x76", "Icon-76@2x.png", "2x", 152 });
|
|
|
|
|
|
|
|
return types;
|
|
|
|
}
|
|
|
|
|
|
|
|
String getiOSAppIconContents() const
|
|
|
|
{
|
|
|
|
struct ImageType
|
|
|
|
{
|
|
|
|
const char* idiom;
|
|
|
|
const char* size;
|
|
|
|
const char* scale;
|
|
|
|
};
|
|
|
|
const Array<AppIconType> types = getiOSAppIconTypes();
|
|
|
|
|
|
|
|
const ImageType types[] = { { "iphone", "29x29", "2x" },
|
|
|
|
{ "iphone", "40x40", "2x" },
|
|
|
|
{ "iphone", "60x60", "2x" },
|
|
|
|
{ "iphone", "60x60", "3x" },
|
|
|
|
{ "ipad", "29x29", "1x" },
|
|
|
|
{ "ipad", "29x29", "2x" },
|
|
|
|
{ "ipad", "40x40", "1x" },
|
|
|
|
{ "ipad", "40x40", "2x" },
|
|
|
|
{ "ipad", "76x76", "1x" },
|
|
|
|
{ "ipad", "76x76", "2x" } };
|
|
|
|
var images;
|
|
|
|
|
|
|
|
for (size_t i = 0; i < sizeof (types) / sizeof (types[0]); ++i)
|
|
|
|
for (int i = 0; i < types.size(); ++i)
|
|
|
|
{
|
|
|
|
AppIconType type = types.getUnchecked(i);
|
|
|
|
|
|
|
|
DynamicObject::Ptr d = new DynamicObject();
|
|
|
|
d->setProperty ("idiom", types[i].idiom);
|
|
|
|
d->setProperty ("size", types[i].size);
|
|
|
|
d->setProperty ("scale", types[i].scale);
|
|
|
|
d->setProperty ("idiom", type.idiom);
|
|
|
|
d->setProperty ("size", type.sizeString);
|
|
|
|
d->setProperty ("filename", type.filename);
|
|
|
|
d->setProperty ("scale", type.scale);
|
|
|
|
images.append (var (d));
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -1391,7 +1440,9 @@ private: |
|
|
|
{
|
|
|
|
File assets (getTargetFolder().getChildFile (project.getProjectFilenameRoot()).getChildFile ("Images.xcassets"));
|
|
|
|
|
|
|
|
overwriteFileIfDifferentOrThrow (assets.getChildFile ("AppIcon.appiconset") .getChildFile ("Contents.json"), getiOSAppIconContents());
|
|
|
|
overwriteFileIfDifferentOrThrow (assets.getChildFile ("AppIcon.appiconset").getChildFile ("Contents.json"), getiOSAppIconContents());
|
|
|
|
createiOSIconFiles (assets.getChildFile ("AppIcon.appiconset"));
|
|
|
|
|
|
|
|
overwriteFileIfDifferentOrThrow (assets.getChildFile ("LaunchImage.launchimage").getChildFile ("Contents.json"), getiOSLaunchImageContents());
|
|
|
|
|
|
|
|
RelativePath assetsPath (assets, getTargetFolder(), RelativePath::buildTargetFolder);
|
|
|
|
|