From 2ba663a7b17c86ce0e17cbdab0e80ac4ed60fa60 Mon Sep 17 00:00:00 2001 From: pelya Date: Thu, 26 Aug 2010 17:18:03 +0300 Subject: [PATCH] First implementation of picture button theme, still no transparency --- project/AndroidManifest.xml | 6 +- project/jni/Android.mk | 12 +- project/jni/Application.mk | 2 +- .../application/opentyrian/AppSettings.cfg | 9 +- project/jni/application/src | 2 +- project/res/raw/ultimatedroidbutton1.png.raw | Bin 0 -> 1524 bytes .../raw/ultimatedroidbutton1pressed.png.raw | Bin 0 -> 1524 bytes project/res/raw/ultimatedroidbutton2.png.raw | Bin 0 -> 1524 bytes .../raw/ultimatedroidbutton2pressed.png.raw | Bin 0 -> 1524 bytes project/res/raw/ultimatedroidbutton3.png.raw | Bin 0 -> 1524 bytes .../raw/ultimatedroidbutton3pressed.png.raw | Bin 0 -> 1524 bytes project/res/raw/ultimatedroidbutton4.png.raw | Bin 0 -> 1524 bytes .../raw/ultimatedroidbutton4pressed.png.raw | Bin 0 -> 1524 bytes project/res/raw/ultimatedroidbutton5.png.raw | Bin 0 -> 1524 bytes .../raw/ultimatedroidbutton5pressed.png.raw | Bin 0 -> 1524 bytes project/res/raw/ultimatedroidbutton6.png.raw | Bin 0 -> 1524 bytes .../raw/ultimatedroidbutton6pressed.png.raw | Bin 0 -> 1524 bytes project/res/raw/ultimatedroidbutton7.png.raw | Bin 0 -> 1524 bytes .../ultimatedroiddownbuttonpressed.png.raw | Bin 0 -> 20012 bytes .../res/raw/ultimatedroiddpadbutton.png.raw | Bin 0 -> 20012 bytes .../ultimatedroidleftbuttonpressed.png.raw | Bin 0 -> 20012 bytes .../ultimatedroidrightbuttonpressed.png.raw | Bin 0 -> 20012 bytes .../raw/ultimatedroidupbuttonpressed.png.raw | Bin 0 -> 20012 bytes project/res/values/strings.xml | 2 +- .../video/android/SDL_touchscreenkeyboard.c | 281 +++++++++++++++--- project/src/Accelerometer.java | 2 +- project/src/Audio.java | 2 +- project/src/DataDownloader.java | 2 +- project/src/GLSurfaceView_SDL.java | 2 +- project/src/Globals.java | 13 +- project/src/MainActivity.java | 2 +- project/src/Settings.java | 100 ++++++- project/src/Video.java | 4 +- .../UltimateDroid/UltimateDroidButton7.png | Bin 0 -> 5846 bytes project/themes/converter/convert.sh | 7 + project/themes/converter/converter | Bin 108573 -> 108589 bytes project/themes/converter/converter.cpp | 2 + 37 files changed, 371 insertions(+), 79 deletions(-) create mode 100644 project/res/raw/ultimatedroidbutton1.png.raw create mode 100644 project/res/raw/ultimatedroidbutton1pressed.png.raw create mode 100644 project/res/raw/ultimatedroidbutton2.png.raw create mode 100644 project/res/raw/ultimatedroidbutton2pressed.png.raw create mode 100644 project/res/raw/ultimatedroidbutton3.png.raw create mode 100644 project/res/raw/ultimatedroidbutton3pressed.png.raw create mode 100644 project/res/raw/ultimatedroidbutton4.png.raw create mode 100644 project/res/raw/ultimatedroidbutton4pressed.png.raw create mode 100644 project/res/raw/ultimatedroidbutton5.png.raw create mode 100644 project/res/raw/ultimatedroidbutton5pressed.png.raw create mode 100644 project/res/raw/ultimatedroidbutton6.png.raw create mode 100644 project/res/raw/ultimatedroidbutton6pressed.png.raw create mode 100644 project/res/raw/ultimatedroidbutton7.png.raw create mode 100644 project/res/raw/ultimatedroiddownbuttonpressed.png.raw create mode 100644 project/res/raw/ultimatedroiddpadbutton.png.raw create mode 100644 project/res/raw/ultimatedroidleftbuttonpressed.png.raw create mode 100644 project/res/raw/ultimatedroidrightbuttonpressed.png.raw create mode 100644 project/res/raw/ultimatedroidupbuttonpressed.png.raw create mode 100644 project/themes/UltimateDroid/UltimateDroidButton7.png create mode 100755 project/themes/converter/convert.sh diff --git a/project/AndroidManifest.xml b/project/AndroidManifest.xml index a9baa7c5e..93bf87984 100644 --- a/project/AndroidManifest.xml +++ b/project/AndroidManifest.xml @@ -1,8 +1,8 @@ K=TXTEqPfPNrE6<0MynkF#rGn literal 0 HcmV?d00001 diff --git a/project/res/raw/ultimatedroidbutton1pressed.png.raw b/project/res/raw/ultimatedroidbutton1pressed.png.raw new file mode 100644 index 0000000000000000000000000000000000000000..33107eb805a1744808e0b644874e4ffd6da7b96c GIT binary patch literal 1524 zcmZQzV31*8V31~DU|{(7|KEQ`R#IRiD@YGW*Fk1dAR`M%CnIYkNxDEbFtRwZg7h^q zlL{SK53)Ftu8SF@kCEAtM99d@$lAzqkcp9*G-(; zj4X{Lr!$DYgN%$!q``xXj^K1nnl47BgN%(VjVz?*B9QtDII=pj zHZqeALHZm?*5}CV2nr8oM-m|;GbkJnGBGlf1`jeZvL0krv|VrcG!sU<{1{6|O?HhD%CM;1qT{K4Xk5bekaiFZ=d z3n<<}>4iLf2N@ZeNP`C%9a$P#$kErx(#S$;E&{1~hPIx>NDfy!Qxt)yU( F9spv{F1r8# literal 0 HcmV?d00001 diff --git a/project/res/raw/ultimatedroidbutton3.png.raw b/project/res/raw/ultimatedroidbutton3.png.raw new file mode 100644 index 0000000000000000000000000000000000000000..49b4bca94772dba36b4d6c932d653e715263b5b5 GIT binary patch literal 1524 zcmZQzV31*8V31~DU|{(7|KEQ`HqszS4@g%d3u%y%4W!GFL|u(6jx3C92U#6iNQVbm z53(|{kPZ*BHnJXMCLK1iHnKJ{lL1*BSsj_lfUJzH2bma|NrMNO7+DXpG%}G653(F& zVPtY75i&9zWNBnM$jHdV$bbZy2=Naxg5tiB@gO6TE{1~y`HhU=l)~7EqOXx4-*L$4 z1Nn(~4DlZ*JV9YdJO+hlBMUkDK;;8C-a&CqGzP^xx#^62eU2pO2S+AQejq&;H8LG! W`S+iZl~kRKtk9B|m60R}(ggr50t?*$ literal 0 HcmV?d00001 diff --git a/project/res/raw/ultimatedroidbutton3pressed.png.raw b/project/res/raw/ultimatedroidbutton3pressed.png.raw new file mode 100644 index 0000000000000000000000000000000000000000..2e932631c1f1284d2a4fd21b2198861ffe3e3eaa GIT binary patch literal 1524 zcmZQzV31*8V31~j0!CKSAVeET&p~EVAR{XS1L?XBGB+|avO2OhGLsHL`W#8t=g54J z#gUbf*^xxZ$b686k@X-GBQt66AX6g?BWokmK@wpjQzOek7DuK=5}_lLBTFL-BaIhrEQ}=UV`LmS zeTZ;@_zxc+;ZBfR;xR-Y@#+yOLE+-a2#PUMup{F^W>CD7nqC^o)(1*w2N@ZeNP`C% i$=BD<WAosR!p<=0=j-*~kPcmp~;b$>kC&0|NlV&lTGM literal 0 HcmV?d00001 diff --git a/project/res/raw/ultimatedroidbutton4.png.raw b/project/res/raw/ultimatedroidbutton4.png.raw new file mode 100644 index 0000000000000000000000000000000000000000..987a86b683df50acbce02d1caf9fe95c0893af00 GIT binary patch literal 1524 zcmZQzV31*8V31~DU|{(7|KEQ`HqszS4@g%d3u%y%4W!GFL|u(6jx3C92U#6iNQVbm z53(|{kPZ*BHnJXMCLK1iHnKJ{Lm(pq0zyO}Btn#t0V2}K+{o(4>c|X%$np>o2#Hmk zm67!z6C*PiBH0J#LqwU8^+CiBGBL6qWNBoAKxBD{2!zBYevsuL3nP;w7$VC?2!zBCKgbA*`$ootB*I2Ua7tlpBoR6es6OOyLv}f)II24_ z}90$xUYneUQ{h3<*k~2U#4U`2mvpi6I@C gK>2|fmFQ{?vi$qc$cipXh|kChEqPfPNrE6<0Hc}-#{d8T literal 0 HcmV?d00001 diff --git a/project/res/raw/ultimatedroidbutton4pressed.png.raw b/project/res/raw/ultimatedroidbutton4pressed.png.raw new file mode 100644 index 0000000000000000000000000000000000000000..257dd325e9ed85e6d9a7265e89a612daf8ce94df GIT binary patch literal 1524 zcmZQzV31*8V31~DU|{(7|KI;cR?;9y4@egy%Ry%1AtOs8>%aewtfc7zna{}L$jZpt z$V@tPWIf2@NU}ahW{^HcW=9esBQqmwBg;W1MrJT%U_?NO2!uq4GJw@FA7ldQYh*eI zhKvj#KZ7tM14INuVv0919b|E2ab#))Lu7e~2!zBGcVs%q!pOqNXSi7C#= z)X2ifa*z=Mk>w#G5E7fXBg;YNMn(uk3Ka&32!zBY?#R-}?8rzuWMpY%W+Yi3BjZ5o zL-s$ik1@qj-H9CDsQN%@2!t6KAmR{x5Vj*D@%kJYL3!2@9)BP+L6{LO{y<_N3=?-` zgv2}UbODkbppfB!)_kQ8@1GJ$k~%3eoMt|uBpbO8X#ogqp9 literal 0 HcmV?d00001 diff --git a/project/res/raw/ultimatedroidbutton5.png.raw b/project/res/raw/ultimatedroidbutton5.png.raw new file mode 100644 index 0000000000000000000000000000000000000000..7e2f24befa7d8cec91e37b47cefcf8203680cee0 GIT binary patch literal 1524 zcmZQzV31*8V31~DU|{(7|KEQ`HqszS4@g%d3u%y%4W!GFL|u(6jx3C92U#6iNQVbm z53(|{fFT1T0zyO(BtnJ(td`{jUwTF{a!> zmV+#eOpX{3StS-(rh_bvEC(4GnJ^%-%P?dQGJ@j1k?|k~M79r8wviE>QWzUCAhJG8 zS;qm?htFl`a>(vPmqYdyx*S9wBs`Jj&_fVi4iuh^Ead0|l@HK(#~0IRa-evJr88u= zprkrkT^J~2jCXvxdUND>6; F0suHi^ke`4 literal 0 HcmV?d00001 diff --git a/project/res/raw/ultimatedroidbutton5pressed.png.raw b/project/res/raw/ultimatedroidbutton5pressed.png.raw new file mode 100644 index 0000000000000000000000000000000000000000..059e0baef6d8184ea0bbe8bea601f7ee86f24c11 GIT binary patch literal 1524 zcmZQzV31*8V31~DU|{(7|KI;cR?;9y4@egy%Ry%1AtOs8>%aewtfc7zna{}L$m+=2 z$V@r}>2n0@V`M-;baN0gj0_+-M`lM>Mpi~IIh9%jvr(>^!P-VbA-k_C`BO4f%wQ6U9J&DAHw&@dO&Q13?l=G z57Bp!k&%fs2uh!gEad2GWNBnU&N0NY8(IGS2k9imosLW(U7)fTlnX&QiZ~3>1ps_^ BBXa-% literal 0 HcmV?d00001 diff --git a/project/res/raw/ultimatedroidbutton6.png.raw b/project/res/raw/ultimatedroidbutton6.png.raw new file mode 100644 index 0000000000000000000000000000000000000000..343837237957fc929391625486befd1f6a89afdf GIT binary patch literal 1524 zcmZQzV31*8V31~DU|{(7|KEQ`HqszS4@g%d3u%y%4W!GFL|u(6jx3C92U#6iNQVbm z53(|{FtRW*AVDJd2U#0g4>BKQM$*MV48M`Jk+qSz5k(&{{66n(_-9a$M! z4>B>L=woCi#6QTy$a;{ak*Sdh*?+|F53(F&VPtY75i&9zWNBnM$jHb<8a&7diu*>! zgCxR6MsP}DY$Opn4wycacwlT~#Lq{#6Tdoib0GRa;fbsd6uS8Npzv&DAx9smd;rHg za{dFQ0=#@syhG9%vb#X34nH51&LH|gYKg}XeU40^96$D RBbH`lg_gXmj3hyjE&#C5=6C=A literal 0 HcmV?d00001 diff --git a/project/res/raw/ultimatedroidbutton6pressed.png.raw b/project/res/raw/ultimatedroidbutton6pressed.png.raw new file mode 100644 index 0000000000000000000000000000000000000000..0521ec866de8dba20fa72c7ed13845c6bb4db2a5 GIT binary patch literal 1524 zcmZQzV31*8V31~DU|{(7|KI;cR?;9y4@egy%Ry%1AtOs8>%aewtfc7zna{}L$m+=2 z$V@t9WOZb9WNu_;WI#ZWDF_}T118^*`5+4;D4-pa&b@=#= wjG%OOkdcvzGnf16U_SA4pfDD`PmLA4n&PzEFsL4z7-VjeZVb z-5{MXeGaaTeh1SJ#yk2oxHkDZ`8xSJyE?i$`8I*w+2HC3l1&Gh3$l|T9Hb9q8wfLo zA51@(?&#;}deD{8&(Y7(kJ0a-Z=f-p$mvDlVSh|e738Ep^x!qulkSV*G2ExyNMK@hAjwAmLD zKaKH@evmMQ=zx+4(J*J%W1%1j($^B|=!(U4P}`t-!92%!M^{jaZ3%_z1IIHcuJPkW zBz;bx7;ts8b#x^R8(l$Z(8(8OUt<_!JYzT^crdKdwIvh;LHdq_Izv+!vR|;VLH;`u z3W6Yg$6}j&p(z*adu%!&VvS+WzM#-N1`d~Fv7oexKed4Lfl^FMC@A)h#e(bu#lJH& z20`+;a3flJ0i{otFh>G@bc}CwJrc?i2Z12_K1sjC4-kFFVqJV4T^m8E z8#8pmK=F1g7NQbFBJ4XB+ZGB+aR*%+!w_NA2+HlQj-awJ^jIiJ2LvPQ1I1@csFN=! p)f{v^=nI04;L@qZ_ef|90evmL;PMQb=0N2csPx6A4`e5)7yu#F-#-8V literal 0 HcmV?d00001 diff --git a/project/res/raw/ultimatedroiddownbuttonpressed.png.raw b/project/res/raw/ultimatedroiddownbuttonpressed.png.raw new file mode 100644 index 0000000000000000000000000000000000000000..09464eb4645e282a7e7b9bb6a4ddcc87d9693559 GIT binary patch literal 20012 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 Yca9eWGwdX<1K?BD2%Y3Ln9fxL0A{EwYXATM literal 0 HcmV?d00001 diff --git a/project/res/raw/ultimatedroidrightbuttonpressed.png.raw b/project/res/raw/ultimatedroidrightbuttonpressed.png.raw new file mode 100644 index 0000000000000000000000000000000000000000..2eb832b4d9bfcc99faaabf797d88bd60a6d0b0d5 GIT binary patch literal 20012 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 l;sS)p(~YVN - Ur-Quan Masters + OpenTyrian diff --git a/project/sdl/sdl-1.3/src/video/android/SDL_touchscreenkeyboard.c b/project/sdl/sdl-1.3/src/video/android/SDL_touchscreenkeyboard.c index e11e0d37e..e26cb83ab 100644 --- a/project/sdl/sdl-1.3/src/video/android/SDL_touchscreenkeyboard.c +++ b/project/sdl/sdl-1.3/src/video/android/SDL_touchscreenkeyboard.c @@ -27,11 +27,14 @@ #include #include // for memset() #include +#include +#include #include "SDL_config.h" #include "SDL_version.h" +//#include "SDL_opengles.h" #include "../SDL_sysvideo.h" #include "SDL_androidvideo.h" #include "SDL_androidinput.h" @@ -77,6 +80,24 @@ static int ButtonAutoFireRot[MAX_BUTTONS_AUTOFIRE] = {0, 0}; static SDL_Rect * OldCoords[MAX_MULTITOUCH_POINTERS] = { NULL }; +typedef struct +{ + GLuint id; + GLfloat w; + GLfloat h; +} GLTexture_t; + +static GLTexture_t arrowImages[5] = { {0, 0, 0}, }; +static GLTexture_t buttonAutoFireImages[MAX_BUTTONS_AUTOFIRE] = { {0, 0, 0}, }; +static GLTexture_t buttonImages[MAX_BUTTONS*2] = { {0, 0, 0}, }; + + +static inline int InsideRect(const SDL_Rect * r, int x, int y) +{ + return ( x >= r->x && x <= r->x + r->w ) && ( y >= r->y && y <= r->y + r->h ); +} + + // Should be called on each char of font before drawing static void prepareFontCharWireframe(int idx, int w, int h) { @@ -122,8 +143,7 @@ static inline void endDrawingWireframe() // TODO: use SDL 1.3 renderer routines? It will not be pixel-aligned then, if the screen is resized static inline void drawCharWireframe(int idx, Uint16 x, Uint16 y, int rotation, Uint8 r, Uint8 g, Uint8 b, Uint8 a) { - //glColor4f((GLfloat) r * inv255f, (GLfloat) g * inv255f, (GLfloat) b * inv255f, (GLfloat) a * inv255f); - glColor4x(r * 0x10000, g * 0x10000, b * 0x10000, a * 0x10000); + glColor4x(r * 0x100, g * 0x100, b * 0x100, a * 0x100); glVertexPointer(2, GL_SHORT, 0, fontGL[idx]); glPopMatrix(); @@ -134,9 +154,59 @@ static inline void drawCharWireframe(int idx, Uint16 x, Uint16 y, int rotation, glDrawArrays(GL_LINES, 0, fontGL[idx][FONT_CHAR_LINES_COUNT]); } -static inline int InsideRect(const SDL_Rect * r, int x, int y) +static inline void beginDrawingTex() { - return ( x >= r->x && x <= r->x + r->w ) && ( y >= r->y && y <= r->y + r->h ); + glEnable(GL_TEXTURE_2D); +} + +static inline void endDrawingTex() +{ + /* + GLfloat texColor[4] = {0.0f, 0.0f, 0.0f, 0.0f}; + glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, texColor); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glDisable(GL_BLEND); + */ + + glDisable(GL_TEXTURE_2D); +} + + +static inline void drawCharTex(GLTexture_t * tex, SDL_Rect * pos, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + GLint cropRect[4]; + /* + GLfloat texColor[4]; + static const float onediv255 = 1.0f / 255.0f; + */ + + glBindTexture(GL_TEXTURE_2D, tex->id); + + glColor4x(r * 0x100, g * 0x100, b * 0x100, a * 0x100 ); + + //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); + + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + /* + texColor[0] = r * onediv255; + texColor[1] = g * onediv255; + texColor[2] = b * onediv255; + texColor[3] = a * onediv255; + glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, texColor); + */ + + cropRect[0] = 0; + cropRect[1] = tex->h; + cropRect[2] = tex->w; + cropRect[3] = -tex->h; + glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, cropRect); + glDrawTexiOES(pos->x, SDL_ANDROID_sWindowHeight - pos->y - pos->h, 0, pos->w, pos->h); } int SDL_ANDROID_drawTouchscreenKeyboard() @@ -165,6 +235,35 @@ int SDL_ANDROID_drawTouchscreenKeyboard() } endDrawingWireframe(); } + else + { + int blendFactor = ( SDL_GetKeyboardState(NULL)[SDL_KEY(LEFT)] ? 1 : 0 ) + + ( SDL_GetKeyboardState(NULL)[SDL_KEY(RIGHT)] ? 1 : 0 ) + + ( SDL_GetKeyboardState(NULL)[SDL_KEY(UP)] ? 1 : 0 ) + + ( SDL_GetKeyboardState(NULL)[SDL_KEY(DOWN)] ? 1 : 0 ); + beginDrawingTex(); + if( blendFactor == 0 ) + drawCharTex( &arrowImages[0], &arrows, 255, 255, 255, 128 ); + else + { + if( SDL_GetKeyboardState(NULL)[SDL_KEY(LEFT)] ) + drawCharTex( &arrowImages[1], &arrows, 255, 255, 255, 128 / blendFactor ); + if( SDL_GetKeyboardState(NULL)[SDL_KEY(RIGHT)] ) + drawCharTex( &arrowImages[2], &arrows, 255, 255, 255, 128 / blendFactor ); + if( SDL_GetKeyboardState(NULL)[SDL_KEY(UP)] ) + drawCharTex( &arrowImages[3], &arrows, 255, 255, 255, 128 / blendFactor ); + if( SDL_GetKeyboardState(NULL)[SDL_KEY(DOWN)] ) + drawCharTex( &arrowImages[4], &arrows, 255, 255, 255, 128 / blendFactor ); + } + + for( i = 0; i < nbuttons; i++ ) + { + drawCharTex( ( i < AutoFireButtonsNum && ButtonAutoFire[i] ) ? &buttonAutoFireImages[i] : + &buttonImages[ SDL_GetKeyboardState(NULL)[buttonKeysyms[i]] ? i * 2 + 1 : i *2 ], + &buttons[i], 255, 255, 255, i % 2 ? 64 : 192); + } + endDrawingTex(); + } return 1; }; @@ -322,60 +421,95 @@ int SDL_android_processTouchscreenKeyboard(int x, int y, int action, int pointer }; JNIEXPORT void JNICALL -JAVA_EXPORT_NAME(Settings_nativeSetupScreenKeyboard) ( JNIEnv* env, jobject thiz, jint size, jint _nbuttons, jint nbuttonsAutoFire ) +JAVA_EXPORT_NAME(Settings_nativeSetupScreenKeyboard) ( JNIEnv* env, jobject thiz, jint size, jint theme, jint _nbuttons, jint nbuttonsAutoFire ) { - int i; + int i, ii; int nbuttons1row, nbuttons2row; nbuttons = _nbuttons; + touchscreenKeyboardTheme = theme; if( nbuttons > MAX_BUTTONS ) nbuttons = MAX_BUTTONS; AutoFireButtonsNum = nbuttonsAutoFire; if( AutoFireButtonsNum > MAX_BUTTONS_AUTOFIRE ) AutoFireButtonsNum = MAX_BUTTONS_AUTOFIRE; // TODO: works for horizontal screen orientation only! - // TODO: configurable keyboard size - - // Arrows to the lower-left part of screen - arrows.w = SDL_ANDROID_sWindowWidth / (size + 2); - arrows.h = arrows.w; - arrows.x = 0; - arrows.y = SDL_ANDROID_sWindowHeight - arrows.h; - // Main button to the lower-right - buttons[0].w = SDL_ANDROID_sWindowWidth / (size + 2); - buttons[0].h = SDL_ANDROID_sWindowHeight / (size + 2); - buttons[0].x = SDL_ANDROID_sWindowWidth - buttons[0].w; - buttons[0].y = SDL_ANDROID_sWindowHeight - buttons[0].h; - - // Row of secondary buttons to the upper-right - nbuttons1row = MIN(nbuttons, 4); - for( i = 1; i < nbuttons1row; i++ ) + if(touchscreenKeyboardTheme == 0) { - buttons[i].w = SDL_ANDROID_sWindowWidth / (nbuttons1row - 1) / (size + 2); - buttons[i].h = SDL_ANDROID_sWindowHeight / (size + 2); - buttons[i].x = SDL_ANDROID_sWindowWidth - buttons[i].w * (nbuttons1row - i); - buttons[i].y = 0; - } + // Arrows to the lower-left part of screen + arrows.w = SDL_ANDROID_sWindowWidth / (size + 2); + arrows.h = arrows.w; + arrows.x = 0; + arrows.y = SDL_ANDROID_sWindowHeight - arrows.h; + + // Main button to the lower-right + buttons[0].w = SDL_ANDROID_sWindowWidth / (size + 2); + buttons[0].h = SDL_ANDROID_sWindowHeight / (size + 2); + buttons[0].x = SDL_ANDROID_sWindowWidth - buttons[0].w; + buttons[0].y = SDL_ANDROID_sWindowHeight - buttons[0].h; - // Row of secondary buttons to the upper-left above arrows - nbuttons2row = MIN(nbuttons, 7); - for( i = 4; i < nbuttons2row; i++ ) - { - buttons[i].w = SDL_ANDROID_sWindowWidth / (nbuttons2row - 4) / (size + 2); - buttons[i].h = (SDL_ANDROID_sWindowHeight - SDL_ANDROID_sWindowWidth / 2) * 2 / (size + 2); - buttons[i].x = buttons[i].w * (nbuttons2row - i - 1); - buttons[i].y = 0; - } + // Row of secondary buttons to the upper-right + nbuttons1row = MIN(nbuttons, 4); + for( i = 1; i < nbuttons1row; i++ ) + { + buttons[i].w = SDL_ANDROID_sWindowWidth / (nbuttons1row - 1) / (size + 2); + buttons[i].h = SDL_ANDROID_sWindowHeight / (size + 2); + buttons[i].x = SDL_ANDROID_sWindowWidth - buttons[i].w * (nbuttons1row - i); + buttons[i].y = 0; + } + + // Row of secondary buttons to the upper-left above arrows + nbuttons2row = MIN(nbuttons, 7); + for( i = 4; i < nbuttons2row; i++ ) + { + buttons[i].w = SDL_ANDROID_sWindowWidth / (nbuttons2row - 4) / (size + 2); + buttons[i].h = (SDL_ANDROID_sWindowHeight - SDL_ANDROID_sWindowWidth / 2) * 2 / (size + 2); + buttons[i].x = buttons[i].w * (nbuttons2row - i - 1); + buttons[i].y = 0; + } + + // Resize char images + prepareFontCharWireframe(FONT_LEFT, arrows.w / 2, arrows.h / 2); + prepareFontCharWireframe(FONT_RIGHT, arrows.w / 2, arrows.h / 2); + prepareFontCharWireframe(FONT_UP, arrows.w / 2, arrows.h / 2); + prepareFontCharWireframe(FONT_DOWN, arrows.w / 2, arrows.h / 2); - // Resize char images - prepareFontCharWireframe(FONT_LEFT, arrows.w / 2, arrows.h / 2); - prepareFontCharWireframe(FONT_RIGHT, arrows.w / 2, arrows.h / 2); - prepareFontCharWireframe(FONT_UP, arrows.w / 2, arrows.h / 2); - prepareFontCharWireframe(FONT_DOWN, arrows.w / 2, arrows.h / 2); - - for( i = 0; i < nbuttons; i++ ) + for( i = 0; i < nbuttons; i++ ) + { + prepareFontCharWireframe(FONT_BTN1 + i, MIN(buttons[i].h, buttons[i].w), MIN(buttons[i].h, buttons[i].w)); + } + } + else { - prepareFontCharWireframe(FONT_BTN1 + i, MIN(buttons[i].h, buttons[i].w), MIN(buttons[i].h, buttons[i].w)); + if(touchscreenKeyboardTheme == 1) + AutoFireButtonsNum = 0; // Theme does not support auto-fire + // Arrows to the lower-left part of screen + arrows.x = SDL_ANDROID_sWindowWidth / 4; + arrows.y = SDL_ANDROID_sWindowHeight - SDL_ANDROID_sWindowWidth / 4; + arrows.w = SDL_ANDROID_sWindowWidth / (size + 2); + arrows.h = arrows.w; + arrows.x -= arrows.w/2; + arrows.y -= arrows.h/2; + + // Buttons to the lower-right in 2 rows + for(i = 0; i < 2; i++) + for(ii = 0; ii < 3; ii++) + { + // Custom button ordering + int iii = ii + i*2; + if( ii == 2 ) + iii = 5 + i; + buttons[iii].x = SDL_ANDROID_sWindowWidth - SDL_ANDROID_sWindowWidth / 12 - (SDL_ANDROID_sWindowWidth * ii / 6); + buttons[iii].y = SDL_ANDROID_sWindowHeight - SDL_ANDROID_sWindowHeight / 8 - (SDL_ANDROID_sWindowHeight * i / 4); + buttons[iii].w = SDL_ANDROID_sWindowWidth / (size + 2) / 3; + buttons[iii].h = buttons[iii].w; + buttons[iii].x -= buttons[iii].w/2; + buttons[iii].y -= buttons[iii].h/2; + } + buttons[6].x = 0; + buttons[6].y = 0; + buttons[6].w = 30; + buttons[6].h = 30; } }; @@ -386,3 +520,62 @@ JAVA_EXPORT_NAME(Settings_nativeSetTouchscreenKeyboardUsed) ( JNIEnv* env, jobj isTouchscreenKeyboardUsed = 1; } +static int +power_of_2(int input) +{ + int value = 1; + + while (value < input) { + value <<= 1; + } + return value; +} + +JNIEXPORT void JNICALL +JAVA_EXPORT_NAME(Settings_nativeSetupScreenKeyboardButton) ( JNIEnv* env, jobject thiz, jint buttonID, jbyteArray charBufJava ) +{ + // TODO: softstretch with antialiasing + jboolean isCopy = JNI_TRUE; + Uint8 * charBuf = NULL; + int w, h, len, format; + GLTexture_t * data = NULL; + int texture_w, texture_h; + len = (*env)->GetArrayLength(env, charBufJava); + charBuf = (Uint8 *) (*env)->GetByteArrayElements(env, charBufJava, &isCopy); + + w = ntohl(((Uint32 *) charBuf)[0]); + h = ntohl(((Uint32 *) charBuf)[1]); + format = ntohl(((Uint32 *) charBuf)[2]); + if( buttonID < 5 ) + data = &(arrowImages[buttonID]); + else + if( buttonID < 7 ) + data = &(buttonAutoFireImages[buttonID-5]); + else + data = &(buttonImages[buttonID-7]); + + texture_w = power_of_2(w); + texture_h = power_of_2(h); + data->w = w; + data->h = h; + + glEnable(GL_TEXTURE_2D); + + glGenTextures(1, &data->id); + glBindTexture(GL_TEXTURE_2D, data->id); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture_w, texture_h, 0, GL_RGBA, + format ? GL_UNSIGNED_SHORT_4_4_4_4 : GL_UNSIGNED_SHORT_5_5_5_1, NULL); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, GL_RGBA, + format ? GL_UNSIGNED_SHORT_4_4_4_4 : GL_UNSIGNED_SHORT_5_5_5_1, + charBuf + 12 ); + + glDisable(GL_TEXTURE_2D); + + (*env)->ReleaseByteArrayElements(env, charBufJava, (jbyte *)charBuf, 0); +} diff --git a/project/src/Accelerometer.java b/project/src/Accelerometer.java index 8fa80d363..b46b829e0 100644 --- a/project/src/Accelerometer.java +++ b/project/src/Accelerometer.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.sourceforge.sc2; +package com.googlecode.opentyrian; import android.app.Activity; import android.content.Context; diff --git a/project/src/Audio.java b/project/src/Audio.java index 0c25623e1..8e2da1863 100644 --- a/project/src/Audio.java +++ b/project/src/Audio.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.sourceforge.sc2; +package com.googlecode.opentyrian; import android.app.Activity; diff --git a/project/src/DataDownloader.java b/project/src/DataDownloader.java index 00998a731..d16f41c16 100644 --- a/project/src/DataDownloader.java +++ b/project/src/DataDownloader.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.sourceforge.sc2; +package com.googlecode.opentyrian; import android.app.Activity; import android.content.Context; diff --git a/project/src/GLSurfaceView_SDL.java b/project/src/GLSurfaceView_SDL.java index b7b2300d2..b37c5722a 100644 --- a/project/src/GLSurfaceView_SDL.java +++ b/project/src/GLSurfaceView_SDL.java @@ -18,7 +18,7 @@ fixed with a hammer and rasp to work with libSDL port */ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.sourceforge.sc2; +package com.googlecode.opentyrian; import java.io.Writer; import java.util.ArrayList; diff --git a/project/src/Globals.java b/project/src/Globals.java index 23b4e311d..102164d10 100644 --- a/project/src/Globals.java +++ b/project/src/Globals.java @@ -1,14 +1,14 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount anywhere -package com.sourceforge.sc2; +package com.googlecode.opentyrian; import android.app.Activity; import android.content.Context; class Globals { - public static String ApplicationName = "Ur-QuanMasters"; + public static String ApplicationName = "OpenTyrian"; // Should be zip file - public static String DataDownloadUrl = "Game data is 14 Mb|https://sites.google.com/site/xpelyax/Home/sc2-data.zip?attredirects=0%26d=1|http://sitesproxy.goapk.com/site/xpelyax/Home/sc2-data.zip^3DO remixed music (19 Mb)|:addons/3domusic/3domusic.zip:https://sites.google.com/site/xpelyax/Home/3domusic.zip?attredirects=0%26d=1|:addons/3domusic/3domusic.zip:http://sitesproxy.goapk.com/site/xpelyax/Home/3domusic.zip^UQM music remix pack 1 (50 Mb)|:addons/remix/uqm-remix-pack1.zip:http://sourceforge.net/projects/sc2/files/UQM%20Remix%20Packs/UQM%20Remix%20Pack%201/uqm-remix-pack1.zip/download^UQM music remix pack 2 (60 Mb)|:addons/remix/uqm-remix-pack2.zip:http://sourceforge.net/projects/sc2/files/UQM%20Remix%20Packs/UQM%20Remix%20Pack%202/uqm-remix-pack2.zip/download^UQM music remix pack 3 (40 Mb)|:addons/remix/uqm-remix-pack3.zip:http://sourceforge.net/projects/sc2/files/UQM%20Remix%20Packs/UQM%20Remix%20Pack%203/uqm-remix-pack3.zip/download"; + public static String DataDownloadUrl = "Data files size is 11 Mb|http://sites.google.com/site/xpelyax/Home/tyrian21-data.zip?attredirects=0%26d=1|http://sitesproxy.goapk.com/site/xpelyax/Home/tyrian21-data.zip"; // Set this value to true if you're planning to render 3D using OpenGL - it eats some GFX resources, so disabled for 2D public static boolean NeedDepthBuffer = false; @@ -27,9 +27,9 @@ class Globals { public static boolean AppUsesMultitouch = false; - public static int AppTouchscreenKeyboardKeysAmount = 2; + public static int AppTouchscreenKeyboardKeysAmount = 4; - public static int AppTouchscreenKeyboardKeysAmountAutoFire = 2; + public static int AppTouchscreenKeyboardKeysAmountAutoFire = 1; // Phone-specific config // It will download app data to /sdcard/alienblaster if set to true, @@ -40,6 +40,7 @@ class Globals { public static boolean UseAccelerometerAsArrowKeys = false; public static boolean UseTouchscreenKeyboard = false; public static int TouchscreenKeyboardSize = 0; + public static int TouchscreenKeyboardTheme = 0; public static int AccelerometerSensitivity = 0; public static int TrackballDampening = 0; public static int AudioBufferConfig = 0; @@ -47,5 +48,5 @@ class Globals { } class LoadLibrary { - public LoadLibrary() { System.loadLibrary("sdl"); System.loadLibrary("sdl_image"); }; + public LoadLibrary() { System.loadLibrary("sdl"); System.loadLibrary("sdl_net"); }; } diff --git a/project/src/MainActivity.java b/project/src/MainActivity.java index 3a46f6243..c66ecbcc6 100644 --- a/project/src/MainActivity.java +++ b/project/src/MainActivity.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.sourceforge.sc2; +package com.googlecode.opentyrian; import android.app.Activity; import android.content.Context; diff --git a/project/src/Settings.java b/project/src/Settings.java index 4d82e5c7d..a56941cd0 100644 --- a/project/src/Settings.java +++ b/project/src/Settings.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.sourceforge.sc2; +package com.googlecode.opentyrian; import android.app.Activity; import android.content.Context; @@ -17,6 +17,7 @@ import android.content.res.Configuration; import android.os.Environment; import android.os.StatFs; import java.util.Locale; +import java.util.ArrayList; class Settings { @@ -41,6 +42,7 @@ class Settings out.writeInt(Globals.OptionalDataDownload.length); for(int i = 0; i < Globals.OptionalDataDownload.length; i++) out.writeBoolean(Globals.OptionalDataDownload[i]); + out.writeInt(Globals.TouchscreenKeyboardTheme); out.close(); } catch( FileNotFoundException e ) { } catch( SecurityException e ) { @@ -63,6 +65,7 @@ class Settings Globals.OptionalDataDownload = new boolean[settingsFile.readInt()]; for(int i = 0; i < Globals.OptionalDataDownload.length; i++) Globals.OptionalDataDownload[i] = settingsFile.readBoolean(); + Globals.TouchscreenKeyboardTheme = settingsFile.readInt(); AlertDialog.Builder builder = new AlertDialog.Builder(p); builder.setTitle("Phone configuration"); @@ -174,6 +177,9 @@ class Settings static void showOptionalDownloadConfig(final MainActivity p) { String [] downloadFiles = Globals.DataDownloadUrl.split("\\^"); + System.out.println("downloadFiles.length " + String.valueOf(downloadFiles.length)); + for(int i = 0; i < downloadFiles.length; i++) + System.out.println("downloadFiles[" + String.valueOf(i) + "] = '" + downloadFiles[i] + "'"); if(downloadFiles.length <= 1) { Globals.OptionalDataDownload = new boolean[1]; @@ -335,11 +341,11 @@ class Settings Globals.TouchscreenKeyboardSize = 0; if( ! Globals.UseTouchscreenKeyboard ) { - showAudioConfig(p); + showScreenKeyboardThemeConfig(p); return; } - final CharSequence[] items = {"Big", "Medium", "Small"}; + final CharSequence[] items = {"Big", "Medium", "Small", "Tiny"}; AlertDialog.Builder builder = new AlertDialog.Builder(p); builder.setTitle("On-screen keyboard size (toggle auto-fire by sliding across Fire button)"); @@ -349,6 +355,37 @@ class Settings { Globals.TouchscreenKeyboardSize = item; + dialog.dismiss(); + showScreenKeyboardThemeConfig(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } + + static void showScreenKeyboardThemeConfig(final MainActivity p) + { + Globals.TouchscreenKeyboardTheme = 0; + if( ! Globals.UseTouchscreenKeyboard ) + { + showAudioConfig(p); + return; + } + + final CharSequence[] items = {"Ultimate Droid by Sean Stieber", "Ugly Arrows by pelya"}; + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle("On-screen keyboard theme"); + builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, int item) + { + if( item == 0 ) + Globals.TouchscreenKeyboardTheme = 1; + if( item == 1 ) + Globals.TouchscreenKeyboardTheme = 0; + dialog.dismiss(); showAudioConfig(p); } @@ -378,8 +415,28 @@ class Settings alert.setOwnerActivity(p); alert.show(); } + + static byte [] loadRaw(Activity p,int res) + { + byte [] buf = new byte[128]; + byte [] a = new byte[0]; + try{ + InputStream is = p.getResources().openRawResource(res); + int readed = 0; + while( (readed = is.read(buf)) >= 0 ) + { + byte [] b = new byte[a.length + readed]; + for(int i = 0; i < a.length; i++) + b[i] = a[i]; + for(int i = 0; i < readed; i++) + b[i+a.length] = buf[i]; + a = b; + } + } catch(Exception e) {}; + return a; + } - static void Apply() + static void Apply(Activity p) { nativeIsSdcardUsed( Globals.DownloadToSdcard ? 1 : 0 ); @@ -394,7 +451,37 @@ class Settings if( Globals.UseTouchscreenKeyboard ) { nativeSetTouchscreenKeyboardUsed(); - nativeSetupScreenKeyboard(Globals.TouchscreenKeyboardSize, Globals.AppTouchscreenKeyboardKeysAmount, Globals.AppTouchscreenKeyboardKeysAmountAutoFire); + nativeSetupScreenKeyboard( Globals.TouchscreenKeyboardSize, + Globals.TouchscreenKeyboardTheme, + Globals.AppTouchscreenKeyboardKeysAmount, + Globals.AppTouchscreenKeyboardKeysAmountAutoFire); + if( Globals.TouchscreenKeyboardTheme == 1 ) + { + // DPAD + nativeSetupScreenKeyboardButton(0, loadRaw(p, R.raw.ultimatedroiddpadbutton)); + nativeSetupScreenKeyboardButton(1, loadRaw(p, R.raw.ultimatedroidleftbuttonpressed)); + nativeSetupScreenKeyboardButton(2, loadRaw(p, R.raw.ultimatedroidrightbuttonpressed)); + nativeSetupScreenKeyboardButton(3, loadRaw(p, R.raw.ultimatedroidupbuttonpressed)); + nativeSetupScreenKeyboardButton(4, loadRaw(p, R.raw.ultimatedroiddownbuttonpressed)); + // Auto-fire + nativeSetupScreenKeyboardButton(5, loadRaw(p, R.raw.ultimatedroidbutton1pressed)); + nativeSetupScreenKeyboardButton(6, loadRaw(p, R.raw.ultimatedroidbutton2pressed)); + // Other buttons + nativeSetupScreenKeyboardButton(7, loadRaw(p, R.raw.ultimatedroidbutton1)); + nativeSetupScreenKeyboardButton(8, loadRaw(p, R.raw.ultimatedroidbutton1pressed)); + nativeSetupScreenKeyboardButton(9, loadRaw(p, R.raw.ultimatedroidbutton2)); + nativeSetupScreenKeyboardButton(10, loadRaw(p, R.raw.ultimatedroidbutton2pressed)); + nativeSetupScreenKeyboardButton(11, loadRaw(p, R.raw.ultimatedroidbutton3)); + nativeSetupScreenKeyboardButton(12, loadRaw(p, R.raw.ultimatedroidbutton3pressed)); + nativeSetupScreenKeyboardButton(13, loadRaw(p, R.raw.ultimatedroidbutton4)); + nativeSetupScreenKeyboardButton(14, loadRaw(p, R.raw.ultimatedroidbutton4pressed)); + nativeSetupScreenKeyboardButton(15, loadRaw(p, R.raw.ultimatedroidbutton5)); + nativeSetupScreenKeyboardButton(16, loadRaw(p, R.raw.ultimatedroidbutton5pressed)); + nativeSetupScreenKeyboardButton(17, loadRaw(p, R.raw.ultimatedroidbutton6)); + nativeSetupScreenKeyboardButton(18, loadRaw(p, R.raw.ultimatedroidbutton6pressed)); + nativeSetupScreenKeyboardButton(19, loadRaw(p, R.raw.ultimatedroidbutton7)); + nativeSetupScreenKeyboardButton(20, loadRaw(p, R.raw.ultimatedroidbutton7)); + } } nativeSetAccelerometerSensitivity(Globals.AccelerometerSensitivity); nativeSetTrackballDampening(Globals.TrackballDampening); @@ -430,7 +517,8 @@ class Settings private static native void nativeSetJoystickUsed(); private static native void nativeSetMultitouchUsed(); private static native void nativeSetTouchscreenKeyboardUsed(); - private static native void nativeSetupScreenKeyboard(int size, int nbuttons, int nbuttonsAutoFire); + private static native void nativeSetupScreenKeyboard(int size, int theme, int nbuttons, int nbuttonsAutoFire); + private static native void nativeSetupScreenKeyboardButton(int buttonId, byte[] img); public static native void nativeSetEnv(final String name, final String value); } diff --git a/project/src/Video.java b/project/src/Video.java index e9c4cf7a6..05d4f0e7c 100644 --- a/project/src/Video.java +++ b/project/src/Video.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.sourceforge.sc2; +package com.googlecode.opentyrian; import javax.microedition.khronos.opengles.GL10; @@ -109,7 +109,7 @@ class DemoRenderer extends GLSurfaceView_SDL.Renderer { System.loadLibrary("application"); System.loadLibrary("sdl_main"); - Settings.Apply(); + Settings.Apply(context); // Tweak video thread priority, if user selected big audio buffer if(Globals.AudioBufferConfig >= 2) Thread.currentThread().setPriority( (Thread.NORM_PRIORITY + Thread.MIN_PRIORITY) / 2 ); // Lower than normal diff --git a/project/themes/UltimateDroid/UltimateDroidButton7.png b/project/themes/UltimateDroid/UltimateDroidButton7.png new file mode 100644 index 0000000000000000000000000000000000000000..e2962155101fbb95a8fe7b1fdbf74b5f164b3f98 GIT binary patch literal 5846 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 W#O?C6n$N(%z~JfX=d#Wzp$PzYZ54k2 literal 0 HcmV?d00001 diff --git a/project/themes/converter/convert.sh b/project/themes/converter/convert.sh new file mode 100755 index 000000000..a929d9e1e --- /dev/null +++ b/project/themes/converter/convert.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +for f in ../UltimateDroid/*.png; do + newname=`echo $f | sed 's@.*/@@' | tr '[A-Z]' '[a-z]'`.raw + ./converter $f ../../res/raw/$newname +done + diff --git a/project/themes/converter/converter b/project/themes/converter/converter index a107ec7fd466d63a91f6af22771509200cd4d6b8..9bbd215add5e7d15a90bdfb2eeba2cb4cbc3f171 100755 GIT binary patch delta 1203 zcmbPxfo<&twh0=H851>^bAI7r0D~_RZ|)Z~fN~6Y9KeDGlUFj{7TMk8r+#r}_x@t7 zxvQ2rPu<>`m$GH^3?>dHCJCO+i&(ZYF}6;QVBf{z!0o``ar|JwWGRkIb{Uw#_ukjS8uh_&kjh+wxzw;0Hb<1Zrq{QtiLWWPuAk&Nh*hbOae zYjPwrDKPl-s>Vz<<_65U}QA ze70FddI@j62{$BJf)qTEU|`UF&c?vN$Y;;Mz`#6lPQ9)gJBa(42gIFFulI!mqFfiM zO~1G(nSoIVq?2i)gF!6=0|TQdh{rr}N4UOz33fl+o33&^My_4?%u zj0*OX-86+#45C5WR6uqzO$^bS#|5!N24+Vl1EU&5GC*%RRFWMonaRMY0g?3qd4h$b zm7RfsOM;t$LB@ccfg#aVo1KB-+2(bc511JfHuvlLaxrn(ZoXw6z|9!YtnIvA+nF&d zaQloYj0wz45-ihyO=r~Ol7MDb37+XjGZ@XLznH-&Fuh_1qX8#88&BUjgVCHb0;(`# z`^OoK?97b+rvIGHXwG{ delta 1198 zcmZ2`fo<*uwh0=H5fe3+a~|Pg0D~hFZ|)alfN~gk9KeDMlUFj{7KzWg8ms$tTH?A( z)rVx7Ud3~5))w46gNcKQ=>_-ZMJ!vH7(*vVu~ofx)BOb%RIq0S=FD29M6;FIN8h|KFq2^@c}t?G1)fsJaV` zleIW4SuQl!?wOp^%Nr%3rYE2Rxc<55N__W&peKM7M)L=kXVTfB*mQtap9m z(H(lgqu2F~N9V;|EDQ_``#}ByS-22nMz`yUZU>Rh<1ds!%3WVTRlmScUHtd||KqMt zKw0az|Nrj*+3(SOBqI9c;R(p#^WiiQ(BqeHVPIgG?8nW|F_}q$!KYWXXL2gH4&&p= zlenXpIG85CP&wVv=W? ze34OX@@fGtq4$yu4DZAl7;+Oc^FS_Ocs=>JfC3})<`)9iT#VN@t4J^5t!L(jCP4-U zhKmvm47$(R7#JA&>=_ssm?y5O*HvQ&aX<5bxC`p_zHmU4|KWnr`o%@b42(h`olFxw z3~Ct|7#Kw%JO}-h;t~c%DG-l&;*NU#v@`}r**z>ElQz`rmoqRb*fUJ_&=d^Q%Y~Zu z8cOSDGBB!uoWL|OM6V1gcnwPHXJ#@mszGD}K>lLkXk}+$;F92GV309jXJANl)n;d4 zxW0L><^yKNn9cKaeYrNjH}~UalyA0k-frj2m=(Bv=@iCfW~LX+)466a>T$h*2Eq&O z=}t2k&A5I*`9HX)H_c!)ktVVfx8MjQg2>a8K`A%qYhwKYit5Mti0g+}mF*W@KYzRG9v838Oosz;?@}j9-`l DU^ao( diff --git a/project/themes/converter/converter.cpp b/project/themes/converter/converter.cpp index 2f1748841..f2a1ac60f 100644 --- a/project/themes/converter/converter.cpp +++ b/project/themes/converter/converter.cpp @@ -33,6 +33,8 @@ main(int argc, char *argv[]) fwrite( &w, 1, 4, ff ); int h = htonl(dst->h); fwrite( &h, 1, 4, ff ); + int format = htonl(argc <= 3 ? 0 : 1); + fwrite( &format, 1, 4, ff ); for( int i = 0; i < dst->h; i++ ) { for( int ii = 0; ii < dst->w; ii++ )