diff --git a/gdrexport/ExportCommon.cpp b/gdrexport/ExportCommon.cpp
index 74faa541c..4302d56c3 100644
--- a/gdrexport/ExportCommon.cpp
+++ b/gdrexport/ExportCommon.cpp
@@ -111,7 +111,7 @@ void ExportCommon::resizeImage(QImage *image, int width, int height,
}
if (!withAlpha)
xform=xform.convertToFormat(QImage::Format_RGB888);
- xform.save(output, "png", quality);
+ xform.save(output, "png", -1); //Use default compression for PNG, not quality
}
bool ExportCommon::appIcon(ExportContext *ctx, int width, int height,
diff --git a/plugins/ads/ads.gplugin b/plugins/ads/ads.gplugin
index 186df55f4..7815ff6e9 100644
--- a/plugins/ads/ads.gplugin
+++ b/plugins/ads/ads.gplugin
@@ -199,144 +199,37 @@
+
[[[local.adsfwd]]]
-
-
-
- /* End PBXFileReference section */
- "; };
- EB0FCB9B1DB651890048AD30 /* ads.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ads.mm; sourceTree = ""; };
- EB0FCB9C1DB651890048AD30 /* adsbinder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = adsbinder.cpp; sourceTree = ""; };
- EB0FCB9D1DB651890048AD30 /* AdsClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdsClass.h; sourceTree = ""; };
- EB0FCB9E1DB651890048AD30 /* AdsClass.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AdsClass.mm; sourceTree = ""; };
- EB0FCB9F1DB651890048AD30 /* AdsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdsManager.h; sourceTree = ""; };
- EB0FCBA01DB651890048AD30 /* AdsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdsManager.m; sourceTree = ""; };
- EB0FCBA11DB651890048AD30 /* AdsProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdsProtocol.h; sourceTree = ""; };
- EB0FCBA21DB651890048AD30 /* AdsState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdsState.h; sourceTree = ""; };
- EB0FCBA31DB651890048AD30 /* AdsState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdsState.m; sourceTree = ""; };
- EB0FCBA41DB651890048AD30 /* AdsStateChangeListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdsStateChangeListener.h; sourceTree = ""; };
- EB0FCBA51DB651890048AD30 /* AdsStateChangeListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdsStateChangeListener.m; sourceTree = ""; };
- EB0FCCB91DB6518A0048AD30 /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = ""; };
- EB0FCCBA1DB6518A0048AD30 /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = ""; };
-
- EB0FCB991DB651890048AD30 /* Ads */ = {
- isa = PBXGroup;
- children = (
- EB0FCB9A1DB651890048AD30 /* ads.h */,
- EB0FCB9B1DB651890048AD30 /* ads.mm */,
- EB0FCB9C1DB651890048AD30 /* adsbinder.cpp */,
- EB0FCB9D1DB651890048AD30 /* AdsClass.h */,
- EB0FCB9E1DB651890048AD30 /* AdsClass.mm */,
- EB0FCB9F1DB651890048AD30 /* AdsManager.h */,
- EB0FCBA01DB651890048AD30 /* AdsManager.m */,
- EB0FCBA11DB651890048AD30 /* AdsProtocol.h */,
- EB0FCBA21DB651890048AD30 /* AdsState.h */,
- EB0FCBA31DB651890048AD30 /* AdsState.m */,
- EB0FCBA41DB651890048AD30 /* AdsStateChangeListener.h */,
- EB0FCBA51DB651890048AD30 /* AdsStateChangeListener.m */,
- EB0FCBA61DB651890048AD30 /* frameworks */,
- EB0FCCB91DB6518A0048AD30 /* Reachability.h */,
- EB0FCCBA1DB6518A0048AD30 /* Reachability.m */,
- );
- name = Ads;
- path = Plugins/Ads;
- sourceTree = "";
- };
- EB0FCBA61DB651890048AD30 /* frameworks */ = {
- isa = PBXGroup;
- children = (
- /* ADS-FRAMEWORKS */
- );
- path = frameworks;
- sourceTree = "";
- };
-
- ]]>
-
-
- EB42A05D1D66ED5000766D7E /* plugins.cpp */,
-
-
-
- EB42A05E1D66ED5000766D7E /* plugins.cpp in Sources */,
-
-
-
- FRAMEWORK_SEARCH_PATHS = (
-
-
-
-
-
+
+
-
-
-
- /* End PBXFileReference section */
- "; };
- EB0FCBC11DB6518A0048AD30 /* AdsUnity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdsUnity.m; sourceTree = ""; };
- EB0FCCAF1DB6518A0048AD30 /* UnityAds.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UnityAds.framework; sourceTree = ""; };
- ]]>
-
-
- /* ADS-FRAMEWORKS */
-
-
-
- EB42A05E1D66ED5000766D7E /* plugins.cpp in Sources */,
-
-
-
- 5FD896EC15CED77F00D34824 /* UIKit.framework in Frameworks */,
-
-
-
-
- 5FD896EB15CED77F00D34824 /* UIKit.framework in Frameworks */,
-
-
-
-
-
+
\ No newline at end of file
diff --git a/plugins/ads/ads.install.lua b/plugins/ads/ads.install.lua
deleted file mode 100644
index 390f185d3..000000000
--- a/plugins/ads/ads.install.lua
+++ /dev/null
@@ -1,168 +0,0 @@
-function string.starts(String,Start)
- return string.sub(String,1,string.len(Start))==Start
-end
-
-function string.ends(String,End)
- return End=='' or string.sub(String,-string.len(End))==End
-end
-
-iOSProject={
- id=0
-}
-
-iOSProject.insertPoints={
- Refs={ tag="/* End PBXFileReference section */", type="prepend", data={}},
- -- Groups and tree structure
- GroupPlugins_ios={ tag="EB42A05D1D66ED5000766D7E /* plugins.cpp */,", data={}},
- GroupPlugins_atv={ tag="EB42A0601D674BCB00766D7E /* plugins.cpp */,", data={}},
- GroupFrameworks={ tag="5FD896EB15CED77F00D34824 /* UIKit.framework */,", data={}},
- -- Build refs
- Frameworks_ios={ tag="5FD896EC15CED77F00D34824 /* UIKit.framework in Frameworks */,", data={}},
- Frameworks_atv={ tag="B2E3EFD61BAC117B005599BD /* UIKit.framework in Frameworks */,", data={}},
- SourceBuild_ios={ tag="EB42A05E1D66ED5000766D7E /* plugins.cpp in Sources */,", data={}},
- SourceBuild_atv={ tag="EB42A0611D674BCB00766D7E /* plugins.cpp in Sources */,", data={}},
- --Paths
- FrameworksPaths={ tag="FRAMEWORK_SEARCH_PATHS = (", data={}},
-}
-iOSProject.XML_TEMPLATE=
- [[%s]]
-iOSProject.XML_PREPEND="%s"
-iOSProject.XML_APPEND="%s"
-
-iOSProject.newId=function()
- local id=string.format("%08x1111000000000000",iOSProject.id)
- iOSProject.id=iOSProject.id+1
- return id
-end
-
-iOSProject.insertData=function(section,line)
- table.insert(iOSProject.insertPoints[section].data,line)
-end
-
-iOSProject.commit=function()
- local rep=""
- for _,p in ipairs(iOSProject.insertPoints) do
- if #p.data>0 then
- local tmpXml=iOSProject.XML_APPEND
- if p.type=="prepend" then tmpXml=iOSProject.XML_PREPEND end
- rep=rep..tmpXml:format(p.tag,table.concat(p.data,""))
- p.data={}
- end
- end
- if #rep>0 then
- rep=iOSProject.XML_TEMPLATE:format(rep)
- Export.callXml(rep)
- end
-end
-
-iOSProject.addReference=function(filename,filetype)
- if filetype==nil then
- if filename:ends(".m") then
- filetype="sourcecode.c.objc"
- elseif filename:ends(".h") then
- filetype="sourcecode.c.h"
- elseif filename:ends(".c") then
- filetype="sourcecode.c.c"
- elseif filename:ends(".framework") then
- filetype="wrapper.framework"
- elseif filename:ends(".cpp") then
- filetype="sourcecode.cpp.cpp"
- elseif filename:ends(".mm") then
- filetype="sourcecode.cpp.objcpp"
- elseif filename:ends(".dylib") then
- filetype="compiled.mach-o.dylib"
- elseif filename:ends(".a") then
- filetype="archive.ar"
- elseif filename:ends(".plist") then
- filetype="text.plist.xml"
- elseif filename:ends(".strings") then
- filetype="text.plist.strings"
- elseif filename:ends(".png") then
- filetype"image.png"
- else
- filetype="text"
- end
- end
- local refid=iOSProject.newId()
- local refline=
- ("%s /* %s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = %s; path = %s; sourceTree = \"\"; };\n")
- :format(refid,filename,filetype,filename)
- iOSProject.insertData("Refs",refline)
- return refid
-end
-
-iOSProject.addSource=function(filename,filetype)
- local refid=iOSProject.addReference(filename,filetype)
- local fileid=iOSProject.newId()
- local refline=
- ("%s /* %s */ = {isa = PBXBuildFile; fileRef = %s /* %s */; };\n")
- :format(fileid,filename,refid,filename)
- iOSProject.insertData("Refs",refline)
- return refid,fileid
-end
-
-iOSProject.addFramework=function(filename,flavor)
- flavor=flavor or "ios"
- local refid=iOSProject.addReference(filename)
- local refline=
- ("%s /* %s */,\n")
- :format(refid,filename)
- iOSProject.insertData("Frameworks_"..flavor,refline)
- return refid
-end
-
-iOSProject.addGroup=function(foldername,publicname,dest)
- local refid=iOSProject.addReference(foldername)
- local refline=
- ("%s /* %s */ = {isa = PBXGroup; children = (\n/* GIDEXP-GRP-%s */\n); path = %s; sourceTree = \"\"; };\n")
- :format(refid,foldername,refid,foldername)
- iOSProject.insertData("Refs",refline)
- publicname=publicname or refid
- iOSProject.insertPoints[publicname]={ tag=("/* GIDEXP-GRP-%s */"):format(refid), data={}}
- if dest then
- iOSProject.addToGroup(dest,refid)
- end
- return refid
-end
-
-iOSProject.addToGroup=function(groupname,refid)
- local refline=("%s,\n"):format(refid)
- iOSProject.insertData(groupname,refline)
-end
-
-iOSProject.addSources=function(srcs,dest,flavor)
- flavor=flavor or "ios"
- for _,s in srcs do
- if s:ends(".m") or s:ends(".mm") or s:ends(".c") or s:ends(".cpp") then --Source
- local sref,bref=iOSProject.addSource(s)
- iOSProject.addToGroup(dest.."_"..flavor,sref)
- iOSProject.addToGroup("SourceBuild_"..flavor,bref)
- elseif s:ends(".framework") then
- local sref=iOSProject.addFramework(s,flavor)
- iOSProject.addToGroup(dest,sref)
- else
- local sref=iOSProject.addReference(s)
- iOSProject.addToGroup(dest,sref)
- end
- end
-end
-
-iOSProject.addFrameworkPath=function(path)
- local refline=("\"$(PROJECT_DIR)/%s\",\n"):format(path)
- iOSProject.insertData("FrameworksPaths",refline)
-end
-
---ADS
-iOSProject.addGroup("Ads","GroupAds_ios","GroupPlugins_ios")
-iOSProject.addGroup("frameworks","GroupAdsFrameworks_ios","GroupAds_ios")
-iOSProject.addGroup("Ads","GroupAds_atv","GroupPlugins_atv")
-iOSProject.addGroup("frameworks","GroupAdsFrameworks_atv","GroupAds_atv")
-
-iOSProject.addSources({
- "ads.mm","adsbinder.cpp","AdsClass.mm","AdsManager.m","AdsState.m",
- "AdsStateChangeListener.m","Reachability.m",
- "ads.h","AdsClass.h","AdsManager.h","AdsProtocol.h","AdsState.h","AdsStateChangeListener.h","Reachability.h"
-},
-"GroupAds","ios")
-iOSProject.addFrameworkPath(Export.getProperty("project.namews").."/Plugins/Ads/frameworks")
-iOSProject.commit()
diff --git a/ui/Tools/export_init.lua b/ui/Tools/export_init.lua
index f43a2d702..f8b483619 100644
--- a/ui/Tools/export_init.lua
+++ b/ui/Tools/export_init.lua
@@ -1,3 +1,13 @@
--[[
Called before the first LUA tag of a .gplugin or .gexport file
+Includes generic routines for export system
]]
+
+function string.starts(String,Start)
+return string.sub(String,1,string.len(Start))==Start
+end
+
+function string.ends(String,End)
+return End=='' or string.sub(String,-string.len(End))==End
+end
+
diff --git a/ui/Tools/export_ios.lua b/ui/Tools/export_ios.lua
new file mode 100644
index 000000000..6bdc62a7b
--- /dev/null
+++ b/ui/Tools/export_ios.lua
@@ -0,0 +1,165 @@
+--[[
+iOS project file tooling
+]]
+
+iOSProject={
+id=0
+}
+
+iOSProject.insertPoints={
+Refs={ tag="/* End PBXFileReference section */", type="prepend", data={}},
+-- Groups and tree structure
+GroupPlugins_ios={ tag="EB42A05D1D66ED5000766D7E /* plugins.cpp */,", data={}},
+GroupPlugins_atv={ tag="EB42A0601D674BCB00766D7E /* plugins.cpp */,", data={}},
+GroupFrameworks={ tag="5FD896EB15CED77F00D34824 /* UIKit.framework */,", data={}},
+-- Build refs
+Frameworks_ios={ tag="5FD896EC15CED77F00D34824 /* UIKit.framework in Frameworks */,", data={}},
+Frameworks_atv={ tag="B2E3EFD61BAC117B005599BD /* UIKit.framework in Frameworks */,", data={}},
+SourceBuild_ios={ tag="EB42A05E1D66ED5000766D7E /* plugins.cpp in Sources */,", data={}},
+SourceBuild_atv={ tag="EB42A0611D674BCB00766D7E /* plugins.cpp in Sources */,", data={}},
+--Paths
+FrameworksPaths={ tag="FRAMEWORK_SEARCH_PATHS = (", data={}},
+}
+iOSProject.XML_TEMPLATE=
+[[%s]]
+iOSProject.XML_PREPEND="%s"
+iOSProject.XML_APPEND="%s"
+
+iOSProject.newId=function()
+local id=string.format("%08x1111000000000000",iOSProject.id)
+iOSProject.id=iOSProject.id+1
+return id
+end
+
+iOSProject.insertData=function(section,line)
+print("insertData",section,line)
+table.insert(iOSProject.insertPoints[section].data,line)
+end
+
+iOSProject.commit=function()
+local rep=""
+local korder={}
+for k,v in pairs(iOSProject.insertPoints) do table.insert(korder,{ key=k, order=v.order or 0}) end
+table.sort(korder,function (a,b) return a.order0 then
+local tmpXml=iOSProject.XML_APPEND
+if p.type=="prepend" then tmpXml=iOSProject.XML_PREPEND end
+rep=rep..tmpXml:format(p.tag,table.concat(p.data,""))
+p.data={}
+end
+end
+if #rep>0 then
+rep=iOSProject.XML_TEMPLATE:format(rep)
+print("XML",rep)
+Export.callXml(rep)
+end
+end
+
+iOSProject.addReference=function(filename,filetype)
+if filetype==nil then
+if filename:ends(".m") then
+filetype="sourcecode.c.objc"
+elseif filename:ends(".h") then
+filetype="sourcecode.c.h"
+elseif filename:ends(".c") then
+filetype="sourcecode.c.c"
+elseif filename:ends(".framework") then
+filetype="wrapper.framework"
+elseif filename:ends(".cpp") then
+filetype="sourcecode.cpp.cpp"
+elseif filename:ends(".mm") then
+filetype="sourcecode.cpp.objcpp"
+elseif filename:ends(".dylib") then
+filetype="compiled.mach-o.dylib"
+elseif filename:ends(".a") then
+filetype="archive.ar"
+elseif filename:ends(".plist") then
+filetype="text.plist.xml"
+elseif filename:ends(".strings") then
+filetype="text.plist.strings"
+elseif filename:ends(".png") then
+filetype"image.png"
+else
+filetype="text"
+end
+end
+local refid=iOSProject.newId()
+local refline=
+("%s /* %s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = %s; path = %s; sourceTree = \"\"; };\n")
+:format(refid,filename,filetype,filename)
+iOSProject.insertData("Refs",refline)
+return refid
+end
+
+iOSProject.addSource=function(filename,filetype)
+print("addSource",filename)
+local refid=iOSProject.addReference(filename,filetype)
+local fileid=iOSProject.newId()
+local refline=
+("%s /* %s */ = {isa = PBXBuildFile; fileRef = %s /* %s */; };\n")
+:format(fileid,filename,refid,filename)
+iOSProject.insertData("Refs",refline)
+return refid,fileid
+end
+
+iOSProject.addFramework=function(filename,flavor)
+flavor=flavor or "ios"
+print("addFramework",filename,flavor)
+local refid,fileid=iOSProject.addSource(filename)
+local refline=
+("%s /* %s */,\n")
+:format(fileid,filename)
+iOSProject.insertData("Frameworks_"..flavor,refline)
+return refid,fileid
+end
+
+iOSProject.addGroup=function(foldername,path,publicname,dest)
+print("addGroup",foldername,publicname,dest)
+local refid=iOSProject.newId()
+local refline=
+("%s /* %s */ = {isa = PBXGroup; children = (\n/* GIDEXP-GRP-%s */\n); name = %s; path = %s; sourceTree = \"\"; };\n")
+:format(refid,foldername,refid,foldername, path)
+iOSProject.insertData("Refs",refline)
+publicname=publicname or refid
+iOSProject.insertPoints[publicname]={ order=iOSProject.id, tag=("/* GIDEXP-GRP-%s */"):format(refid), data={}}
+if dest then
+iOSProject.addToGroup(dest,refid)
+end
+return refid
+end
+
+iOSProject.addToGroup=function(groupname,refid,flavor)
+flavor=flavor or "ios"
+local refline=("%s,\n"):format(refid)
+if iOSProject.insertPoints[groupname.."_"..flavor] then
+groupname=groupname.."_"..flavor
+end
+assert(iOSProject.insertPoints[groupname],"Error: group "..groupname.." is not defined (yet)")
+iOSProject.insertData(groupname,refline)
+end
+
+iOSProject.addSources=function(srcs,dest,flavor)
+flavor=flavor or "ios"
+for _,s in ipairs(srcs) do
+if s:ends(".m") or s:ends(".mm") or s:ends(".c") or s:ends(".cpp") then --Source
+local sref,bref=iOSProject.addSource(s)
+iOSProject.addToGroup(dest,sref,flavor)
+iOSProject.addToGroup("SourceBuild",bref,flavor)
+elseif s:ends(".framework") then
+local sref=iOSProject.addFramework(s,flavor)
+iOSProject.addToGroup(dest,sref,flavor)
+else
+local sref=iOSProject.addReference(s)
+iOSProject.addToGroup(dest,sref,flavor)
+end
+end
+end
+
+iOSProject.addFrameworkPath=function(path)
+local refline=("\"$(PROJECT_DIR)/%s\",\n"):format(path)
+iOSProject.insertData("FrameworksPaths",refline)
+end
+
+return iOSProject