mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-21 06:45:39 -06:00
ide: Now generating cocoa .app bundle iconset
git-svn-id: svn://ultimatepp.org/upp/trunk@12614 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
b20eaf3a40
commit
5c89fe1768
5 changed files with 98 additions and 26 deletions
88
uppsrc/ide/Builders/Cocoa.cpp
Normal file
88
uppsrc/ide/Builders/Cocoa.cpp
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
#include "Builders.h"
|
||||
#include <Draw/Draw.h>
|
||||
#include <plugin/png/png.h>
|
||||
|
||||
void GccBuilder::CocoaAppBundle()
|
||||
{
|
||||
if(!HasFlag("OSX") || !HasFlag("GUI"))
|
||||
return;
|
||||
|
||||
String icns = GetFileFolder(GetFileFolder(target)) + "/Resources/icons.icns";
|
||||
RealizePath(icns);
|
||||
Time icns_tm = Nvl(GetFileTime(icns), Time::Low());
|
||||
bool convert_icons = false;
|
||||
|
||||
SortedVectorMap<int, Image> imgs;
|
||||
for(FindFile ff(PackageDirectory(mainpackage) + "/icon*.png"); ff; ff.Next()) {
|
||||
Image m = StreamRaster::LoadFileAny(ff.GetPath());
|
||||
Size sz = m.GetSize();
|
||||
if(sz.cx == sz.cy) {
|
||||
imgs.Add(sz.cx, m);
|
||||
PutVerbose("Found icon " << ff.GetName());
|
||||
if((Time)ff.GetLastWriteTime() >= icns_tm)
|
||||
convert_icons = true;
|
||||
}
|
||||
}
|
||||
if(imgs.GetCount() && convert_icons) {
|
||||
String icons = AppendFileName(outdir, "icons.iconset");
|
||||
RealizeDir(icons);
|
||||
PutConsole("Exporting bundle icons to " + icons);
|
||||
|
||||
bool icons_dirty = false;
|
||||
|
||||
for(String fn : {
|
||||
"icon_16x16.png",
|
||||
"icon_16x16@2x.png",
|
||||
"icon_32x32.png",
|
||||
"icon_32x32@2x.png",
|
||||
"icon_128x128.png",
|
||||
"icon_128x128@2x.png",
|
||||
"icon_256x256.png",
|
||||
"icon_256x256@2x.png",
|
||||
"icon_512x512.png",
|
||||
"icon_512x512@2x.png",
|
||||
}) {
|
||||
int n = atoi(~fn + strlen("icon_"));
|
||||
if(fn.Find("@2x") >= 0)
|
||||
n *= 2;
|
||||
int q = imgs.FindLowerBound(n);
|
||||
Image img = q >= 0 && q < imgs.GetCount() ? imgs[q] : imgs[imgs.GetCount() - 1];
|
||||
PutVerbose(String() << "Exporting " << fn << " from "
|
||||
<< img.GetSize().cx << "x" << img.GetSize().cx);
|
||||
PNGEncoder().SaveFile(AppendFileName(icons, fn), Rescale(img, n, n));
|
||||
}
|
||||
|
||||
Execute(String() << "iconutil --convert icns --output " << icns << " " << icons);
|
||||
}
|
||||
|
||||
if(IsNull(Info_plist)) {
|
||||
Info_plist
|
||||
<< "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||
<< "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
|
||||
<< "<plist version=\"1.0\">\n"
|
||||
<< "<dict>\n"
|
||||
<< " <key>CFBundleExecutable</key>\n"
|
||||
<< " <string>" << GetFileName(target) << "</string>\n"
|
||||
<< " <key>NSHighResolutionCapable</key>\n"
|
||||
<< " <string>True</string>\n"
|
||||
<< " <key>LSMinimumSystemVersion</key>\n"
|
||||
<< " <string>10.13</string>\n"
|
||||
;
|
||||
if(imgs.GetCount())
|
||||
Info_plist
|
||||
<< " <key>CFBundleIconFile</key>\n"
|
||||
<< " <string>icons.icns</string>\n"
|
||||
;
|
||||
Info_plist
|
||||
<< "</dict>\n"
|
||||
<< "</plist>\n"
|
||||
;
|
||||
}
|
||||
String Info_plist_path = GetFileFolder(GetFileFolder(target)) + "/Info.plist";
|
||||
if(LoadFile(Info_plist_path) != Info_plist) {
|
||||
if(FileExists(Info_plist_path))
|
||||
Execute("defaults delete " + Info_plist_path); // Force MacOS to reload plist
|
||||
SaveFile(Info_plist_path, Info_plist);
|
||||
PutConsole("Saving " << Info_plist_path);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue