-fixed bug in Button now exporting font property
-made GUI Theme editor usable -editor does not allow to export or create .pck in the same path as a project -changed .pck format (lacked support for versioning so couldn't change it), previous was causing crashes and is now incompatible, just re-export. -will not look for .pck files recursively, was causing unexpected behaviors -fixed execution of Godot in paths with non unicode characters in Windows, OSX and Linux.
This commit is contained in:
parent
b0870e487c
commit
9afdb3e0ad
30 changed files with 107728 additions and 88050 deletions
|
@ -319,11 +319,13 @@ Error Globals::setup(const String& p_path) {
|
||||||
String candidate = d->get_current_dir();
|
String candidate = d->get_current_dir();
|
||||||
String current_dir = d->get_current_dir();
|
String current_dir = d->get_current_dir();
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
bool first_time=true;
|
||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
//try to load settings in ascending through dirs shape!
|
//try to load settings in ascending through dirs shape!
|
||||||
|
|
||||||
if (_load_resource_pack(current_dir+"/data.pck") || _load_resource_pack(current_dir+"/data.pcz")) {
|
//tries to open pack, but only first time
|
||||||
|
if (first_time && _load_resource_pack(current_dir+"/data.pck")) {
|
||||||
if (_load_settings("res://engine.cfg")==OK || _load_settings_binary("res://engine.cfb")==OK) {
|
if (_load_settings("res://engine.cfg")==OK || _load_settings_binary("res://engine.cfb")==OK) {
|
||||||
|
|
||||||
_load_settings("res://override.cfg");
|
_load_settings("res://override.cfg");
|
||||||
|
@ -344,6 +346,7 @@ Error Globals::setup(const String& p_path) {
|
||||||
if (d->get_current_dir()==current_dir)
|
if (d->get_current_dir()==current_dir)
|
||||||
break; //not doing anything useful
|
break; //not doing anything useful
|
||||||
current_dir=d->get_current_dir();
|
current_dir=d->get_current_dir();
|
||||||
|
first_time=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,8 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define PACK_VERSION 0
|
||||||
|
|
||||||
Error PackedData::add_pack(const String& p_path) {
|
Error PackedData::add_pack(const String& p_path) {
|
||||||
|
|
||||||
for (int i=0; i<sources.size(); i++) {
|
for (int i=0; i<sources.size(); i++) {
|
||||||
|
@ -113,12 +115,12 @@ bool PackedSourcePCK::try_open_pack(const String& p_path) {
|
||||||
|
|
||||||
uint32_t magic= f->get_32();
|
uint32_t magic= f->get_32();
|
||||||
|
|
||||||
if (magic != 0x4b435047) {
|
if (magic != 0x43504447) {
|
||||||
//maybe at he end.... self contained exe
|
//maybe at he end.... self contained exe
|
||||||
f->seek_end();
|
f->seek_end();
|
||||||
f->seek( f->get_pos() -4 );
|
f->seek( f->get_pos() -4 );
|
||||||
magic = f->get_32();
|
magic = f->get_32();
|
||||||
if (magic != 0x4b435047) {
|
if (magic != 0x43504447) {
|
||||||
|
|
||||||
memdelete(f);
|
memdelete(f);
|
||||||
return false;
|
return false;
|
||||||
|
@ -130,7 +132,7 @@ bool PackedSourcePCK::try_open_pack(const String& p_path) {
|
||||||
f->seek( f->get_pos() -ds-8 );
|
f->seek( f->get_pos() -ds-8 );
|
||||||
|
|
||||||
magic = f->get_32();
|
magic = f->get_32();
|
||||||
if (magic != 0x4b435047) {
|
if (magic != 0x43504447) {
|
||||||
|
|
||||||
memdelete(f);
|
memdelete(f);
|
||||||
return false;
|
return false;
|
||||||
|
@ -138,10 +140,13 @@ bool PackedSourcePCK::try_open_pack(const String& p_path) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t version = f->get_32();
|
||||||
uint32_t ver_major = f->get_32();
|
uint32_t ver_major = f->get_32();
|
||||||
uint32_t ver_minor = f->get_32();
|
uint32_t ver_minor = f->get_32();
|
||||||
uint32_t ver_rev = f->get_32();
|
uint32_t ver_rev = f->get_32();
|
||||||
|
|
||||||
|
ERR_EXPLAIN("Pack version newer than supported by engine: "+itos(version));
|
||||||
|
ERR_FAIL_COND_V( version > PACK_VERSION, ERR_INVALID_DATA);
|
||||||
ERR_EXPLAIN("Pack created with a newer version of the engine: "+itos(ver_major)+"."+itos(ver_minor)+"."+itos(ver_rev));
|
ERR_EXPLAIN("Pack created with a newer version of the engine: "+itos(ver_major)+"."+itos(ver_minor)+"."+itos(ver_rev));
|
||||||
ERR_FAIL_COND_V( ver_major > VERSION_MAJOR || (ver_major == VERSION_MAJOR && ver_minor > VERSION_MINOR), ERR_INVALID_DATA);
|
ERR_FAIL_COND_V( ver_major > VERSION_MAJOR || (ver_major == VERSION_MAJOR && ver_minor > VERSION_MINOR), ERR_INVALID_DATA);
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,8 @@ void Math::seed(uint32_t x) {
|
||||||
|
|
||||||
void Math::randomize() {
|
void Math::randomize() {
|
||||||
|
|
||||||
seed(OS::get_singleton()->get_ticks_usec()); /* *OS::get_singleton()->get_time().sec); // windows doesn't have get_time(), returns always 0 */
|
OS::Time time = OS::get_singleton()->get_time();
|
||||||
|
seed(OS::get_singleton()->get_ticks_usec()*time.hour*time.min*time.sec*rand()); /* *OS::get_singleton()->get_time().sec); // windows doesn't have get_time(), returns always 0 */
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t Math::rand() {
|
uint32_t Math::rand() {
|
||||||
|
|
2074
doc/base/classes.xml
2074
doc/base/classes.xml
File diff suppressed because it is too large
Load diff
|
@ -394,7 +394,8 @@ String OS_Unix::get_executable_path() const {
|
||||||
memset(buf,0,256);
|
memset(buf,0,256);
|
||||||
readlink("/proc/self/exe", buf, sizeof(buf));
|
readlink("/proc/self/exe", buf, sizeof(buf));
|
||||||
//print_line("Exec path is:"+String(buf));
|
//print_line("Exec path is:"+String(buf));
|
||||||
String b = buf;
|
String b;
|
||||||
|
b.parse_utf8(buf);
|
||||||
if (b=="") {
|
if (b=="") {
|
||||||
WARN_PRINT("Couldn't get executable path from /proc/self/exe, using argv[0]");
|
WARN_PRINT("Couldn't get executable path from /proc/self/exe, using argv[0]");
|
||||||
return OS::get_executable_path();
|
return OS::get_executable_path();
|
||||||
|
|
|
@ -1475,10 +1475,14 @@ Error OS_Windows::execute(const String& p_path, const List<String>& p_arguments,
|
||||||
ZeroMemory( &pi.si, sizeof(pi.si) );
|
ZeroMemory( &pi.si, sizeof(pi.si) );
|
||||||
pi.si.cb = sizeof(pi.si);
|
pi.si.cb = sizeof(pi.si);
|
||||||
ZeroMemory( &pi.pi, sizeof(pi.pi) );
|
ZeroMemory( &pi.pi, sizeof(pi.pi) );
|
||||||
|
LPSTARTUPINFOW si_w = (LPSTARTUPINFOW) &pi.si;
|
||||||
|
|
||||||
print_line("running cmdline: "+cmdline);
|
print_line("running cmdline: "+cmdline);
|
||||||
|
Vector<CharType> modstr; //windows wants to change this no idea why
|
||||||
int ret = CreateProcess(NULL, (LPSTR)cmdline.utf8().get_data(), NULL, NULL, 0, NORMAL_PRIORITY_CLASS, NULL, NULL, &pi.si, &pi.pi);
|
modstr.resize(cmdline.size());
|
||||||
|
for(int i=0;i<cmdline.size();i++)
|
||||||
|
modstr[i]=cmdline[i];
|
||||||
|
int ret = CreateProcessW(NULL, modstr.ptr(), NULL, NULL, 0, NORMAL_PRIORITY_CLASS, NULL, NULL, si_w, &pi.pi);
|
||||||
ERR_FAIL_COND_V(ret == 0, ERR_CANT_FORK);
|
ERR_FAIL_COND_V(ret == 0, ERR_CANT_FORK);
|
||||||
|
|
||||||
if (p_blocking) {
|
if (p_blocking) {
|
||||||
|
@ -1523,6 +1527,15 @@ Error OS_Windows::set_cwd(const String& p_cwd) {
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String OS_Windows::get_executable_path() const {
|
||||||
|
|
||||||
|
wchar_t bufname[4096];
|
||||||
|
GetModuleFileNameW(NULL,bufname,4096);
|
||||||
|
String s= bufname;
|
||||||
|
print_line("EXEC PATHPó: "+s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
void OS_Windows::set_icon(const Image& p_icon) {
|
void OS_Windows::set_icon(const Image& p_icon) {
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -235,6 +235,7 @@ public:
|
||||||
void set_cursor_shape(CursorShape p_shape);
|
void set_cursor_shape(CursorShape p_shape);
|
||||||
void set_icon(const Image& p_icon);
|
void set_icon(const Image& p_icon);
|
||||||
|
|
||||||
|
virtual String get_executable_path() const;
|
||||||
|
|
||||||
virtual String get_locale() const;
|
virtual String get_locale() const;
|
||||||
|
|
||||||
|
|
|
@ -1407,6 +1407,8 @@ Ref<Font> Control::get_font(const StringName& p_name,const StringName& p_type) c
|
||||||
|
|
||||||
if (theme_owner->data.theme->has_font(p_name, type ) )
|
if (theme_owner->data.theme->has_font(p_name, type ) )
|
||||||
return data.theme_owner->data.theme->get_font(p_name, type );
|
return data.theme_owner->data.theme->get_font(p_name, type );
|
||||||
|
if (theme_owner->data.theme->get_default_theme_font().is_valid())
|
||||||
|
return theme_owner->data.theme->get_default_theme_font();
|
||||||
Control *parent = theme_owner->get_parent()?theme_owner->get_parent()->cast_to<Control>():NULL;
|
Control *parent = theme_owner->get_parent()?theme_owner->get_parent()->cast_to<Control>():NULL;
|
||||||
|
|
||||||
if (parent)
|
if (parent)
|
||||||
|
|
|
@ -196,7 +196,7 @@ void make_default_theme() {
|
||||||
focus->set_expand_margin_size(Margin(i),2);
|
focus->set_expand_margin_size(Margin(i),2);
|
||||||
}
|
}
|
||||||
t->set_stylebox("focus","Button", focus );
|
t->set_stylebox("focus","Button", focus );
|
||||||
t->set_font("font","Button", focus );
|
t->set_font("font","Button", default_font );
|
||||||
t->set_color("font_color","Button", control_font_color );
|
t->set_color("font_color","Button", control_font_color );
|
||||||
t->set_color("font_color_pressed","Button", control_font_color_pressed );
|
t->set_color("font_color_pressed","Button", control_font_color_pressed );
|
||||||
t->set_color("font_color_hover","Button", control_font_color_hover );
|
t->set_color("font_color_hover","Button", control_font_color_hover );
|
||||||
|
|
|
@ -130,6 +130,7 @@ void Theme::_get_property_list( List<PropertyInfo> *p_list) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
key=NULL;
|
key=NULL;
|
||||||
|
|
||||||
|
|
||||||
while((key=font_map.next(key))) {
|
while((key=font_map.next(key))) {
|
||||||
|
|
||||||
|
@ -172,6 +173,17 @@ Ref<Theme> Theme::get_default() {
|
||||||
return default_theme;
|
return default_theme;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Theme::set_default_theme_font( const Ref<Font>& p_default_font ) {
|
||||||
|
|
||||||
|
default_theme_font=p_default_font;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref<Font> Theme::get_default_theme_font() const {
|
||||||
|
|
||||||
|
return default_theme_font;
|
||||||
|
}
|
||||||
|
|
||||||
void Theme::set_default(const Ref<Theme>& p_default) {
|
void Theme::set_default(const Ref<Theme>& p_default) {
|
||||||
|
|
||||||
default_theme=p_default;
|
default_theme=p_default;
|
||||||
|
@ -203,8 +215,10 @@ void Theme::set_icon(const StringName& p_name,const StringName& p_type,const Ref
|
||||||
|
|
||||||
icon_map[p_type][p_name]=p_icon;
|
icon_map[p_type][p_name]=p_icon;
|
||||||
|
|
||||||
if (new_value)
|
if (new_value) {
|
||||||
_change_notify();
|
_change_notify();
|
||||||
|
emit_changed();;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ref<Texture> Theme::get_icon(const StringName& p_name,const StringName& p_type) const {
|
Ref<Texture> Theme::get_icon(const StringName& p_name,const StringName& p_type) const {
|
||||||
|
|
||||||
|
@ -229,6 +243,8 @@ void Theme::clear_icon(const StringName& p_name,const StringName& p_type) {
|
||||||
|
|
||||||
icon_map[p_type].erase(p_name);
|
icon_map[p_type].erase(p_name);
|
||||||
_change_notify();
|
_change_notify();
|
||||||
|
emit_changed();;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Theme::get_icon_list(StringName p_type, List<StringName> *p_list) const {
|
void Theme::get_icon_list(StringName p_type, List<StringName> *p_list) const {
|
||||||
|
@ -256,6 +272,8 @@ void Theme::set_stylebox(const StringName& p_name,const StringName& p_type,const
|
||||||
|
|
||||||
if (new_value)
|
if (new_value)
|
||||||
_change_notify();
|
_change_notify();
|
||||||
|
emit_changed();;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -281,6 +299,8 @@ void Theme::clear_stylebox(const StringName& p_name,const StringName& p_type) {
|
||||||
|
|
||||||
style_map[p_type].erase(p_name);
|
style_map[p_type].erase(p_name);
|
||||||
_change_notify();
|
_change_notify();
|
||||||
|
emit_changed();;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Theme::get_stylebox_list(StringName p_type, List<StringName> *p_list) const {
|
void Theme::get_stylebox_list(StringName p_type, List<StringName> *p_list) const {
|
||||||
|
@ -304,13 +324,18 @@ void Theme::set_font(const StringName& p_name,const StringName& p_type,const Ref
|
||||||
bool new_value=!font_map.has(p_type) || !font_map[p_type].has(p_name);
|
bool new_value=!font_map.has(p_type) || !font_map[p_type].has(p_name);
|
||||||
font_map[p_type][p_name]=p_font;
|
font_map[p_type][p_name]=p_font;
|
||||||
|
|
||||||
if (new_value)
|
if (new_value) {
|
||||||
_change_notify();
|
_change_notify();
|
||||||
|
emit_changed();;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ref<Font> Theme::get_font(const StringName& p_name,const StringName& p_type) const {
|
Ref<Font> Theme::get_font(const StringName& p_name,const StringName& p_type) const {
|
||||||
|
|
||||||
if (font_map.has(p_type) && font_map[p_type].has(p_name) && font_map[p_type][p_name].is_valid())
|
if (font_map.has(p_type) && font_map[p_type].has(p_name) && font_map[p_type][p_name].is_valid())
|
||||||
return font_map[p_type][p_name];
|
return font_map[p_type][p_name];
|
||||||
|
else if (default_theme_font.is_valid())
|
||||||
|
return default_theme_font;
|
||||||
else
|
else
|
||||||
return default_font;
|
return default_font;
|
||||||
|
|
||||||
|
@ -328,6 +353,8 @@ void Theme::clear_font(const StringName& p_name,const StringName& p_type) {
|
||||||
|
|
||||||
font_map[p_type].erase(p_name);
|
font_map[p_type].erase(p_name);
|
||||||
_change_notify();
|
_change_notify();
|
||||||
|
emit_changed();;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Theme::get_font_list(StringName p_type, List<StringName> *p_list) const {
|
void Theme::get_font_list(StringName p_type, List<StringName> *p_list) const {
|
||||||
|
@ -350,8 +377,11 @@ void Theme::set_color(const StringName& p_name,const StringName& p_type,const Co
|
||||||
|
|
||||||
color_map[p_type][p_name]=p_color;
|
color_map[p_type][p_name]=p_color;
|
||||||
|
|
||||||
if (new_value)
|
if (new_value) {
|
||||||
_change_notify();
|
_change_notify();
|
||||||
|
emit_changed();;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -377,6 +407,8 @@ void Theme::clear_color(const StringName& p_name,const StringName& p_type) {
|
||||||
|
|
||||||
color_map[p_type].erase(p_name);
|
color_map[p_type].erase(p_name);
|
||||||
_change_notify();
|
_change_notify();
|
||||||
|
emit_changed();;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Theme::get_color_list(StringName p_type, List<StringName> *p_list) const {
|
void Theme::get_color_list(StringName p_type, List<StringName> *p_list) const {
|
||||||
|
@ -398,8 +430,10 @@ void Theme::set_constant(const StringName& p_name,const StringName& p_type,int p
|
||||||
bool new_value=!constant_map.has(p_type) || !constant_map[p_type].has(p_name);
|
bool new_value=!constant_map.has(p_type) || !constant_map[p_type].has(p_name);
|
||||||
constant_map[p_type][p_name]=p_constant;
|
constant_map[p_type][p_name]=p_constant;
|
||||||
|
|
||||||
if (new_value)
|
if (new_value) {
|
||||||
_change_notify();
|
_change_notify();
|
||||||
|
emit_changed();;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int Theme::get_constant(const StringName& p_name,const StringName& p_type) const {
|
int Theme::get_constant(const StringName& p_name,const StringName& p_type) const {
|
||||||
|
@ -424,6 +458,8 @@ void Theme::clear_constant(const StringName& p_name,const StringName& p_type) {
|
||||||
|
|
||||||
constant_map[p_type].erase(p_name);
|
constant_map[p_type].erase(p_name);
|
||||||
_change_notify();
|
_change_notify();
|
||||||
|
emit_changed();;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Theme::get_constant_list(StringName p_type, List<StringName> *p_list) const {
|
void Theme::get_constant_list(StringName p_type, List<StringName> *p_list) const {
|
||||||
|
@ -451,6 +487,8 @@ void Theme::copy_default_theme() {
|
||||||
color_map=default_theme->color_map;
|
color_map=default_theme->color_map;
|
||||||
constant_map=default_theme->constant_map;
|
constant_map=default_theme->constant_map;
|
||||||
_change_notify();
|
_change_notify();
|
||||||
|
emit_changed();;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Theme::get_type_list(List<StringName> *p_list) const {
|
void Theme::get_type_list(List<StringName> *p_list) const {
|
||||||
|
@ -532,10 +570,15 @@ void Theme::_bind_methods() {
|
||||||
ObjectTypeDB::bind_method(_MD("clear_constant","name","type"),&Theme::clear_constant);
|
ObjectTypeDB::bind_method(_MD("clear_constant","name","type"),&Theme::clear_constant);
|
||||||
ObjectTypeDB::bind_method(_MD("get_constant_list"),&Theme::_get_constant_list);
|
ObjectTypeDB::bind_method(_MD("get_constant_list"),&Theme::_get_constant_list);
|
||||||
|
|
||||||
|
ObjectTypeDB::bind_method(_MD("set_default_font","font"),&Theme::set_default_theme_font);
|
||||||
|
ObjectTypeDB::bind_method(_MD("get_default_font"),&Theme::get_default_theme_font);
|
||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("get_type_list"),&Theme::_get_type_list);
|
ObjectTypeDB::bind_method(_MD("get_type_list"),&Theme::_get_type_list);
|
||||||
|
|
||||||
ObjectTypeDB::bind_method("copy_default_theme",&Theme::copy_default_theme);
|
ObjectTypeDB::bind_method("copy_default_theme",&Theme::copy_default_theme);
|
||||||
|
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"default_font",PROPERTY_HINT_RESOURCE_TYPE,"Font"),_SCS("set_default_font"),_SCS("get_default_font"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Theme::Theme() {
|
Theme::Theme() {
|
||||||
|
|
|
@ -59,6 +59,7 @@ protected:
|
||||||
static Ref<StyleBox> default_style;
|
static Ref<StyleBox> default_style;
|
||||||
static Ref<Font> default_font;
|
static Ref<Font> default_font;
|
||||||
|
|
||||||
|
Ref<Font> default_theme_font;
|
||||||
|
|
||||||
DVector<String> _get_icon_list(const String& p_type) const { DVector<String> ilret; List<StringName> il; get_icon_list(p_type,&il); for(List<StringName>::Element *E=il.front();E;E=E->next()) { ilret.push_back(E->get()); } return ilret; }
|
DVector<String> _get_icon_list(const String& p_type) const { DVector<String> ilret; List<StringName> il; get_icon_list(p_type,&il); for(List<StringName>::Element *E=il.front();E;E=E->next()) { ilret.push_back(E->get()); } return ilret; }
|
||||||
DVector<String> _get_stylebox_list(const String& p_type) const { DVector<String> ilret; List<StringName> il; get_stylebox_list(p_type,&il); for(List<StringName>::Element *E=il.front();E;E=E->next()) { ilret.push_back(E->get()); } return ilret; }
|
DVector<String> _get_stylebox_list(const String& p_type) const { DVector<String> ilret; List<StringName> il; get_stylebox_list(p_type,&il); for(List<StringName>::Element *E=il.front();E;E=E->next()) { ilret.push_back(E->get()); } return ilret; }
|
||||||
|
@ -76,8 +77,10 @@ public:
|
||||||
static void set_default_icon( const Ref<Texture>& p_icon );
|
static void set_default_icon( const Ref<Texture>& p_icon );
|
||||||
static void set_default_style( const Ref<StyleBox>& p_default_style);
|
static void set_default_style( const Ref<StyleBox>& p_default_style);
|
||||||
static void set_default_font( const Ref<Font>& p_default_font );
|
static void set_default_font( const Ref<Font>& p_default_font );
|
||||||
|
|
||||||
|
void set_default_theme_font( const Ref<Font>& p_default_font );
|
||||||
|
Ref<Font> get_default_theme_font() const;
|
||||||
|
|
||||||
void set_icon(const StringName& p_name,const StringName& p_type,const Ref<Texture>& p_icon);
|
void set_icon(const StringName& p_name,const StringName& p_type,const Ref<Texture>& p_icon);
|
||||||
Ref<Texture> get_icon(const StringName& p_name,const StringName& p_type) const;
|
Ref<Texture> get_icon(const StringName& p_name,const StringName& p_type) const;
|
||||||
bool has_icon(const StringName& p_name,const StringName& p_type) const;
|
bool has_icon(const StringName& p_name,const StringName& p_type) const;
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -848,7 +848,8 @@ Error EditorExportPlatform::save_pack(FileAccess *dst,bool p_make_bundles) {
|
||||||
FileAccess *tmp = FileAccess::open(tmppath,FileAccess::WRITE);
|
FileAccess *tmp = FileAccess::open(tmppath,FileAccess::WRITE);
|
||||||
uint64_t ofs_begin = dst->get_pos();
|
uint64_t ofs_begin = dst->get_pos();
|
||||||
|
|
||||||
dst->store_32(0x4b435047); //GPCK
|
dst->store_32(0x43504447); //GDPK
|
||||||
|
dst->store_32(0); //pack version
|
||||||
dst->store_32(VERSION_MAJOR);
|
dst->store_32(VERSION_MAJOR);
|
||||||
dst->store_32(VERSION_MINOR);
|
dst->store_32(VERSION_MINOR);
|
||||||
dst->store_32(VERSION_REVISION);
|
dst->store_32(VERSION_REVISION);
|
||||||
|
@ -891,7 +892,7 @@ Error EditorExportPlatform::save_pack(FileAccess *dst,bool p_make_bundles) {
|
||||||
memdelete(tmp);
|
memdelete(tmp);
|
||||||
|
|
||||||
dst->store_64(dst->get_pos()-ofs_begin);
|
dst->store_64(dst->get_pos()-ofs_begin);
|
||||||
dst->store_32(0x4b435047); //GPCK
|
dst->store_32(0x43504447); //GDPK
|
||||||
|
|
||||||
//fix offsets
|
//fix offsets
|
||||||
|
|
||||||
|
|
|
@ -3961,7 +3961,7 @@ EditorNode::EditorNode() {
|
||||||
//add_editor_plugin( memnew( AnimationEditorPlugin(this) ) ); - not useful anymore
|
//add_editor_plugin( memnew( AnimationEditorPlugin(this) ) ); - not useful anymore
|
||||||
add_editor_plugin( memnew( ShaderEditorPlugin(this) ) );
|
add_editor_plugin( memnew( ShaderEditorPlugin(this) ) );
|
||||||
add_editor_plugin( memnew( CameraEditorPlugin(this) ) );
|
add_editor_plugin( memnew( CameraEditorPlugin(this) ) );
|
||||||
add_editor_plugin( memnew( FontEditorPlugin(this) ) );
|
//add_editor_plugin( memnew( FontEditorPlugin(this) ) ); obsolete
|
||||||
add_editor_plugin( memnew( SampleEditorPlugin(this) ) );
|
add_editor_plugin( memnew( SampleEditorPlugin(this) ) );
|
||||||
add_editor_plugin( memnew( SampleLibraryEditorPlugin(this) ) );
|
add_editor_plugin( memnew( SampleLibraryEditorPlugin(this) ) );
|
||||||
add_editor_plugin( memnew( ThemeEditorPlugin(this) ) );
|
add_editor_plugin( memnew( ThemeEditorPlugin(this) ) );
|
||||||
|
|
|
@ -33,13 +33,28 @@
|
||||||
void ThemeEditor::edit(const Ref<Theme>& p_theme) {
|
void ThemeEditor::edit(const Ref<Theme>& p_theme) {
|
||||||
|
|
||||||
theme=p_theme;
|
theme=p_theme;
|
||||||
panel->set_theme(p_theme);
|
main_vb->set_theme(p_theme);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThemeEditor::_open_file_dialog() {
|
|
||||||
|
|
||||||
test_file_dialog->popup_centered_ratio();
|
void ThemeEditor::_propagate_redraw(Control *p_at) {
|
||||||
|
|
||||||
|
p_at->notification(NOTIFICATION_THEME_CHANGED);
|
||||||
|
p_at->minimum_size_changed();
|
||||||
|
p_at->update();
|
||||||
|
for(int i=0;i<p_at->get_child_count();i++) {
|
||||||
|
Control *a = p_at->get_child(i)->cast_to<Control>();
|
||||||
|
if (a)
|
||||||
|
_propagate_redraw(a);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThemeEditor::_refresh_interval() {
|
||||||
|
|
||||||
|
_propagate_redraw(main_vb);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThemeEditor::_type_menu_cbk(int p_option) {
|
void ThemeEditor::_type_menu_cbk(int p_option) {
|
||||||
|
@ -477,6 +492,18 @@ void ThemeEditor::_theme_menu_cbk(int p_option) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ThemeEditor::_notification(int p_what) {
|
||||||
|
|
||||||
|
if (p_what==NOTIFICATION_PROCESS) {
|
||||||
|
|
||||||
|
time_left-=get_process_delta_time();
|
||||||
|
if (time_left<0) {
|
||||||
|
time_left=1.5;
|
||||||
|
_refresh_interval();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ThemeEditor::_bind_methods() {
|
void ThemeEditor::_bind_methods() {
|
||||||
|
|
||||||
ObjectTypeDB::bind_method("_type_menu_cbk",&ThemeEditor::_type_menu_cbk);
|
ObjectTypeDB::bind_method("_type_menu_cbk",&ThemeEditor::_type_menu_cbk);
|
||||||
|
@ -489,44 +516,159 @@ void ThemeEditor::_bind_methods() {
|
||||||
|
|
||||||
ThemeEditor::ThemeEditor() {
|
ThemeEditor::ThemeEditor() {
|
||||||
|
|
||||||
Panel *main_panel = memnew( Panel );
|
time_left=0;
|
||||||
add_child(main_panel);
|
|
||||||
main_panel->set_area_as_parent_rect();
|
|
||||||
panel = memnew( Panel );
|
|
||||||
|
|
||||||
main_panel->add_child(panel);
|
Panel * panel = memnew( Panel );
|
||||||
panel->set_area_as_parent_rect();
|
add_child(panel);
|
||||||
panel->set_margin( MARGIN_TOP,20 );
|
panel->set_area_as_parent_rect(0);
|
||||||
|
panel->set_margin(MARGIN_TOP,25);
|
||||||
|
|
||||||
test_button = memnew( Button );
|
main_vb= memnew( VBoxContainer );
|
||||||
test_button->set_pos(Point2(25,25));
|
panel->add_child(main_vb);
|
||||||
test_button->set_text("Button");
|
main_vb->set_area_as_parent_rect(4);
|
||||||
panel->add_child(test_button);
|
|
||||||
|
|
||||||
test_label = memnew( Label );
|
|
||||||
test_label->set_pos(Point2(25,75));
|
|
||||||
test_label->set_text("Label");
|
|
||||||
panel->add_child(test_label);
|
|
||||||
|
|
||||||
test_menu_button = memnew( MenuButton );
|
HBoxContainer *hb_menu = memnew(HBoxContainer);
|
||||||
test_menu_button->set_pos(Point2(25,125));
|
main_vb->add_child(hb_menu);
|
||||||
test_menu_button->set_text("Menu Button");
|
|
||||||
|
|
||||||
|
|
||||||
|
theme_menu = memnew( MenuButton );
|
||||||
|
theme_menu->set_text("Theme");
|
||||||
|
theme_menu->get_popup()->add_item("Add Item",POPUP_ADD);
|
||||||
|
theme_menu->get_popup()->add_item("Add Class Items",POPUP_CLASS_ADD);
|
||||||
|
theme_menu->get_popup()->add_item("Remove Item",POPUP_REMOVE);
|
||||||
|
theme_menu->get_popup()->add_separator();
|
||||||
|
theme_menu->get_popup()->add_item("Create Template",POPUP_CREATE_TEMPLATE);
|
||||||
|
hb_menu->add_child(theme_menu);
|
||||||
|
theme_menu->get_popup()->connect("item_pressed", this,"_theme_menu_cbk");
|
||||||
|
|
||||||
|
|
||||||
|
HBoxContainer *main_hb = memnew( HBoxContainer );
|
||||||
|
main_vb->add_child(main_hb);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VBoxContainer *first_vb = memnew( VBoxContainer);
|
||||||
|
first_vb->set_h_size_flags(SIZE_EXPAND_FILL);
|
||||||
|
main_hb->add_child(first_vb);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// main_panel->add_child(panel);
|
||||||
|
// panel->set_area_as_parent_rect();
|
||||||
|
// panel->set_margin( MARGIN_TOP,20 );
|
||||||
|
|
||||||
|
first_vb->add_child(memnew( Label("Label") ));
|
||||||
|
|
||||||
|
first_vb->add_child(memnew( Button("Button")) );
|
||||||
|
ToolButton *tb = memnew( ToolButton );
|
||||||
|
tb->set_text("ToolButton");
|
||||||
|
first_vb->add_child(tb );
|
||||||
|
CheckButton *cb = memnew( CheckButton );
|
||||||
|
cb->set_text("CheckButton");
|
||||||
|
first_vb->add_child(cb );
|
||||||
|
|
||||||
|
MenuButton* test_menu_button = memnew( MenuButton );
|
||||||
|
test_menu_button->set_text("MenuButton");
|
||||||
test_menu_button->get_popup()->add_item("Item");
|
test_menu_button->get_popup()->add_item("Item");
|
||||||
test_menu_button->get_popup()->add_separator();
|
test_menu_button->get_popup()->add_separator();
|
||||||
test_menu_button->get_popup()->add_check_item("Check Item");
|
test_menu_button->get_popup()->add_check_item("Check Item");
|
||||||
test_menu_button->get_popup()->add_check_item("Checked Item");
|
test_menu_button->get_popup()->add_check_item("Checked Item");
|
||||||
test_menu_button->get_popup()->set_item_checked(2,true);
|
test_menu_button->get_popup()->set_item_checked(2,true);
|
||||||
panel->add_child(test_menu_button);
|
first_vb->add_child(test_menu_button);
|
||||||
|
|
||||||
test_option_button = memnew( OptionButton );
|
OptionButton *test_option_button = memnew( OptionButton );
|
||||||
test_option_button->set_pos(Point2(25,175));
|
|
||||||
test_option_button->add_item("OptionButton");
|
test_option_button->add_item("OptionButton");
|
||||||
test_option_button->add_separator();
|
test_option_button->add_separator();
|
||||||
test_option_button->add_item("Has");
|
test_option_button->add_item("Has");
|
||||||
test_option_button->add_item("Many");
|
test_option_button->add_item("Many");
|
||||||
test_option_button->add_item("Options");
|
test_option_button->add_item("Options");
|
||||||
panel->add_child(test_option_button);
|
first_vb->add_child(test_option_button);
|
||||||
|
|
||||||
|
ColorPickerButton *cpb = memnew( ColorPickerButton );
|
||||||
|
first_vb->add_child(cpb );
|
||||||
|
|
||||||
|
first_vb->add_child( memnew( HSeparator ));
|
||||||
|
first_vb->add_child( memnew( HSlider ));
|
||||||
|
first_vb->add_child( memnew( HScrollBar ));
|
||||||
|
first_vb->add_child( memnew( SpinBox ));
|
||||||
|
ProgressBar *pb=memnew( ProgressBar );
|
||||||
|
pb->set_val(50);
|
||||||
|
first_vb->add_child( pb);
|
||||||
|
Panel *pn=memnew( Panel );
|
||||||
|
pn->set_custom_minimum_size(Size2(40,40));
|
||||||
|
first_vb->add_child( pn);
|
||||||
|
first_vb->add_constant_override("separation",10);
|
||||||
|
|
||||||
|
VBoxContainer *second_vb = memnew( VBoxContainer );
|
||||||
|
second_vb->set_h_size_flags(SIZE_EXPAND_FILL);
|
||||||
|
main_hb->add_child(second_vb);
|
||||||
|
second_vb->add_constant_override("separation",10);
|
||||||
|
LineEdit *le = memnew( LineEdit );
|
||||||
|
le->set_text("LineEdit");
|
||||||
|
second_vb->add_child(le);
|
||||||
|
TextEdit *te = memnew( TextEdit );
|
||||||
|
te->set_text("TextEdit");
|
||||||
|
//te->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||||
|
te->set_custom_minimum_size(Size2(0,160));
|
||||||
|
second_vb->add_child(te);
|
||||||
|
|
||||||
|
Tree *test_tree = memnew(Tree);
|
||||||
|
second_vb->add_child(test_tree);
|
||||||
|
test_tree->set_custom_minimum_size(Size2(0,160));
|
||||||
|
|
||||||
|
|
||||||
|
TreeItem *item = test_tree->create_item();
|
||||||
|
item->set_editable(0,true);
|
||||||
|
item->set_text(0,"Tree");
|
||||||
|
item = test_tree->create_item( test_tree->get_root() );
|
||||||
|
item->set_cell_mode(0, TreeItem::CELL_MODE_CHECK);
|
||||||
|
item->set_editable(0,true);
|
||||||
|
item->set_text(0,"check");
|
||||||
|
item = test_tree->create_item( test_tree->get_root() );
|
||||||
|
item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE);
|
||||||
|
item->set_editable(0,true);
|
||||||
|
item->set_range_config(0,0,20,0.1);
|
||||||
|
item->set_range(0,2);
|
||||||
|
item = test_tree->create_item( test_tree->get_root() );
|
||||||
|
item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE);
|
||||||
|
item->set_editable(0,true);
|
||||||
|
item->set_text(0,"Have,Many,Several,Options!");
|
||||||
|
item->set_range(0,2);
|
||||||
|
|
||||||
|
VBoxContainer *third_vb = memnew( VBoxContainer );
|
||||||
|
third_vb->set_h_size_flags(SIZE_EXPAND_FILL);
|
||||||
|
third_vb->add_constant_override("separation",10);
|
||||||
|
|
||||||
|
main_hb->add_child(third_vb);
|
||||||
|
|
||||||
|
HBoxContainer *vhb = memnew( HBoxContainer );
|
||||||
|
vhb->set_custom_minimum_size(Size2(0,160));
|
||||||
|
vhb->add_child(memnew(VSeparator));
|
||||||
|
vhb->add_child(memnew(VSlider));
|
||||||
|
vhb->add_child(memnew(VScrollBar));
|
||||||
|
third_vb->add_child(vhb);
|
||||||
|
|
||||||
|
TabContainer *tc = memnew( TabContainer );
|
||||||
|
third_vb->add_child(tc);
|
||||||
|
tc->set_custom_minimum_size(Size2(0,160));
|
||||||
|
Control *tcc = memnew( Control );
|
||||||
|
tcc->set_name("Tab 1");
|
||||||
|
tc->add_child(tcc);
|
||||||
|
tcc = memnew( Control );
|
||||||
|
tcc->set_name("Tab 2");
|
||||||
|
tc->add_child(tcc);
|
||||||
|
tcc = memnew( Control );
|
||||||
|
tcc->set_name("Tab 3");
|
||||||
|
tc->add_child(tcc);
|
||||||
|
|
||||||
|
main_hb->add_constant_override("separation",20);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
test_h_scroll = memnew( HScrollBar );
|
test_h_scroll = memnew( HScrollBar );
|
||||||
test_h_scroll->set_pos( Point2( 25, 225 ) );
|
test_h_scroll->set_pos( Point2( 25, 225 ) );
|
||||||
test_h_scroll->set_size( Point2( 150, 5 ) );
|
test_h_scroll->set_size( Point2( 150, 5 ) );
|
||||||
|
@ -576,21 +718,11 @@ ThemeEditor::ThemeEditor() {
|
||||||
panel->add_child(test_file_dialog);
|
panel->add_child(test_file_dialog);
|
||||||
|
|
||||||
fd_button->connect("pressed", this,"_open_file_dialog");
|
fd_button->connect("pressed", this,"_open_file_dialog");
|
||||||
|
*/
|
||||||
theme_menu = memnew( MenuButton );
|
|
||||||
theme_menu->set_text("Theme..");
|
|
||||||
theme_menu->get_popup()->add_item("Add Item",POPUP_ADD);
|
|
||||||
theme_menu->get_popup()->add_item("Add Class Items",POPUP_CLASS_ADD);
|
|
||||||
theme_menu->get_popup()->add_item("Remove Item",POPUP_REMOVE);
|
|
||||||
theme_menu->get_popup()->add_separator();
|
|
||||||
theme_menu->get_popup()->add_item("Create Template",POPUP_CREATE_TEMPLATE);
|
|
||||||
main_panel->add_child(theme_menu);
|
|
||||||
theme_menu->set_pos(Point2(5,5));
|
|
||||||
theme_menu->get_popup()->connect("item_pressed", this,"_theme_menu_cbk");
|
|
||||||
|
|
||||||
add_del_dialog = memnew(ConfirmationDialog);
|
add_del_dialog = memnew(ConfirmationDialog);
|
||||||
add_del_dialog->hide();
|
add_del_dialog->hide();
|
||||||
main_panel->add_child(add_del_dialog);
|
add_child(add_del_dialog);
|
||||||
|
|
||||||
|
|
||||||
Label *l = memnew( Label );
|
Label *l = memnew( Label );
|
||||||
|
@ -665,10 +797,12 @@ ThemeEditor::ThemeEditor() {
|
||||||
void ThemeEditorPlugin::edit(Object *p_node) {
|
void ThemeEditorPlugin::edit(Object *p_node) {
|
||||||
|
|
||||||
if (p_node && p_node->cast_to<Theme>()) {
|
if (p_node && p_node->cast_to<Theme>()) {
|
||||||
theme_editor->edit( p_node->cast_to<Theme>() );
|
|
||||||
theme_editor->show();
|
theme_editor->show();
|
||||||
} else
|
theme_editor->edit( p_node->cast_to<Theme>() );
|
||||||
|
} else {
|
||||||
|
theme_editor->edit( Ref<Theme>() );
|
||||||
theme_editor->hide();
|
theme_editor->hide();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ThemeEditorPlugin::handles(Object *p_node) const{
|
bool ThemeEditorPlugin::handles(Object *p_node) const{
|
||||||
|
@ -678,10 +812,13 @@ bool ThemeEditorPlugin::handles(Object *p_node) const{
|
||||||
|
|
||||||
void ThemeEditorPlugin::make_visible(bool p_visible){
|
void ThemeEditorPlugin::make_visible(bool p_visible){
|
||||||
|
|
||||||
if (p_visible)
|
if (p_visible) {
|
||||||
theme_editor->show();
|
theme_editor->show();
|
||||||
else
|
theme_editor->set_process(true);
|
||||||
|
} else {
|
||||||
theme_editor->hide();
|
theme_editor->hide();
|
||||||
|
theme_editor->set_process(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ThemeEditorPlugin::ThemeEditorPlugin(EditorNode *p_node) {
|
ThemeEditorPlugin::ThemeEditorPlugin(EditorNode *p_node) {
|
||||||
|
|
|
@ -42,21 +42,13 @@ class ThemeEditor : public Control {
|
||||||
|
|
||||||
OBJ_TYPE( ThemeEditor, Control );
|
OBJ_TYPE( ThemeEditor, Control );
|
||||||
|
|
||||||
Panel *panel;
|
|
||||||
|
|
||||||
|
VBoxContainer *main_vb;
|
||||||
Ref<Theme> theme;
|
Ref<Theme> theme;
|
||||||
|
|
||||||
FileDialog *file_dialog;
|
FileDialog *file_dialog;
|
||||||
|
|
||||||
Button *test_button;
|
double time_left;
|
||||||
Label *test_label;
|
|
||||||
MenuButton *test_menu_button;
|
|
||||||
OptionButton *test_option_button;
|
|
||||||
HScrollBar *test_h_scroll;
|
|
||||||
VScrollBar *test_v_scroll;
|
|
||||||
LineEdit *line_edit;
|
|
||||||
FileDialog *test_file_dialog;
|
|
||||||
|
|
||||||
|
|
||||||
MenuButton *theme_menu;
|
MenuButton *theme_menu;
|
||||||
ConfirmationDialog *add_del_dialog;
|
ConfirmationDialog *add_del_dialog;
|
||||||
|
@ -86,9 +78,12 @@ class ThemeEditor : public Control {
|
||||||
void _name_menu_about_to_show();
|
void _name_menu_about_to_show();
|
||||||
void _name_menu_cbk(int p_option);
|
void _name_menu_cbk(int p_option);
|
||||||
void _theme_menu_cbk(int p_option);
|
void _theme_menu_cbk(int p_option);
|
||||||
void _open_file_dialog();
|
void _propagate_redraw(Control *p_at);
|
||||||
|
void _refresh_interval();
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void _notification(int p_what);
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
|
@ -374,6 +374,24 @@ void ProjectExportDialog::_export_mode_changed(int p_idx) {
|
||||||
|
|
||||||
void ProjectExportDialog::_export_action(const String& p_file) {
|
void ProjectExportDialog::_export_action(const String& p_file) {
|
||||||
|
|
||||||
|
String location = Globals::get_singleton()->globalize_path(p_file).get_base_dir().replace("\\","/");
|
||||||
|
|
||||||
|
while(true) {
|
||||||
|
|
||||||
|
print_line("TESTING: "+location.plus_file("engine.cfg"));
|
||||||
|
if (FileAccess::exists(location.plus_file("engine.cfg"))) {
|
||||||
|
|
||||||
|
error->set_text("Please export outside the project folder!");
|
||||||
|
error->popup_centered(Size2(300,70));;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String nl = (location+"/..").simplify_path();
|
||||||
|
if (nl.find("/")==location.find_last("/"))
|
||||||
|
break;
|
||||||
|
location=nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TreeItem *selected = platforms->get_selected();
|
TreeItem *selected = platforms->get_selected();
|
||||||
if (!selected)
|
if (!selected)
|
||||||
return;
|
return;
|
||||||
|
|
0
tools/ios_xcode_template/data.pck
Normal file
0
tools/ios_xcode_template/data.pck
Normal file
469
tools/ios_xcode_template/godot_ios.xcodeproj/project.pbxproj
Normal file
469
tools/ios_xcode_template/godot_ios.xcodeproj/project.pbxproj
Normal file
|
@ -0,0 +1,469 @@
|
||||||
|
// !$*UTF8*$!
|
||||||
|
{
|
||||||
|
archiveVersion = 1;
|
||||||
|
classes = {
|
||||||
|
};
|
||||||
|
objectVersion = 46;
|
||||||
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; };
|
||||||
|
D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */; };
|
||||||
|
D0BCFE3C18AEBDA2004A7AAE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */; };
|
||||||
|
D0BCFE3E18AEBDA2004A7AAE /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */; };
|
||||||
|
D0BCFE4018AEBDA2004A7AAE /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */; };
|
||||||
|
D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */; };
|
||||||
|
D0BCFE6218AEBDA3004A7AAE /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */; };
|
||||||
|
D0BCFE6318AEBDA3004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; };
|
||||||
|
D0BCFE6418AEBDA3004A7AAE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */; };
|
||||||
|
D0BCFE6C18AEBDA3004A7AAE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE6A18AEBDA3004A7AAE /* InfoPlist.strings */; };
|
||||||
|
D0BCFE6E18AEBDA3004A7AAE /* godot_iosTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D0BCFE6D18AEBDA3004A7AAE /* godot_iosTests.m */; };
|
||||||
|
D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7718AEBFEB004A7AAE /* data.pck */; };
|
||||||
|
D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
|
/* Begin PBXContainerItemProxy section */
|
||||||
|
D0BCFE6518AEBDA3004A7AAE /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = D0BCFE2C18AEBDA2004A7AAE /* Project object */;
|
||||||
|
proxyType = 1;
|
||||||
|
remoteGlobalIDString = D0BCFE3318AEBDA2004A7AAE;
|
||||||
|
remoteInfo = godot_ios;
|
||||||
|
};
|
||||||
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
|
/* Begin PBXFileReference section */
|
||||||
|
D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = godot_ios.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||||
|
D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
|
||||||
|
D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
||||||
|
D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; };
|
||||||
|
D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
|
||||||
|
D0BCFE4318AEBDA2004A7AAE /* godot_ios-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "godot_ios-Info.plist"; sourceTree = "<group>"; };
|
||||||
|
D0BCFE4518AEBDA2004A7AAE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
D0BCFE4918AEBDA2004A7AAE /* godot_ios-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "godot_ios-Prefix.pch"; sourceTree = "<group>"; };
|
||||||
|
D0BCFE6018AEBDA3004A7AAE /* godot_iosTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = godot_iosTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
|
||||||
|
D0BCFE6918AEBDA3004A7AAE /* godot_iosTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "godot_iosTests-Info.plist"; sourceTree = "<group>"; };
|
||||||
|
D0BCFE6B18AEBDA3004A7AAE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
D0BCFE6D18AEBDA3004A7AAE /* godot_iosTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = godot_iosTests.m; sourceTree = "<group>"; };
|
||||||
|
D0BCFE7718AEBFEB004A7AAE /* data.pck */ = {isa = PBXFileReference; lastKnownFileType = file; path = data.pck; sourceTree = "<group>"; };
|
||||||
|
D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = godot_opt.iphone; sourceTree = "<group>"; };
|
||||||
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
D0BCFE3118AEBDA2004A7AAE /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
D0BCFE4018AEBDA2004A7AAE /* OpenGLES.framework in Frameworks */,
|
||||||
|
D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */,
|
||||||
|
D0BCFE3C18AEBDA2004A7AAE /* UIKit.framework in Frameworks */,
|
||||||
|
D0BCFE3E18AEBDA2004A7AAE /* GLKit.framework in Frameworks */,
|
||||||
|
D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
D0BCFE5D18AEBDA3004A7AAE /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
D0BCFE6218AEBDA3004A7AAE /* XCTest.framework in Frameworks */,
|
||||||
|
D0BCFE6418AEBDA3004A7AAE /* UIKit.framework in Frameworks */,
|
||||||
|
D0BCFE6318AEBDA3004A7AAE /* Foundation.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXGroup section */
|
||||||
|
D0BCFE2B18AEBDA2004A7AAE = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */,
|
||||||
|
D0BCFE7718AEBFEB004A7AAE /* data.pck */,
|
||||||
|
D0BCFE4118AEBDA2004A7AAE /* godot_ios */,
|
||||||
|
D0BCFE6718AEBDA3004A7AAE /* godot_iosTests */,
|
||||||
|
D0BCFE3618AEBDA2004A7AAE /* Frameworks */,
|
||||||
|
D0BCFE3518AEBDA2004A7AAE /* Products */,
|
||||||
|
);
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
D0BCFE3518AEBDA2004A7AAE /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */,
|
||||||
|
D0BCFE6018AEBDA3004A7AAE /* godot_iosTests.xctest */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
D0BCFE3618AEBDA2004A7AAE /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */,
|
||||||
|
D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */,
|
||||||
|
D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */,
|
||||||
|
D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */,
|
||||||
|
D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */,
|
||||||
|
D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
D0BCFE4118AEBDA2004A7AAE /* godot_ios */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
D0BCFE4218AEBDA2004A7AAE /* Supporting Files */,
|
||||||
|
);
|
||||||
|
path = godot_ios;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
D0BCFE4218AEBDA2004A7AAE /* Supporting Files */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
D0BCFE4318AEBDA2004A7AAE /* godot_ios-Info.plist */,
|
||||||
|
D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */,
|
||||||
|
D0BCFE4918AEBDA2004A7AAE /* godot_ios-Prefix.pch */,
|
||||||
|
);
|
||||||
|
name = "Supporting Files";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
D0BCFE6718AEBDA3004A7AAE /* godot_iosTests */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
D0BCFE6D18AEBDA3004A7AAE /* godot_iosTests.m */,
|
||||||
|
D0BCFE6818AEBDA3004A7AAE /* Supporting Files */,
|
||||||
|
);
|
||||||
|
path = godot_iosTests;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
D0BCFE6818AEBDA3004A7AAE /* Supporting Files */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
D0BCFE6918AEBDA3004A7AAE /* godot_iosTests-Info.plist */,
|
||||||
|
D0BCFE6A18AEBDA3004A7AAE /* InfoPlist.strings */,
|
||||||
|
);
|
||||||
|
name = "Supporting Files";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXGroup section */
|
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */
|
||||||
|
D0BCFE3318AEBDA2004A7AAE /* godot_ios */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */;
|
||||||
|
buildPhases = (
|
||||||
|
D0BCFE3018AEBDA2004A7AAE /* Sources */,
|
||||||
|
D0BCFE3118AEBDA2004A7AAE /* Frameworks */,
|
||||||
|
D0BCFE3218AEBDA2004A7AAE /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = godot_ios;
|
||||||
|
productName = godot_ios;
|
||||||
|
productReference = D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
|
D0BCFE5F18AEBDA3004A7AAE /* godot_iosTests */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = D0BCFE7418AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_iosTests" */;
|
||||||
|
buildPhases = (
|
||||||
|
D0BCFE5C18AEBDA3004A7AAE /* Sources */,
|
||||||
|
D0BCFE5D18AEBDA3004A7AAE /* Frameworks */,
|
||||||
|
D0BCFE5E18AEBDA3004A7AAE /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
D0BCFE6618AEBDA3004A7AAE /* PBXTargetDependency */,
|
||||||
|
);
|
||||||
|
name = godot_iosTests;
|
||||||
|
productName = godot_iosTests;
|
||||||
|
productReference = D0BCFE6018AEBDA3004A7AAE /* godot_iosTests.xctest */;
|
||||||
|
productType = "com.apple.product-type.bundle.unit-test";
|
||||||
|
};
|
||||||
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXProject section */
|
||||||
|
D0BCFE2C18AEBDA2004A7AAE /* Project object */ = {
|
||||||
|
isa = PBXProject;
|
||||||
|
attributes = {
|
||||||
|
LastUpgradeCheck = 0500;
|
||||||
|
ORGANIZATIONNAME = Okam;
|
||||||
|
TargetAttributes = {
|
||||||
|
D0BCFE5F18AEBDA3004A7AAE = {
|
||||||
|
TestTargetID = D0BCFE3318AEBDA2004A7AAE;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
buildConfigurationList = D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */;
|
||||||
|
compatibilityVersion = "Xcode 3.2";
|
||||||
|
developmentRegion = English;
|
||||||
|
hasScannedForEncodings = 0;
|
||||||
|
knownRegions = (
|
||||||
|
en,
|
||||||
|
Base,
|
||||||
|
);
|
||||||
|
mainGroup = D0BCFE2B18AEBDA2004A7AAE;
|
||||||
|
productRefGroup = D0BCFE3518AEBDA2004A7AAE /* Products */;
|
||||||
|
projectDirPath = "";
|
||||||
|
projectRoot = "";
|
||||||
|
targets = (
|
||||||
|
D0BCFE3318AEBDA2004A7AAE /* godot_ios */,
|
||||||
|
D0BCFE5F18AEBDA3004A7AAE /* godot_iosTests */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
|
D0BCFE3218AEBDA2004A7AAE /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */,
|
||||||
|
D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */,
|
||||||
|
D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
D0BCFE5E18AEBDA3004A7AAE /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
D0BCFE6C18AEBDA3004A7AAE /* InfoPlist.strings in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
D0BCFE3018AEBDA2004A7AAE /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
D0BCFE5C18AEBDA3004A7AAE /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
D0BCFE6E18AEBDA3004A7AAE /* godot_iosTests.m in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXTargetDependency section */
|
||||||
|
D0BCFE6618AEBDA3004A7AAE /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
target = D0BCFE3318AEBDA2004A7AAE /* godot_ios */;
|
||||||
|
targetProxy = D0BCFE6518AEBDA3004A7AAE /* PBXContainerItemProxy */;
|
||||||
|
};
|
||||||
|
/* End PBXTargetDependency section */
|
||||||
|
|
||||||
|
/* Begin PBXVariantGroup section */
|
||||||
|
D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
D0BCFE4518AEBDA2004A7AAE /* en */,
|
||||||
|
);
|
||||||
|
name = InfoPlist.strings;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
D0BCFE6A18AEBDA3004A7AAE /* InfoPlist.strings */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
D0BCFE6B18AEBDA3004A7AAE /* en */,
|
||||||
|
);
|
||||||
|
name = InfoPlist.strings;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXVariantGroup section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
D0BCFE6F18AEBDA3004A7AAE /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
D0BCFE7018AEBDA3004A7AAE /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
|
COPY_PHASE_STRIP = YES;
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
D0BCFE7218AEBDA3004A7AAE /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = "$(ARCHS_STANDARD)";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
|
||||||
|
INFOPLIST_FILE = "godot_ios/godot_ios-Info.plist";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALID_ARCHS = "armv7 armv7s";
|
||||||
|
WRAPPER_EXTENSION = app;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
D0BCFE7318AEBDA3004A7AAE /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = "$(ARCHS_STANDARD)";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
|
||||||
|
INFOPLIST_FILE = "godot_ios/godot_ios-Info.plist";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALID_ARCHS = "armv7 armv7s";
|
||||||
|
WRAPPER_EXTENSION = app;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
D0BCFE7518AEBDA3004A7AAE /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
|
||||||
|
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/godot_ios.app/godot_ios";
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(SDKROOT)/Developer/Library/Frameworks",
|
||||||
|
"$(inherited)",
|
||||||
|
"$(DEVELOPER_FRAMEWORKS_DIR)",
|
||||||
|
);
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
INFOPLIST_FILE = "godot_iosTests/godot_iosTests-Info.plist";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
TEST_HOST = "$(BUNDLE_LOADER)";
|
||||||
|
WRAPPER_EXTENSION = xctest;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
D0BCFE7618AEBDA3004A7AAE /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
|
||||||
|
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/godot_ios.app/godot_ios";
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(SDKROOT)/Developer/Library/Frameworks",
|
||||||
|
"$(inherited)",
|
||||||
|
"$(DEVELOPER_FRAMEWORKS_DIR)",
|
||||||
|
);
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
|
||||||
|
INFOPLIST_FILE = "godot_iosTests/godot_iosTests-Info.plist";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
TEST_HOST = "$(BUNDLE_LOADER)";
|
||||||
|
WRAPPER_EXTENSION = xctest;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
D0BCFE6F18AEBDA3004A7AAE /* Debug */,
|
||||||
|
D0BCFE7018AEBDA3004A7AAE /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
D0BCFE7218AEBDA3004A7AAE /* Debug */,
|
||||||
|
D0BCFE7318AEBDA3004A7AAE /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
};
|
||||||
|
D0BCFE7418AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_iosTests" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
D0BCFE7518AEBDA3004A7AAE /* Debug */,
|
||||||
|
D0BCFE7618AEBDA3004A7AAE /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
};
|
||||||
|
rootObject = D0BCFE2C18AEBDA2004A7AAE /* Project object */;
|
||||||
|
}
|
7
tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "self:godot_ios.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
Binary file not shown.
|
@ -0,0 +1,96 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "0500"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE"
|
||||||
|
BuildableName = "godot_ios.app"
|
||||||
|
BlueprintName = "godot_ios"
|
||||||
|
ReferencedContainer = "container:godot_ios.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
<Testables>
|
||||||
|
<TestableReference
|
||||||
|
skipped = "NO">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "D0BCFE5F18AEBDA3004A7AAE"
|
||||||
|
BuildableName = "godot_iosTests.xctest"
|
||||||
|
BlueprintName = "godot_iosTests"
|
||||||
|
ReferencedContainer = "container:godot_ios.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</TestableReference>
|
||||||
|
</Testables>
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE"
|
||||||
|
BuildableName = "godot_ios.app"
|
||||||
|
BlueprintName = "godot_ios"
|
||||||
|
ReferencedContainer = "container:godot_ios.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<BuildableProductRunnable>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE"
|
||||||
|
BuildableName = "godot_ios.app"
|
||||||
|
BlueprintName = "godot_ios"
|
||||||
|
ReferencedContainer = "container:godot_ios.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<BuildableProductRunnable>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE"
|
||||||
|
BuildableName = "godot_ios.app"
|
||||||
|
BlueprintName = "godot_ios"
|
||||||
|
ReferencedContainer = "container:godot_ios.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>SchemeUserState</key>
|
||||||
|
<dict>
|
||||||
|
<key>godot_ios.xcscheme</key>
|
||||||
|
<dict>
|
||||||
|
<key>orderHint</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>SuppressBuildableAutocreation</key>
|
||||||
|
<dict>
|
||||||
|
<key>D0BCFE3318AEBDA2004A7AAE</key>
|
||||||
|
<dict>
|
||||||
|
<key>primary</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<key>D0BCFE5F18AEBDA3004A7AAE</key>
|
||||||
|
<dict>
|
||||||
|
<key>primary</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,2 @@
|
||||||
|
/* Localized versions of Info.plist keys */
|
||||||
|
|
47
tools/ios_xcode_template/godot_ios/godot_ios-Info.plist
Normal file
47
tools/ios_xcode_template/godot_ios/godot_ios-Info.plist
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleDisplayName</key>
|
||||||
|
<string>${PRODUCT_NAME}</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>godot_opt.iphone</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>com.okamstudios.${PRODUCT_NAME:rfc1034identifier}</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>${PRODUCT_NAME}</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
<true/>
|
||||||
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
|
<array>
|
||||||
|
<string>armv7</string>
|
||||||
|
</array>
|
||||||
|
<key>UIStatusBarHidden</key>
|
||||||
|
<true/>
|
||||||
|
<key>UISupportedInterfaceOrientations</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
16
tools/ios_xcode_template/godot_ios/godot_ios-Prefix.pch
Normal file
16
tools/ios_xcode_template/godot_ios/godot_ios-Prefix.pch
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
//
|
||||||
|
// Prefix header
|
||||||
|
//
|
||||||
|
// The contents of this file are implicitly included at the beginning of every source file.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Availability.h>
|
||||||
|
|
||||||
|
#ifndef __IPHONE_5_0
|
||||||
|
#warning "This project uses features only available in iOS SDK 5.0 and later."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __OBJC__
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#endif
|
18
tools/ios_xcode_template/godot_ios/main.m
Normal file
18
tools/ios_xcode_template/godot_ios/main.m
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
//
|
||||||
|
// main.m
|
||||||
|
// godot_ios
|
||||||
|
//
|
||||||
|
// Created by Ariel m on 2/14/14.
|
||||||
|
// Copyright (c) 2014 Okam. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
#import "AppDelegate.h"
|
||||||
|
|
||||||
|
int main(int argc, char * argv[])
|
||||||
|
{
|
||||||
|
@autoreleasepool {
|
||||||
|
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
/* Localized versions of Info.plist keys */
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>${EXECUTABLE_NAME}</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>com.okamstudios.${PRODUCT_NAME:rfc1034identifier}</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>BNDL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
34
tools/ios_xcode_template/godot_iosTests/godot_iosTests.m
Normal file
34
tools/ios_xcode_template/godot_iosTests/godot_iosTests.m
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
//
|
||||||
|
// godot_iosTests.m
|
||||||
|
// godot_iosTests
|
||||||
|
//
|
||||||
|
// Created by Ariel m on 2/14/14.
|
||||||
|
// Copyright (c) 2014 Okam. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <XCTest/XCTest.h>
|
||||||
|
|
||||||
|
@interface godot_iosTests : XCTestCase
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation godot_iosTests
|
||||||
|
|
||||||
|
- (void)setUp
|
||||||
|
{
|
||||||
|
[super setUp];
|
||||||
|
// Put setup code here. This method is called before the invocation of each test method in the class.
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)tearDown
|
||||||
|
{
|
||||||
|
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
||||||
|
[super tearDown];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)testExample
|
||||||
|
{
|
||||||
|
XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
Loading…
Reference in a new issue