From 2c17a36af3a4496a63eaec663afdb353f5bf3b4e Mon Sep 17 00:00:00 2001 From: pelya Date: Tue, 5 Nov 2013 05:34:34 +0200 Subject: [PATCH] Xserver: select video mode and font scale at start --- .../commandergenius/commandergenius | 2 +- project/jni/application/openarena/engine | 2 +- project/jni/application/openarena/vm | 2 +- project/jni/application/teeworlds/src | 2 +- .../xserver/AndroidAppSettings.cfg | 6 +- .../jni/application/xserver/AndroidBuild.sh | 11 +- .../xserver/AndroidData/DroidSansMono.ttf | Bin 0 -> 119380 bytes project/jni/application/xserver/gfx.c | 300 ++++++++++++++++++ project/jni/application/xserver/gfx.h | 11 + project/jni/application/xserver/main.c | 94 ++---- project/jni/application/xserver/readme.txt | 2 +- project/jni/application/xserver/xserver | 2 +- 12 files changed, 347 insertions(+), 87 deletions(-) create mode 100644 project/jni/application/xserver/AndroidData/DroidSansMono.ttf create mode 100644 project/jni/application/xserver/gfx.c create mode 100644 project/jni/application/xserver/gfx.h diff --git a/project/jni/application/commandergenius/commandergenius b/project/jni/application/commandergenius/commandergenius index 7d74f1993..1bcbadd1e 160000 --- a/project/jni/application/commandergenius/commandergenius +++ b/project/jni/application/commandergenius/commandergenius @@ -1 +1 @@ -Subproject commit 7d74f19934f2f3a2f9e3d0df90de82cb6d52f9ad +Subproject commit 1bcbadd1eadd735235288463239c348f5b58f845 diff --git a/project/jni/application/openarena/engine b/project/jni/application/openarena/engine index 30e98be35..07c011b6c 160000 --- a/project/jni/application/openarena/engine +++ b/project/jni/application/openarena/engine @@ -1 +1 @@ -Subproject commit 30e98be3582cca3009f371ca2f9a7334e24e1582 +Subproject commit 07c011b6ccb275fc2b69dbd6e7ee8dba6223e59a diff --git a/project/jni/application/openarena/vm b/project/jni/application/openarena/vm index 278f04520..4b83db91a 160000 --- a/project/jni/application/openarena/vm +++ b/project/jni/application/openarena/vm @@ -1 +1 @@ -Subproject commit 278f045202ff1bc0c1911b6c3d441909ba93ee87 +Subproject commit 4b83db91ab39b9cae27f087fe1a0a8ba9f30d43d diff --git a/project/jni/application/teeworlds/src b/project/jni/application/teeworlds/src index e5489c8c0..34b64249c 160000 --- a/project/jni/application/teeworlds/src +++ b/project/jni/application/teeworlds/src @@ -1 +1 @@ -Subproject commit e5489c8c089e57d88bbaa90df0176d5e5d4c6351 +Subproject commit 34b64249c46a90ce127f32b3ef41a565b8a70a61 diff --git a/project/jni/application/xserver/AndroidAppSettings.cfg b/project/jni/application/xserver/AndroidAppSettings.cfg index 17359b097..9c3c2c6fa 100644 --- a/project/jni/application/xserver/AndroidAppSettings.cfg +++ b/project/jni/application/xserver/AndroidAppSettings.cfg @@ -23,7 +23,7 @@ InhibitSuspend=n # If the URL does not contain 'http://' it is treated as file from 'project/jni/application/src/AndroidData' dir - # these files are put inside .apk package by build system # Also please avoid 'https://' URLs, many Android devices do not have trust certificates and will fail to connect to SF.net over HTTPS -AppDataDownloadUrl="!!Data files|:data.tar.gz:data-1.tgz^!!Data files|:busybox:busybox" +AppDataDownloadUrl="!!Data files|:data.tar.gz:data-1.tgz^!!Data files|:busybox:busybox^!!Data files|:DroidSansMono.ttf:DroidSansMono.ttf" # Video color depth - 16 BPP is the fastest and supported for all modes, 24 bpp is supported only # with SwVideoMode=y, SDL_OPENGL mode supports everything. (16)/(24)/(32) @@ -124,7 +124,7 @@ NonBlockingSwapBuffers=n # SEARCH and CALL by default return same keycode as DPAD_CENTER - one of those keys is available on most devices # Use word NO_REMAP if you want to preserve native functionality for certain key (volume keys are 3-rd and 4-th) # Keys: TOUCHSCREEN (works only when AppUsesMouse=n), DPAD_CENTER/SEARCH, VOLUMEUP, VOLUMEDOWN, MENU, BACK, CAMERA -RedefinedKeys="LALT RETURN NO_REMAP NO_REMAP RETURN ESCAPE" +RedefinedKeys="LALT RETURN NO_REMAP NO_REMAP RETURN UNDO" # Number of virtual keyboard keys (currently 6 is maximum) AppTouchscreenKeyboardKeysAmount=0 @@ -184,7 +184,7 @@ DeleteFilesOnUpgrade="%" # Optional shared libraries to compile - removing some of them will save space # MP3 support by libMAD is encumbered by patents and libMAD is GPL-ed # Available libraries: mad (GPL-ed!) sdl_mixer sdl_image sdl_ttf sdl_net sdl_blitpool sdl_gfx sdl_sound intl xml2 lua jpeg png ogg flac tremor vorbis freetype xerces curl theora fluidsynth lzma lzo2 mikmod openal timidity zzip bzip2 yaml-cpp python boost_date_time boost_filesystem boost_iostreams boost_program_options boost_regex boost_signals boost_system boost_thread glu avcodec avdevice avfilter avformat avresample avutil swscale swresample bzip2 -CompiledLibraries="jpeg png freetype sdl-1.2" +CompiledLibraries="jpeg png freetype sdl_ttf" # Application uses custom build script AndroidBuild.sh instead of Android.mk (y) or (n) CustomBuildScript=y diff --git a/project/jni/application/xserver/AndroidBuild.sh b/project/jni/application/xserver/AndroidBuild.sh index 284c4a145..72464a830 100755 --- a/project/jni/application/xserver/AndroidBuild.sh +++ b/project/jni/application/xserver/AndroidBuild.sh @@ -6,9 +6,7 @@ LOCAL_PATH=`cd $LOCAL_PATH && pwd` PACKAGE_NAME=`grep AppFullName AndroidAppSettings.cfg | sed 's/.*=//'` ../setEnvironment-armeabi-v7a.sh sh -c '\ -$CC $CFLAGS -c main.c -o main.o' || exit 1 - - +$CC $CFLAGS -c main.c gfx.c' || exit 1 [ -e xserver/android ] || git submodule update --init xserver || exit 1 cd xserver @@ -19,8 +17,9 @@ env TARGET_DIR=/data/data/$PACKAGE_NAME/files \ ./build.sh || exit 1 ../../../setEnvironment-armeabi-v7a.sh sh -c '\ -$CC $LDFLAGS -o ../../libapplication-armeabi-v7a.so -L. \ +$CC $CFLAGS $LDFLAGS -o ../../libapplication-armeabi-v7a.so -L. \ ../../main.o \ +../../gfx.o \ hw/kdrive/sdl/sdl.o \ dix/.libs/libmain.a \ dix/.libs/libdix.a \ @@ -44,7 +43,9 @@ xkb/.libs/libxkbstubs.a \ composite/.libs/libcomposite.a \ os/.libs/libos.a \ hw/kdrive/linux/.libs/liblinux.a \ --lpixman-1 -lXfont -lXau -lXdmcp -lfontenc -lfreetype -lts' \ +-lpixman-1 -lXfont -lXau -lXdmcp -lfontenc -lts -lfreetype' \ || exit 1 +#-lfreetype is inside -lsdl_ttf + exit 0 diff --git a/project/jni/application/xserver/AndroidData/DroidSansMono.ttf b/project/jni/application/xserver/AndroidData/DroidSansMono.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a007071944f7c90020e798eea53b10065e2b45a5 GIT binary patch literal 119380 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

X*!i-p{Q1geb`)dU3? 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

@x(1|<24yK;GjJ&@= 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 qKvHHpNG#MDUBt(kBP2OBB{L@{k)s640MDE +#include +#include +#include +#include +#include +#include +#include + +#include "gfx.h" + +static TTF_Font* sFont; +static int unpackProgressMb; +static int unpackProgressMbTotal = 1; +static int unpackFinished = 0; + +static void renderString(const char *c, int x, int y); +static void renderStringColor(const char *c, int x, int y, int r, int g, int b); + +static void * unpackFilesThread(void * unused); +static void showErrorMessage(const char *msg); + +void * unpackFilesThread(void * unused) +{ + char fname[PATH_MAX*2]; + strcpy( fname, getenv("SECURE_STORAGE_DIR") ); + strcat( fname, "/usr/bin/xkbcomp" ); + struct stat st; + if( stat( fname, &st ) == 0 ) + { + unpackFinished = 1; + return 1; + } + + strcpy( fname, getenv("SECURE_STORAGE_DIR") ); + strcat( fname, "/busybox" ); + FILE * ff = fopen("busybox", "rb"); + FILE * fo = fopen(fname, "wb"); + if( !ff || !fo ) + { + unpackFinished = 1; + return 0; + } + + for(;;) + { + char buf[2048]; + int cnt = fread( buf, 1, sizeof(buf), ff ); + if( cnt < 0 ) + { + unpackFinished = 1; + return 1; + } + fwrite( buf, 1, cnt, fo ); + if( cnt < sizeof(buf) ) + break; + } + + fclose(ff); + fclose(fo); + + if( chmod(fname, 0755) != 0 ) + { + unpackFinished = 1; + return 0; + } + + if( stat( "data.tar.gz", &st ) == 0 ) + unpackProgressMbTotal = st.st_size / 1024 / 1024; + else + unpackProgressMbTotal = 1; + + unpackProgressMb = 0; + + ff = fopen("data.tar.gz", "rb"); + strcat(fname, " tar xz -C "); + strcat(fname, getenv("SECURE_STORAGE_DIR")); + fo = popen(fname, "w"); + if( !ff || !fo ) + { + unpackFinished = 1; + return 0; + } + + int unpackProgressKb = 0; + for(;;) + { + char buf[1024 * 8]; + int cnt = fread( buf, 1, sizeof(buf), ff ); + if( cnt < 0 ) + { + unpackFinished = 1; + return 1; + } + fwrite( buf, 1, cnt, fo ); + if( cnt < sizeof(buf) ) + break; + unpackProgressKb += 8; + if( unpackProgressKb >= 1024 ) + { + unpackProgressKb = 0; + unpackProgressMb++; + } + } + + fclose(ff); + if( pclose(fo) != 0 ) + { + unpackFinished = 1; + return 0; + } + + remove("data.tar.gz"); + + unpackFinished = 1; + return 1; +} + +void XSDL_unpackFiles() +{ + pthread_t thread_id; + void * status; + pthread_create(&thread_id, NULL, &unpackFilesThread, NULL); + + while (!unpackFinished) + { + SDL_Delay(400); + SDL_FillRect(SDL_GetVideoSurface(), NULL, 0); + char s[128]; + sprintf(s, "Unpacking data: %d/%d Mb, %d%%", unpackProgressMb, unpackProgressMbTotal, unpackProgressMb * 100 / unpackProgressMbTotal); + renderString(s, VID_X/2, VID_Y/3); + renderString("You may put this app to background while it's unpacking", VID_X/2, VID_Y*2/3); + SDL_Flip(SDL_GetVideoSurface()); + } + + pthread_join(thread_id, &status); + if( status == 0 ) + { + showErrorMessage("Cannot unpack data files, please reinstall the app"); + exit(1); + } +} + +void XSDL_showConfigMenu(int * resolutionW, int * displayW, int * resolutionH, int * displayH) +{ + int x, y, i, ii; + SDL_Event event; + int res = -1, dpi = -1; + char native[32] = "0x0"; + float dpiScale = 1.0f; + + const char * resStr[] = { + native, "1920x1080", "1280x960", "1280x720", + "1024x768", "800x600", "800x480", "640x480" + }; + const int resVal[][2] = { + {*resolutionW, *resolutionH}, {1920,1080}, {1280,960}, {1280,720}, + {1024,768}, {800,600}, {800,480}, {640,480} + }; + + const char * fontsStr[] = { + "x2.5", "x2", "x1.7", "x1.5", + "x1.3", "x1", "x0.9", "x0.8", + "x0.7", "x0.6", "x0.5", "x0.4" + }; + const float fontsVal[] = { + 2.5f, 2.0f, 1.7f, 1.5f, + 1.3f, 1.0f, 0.9f, 0.8f, + 0.7f, 0.6f, 0.5f, 0.4f + }; + + sprintf(native, "%dx%d native", resVal[0][0], resVal[0][1]); + + while ( res < 0 ) + { + while (SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_KEYDOWN: + if (event.key.keysym.sym == SDLK_UNDO) + return; + break; + case SDL_MOUSEBUTTONUP: + { + SDL_GetMouseState(&x, &y); + i = (y / (VID_Y/2)); + ii = (x / (VID_X/4)); + res = i * 4 + ii; + } + break; + } + } + SDL_FillRect(SDL_GetVideoSurface(), NULL, 0); + renderString("Select display resolution", VID_X/2, VID_Y/2); + for(i = 0; i < 2; i++) + for(ii = 0; ii < 4; ii++) + renderString(resStr[i*4+ii], VID_X/8 + (ii*VID_X/4), VID_Y/4 + (i*VID_Y/2)); + SDL_GetMouseState(&x, &y); + renderString("X", x, y); + SDL_Delay(200); + SDL_Flip(SDL_GetVideoSurface()); + } + dpiScale = (float)resVal[res][0] / (float)*resolutionW; + *resolutionW = resVal[res][0]; + *resolutionH = resVal[res][1]; + while ( dpi < 0 ) + { + while (SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_KEYDOWN: + if (event.key.keysym.sym == SDLK_UNDO) + return; + break; + case SDL_MOUSEBUTTONUP: + { + SDL_GetMouseState(&x, &y); + i = (y / (VID_Y/3)); + ii = (x / (VID_X/4)); + dpi = i * 4 + ii; + } + break; + } + } + SDL_FillRect(SDL_GetVideoSurface(), NULL, 0); + renderString("Select font scale", VID_X/2, VID_Y/3); + for(i = 0; i < 3; i++) + for(ii = 0; ii < 4; ii++) + renderString(fontsStr[i*4+ii], VID_X/8 + (ii*VID_X/4), VID_Y/6 + (i*VID_Y/3)); + SDL_GetMouseState(&x, &y); + renderString("X", x, y); + SDL_Delay(200); + SDL_Flip(SDL_GetVideoSurface()); + } + *displayW = *displayW * (dpiScale / fontsVal[dpi]); + *displayH = *displayH * (dpiScale / fontsVal[dpi]); +} + +void showErrorMessage(const char *msg) +{ + SDL_Event event; + SDL_FillRect(SDL_GetVideoSurface(), NULL, 0); + renderString(msg, VID_X/2, VID_Y/2); + SDL_Flip(SDL_GetVideoSurface()); + while (1) + { + while (SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_KEYDOWN: + if (event.key.keysym.sym == SDLK_UNDO) + return; + break; + } + } + } +} + +void XSDL_initSDL() +{ + SDL_Init(SDL_INIT_VIDEO); + SDL_SetVideoMode(VID_X, VID_Y, 24, SDL_SWSURFACE); + TTF_Init(); + sFont = TTF_OpenFont("DroidSansMono.ttf", 10); + if (!sFont) + { + __android_log_print(ANDROID_LOG_INFO, "XSDL", "Error: cannot open font file, please reinstall the app"); + exit(1); + } +} + +void XSDL_deinitSDL() +{ + TTF_CloseFont(sFont); + sFont = NULL; + TTF_Quit(); + // Do NOT call SDL_Quit(), it crashes! +} + +void renderStringColor(const char *c, int x, int y, int r, int g, int b) +{ + SDL_Color fColor = {r, g, b}; + SDL_Rect fontRect = {0, 0, 0, 0}; + SDL_Surface* fontSurface = TTF_RenderUTF8_Solid(sFont, c, fColor); + fontRect.w = fontSurface->w; + fontRect.h = fontSurface->h; + fontRect.x = x - fontRect.w / 2; + fontRect.y = y - fontRect.h / 2; + SDL_BlitSurface(fontSurface, NULL, SDL_GetVideoSurface(), &fontRect); + SDL_FreeSurface(fontSurface); +} + +void renderString(const char *c, int x, int y) +{ + renderStringColor(c, x, y, 255, 255, 255); +} + diff --git a/project/jni/application/xserver/gfx.h b/project/jni/application/xserver/gfx.h new file mode 100644 index 000000000..1fefefdb1 --- /dev/null +++ b/project/jni/application/xserver/gfx.h @@ -0,0 +1,11 @@ +#ifndef _XSDL_GFX_H_ +#define _XSDL_GFX_H_ + +enum { VID_X = 480, VID_Y = 320 }; + +void XSDL_initSDL(); +void XSDL_deinitSDL(); +void XSDL_unpackFiles(); +void XSDL_showConfigMenu(int * resolutionW, int * displayW, int * resolutionH, int * displayH); + +#endif diff --git a/project/jni/application/xserver/main.c b/project/jni/application/xserver/main.c index eb88f1962..fd8db92b5 100644 --- a/project/jni/application/xserver/main.c +++ b/project/jni/application/xserver/main.c @@ -1,12 +1,12 @@ #include #include -#include -#include +#include #include #include +#include "gfx.h" + extern int android_main( int argc, char *argv[], char *envp[] ); -static int unpack_files(); int main( int argc, char* argv[] ) { @@ -25,81 +25,29 @@ int main( int argc, char* argv[] ) }; char * envp[] = { NULL }; - sprintf( screenres, "%s/%sx%s/%sx%d", - getenv("DISPLAY_RESOLUTION_WIDTH"), - getenv("DISPLAY_WIDTH_MM"), - getenv("DISPLAY_RESOLUTION_HEIGHT"), - getenv("DISPLAY_HEIGHT_MM"), - 24 ); + int resolutionW = atoi(getenv("DISPLAY_RESOLUTION_WIDTH")); + int resolutionH = atoi(getenv("DISPLAY_RESOLUTION_HEIGHT")); + int displayW = atoi(getenv("DISPLAY_WIDTH_MM")); + int displayH = atoi(getenv("DISPLAY_HEIGHT_MM")); + + __android_log_print(ANDROID_LOG_INFO, "XSDL", "Actual video resolution %d/%dx%d/%d", resolutionW, displayW, resolutionH, displayH); + + XSDL_initSDL(); + + XSDL_unpackFiles(); + + XSDL_showConfigMenu(&resolutionW, &displayW, &resolutionH, &displayH); + + XSDL_deinitSDL(); + + sprintf( screenres, "%d/%dx%d/%dx%d", resolutionW, displayW, resolutionH, displayH, 24 ); if( argc >= 2 ) cmd = argv[2]; sprintf( clientcmd, "%s/usr/bin/xhost + ; %s", getenv("SECURE_STORAGE_DIR"), cmd ); - if( !unpack_files() ) - { - __android_log_print(ANDROID_LOG_INFO, "XSDL", "Error while unpacking files, try to reinstall the app"); - return 1; - } - + __android_log_print(ANDROID_LOG_INFO, "XSDL", "XSDL video resolution %s", screenres); + return android_main( 8, args, envp ); } - -int unpack_files() -{ - char fname[PATH_MAX*2]; - strcpy( fname, getenv("SECURE_STORAGE_DIR") ); - strcat( fname, "/usr/bin/xkbcomp" ); - struct stat st; - if( stat( fname, &st ) == 0 ) - return 1; - - strcpy( fname, getenv("SECURE_STORAGE_DIR") ); - strcat( fname, "/busybox" ); - FILE * ff = fopen("busybox", "rb"); - FILE * fo = fopen(fname, "wb"); - if( !ff || !fo ) - return 0; - - for(;;) - { - char buf[2048]; - int cnt = fread( buf, 1, sizeof(buf), ff ); - if( cnt < 0 ) - return 1; - fwrite( buf, 1, cnt, fo ); - if( cnt < sizeof(buf) ) - break; - } - - fclose(ff); - fclose(fo); - - if( chmod(fname, 0755) != 0 ) - return 0; - - ff = fopen("data.tar.gz", "rb"); - strcat(fname, " tar xz -C "); - strcat(fname, getenv("SECURE_STORAGE_DIR")); - fo = popen(fname, "w"); - if( !ff || !fo ) - return 0; - - for(;;) - { - char buf[2048]; - int cnt = fread( buf, 1, sizeof(buf), ff ); - if( cnt < 0 ) - return 1; - fwrite( buf, 1, cnt, fo ); - if( cnt < sizeof(buf) ) - break; - } - - fclose(ff); - if( pclose(fo) != 0 ) - return 0; - - return 1; -} diff --git a/project/jni/application/xserver/readme.txt b/project/jni/application/xserver/readme.txt index 298123b66..9d0534a94 100644 --- a/project/jni/application/xserver/readme.txt +++ b/project/jni/application/xserver/readme.txt @@ -1,7 +1,7 @@ You will need to install some packages to your Debian/Ubuntu first: -sudo apt-get install bison libpixman-1-dev +sudo apt-get install bison libpixman-1-dev \ libxfont-dev libxkbfile-dev libpciaccess-dev \ xutils-dev xcb-proto python-xcbgen xsltproc \ x11proto-bigreqs-dev x11proto-composite-dev \ diff --git a/project/jni/application/xserver/xserver b/project/jni/application/xserver/xserver index d1da3d5e3..f1a52cb49 160000 --- a/project/jni/application/xserver/xserver +++ b/project/jni/application/xserver/xserver @@ -1 +1 @@ -Subproject commit d1da3d5e31a7fe9beb380114616c6a4e3de277a8 +Subproject commit f1a52cb49bd4b869d6ce94f65156bdfb95b042a8