Browse Source

Merge remote-tracking branch 'origin/master' into ref-dest-rect

dmuratshin 9 years ago
parent
commit
23b5343902
55 changed files with 233 additions and 85 deletions
  1. 3 0
      .gitignore
  2. BIN
      doc/doc.zip
  3. BIN
      doc/wiki.zip
  4. 5 5
      examples/Demo/proj.android/AndroidManifest.xml
  5. 2 0
      examples/Demo/proj.cmake/build_emsc.bat
  6. 2 0
      examples/Demo/proj.cmake/build_emsc_release.bat
  7. 5 1
      examples/DemoBox2D/proj.android/AndroidManifest.xml
  8. 2 0
      examples/DemoBox2D/proj.cmake/build_emsc.bat
  9. 2 0
      examples/DemoBox2D/proj.cmake/build_emsc_release.bat
  10. 5 1
      examples/Game/part1/proj.android/AndroidManifest.xml
  11. 2 0
      examples/Game/part1/proj.cmake/build_emsc.bat
  12. 2 0
      examples/Game/part1/proj.cmake/build_emsc_release.bat
  13. 5 1
      examples/Game/part2/proj.android/AndroidManifest.xml
  14. 2 0
      examples/Game/part2/proj.cmake/build_emsc.bat
  15. 2 0
      examples/Game/part2/proj.cmake/build_emsc_release.bat
  16. 5 1
      examples/Game/part3/proj.android/AndroidManifest.xml
  17. 2 0
      examples/Game/part3/proj.cmake/build_emsc.bat
  18. 2 0
      examples/Game/part3/proj.cmake/build_emsc_release.bat
  19. 5 1
      examples/Game/part4/proj.android/AndroidManifest.xml
  20. 2 0
      examples/Game/part4/proj.cmake/build_emsc.bat
  21. 2 0
      examples/Game/part4/proj.cmake/build_emsc_release.bat
  22. 5 1
      examples/Game/part5/proj.android/AndroidManifest.xml
  23. 2 0
      examples/Game/part5/proj.cmake/build_emsc.bat
  24. 2 0
      examples/Game/part5/proj.cmake/build_emsc_release.bat
  25. 5 1
      examples/HelloWorld/proj.android/AndroidManifest.xml
  26. 2 0
      examples/HelloWorld/proj.cmake/build_emsc.bat
  27. 2 0
      examples/HelloWorld/proj.cmake/build_emsc_release.bat
  28. 5 1
      examples/Match3/proj.android/AndroidManifest.xml
  29. 2 0
      examples/Match3/proj.cmake/build_emsc.bat
  30. 2 0
      examples/Match3/proj.cmake/build_emsc_release.bat
  31. BIN
      libs/SDL2.dll
  32. BIN
      libs/SDL2.lib
  33. BIN
      libs/SDL2main.lib
  34. 3 3
      oxygine/SDL/android/extension/build.gradle
  35. 7 7
      oxygine/SDL/android/lib/build.gradle
  36. 39 25
      oxygine/SDL/android/lib/src/org/libsdl/app/SDLActivity.java
  37. 18 12
      oxygine/src/DebugActor.cpp
  38. 2 1
      oxygine/src/DebugActor.h
  39. 8 0
      oxygine/src/Image.cpp
  40. 1 0
      oxygine/src/Image.h
  41. 1 0
      oxygine/src/WebImage.cpp
  42. 3 1
      oxygine/src/core/ThreadDispatcher.cpp
  43. 1 1
      oxygine/src/core/ThreadDispatcher.h
  44. 1 1
      oxygine/src/core/ZipFileSystem.cpp
  45. 2 1
      oxygine/src/core/gl/NativeTextureGLES.cpp
  46. 21 3
      oxygine/src/core/oxygine.cpp
  47. 2 2
      oxygine/src/dev_tools/TexturesInspector.cpp
  48. 16 7
      oxygine/src/res/Resources.cpp
  49. 4 1
      oxygine/src/res/Resources.h
  50. 2 4
      readme/emscripten.txt
  51. 4 0
      tools/others/build_oxygine_with_sdl.py
  52. 5 2
      tools/resbuild/xml_processor.py
  53. 5 1
      tools/templates/proj.android/AndroidManifest.xml
  54. 2 0
      tools/templates/proj.cmake/build_emsc.bat
  55. 2 0
      tools/templates/proj.cmake/build_emsc_release.bat

+ 3 - 0
.gitignore

@@ -62,3 +62,6 @@ build
 /examples/Demo/proj.cmake/mingw
 /examples/Demo/proj.cmake/mingw
 **/proj.marmalade/build_demo_vc*
 **/proj.marmalade/build_demo_vc*
 .DS_Store
 .DS_Store
+*.VC.db
+*.VC.VC.opendb
+oxygine/SDL/win32/oxygine.vcxproj.user

BIN
doc/doc.zip


BIN
doc/wiki.zip


+ 5 - 5
examples/Demo/proj.android/AndroidManifest.xml

@@ -14,7 +14,7 @@
         <activity android:name="org.oxygine.Demo.MainActivity"
         <activity android:name="org.oxygine.Demo.MainActivity"
                   android:label="@string/app_name"
                   android:label="@string/app_name"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
-                  android:configChanges="locale|orientation|keyboardHidden" 
+                  android:configChanges="locale|orientation|keyboardHidden|screenSize" 
                   android:screenOrientation="landscape">
                   android:screenOrientation="landscape">
 
 
             <intent-filter>
             <intent-filter>
@@ -23,13 +23,13 @@
             </intent-filter>
             </intent-filter>
         </activity>
         </activity>
     </application>
     </application>
-   
-    <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests demo-->    
-    <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests demo (downloading files)-->
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  
 
 
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
 
 
+    <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
+    <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  
+
     <!-- OpenGL ES 2.0 -->
     <!-- OpenGL ES 2.0 -->
     <uses-feature android:glEsVersion="0x00020000" /> 
     <uses-feature android:glEsVersion="0x00020000" /> 
 
 

+ 2 - 0
examples/Demo/proj.cmake/build_emsc.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../..//tools/others/embed_folder_js.py -s ../data
 python ../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc
 mkdir build_emsc

+ 2 - 0
examples/Demo/proj.cmake/build_emsc_release.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../..//tools/others/embed_folder_js.py -s ../data
 python ../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc_release
 mkdir build_emsc_release

+ 5 - 1
examples/DemoBox2D/proj.android/AndroidManifest.xml

@@ -14,7 +14,7 @@
         <activity android:name="org.oxygine.DemoBox2D.MainActivity"
         <activity android:name="org.oxygine.DemoBox2D.MainActivity"
                   android:label="@string/app_name"
                   android:label="@string/app_name"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
-                  android:configChanges="locale|orientation|keyboardHidden" 
+                  android:configChanges="locale|orientation|keyboardHidden|screenSize" 
                   android:screenOrientation="landscape">
                   android:screenOrientation="landscape">
 
 
             <intent-filter>
             <intent-filter>
@@ -26,6 +26,10 @@
 
 
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
 
 
+    <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
+    <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  
+
     <!-- OpenGL ES 2.0 -->
     <!-- OpenGL ES 2.0 -->
     <uses-feature android:glEsVersion="0x00020000" /> 
     <uses-feature android:glEsVersion="0x00020000" /> 
 
 

+ 2 - 0
examples/DemoBox2D/proj.cmake/build_emsc.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../..//tools/others/embed_folder_js.py -s ../data
 python ../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc
 mkdir build_emsc

+ 2 - 0
examples/DemoBox2D/proj.cmake/build_emsc_release.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../..//tools/others/embed_folder_js.py -s ../data
 python ../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc_release
 mkdir build_emsc_release

+ 5 - 1
examples/Game/part1/proj.android/AndroidManifest.xml

@@ -14,7 +14,7 @@
         <activity android:name="org.oxygine.GamePart1.MainActivity"
         <activity android:name="org.oxygine.GamePart1.MainActivity"
                   android:label="@string/app_name"
                   android:label="@string/app_name"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
-                  android:configChanges="locale|orientation|keyboardHidden" 
+                  android:configChanges="locale|orientation|keyboardHidden|screenSize" 
                   android:screenOrientation="landscape">
                   android:screenOrientation="landscape">
 
 
             <intent-filter>
             <intent-filter>
@@ -26,6 +26,10 @@
 
 
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
 
 
+    <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
+    <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  
+
     <!-- OpenGL ES 2.0 -->
     <!-- OpenGL ES 2.0 -->
     <uses-feature android:glEsVersion="0x00020000" /> 
     <uses-feature android:glEsVersion="0x00020000" /> 
 
 

+ 2 - 0
examples/Game/part1/proj.cmake/build_emsc.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc
 mkdir build_emsc

+ 2 - 0
examples/Game/part1/proj.cmake/build_emsc_release.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc_release
 mkdir build_emsc_release

+ 5 - 1
examples/Game/part2/proj.android/AndroidManifest.xml

@@ -14,7 +14,7 @@
         <activity android:name="org.oxygine.GamePart2.MainActivity"
         <activity android:name="org.oxygine.GamePart2.MainActivity"
                   android:label="@string/app_name"
                   android:label="@string/app_name"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
-                  android:configChanges="locale|orientation|keyboardHidden" 
+                  android:configChanges="locale|orientation|keyboardHidden|screenSize" 
                   android:screenOrientation="landscape">
                   android:screenOrientation="landscape">
 
 
             <intent-filter>
             <intent-filter>
@@ -26,6 +26,10 @@
 
 
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
 
 
+    <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
+    <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  
+
     <!-- OpenGL ES 2.0 -->
     <!-- OpenGL ES 2.0 -->
     <uses-feature android:glEsVersion="0x00020000" /> 
     <uses-feature android:glEsVersion="0x00020000" /> 
 
 

+ 2 - 0
examples/Game/part2/proj.cmake/build_emsc.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc
 mkdir build_emsc

+ 2 - 0
examples/Game/part2/proj.cmake/build_emsc_release.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc_release
 mkdir build_emsc_release

+ 5 - 1
examples/Game/part3/proj.android/AndroidManifest.xml

@@ -14,7 +14,7 @@
         <activity android:name="org.oxygine.GamePart3.MainActivity"
         <activity android:name="org.oxygine.GamePart3.MainActivity"
                   android:label="@string/app_name"
                   android:label="@string/app_name"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
-                  android:configChanges="locale|orientation|keyboardHidden" 
+                  android:configChanges="locale|orientation|keyboardHidden|screenSize" 
                   android:screenOrientation="landscape">
                   android:screenOrientation="landscape">
 
 
             <intent-filter>
             <intent-filter>
@@ -26,6 +26,10 @@
 
 
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
 
 
+    <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
+    <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  
+
     <!-- OpenGL ES 2.0 -->
     <!-- OpenGL ES 2.0 -->
     <uses-feature android:glEsVersion="0x00020000" /> 
     <uses-feature android:glEsVersion="0x00020000" /> 
 
 

+ 2 - 0
examples/Game/part3/proj.cmake/build_emsc.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc
 mkdir build_emsc

+ 2 - 0
examples/Game/part3/proj.cmake/build_emsc_release.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc_release
 mkdir build_emsc_release

+ 5 - 1
examples/Game/part4/proj.android/AndroidManifest.xml

@@ -14,7 +14,7 @@
         <activity android:name="org.oxygine.GamePart4.MainActivity"
         <activity android:name="org.oxygine.GamePart4.MainActivity"
                   android:label="@string/app_name"
                   android:label="@string/app_name"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
-                  android:configChanges="locale|orientation|keyboardHidden" 
+                  android:configChanges="locale|orientation|keyboardHidden|screenSize" 
                   android:screenOrientation="landscape">
                   android:screenOrientation="landscape">
 
 
             <intent-filter>
             <intent-filter>
@@ -26,6 +26,10 @@
 
 
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
 
 
+    <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
+    <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  
+
     <!-- OpenGL ES 2.0 -->
     <!-- OpenGL ES 2.0 -->
     <uses-feature android:glEsVersion="0x00020000" /> 
     <uses-feature android:glEsVersion="0x00020000" /> 
 
 

+ 2 - 0
examples/Game/part4/proj.cmake/build_emsc.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc
 mkdir build_emsc

+ 2 - 0
examples/Game/part4/proj.cmake/build_emsc_release.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc_release
 mkdir build_emsc_release

+ 5 - 1
examples/Game/part5/proj.android/AndroidManifest.xml

@@ -14,7 +14,7 @@
         <activity android:name="org.oxygine.GamePart5.MainActivity"
         <activity android:name="org.oxygine.GamePart5.MainActivity"
                   android:label="@string/app_name"
                   android:label="@string/app_name"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
-                  android:configChanges="locale|orientation|keyboardHidden" 
+                  android:configChanges="locale|orientation|keyboardHidden|screenSize" 
                   android:screenOrientation="landscape">
                   android:screenOrientation="landscape">
 
 
             <intent-filter>
             <intent-filter>
@@ -26,6 +26,10 @@
 
 
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
 
 
+    <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
+    <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  
+
     <!-- OpenGL ES 2.0 -->
     <!-- OpenGL ES 2.0 -->
     <uses-feature android:glEsVersion="0x00020000" /> 
     <uses-feature android:glEsVersion="0x00020000" /> 
 
 

+ 2 - 0
examples/Game/part5/proj.cmake/build_emsc.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc
 mkdir build_emsc

+ 2 - 0
examples/Game/part5/proj.cmake/build_emsc_release.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 python ../../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc_release
 mkdir build_emsc_release

+ 5 - 1
examples/HelloWorld/proj.android/AndroidManifest.xml

@@ -14,7 +14,7 @@
         <activity android:name="org.oxygine.HelloWorld.MainActivity"
         <activity android:name="org.oxygine.HelloWorld.MainActivity"
                   android:label="@string/app_name"
                   android:label="@string/app_name"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
-                  android:configChanges="locale|orientation|keyboardHidden" 
+                  android:configChanges="locale|orientation|keyboardHidden|screenSize" 
                   android:screenOrientation="landscape">
                   android:screenOrientation="landscape">
 
 
             <intent-filter>
             <intent-filter>
@@ -26,6 +26,10 @@
 
 
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
 
 
+    <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
+    <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  
+
     <!-- OpenGL ES 2.0 -->
     <!-- OpenGL ES 2.0 -->
     <uses-feature android:glEsVersion="0x00020000" /> 
     <uses-feature android:glEsVersion="0x00020000" /> 
 
 

+ 2 - 0
examples/HelloWorld/proj.cmake/build_emsc.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../..//tools/others/embed_folder_js.py -s ../data
 python ../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc
 mkdir build_emsc

+ 2 - 0
examples/HelloWorld/proj.cmake/build_emsc_release.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../..//tools/others/embed_folder_js.py -s ../data
 python ../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc_release
 mkdir build_emsc_release

+ 5 - 1
examples/Match3/proj.android/AndroidManifest.xml

@@ -14,7 +14,7 @@
         <activity android:name="org.oxygine.Match3.MainActivity"
         <activity android:name="org.oxygine.Match3.MainActivity"
                   android:label="@string/app_name"
                   android:label="@string/app_name"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
-                  android:configChanges="locale|orientation|keyboardHidden" 
+                  android:configChanges="locale|orientation|keyboardHidden|screenSize" 
                   android:screenOrientation="landscape">
                   android:screenOrientation="landscape">
 
 
             <intent-filter>
             <intent-filter>
@@ -26,6 +26,10 @@
 
 
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
 
 
+    <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
+    <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  
+
     <!-- OpenGL ES 2.0 -->
     <!-- OpenGL ES 2.0 -->
     <uses-feature android:glEsVersion="0x00020000" /> 
     <uses-feature android:glEsVersion="0x00020000" /> 
 
 

+ 2 - 0
examples/Match3/proj.cmake/build_emsc.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../..//tools/others/embed_folder_js.py -s ../data
 python ../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc
 mkdir build_emsc

+ 2 - 0
examples/Match3/proj.cmake/build_emsc_release.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ../../..//tools/others/embed_folder_js.py -s ../data
 python ../../..//tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc_release
 mkdir build_emsc_release

BIN
libs/SDL2.dll


BIN
libs/SDL2.lib


BIN
libs/SDL2main.lib


+ 3 - 3
oxygine/SDL/android/extension/build.gradle

@@ -10,9 +10,9 @@ buildscript {
 apply plugin: 'com.android.library'
 apply plugin: 'com.android.library'
 
 
 android {
 android {
-        compileSdkVersion 23
-  		buildToolsVersion '23.0.3'
-
+        compileSdkVersion rootProject.android.compileSdkVersion
+        buildToolsVersion rootProject.android.buildToolsVersion
+        
         sourceSets {
         sourceSets {
             main {
             main {
                 manifest.srcFile 'AndroidManifest.xml'
                 manifest.srcFile 'AndroidManifest.xml'

+ 7 - 7
oxygine/SDL/android/lib/build.gradle

@@ -11,17 +11,17 @@ apply plugin: 'com.android.library'
 
 
 dependencies {
 dependencies {
         compile project(':oxygine-extension')
         compile project(':oxygine-extension')
-    }
+}
 
 
 android {
 android {
-		lintOptions {
-        	abortOnError false
-    	}
+        lintOptions {
+            abortOnError false
+        }
 
 
-        compileSdkVersion 23
-  		buildToolsVersion '23.0.2'
+        compileSdkVersion rootProject.android.compileSdkVersion
+        buildToolsVersion rootProject.android.buildToolsVersion
 
 
-  		sourceSets {
+        sourceSets {
             main {
             main {
                 manifest.srcFile 'AndroidManifest.xml'
                 manifest.srcFile 'AndroidManifest.xml'
                 java.srcDirs = ['src']
                 java.srcDirs = ['src']

+ 39 - 25
oxygine/SDL/android/lib/src/org/libsdl/app/SDLActivity.java

@@ -369,7 +369,10 @@ public class SDLActivity extends Activity {
                 break;
                 break;
             case COMMAND_TEXTEDIT_HIDE:
             case COMMAND_TEXTEDIT_HIDE:
                 if (mTextEdit != null) {
                 if (mTextEdit != null) {
-                    mTextEdit.setVisibility(View.GONE);
+                    // Note: On some devices setting view to GONE creates a flicker in landscape.
+                    // Setting the View's sizes to 0 is similar to GONE but without the flicker.
+                    // The sizes will be set to useful values when the keyboard is shown again.
+                    mTextEdit.setLayoutParams(new RelativeLayout.LayoutParams(0, 0));
 
 
                     InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                     InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                     imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0);
                     imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0);
@@ -724,6 +727,21 @@ public class SDLActivity extends Activity {
         }
         }
     }
     }
 
 
+    // Check if a given device is considered a possible SDL joystick
+    public static boolean isDeviceSDLJoystick(int deviceId) {
+        InputDevice device = InputDevice.getDevice(deviceId);
+        // We cannot use InputDevice.isVirtual before API 16, so let's accept
+        // only nonnegative device ids (VIRTUAL_KEYBOARD equals -1)
+        if ((device == null) || (deviceId < 0)) {
+            return false;
+        }
+        int sources = device.getSources();
+        return (((sources & InputDevice.SOURCE_CLASS_JOYSTICK) == InputDevice.SOURCE_CLASS_JOYSTICK) ||
+                ((sources & InputDevice.SOURCE_DPAD) == InputDevice.SOURCE_DPAD) ||
+                ((sources & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD)
+        );
+    }
+
     // APK expansion files support
     // APK expansion files support
 
 
     /** com.android.vending.expansion.zipfile.ZipResourceFile object or null. */
     /** com.android.vending.expansion.zipfile.ZipResourceFile object or null. */
@@ -1220,23 +1238,25 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
     @Override
     @Override
     public boolean onKey(View  v, int keyCode, KeyEvent event) {
     public boolean onKey(View  v, int keyCode, KeyEvent event) {
         // Dispatch the different events depending on where they come from
         // Dispatch the different events depending on where they come from
-        // Some SOURCE_DPAD or SOURCE_GAMEPAD are also SOURCE_KEYBOARD
-        // So, we try to process them as DPAD or GAMEPAD events first, if that fails we try them as KEYBOARD
-
-        if ( (event.getSource() & InputDevice.SOURCE_GAMEPAD) != 0 ||
-                   (event.getSource() & InputDevice.SOURCE_DPAD) != 0 ) {
+        // Some SOURCE_JOYSTICK, SOURCE_DPAD or SOURCE_GAMEPAD are also SOURCE_KEYBOARD
+        // So, we try to process them as JOYSTICK/DPAD/GAMEPAD events first, if that fails we try them as KEYBOARD
+        //
+        // Furthermore, it's possible a game controller has SOURCE_KEYBOARD and
+        // SOURCE_JOYSTICK, while its key events arrive from the keyboard source
+        // So, retrieve the device itself and check all of its sources
+        if (SDLActivity.isDeviceSDLJoystick(event.getDeviceId())) {
+            // Note that we always process a pressed/released button here, as an unopened
+            // SDL_Joystick's button press should not be processed as a keyboard's key press
             if (event.getAction() == KeyEvent.ACTION_DOWN) {
             if (event.getAction() == KeyEvent.ACTION_DOWN) {
-                if (SDLActivity.onNativePadDown(event.getDeviceId(), keyCode) == 0) {
-                    return true;
-                }
+                SDLActivity.onNativePadDown(event.getDeviceId(), keyCode);
+                return true;
             } else if (event.getAction() == KeyEvent.ACTION_UP) {
             } else if (event.getAction() == KeyEvent.ACTION_UP) {
-                if (SDLActivity.onNativePadUp(event.getDeviceId(), keyCode) == 0) {
-                    return true;
-                }
+                SDLActivity.onNativePadUp(event.getDeviceId(), keyCode);
+                return true;
             }
             }
         }
         }
 
 
-        if( (event.getSource() & InputDevice.SOURCE_KEYBOARD) != 0) {
+        if ((event.getSource() & InputDevice.SOURCE_KEYBOARD) != 0) {
             if (event.getAction() == KeyEvent.ACTION_DOWN) {
             if (event.getAction() == KeyEvent.ACTION_DOWN) {
                 //Log.v("SDL", "key down: " + keyCode);
                 //Log.v("SDL", "key down: " + keyCode);
                 SDLActivity.onNativeKeyDown(keyCode);
                 SDLActivity.onNativeKeyDown(keyCode);
@@ -1395,7 +1415,7 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
             }
             }
             SDLActivity.onNativeAccel(-x / SensorManager.GRAVITY_EARTH,
             SDLActivity.onNativeAccel(-x / SensorManager.GRAVITY_EARTH,
                                       y / SensorManager.GRAVITY_EARTH,
                                       y / SensorManager.GRAVITY_EARTH,
-                                      event.values[2] / SensorManager.GRAVITY_EARTH - 1);
+                                      event.values[2] / SensorManager.GRAVITY_EARTH);
         }
         }
     }
     }
 }
 }
@@ -1422,7 +1442,7 @@ class DummyEdit extends View implements View.OnKeyListener {
     public boolean onKey(View v, int keyCode, KeyEvent event) {
     public boolean onKey(View v, int keyCode, KeyEvent event) {
 
 
         // This handles the hardware keyboard input
         // This handles the hardware keyboard input
-        if (event.isPrintingKey()) {
+        if (event.isPrintingKey() || keyCode == KeyEvent.KEYCODE_SPACE) {
             if (event.getAction() == KeyEvent.ACTION_DOWN) {
             if (event.getAction() == KeyEvent.ACTION_DOWN) {
                 ic.commitText(String.valueOf((char) event.getUnicodeChar()), 1);
                 ic.commitText(String.valueOf((char) event.getUnicodeChar()), 1);
             }
             }
@@ -1485,7 +1505,7 @@ class SDLInputConnection extends BaseInputConnection {
          */
          */
         int keyCode = event.getKeyCode();
         int keyCode = event.getKeyCode();
         if (event.getAction() == KeyEvent.ACTION_DOWN) {
         if (event.getAction() == KeyEvent.ACTION_DOWN) {
-            if (event.isPrintingKey()) {
+            if (event.isPrintingKey() || keyCode == KeyEvent.KEYCODE_SPACE) {
                 commitText(String.valueOf((char) event.getUnicodeChar()), 1);
                 commitText(String.valueOf((char) event.getUnicodeChar()), 1);
             }
             }
             SDLActivity.onNativeKeyDown(keyCode);
             SDLActivity.onNativeKeyDown(keyCode);
@@ -1586,13 +1606,7 @@ class SDLJoystickHandler_API12 extends SDLJoystickHandler {
             if (joystick == null) {
             if (joystick == null) {
                 joystick = new SDLJoystick();
                 joystick = new SDLJoystick();
                 InputDevice joystickDevice = InputDevice.getDevice(deviceIds[i]);
                 InputDevice joystickDevice = InputDevice.getDevice(deviceIds[i]);
-
-                if ( 
-                      (joystickDevice.getSources() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0 
-                   ||
-                      (joystickDevice.getSources() & InputDevice.SOURCE_CLASS_BUTTON) != 0 
-                  )
-                {
+                if (SDLActivity.isDeviceSDLJoystick(deviceIds[i])) {
                     joystick.device_id = deviceIds[i];
                     joystick.device_id = deviceIds[i];
                     joystick.name = joystickDevice.getName();
                     joystick.name = joystickDevice.getName();
                     joystick.axes = new ArrayList<InputDevice.MotionRange>();
                     joystick.axes = new ArrayList<InputDevice.MotionRange>();
@@ -1601,7 +1615,7 @@ class SDLJoystickHandler_API12 extends SDLJoystickHandler {
                     List<InputDevice.MotionRange> ranges = joystickDevice.getMotionRanges();
                     List<InputDevice.MotionRange> ranges = joystickDevice.getMotionRanges();
                     Collections.sort(ranges, new RangeComparator());
                     Collections.sort(ranges, new RangeComparator());
                     for (InputDevice.MotionRange range : ranges ) {
                     for (InputDevice.MotionRange range : ranges ) {
-                        if ((range.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0 ) {
+                        if ((range.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
                             if (range.getAxis() == MotionEvent.AXIS_HAT_X ||
                             if (range.getAxis() == MotionEvent.AXIS_HAT_X ||
                                 range.getAxis() == MotionEvent.AXIS_HAT_Y) {
                                 range.getAxis() == MotionEvent.AXIS_HAT_Y) {
                                 joystick.hats.add(range);
                                 joystick.hats.add(range);
@@ -1655,7 +1669,7 @@ class SDLJoystickHandler_API12 extends SDLJoystickHandler {
 
 
     @Override
     @Override
     public boolean handleMotionEvent(MotionEvent event) {
     public boolean handleMotionEvent(MotionEvent event) {
-        if ( (event.getSource() & InputDevice.SOURCE_JOYSTICK) != 0) {
+        if ((event.getSource() & InputDevice.SOURCE_JOYSTICK) != 0) {
             int actionPointerIndex = event.getActionIndex();
             int actionPointerIndex = event.getActionIndex();
             int action = event.getActionMasked();
             int action = event.getActionMasked();
             switch(action) {
             switch(action) {

+ 18 - 12
oxygine/src/DebugActor.cpp

@@ -37,12 +37,17 @@
 #include "core/ios/ios.h"
 #include "core/ios/ios.h"
 #endif
 #endif
 
 
+#ifndef __S3E__
+#include "SDL_video.h"
+#endif
+
 namespace oxygine
 namespace oxygine
 {
 {
     Resources* DebugActor::resSystem = 0;
     Resources* DebugActor::resSystem = 0;
     file::ZipFileSystem zp;
     file::ZipFileSystem zp;
 
 
     spDebugActor DebugActor::instance;
     spDebugActor DebugActor::instance;
+    int _corner = 0;
 
 
     void DebugActor::initialize()
     void DebugActor::initialize()
     {
     {
@@ -54,7 +59,6 @@ namespace oxygine
         zp.setPrefix("system/");
         zp.setPrefix("system/");
         zp.add(system_data, system_size);
         zp.add(system_data, system_size);
 
 
-        //file::ZipFileSystem zp;
         file::mount(&zp);
         file::mount(&zp);
         resSystem = new Resources;
         resSystem = new Resources;
         resSystem->loadXML("system/res.xml", ResourcesLoadOptions().prebuiltFolder("system"));
         resSystem->loadXML("system/res.xml", ResourcesLoadOptions().prebuiltFolder("system"));
@@ -92,8 +96,7 @@ namespace oxygine
 
 
     void DebugActor::setCorner(int corner)
     void DebugActor::setCorner(int corner)
     {
     {
-        if (DebugActor::instance)
-            DebugActor::instance->setCornerPosition(corner);
+        _corner = corner;
     }
     }
 
 
     void DebugActor::release()
     void DebugActor::release()
@@ -107,7 +110,7 @@ namespace oxygine
 
 
     void DebugActor::setCornerPosition(int corner)
     void DebugActor::setCornerPosition(int corner)
     {
     {
-        _corner = corner;
+        setCorner(corner);
     }
     }
 
 
     void DebugActor::addButton(float& x, const char* name, const char* anim)
     void DebugActor::addButton(float& x, const char* name, const char* anim)
@@ -123,7 +126,7 @@ namespace oxygine
         btn->addEventListener(TouchEvent::CLICK, CLOSURE(this, &DebugActor::_btnClicked));
         btn->addEventListener(TouchEvent::CLICK, CLOSURE(this, &DebugActor::_btnClicked));
     }
     }
 
 
-    DebugActor::DebugActor(): _frames(0), _startTime(0), _corner(0), _showTexel2PixelErrors(false), _showTouchedActor(false)
+    DebugActor::DebugActor(): _frames(0), _startTime(0), _showTexel2PixelErrors(false), _showTouchedActor(false)
     {
     {
         DebugActor::initialize();
         DebugActor::initialize();
 
 
@@ -183,6 +186,16 @@ namespace oxygine
 
 
 
 
         instance = this;
         instance = this;
+        /*
+
+        float dpi = 0;
+        float dpi1 = 0;
+        float dpi2 = 0;
+        int ret = SDL_GetDisplayDPI(0, &dpi, &dpi1, &dpi2);
+        {
+            log::messageln("dpi>>>>> %d %f %f %f", ret, dpi, dpi1, dpi2);
+        }
+        */
     }
     }
 
 
     void DebugActor::onAdded2Stage()
     void DebugActor::onAdded2Stage()
@@ -195,13 +208,6 @@ namespace oxygine
         _stage->removeEventListeners(this);
         _stage->removeEventListeners(this);
     }
     }
 
 
-    /*
-    void DebugActor::addDebugString(const string &str)
-    {
-        _debugText += str;
-    }
-    */
-
     void DebugActor::addDebugString(const char* format, ...)
     void DebugActor::addDebugString(const char* format, ...)
     {
     {
         char buff[1024] = "";
         char buff[1024] = "";

+ 2 - 1
oxygine/src/DebugActor.h

@@ -33,6 +33,7 @@ namespace oxygine
         ~DebugActor();
         ~DebugActor();
 
 
         /**where to display DebugActor. 0 - top left, 1 - top right, 2 - bottom right, 3 - bottom left corner*/
         /**where to display DebugActor. 0 - top left, 1 - top right, 2 - bottom right, 3 - bottom left corner*/
+        OXYGINE_DEPRECATED
         void setCornerPosition(int corner);
         void setCornerPosition(int corner);
         //void addDebugString(const string &str);
         //void addDebugString(const string &str);
 
 
@@ -57,7 +58,7 @@ namespace oxygine
         std::string _debugText;
         std::string _debugText;
         int _frames;
         int _frames;
         timeMS _startTime;
         timeMS _startTime;
-        int _corner;
+
 
 
         bool _showTouchedActor;
         bool _showTouchedActor;
         bool _showTexel2PixelErrors;
         bool _showTexel2PixelErrors;

+ 8 - 0
oxygine/src/Image.cpp

@@ -810,6 +810,14 @@ namespace oxygine
 
 
     }
     }
 
 
+    void Image::toPOT(Image& dest)
+    {
+        OX_ASSERT(this != &dest);
+        dest.init(nextPOT(_image.w), nextPOT(_image.h), _image.format);
+        dest.fill_zero();
+        dest.updateRegion(0, 0, _image);
+    }
+
     void Image::updateRegion(int x, int y, const ImageData& src)
     void Image::updateRegion(int x, int y, const ImageData& src)
     {
     {
         Rect r(x, y, src.w, src.h);
         Rect r(x, y, src.w, src.h);

+ 1 - 0
oxygine/src/Image.h

@@ -47,6 +47,7 @@ namespace oxygine
         ImageData   lock(const Rect* pRect);
         ImageData   lock(const Rect* pRect);
         ImageData   lock(const Rect& pRect);
         ImageData   lock(const Rect& pRect);
         void        unlock();
         void        unlock();
+        void        toPOT(Image& dest);
 
 
         void        updateRegion(int x, int y, const ImageData& data);
         void        updateRegion(int x, int y, const ImageData& data);
         void        apply(const Rect*);
         void        apply(const Rect*);

+ 1 - 0
oxygine/src/WebImage.cpp

@@ -20,6 +20,7 @@ namespace oxygine
         setSize(64, 64);
         setSize(64, 64);
         _image = new Sprite;
         _image = new Sprite;
         _image->setName("_child_");
         _image->setName("_child_");
+        _image->setTouchEnabled(false);
         addChild(_image);
         addChild(_image);
     }
     }
 
 

+ 3 - 1
oxygine/src/core/ThreadDispatcher.cpp

@@ -278,7 +278,7 @@ namespace oxygine
         return _result;
         return _result;
     }
     }
 
 
-    void ThreadDispatcher::sendCallback(void* arg1, void* arg2, callback cb, void* cbData, bool highPriority)
+    void* ThreadDispatcher::sendCallback(void* arg1, void* arg2, callback cb, void* cbData, bool highPriority)
     {
     {
         message ev;
         message ev;
         ev.arg1 = arg1;
         ev.arg1 = arg1;
@@ -290,6 +290,8 @@ namespace oxygine
         MutexPthreadLock lock(_mutex);
         MutexPthreadLock lock(_mutex);
 #endif
 #endif
         _pushMessageWaitReply(ev, highPriority);
         _pushMessageWaitReply(ev, highPriority);
+
+        return _result;
     }
     }
 
 
     void ThreadDispatcher::_pushMessageWaitReply(message& msg, bool highPriority)
     void ThreadDispatcher::_pushMessageWaitReply(message& msg, bool highPriority)

+ 1 - 1
oxygine/src/core/ThreadDispatcher.h

@@ -91,7 +91,7 @@ namespace oxygine
         //blocking, sends message and waiting reply from other thread
         //blocking, sends message and waiting reply from other thread
         void* send(int msgid, void* arg1, void* arg2);
         void* send(int msgid, void* arg1, void* arg2);
         //blocking, sends callback and waiting until it is done
         //blocking, sends callback and waiting until it is done
-        void sendCallback(void* arg1, void* arg2, callback cb, void* cbData, bool highPriority = false);
+        void* sendCallback(void* arg1, void* arg2, callback cb, void* cbData, bool highPriority = false);
 #ifndef __S3E__
 #ifndef __S3E__
         //blocking, sends callback and waiting until it is done
         //blocking, sends callback and waiting until it is done
         void sendCallback(const std::function<void()>&);
         void sendCallback(const std::function<void()>&);

+ 1 - 1
oxygine/src/core/ZipFileSystem.cpp

@@ -195,7 +195,7 @@ namespace oxygine
         {
         {
             std::sort(_files.begin(), _files.end(), sortFiles);
             std::sort(_files.begin(), _files.end(), sortFiles);
 #ifdef OX_DEBUG
 #ifdef OX_DEBUG
-            for (size_t i = 0; i < _files.size() - 1; ++i)
+            for (int i = 0; i < (int)_files.size() - 1; ++i)
             {
             {
                 OX_ASSERT(strcmp(_files[i].name, _files[i + 1].name) != 0);
                 OX_ASSERT(strcmp(_files[i].name, _files[i + 1].name) != 0);
             }
             }

+ 2 - 1
oxygine/src/core/gl/NativeTextureGLES.cpp

@@ -226,6 +226,7 @@ namespace oxygine
             NativeTextureGLES::created--;
             NativeTextureGLES::created--;
             glDeleteTextures(1, (GLuint*)&_id);
             glDeleteTextures(1, (GLuint*)&_id);
             _id = 0;
             _id = 0;
+            CHECKGL();
         }
         }
 
 
 
 
@@ -233,10 +234,10 @@ namespace oxygine
         {
         {
             oxglDeleteFramebuffers(1, (GLuint*)&_fbo);
             oxglDeleteFramebuffers(1, (GLuint*)&_fbo);
             _fbo = 0;
             _fbo = 0;
+            CHECKGL();
         }
         }
 
 
         unreg();
         unreg();
-        CHECKGL();
     }
     }
 
 
 
 

+ 21 - 3
oxygine/src/core/oxygine.cpp

@@ -70,11 +70,11 @@ extern "C"
 
 
 
 
 #if EMSCRIPTEN
 #if EMSCRIPTEN
-#define HANDLE_FOCUS_LOST 0
+#   define HANDLE_FOCUS_LOST 0
 #elif !SDL_VIDEO_OPENGL
 #elif !SDL_VIDEO_OPENGL
-#define HANDLE_FOCUS_LOST 1
+#   define HANDLE_FOCUS_LOST 1
 #else
 #else
-#define HANDLE_FOCUS_LOST 0
+#   define HANDLE_FOCUS_LOST 0
 #endif
 #endif
 
 
 #define LOST_RESET_CONTEXT 0
 #define LOST_RESET_CONTEXT 0
@@ -534,7 +534,10 @@ namespace oxygine
             if (!wnd)
             if (!wnd)
             {
             {
                 if (!focus)
                 if (!focus)
+                {
+                    log::messageln("!focus");
                     return false;
                     return false;
+                }
 
 
                 wnd = _window;
                 wnd = _window;
             }
             }
@@ -549,6 +552,10 @@ namespace oxygine
                 IVideoDriver::_stats.start = getTimeMS();
                 IVideoDriver::_stats.start = getTimeMS();
                 updatePortProcessItems();
                 updatePortProcessItems();
             }
             }
+            else
+            {
+                log::messageln("!ready");
+            }
 
 
             return ready;
             return ready;
         }
         }
@@ -606,6 +613,7 @@ namespace oxygine
                 switch (event.type)
                 switch (event.type)
                 {
                 {
                     case SDL_QUIT:
                     case SDL_QUIT:
+                        log::messageln("SDL_QUIT");
                         done = true;
                         done = true;
                         break;
                         break;
                     case SDL_WINDOWEVENT:
                     case SDL_WINDOWEVENT:
@@ -617,6 +625,8 @@ namespace oxygine
                         active = true;
                         active = true;
                         */
                         */
 
 
+                        log::messageln("SDL_WINDOWEVENT %d", (int)event.window.event);
+
                         if (event.window.event == SDL_WINDOWEVENT_MINIMIZED)
                         if (event.window.event == SDL_WINDOWEVENT_MINIMIZED)
                             active = false;
                             active = false;
                         if (event.window.event == SDL_WINDOWEVENT_RESTORED)
                         if (event.window.event == SDL_WINDOWEVENT_RESTORED)
@@ -627,6 +637,11 @@ namespace oxygine
                             newFocus = false;
                             newFocus = false;
                         if (event.window.event == SDL_WINDOWEVENT_FOCUS_GAINED)
                         if (event.window.event == SDL_WINDOWEVENT_FOCUS_GAINED)
                             newFocus = true;
                             newFocus = true;
+#ifdef __ANDROID__
+                        //if (event.window.event == SDL_WINDOWEVENT_ENTER)
+                        //   newFocus = true;
+#endif
+
                         if (focus != newFocus)
                         if (focus != newFocus)
                         {
                         {
 #if HANDLE_FOCUS_LOST
 #if HANDLE_FOCUS_LOST
@@ -772,6 +787,8 @@ namespace oxygine
 
 
         void release()
         void release()
         {
         {
+            log::messageln("core::release");
+
             _threadMessages.clear();
             _threadMessages.clear();
             _uiMessages.clear();
             _uiMessages.clear();
 
 
@@ -845,6 +862,7 @@ namespace oxygine
 
 
         void requestQuit()
         void requestQuit()
         {
         {
+            log::messageln("requestQuit");
 #ifdef __S3E__
 #ifdef __S3E__
             s3eDeviceRequestQuit();
             s3eDeviceRequestQuit();
 #elif OXYGINE_SDL
 #elif OXYGINE_SDL

+ 2 - 2
oxygine/src/dev_tools/TexturesInspector.cpp

@@ -48,10 +48,10 @@ namespace oxygine
             path::normalize(t->getName().c_str(), path);
             path::normalize(t->getName().c_str(), path);
 
 
             char txt[255];
             char txt[255];
-            safe_sprintf(txt, "%s\n<div c=\"FF0000\">%s</div>-<div c=\"0000ff\">%dx%d</div>\nid: %d",
+            safe_sprintf(txt, "%s\n<div c=\"FF0000\">%s</div>-<div c=\"0000ff\">%dx%d</div>\nid: %d tid: %d",
                          path,
                          path,
                          textureFormat2String(t->getFormat()),
                          textureFormat2String(t->getFormat()),
-                         t->getWidth(), t->getHeight(), t->getObjectID());
+                         t->getWidth(), t->getHeight(), t->getObjectID(), (int)(size_t)t->getHandle());
 
 
             spTextField text = initActor(new TextField,
             spTextField text = initActor(new TextField,
                                          arg_color = Color::Black,
                                          arg_color = Color::Black,

+ 16 - 7
oxygine/src/res/Resources.cpp

@@ -127,6 +127,11 @@ namespace oxygine
         __freeName();
         __freeName();
     }
     }
 
 
+    bool Resources::isEmpty() const
+    {
+        return _docs.empty();
+    }
+
     void Resources::updateName(const std::string& filename)
     void Resources::updateName(const std::string& filename)
     {
     {
         char head[256];
         char head[256];
@@ -167,7 +172,7 @@ namespace oxygine
     };
     };
 
 
 
 
-    void Resources::loadXML(const std::string& xmlFile, const ResourcesLoadOptions& opt)
+    bool Resources::loadXML(const std::string& xmlFile, const ResourcesLoadOptions& opt)
     {
     {
         _name = xmlFile;
         _name = xmlFile;
         _loadCounter = opt._loadCompletely ? 1 : 0;
         _loadCounter = opt._loadCompletely ? 1 : 0;
@@ -175,7 +180,15 @@ namespace oxygine
 
 
         FS_LOG("step0");
         FS_LOG("step0");
         file::buffer fb;
         file::buffer fb;
-        file::read(xmlFile, fb);
+        int sz = file::read(xmlFile, fb);
+
+
+        if (!sz)
+        {
+            log::error("can't load xml file: '%s'", xmlFile.c_str());
+            OX_ASSERT(!"can't find xml file");
+            return false;
+        }
 
 
         FS_LOG("step1");
         FS_LOG("step1");
 
 
@@ -207,11 +220,6 @@ namespace oxygine
                 doc_meta.load_buffer_inplace(&fb_meta.data[0], fb_meta.data.size());
                 doc_meta.load_buffer_inplace(&fb_meta.data[0], fb_meta.data.size());
         }
         }
 
 
-        if (!fb.data.size())
-        {
-            OX_ASSERT(fb.data.size() && "can't find xml file");
-            return;
-        }
 
 
         pugi::xml_document* doc = new pugi::xml_document();
         pugi::xml_document* doc = new pugi::xml_document();
         _docs.push_back(doc);
         _docs.push_back(doc);
@@ -279,6 +287,7 @@ namespace oxygine
         }
         }
 
 
         FS_LOG("xml loaded");
         FS_LOG("xml loaded");
+        return true;
     }
     }
 
 
     void Resources::collect(resources& r)
     void Resources::collect(resources& r)

+ 4 - 1
oxygine/src/res/Resources.h

@@ -78,7 +78,7 @@ namespace oxygine
         @param xml file paths
         @param xml file paths
         @param options
         @param options
         */
         */
-        void loadXML(const std::string& xmlFile, const ResourcesLoadOptions& opt = ResourcesLoadOptions());
+        bool loadXML(const std::string& xmlFile, const ResourcesLoadOptions& opt = ResourcesLoadOptions());
 
 
         /**Adds Resource*/
         /**Adds Resource*/
         void add(Resource* r, bool accessByShortenID = false);
         void add(Resource* r, bool accessByShortenID = false);
@@ -92,6 +92,9 @@ namespace oxygine
         /**Completely deletes all loaded resources*/
         /**Completely deletes all loaded resources*/
         void free();
         void free();
 
 
+        /**Does it have any loaded xmls*/
+        bool isEmpty() const;
+
         /** get resource by id, no case sensitive
         /** get resource by id, no case sensitive
         @param resource id
         @param resource id
         */
         */

+ 2 - 4
readme/emscripten.txt

@@ -12,14 +12,12 @@ How to build. Steps:
 
 
 
 
 - Configure environment variables properly:
 - Configure environment variables properly:
-  EMSCRIPTEN points to Emscripten SDK folder with emcc
-  	example: d:\Emscripten\emscripten\1.35.0\
   JAVA_HOME points to JDK 
   JAVA_HOME points to JDK 
   	example: c:\Program Files (x86)\Java\jdk1.6.0_26\
   	example: c:\Program Files (x86)\Java\jdk1.6.0_26\
 
 
 - Add necessary paths to environment variable PATH:
 - Add necessary paths to environment variable PATH:
-  EMSCRIPTEN
-  	example: d:\Emscripten\emscripten\1.35.0\
+  Emscripten
+  	example: d:\Emscripten\
   JDK 
   JDK 
   	example: "c:\Program Files (x86)\Java\jdk1.6.0_26\bin\"
   	example: "c:\Program Files (x86)\Java\jdk1.6.0_26\bin\"
 
 

+ 4 - 0
tools/others/build_oxygine_with_sdl.py

@@ -58,12 +58,14 @@ SDL_dest = temp + "/SDL"
 OXYGINE_dest = temp + "/oxygine-framework/"
 OXYGINE_dest = temp + "/oxygine-framework/"
 SOUND_dest = temp + "/oxygine-sound/"
 SOUND_dest = temp + "/oxygine-sound/"
 FLOW_dest = temp + "/oxygine-flow/"
 FLOW_dest = temp + "/oxygine-flow/"
+FT_dest = temp + "/oxygine-freetype/"
 
 
 print("cleaning temp...")
 print("cleaning temp...")
 shutil.rmtree(temp, True)
 shutil.rmtree(temp, True)
 
 
 
 
 def export(repo, dest):
 def export(repo, dest):
+    print("exporting " + repo)
     cmd = "git -C %s checkout-index -a -f --prefix=%s/" % (
     cmd = "git -C %s checkout-index -a -f --prefix=%s/" % (
         "d:/" + repo, "d:/oxygine-framework/temp/" + dest)
         "d:/" + repo, "d:/oxygine-framework/temp/" + dest)
     os.system(cmd)
     os.system(cmd)
@@ -77,6 +79,7 @@ buildzip("oxygine-framework.zip")
 export("SDL", "SDL")
 export("SDL", "SDL")
 export("oxygine-sound", "oxygine-sound")
 export("oxygine-sound", "oxygine-sound")
 export("oxygine-flow", "oxygine-flow")
 export("oxygine-flow", "oxygine-flow")
+export("oxygine-freetype", "oxygine-freetype")
 
 
 
 
 shutil.rmtree(SDL_dest + "/test")
 shutil.rmtree(SDL_dest + "/test")
@@ -125,6 +128,7 @@ def copy(path):
 enum(OXYGINE_dest + "/examples/", copy)
 enum(OXYGINE_dest + "/examples/", copy)
 enum(SOUND_dest + "/examples/", copy)
 enum(SOUND_dest + "/examples/", copy)
 enum(FLOW_dest + "/examples/", copy)
 enum(FLOW_dest + "/examples/", copy)
+enum(FT_dest + "/examples/", copy)
 
 
 shutil.copy(SDL_dest + "/android-project/src/org/libsdl/app/SDLActivity.java",
 shutil.copy(SDL_dest + "/android-project/src/org/libsdl/app/SDLActivity.java",
             OXYGINE_dest + "/oxygine/SDL/android/lib/src/org/libsdl/app/SDLActivity.java")
             OXYGINE_dest + "/oxygine/SDL/android/lib/src/org/libsdl/app/SDLActivity.java")

+ 5 - 2
tools/resbuild/xml_processor.py

@@ -138,8 +138,11 @@ class XmlProcessor(object):
         self._npot = args.npot
         self._npot = args.npot
         #self._meta_element = None
         #self._meta_element = None
 
 
-        self.helper = oxygine_helper.helper(
-            os.path.split(__file__)[0] + "/../../")
+        rp = os.path.abspath(__file__) 
+        rp = os.path.dirname(rp)
+        rp = os.path.join(rp, "../../")
+        rp = os.path.normpath(rp) + "/"
+        self.helper = oxygine_helper.helper(rp)
 
 
         self.register_processor(process_font.bmfc_font_Processor())
         self.register_processor(process_font.bmfc_font_Processor())
         self.register_processor(process_font.font_Processor())
         self.register_processor(process_font.font_Processor())

+ 5 - 1
tools/templates/proj.android/AndroidManifest.xml

@@ -14,7 +14,7 @@
         <activity android:name="org.oxygine.${PROJECT}.MainActivity"
         <activity android:name="org.oxygine.${PROJECT}.MainActivity"
                   android:label="@string/app_name"
                   android:label="@string/app_name"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
-                  android:configChanges="locale|orientation|keyboardHidden" 
+                  android:configChanges="locale|orientation|keyboardHidden|screenSize" 
                   android:screenOrientation="landscape">
                   android:screenOrientation="landscape">
 
 
             <intent-filter>
             <intent-filter>
@@ -26,6 +26,10 @@
 
 
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
 
 
+    <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests-->    
+    <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests (downloading files)-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->  
+
     <!-- OpenGL ES 2.0 -->
     <!-- OpenGL ES 2.0 -->
     <uses-feature android:glEsVersion="0x00020000" /> 
     <uses-feature android:glEsVersion="0x00020000" /> 
 
 

+ 2 - 0
tools/templates/proj.cmake/build_emsc.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ${OXYGINE}/tools/others/embed_folder_js.py -s ../data
 python ${OXYGINE}/tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc
 mkdir build_emsc

+ 2 - 0
tools/templates/proj.cmake/build_emsc_release.bat

@@ -1,3 +1,5 @@
+call emsdk activate
+
 python ${OXYGINE}/tools/others/embed_folder_js.py -s ../data
 python ${OXYGINE}/tools/others/embed_folder_js.py -s ../data
 
 
 mkdir build_emsc_release
 mkdir build_emsc_release