Browse Source

game(client): fix touch drawing problems again, fix some fonts on android

pull/122/merge
nillerusr 2 years ago
parent
commit
4ace9f8030
  1. 17
      game/client/touch.cpp
  2. 85
      vgui2/vgui_surfacelib/linuxfont.cpp

17
game/client/touch.cpp

@ -441,6 +441,8 @@ void CTouchControls::CreateAtlasTexture()
if( touchTextureID ) if( touchTextureID )
vgui::surface()->DeleteTextureByID( touchTextureID ); vgui::surface()->DeleteTextureByID( touchTextureID );
int rectCount = 0;
for( int i = 0; i < textureList.Count(); i++ ) for( int i = 0; i < textureList.Count(); i++ )
{ {
CTouchTexture *t = textureList[i]; CTouchTexture *t = textureList[i];
@ -494,8 +496,9 @@ void CTouchControls::CreateAtlasTexture()
continue; continue;
} }
rects[i].h = t->height; rects[rectCount].h = t->height;
rects[i].w = t->width; rects[rectCount].w = t->width;
rectCount++;
} }
if( !textureList.Count() ) if( !textureList.Count() )
@ -512,27 +515,29 @@ void CTouchControls::CreateAtlasTexture()
stbrp_context context; stbrp_context context;
stbrp_init_target( &context, atlasHeight, atlasHeight, nodes, nodesCount ); stbrp_init_target( &context, atlasHeight, atlasHeight, nodes, nodesCount );
stbrp_pack_rects(&context, rects, textureList.Count()); stbrp_pack_rects(&context, rects, rectCount);
rectCount = 0;
for( int i = 0; i < textureList.Count(); i++ ) for( int i = 0; i < textureList.Count(); i++ )
{ {
CTouchTexture *t = textureList[i]; CTouchTexture *t = textureList[i];
if( t->textureID ) if( t->textureID )
continue; continue;
t->X0 = rects[i].x / (float)atlasHeight; t->X0 = rects[rectCount].x / (float)atlasHeight;
t->Y0 = rects[i].y / (float)atlasHeight; t->Y0 = rects[rectCount].y / (float)atlasHeight;
t->X1 = t->X0 + t->width / (float)atlasHeight; t->X1 = t->X0 + t->width / (float)atlasHeight;
t->Y1 = t->Y0 + t->height / (float)atlasHeight; t->Y1 = t->Y0 + t->height / (float)atlasHeight;
unsigned char *src = t->vtf->ImageData(0, 0, 0); unsigned char *src = t->vtf->ImageData(0, 0, 0);
for( int row = 0; row < t->height; row++) for( int row = 0; row < t->height; row++)
{ {
unsigned char *row_dest = dest+(row+rects[i].y)*atlasHeight*4+rects[i].x*4; unsigned char *row_dest = dest+(row+rects[rectCount].y)*atlasHeight*4+rects[rectCount].x*4;
unsigned char *row_src = src+row*t->height*4; unsigned char *row_src = src+row*t->height*4;
memcpy(row_dest, row_src, t->height*4); memcpy(row_dest, row_src, t->height*4);
} }
rectCount++;
DestroyVTFTexture(t->vtf); DestroyVTFTexture(t->vtf);
} }

85
vgui2/vgui_surfacelib/linuxfont.cpp

@ -405,25 +405,44 @@ bool CLinuxFont::CreateFromMemory(const char *windowsFontName, void *data, int d
return true; return true;
} }
#include "tier1/convar.h"
ConVar cl_language( "cl_language", "english", FCVAR_USERINFO, "Language (from HKCU\\Software\\Valve\\Steam\\Language)" );
#if !HAVE_FC #if !HAVE_FC
char *TryFindFont(const char *winFontName, bool bBold, int italic) char *TryFindFont(const char *winFontName, bool bBold, int italic)
{ {
static char fontFile[MAX_PATH]; static char fontFile[MAX_PATH];
const char *fontName, *fontNamePost; const char *fontName, *fontNamePost = NULL;
#ifdef ANDROID #ifdef ANDROID
const char *lang = cl_language.GetString();
if( strcmp( winFontName, "Courier New") == 0 ) if( strcmp( winFontName, "Courier New") == 0 )
{
fontName = "LiberationMono-Regular.ttf"; fontName = "LiberationMono-Regular.ttf";
else snprintf( fontFile, sizeof fontFile, "%s/files/%s", getenv("APP_DATA_PATH"), fontName);
fontName = "DroidSansFallback.ttf"; // for chinese/japanese/korean return fontFile;
}
snprintf( fontFile, sizeof fontFile, "%s/files/%s", getenv("APP_DATA_PATH"), fontName); if( strcmp(lang, "japanese") == 0 ||
#else strcmp(lang, "koreana") == 0 ||
// "platform/resource/linux_fonts/"; strcmp(lang, "korean") == 0 ||
strcmp(lang, "tchinese") == 0 ||
strcmp(lang, "schinese") == 0 )
{
fontName = "DroidSansFallback.ttf"; // for chinese/japanese/korean
snprintf( fontFile, sizeof fontFile, "%s/files/%s", getenv("APP_DATA_PATH"), fontName);
return fontFile;
}
else if( strcmp(lang, "thai") == 0 )
{
fontName = "Itim-Regular.otf";
snprintf( fontFile, sizeof fontFile, "%s/files/%s", getenv("APP_DATA_PATH"), fontName);
return fontFile;
}
if( strcmp( winFontName, "Courier New") == 0 ) fontName = "dejavusans";
fontName = "liberationmono";
if( bBold ) if( bBold )
{ {
@ -434,54 +453,34 @@ char *TryFindFont(const char *winFontName, bool bBold, int italic)
} }
else if( italic ) else if( italic )
fontNamePost = "oblique"; fontNamePost = "oblique";
if( fontNamePost )
snprintf(fontFile, sizeof fontFile, "%s/files/%s-%s.ttf", getenv("APP_DATA_PATH"), fontName, fontNamePost);
else else
fontNamePost = "regular"; snprintf(fontFile, sizeof fontFile, "%s/files/%s.ttf", getenv("APP_DATA_PATH"), fontName);
snprintf(fontFile, sizeof fontFile, "platform/resource/linux_fonts/%s-%s.ttf", fontName, fontNamePost);
#endif
return fontFile;
#if 0 // Old detect return fontFile;
const char *fontFileName, *fontFileNamePost = NULL; #else
// "platform/resource/linux_fonts/";
fontFileName = "Roboto"; if( strcmp( winFontName, "Courier New") == 0 )
fontName = "liberationmono";
if( bBold ) if( bBold )
{ {
if( italic ) if( italic )
fontFileNamePost = "BoldItalic"; fontNamePost = "boldoblique";
else else
fontFileNamePost = "Bold"; fontNamePost = "bold";
} }
else if( italic ) else if( italic )
fontFileNamePost = "Italic"; fontNamePost = "oblique";
else
fontFileNamePost = "Regular";
static char dataFile[MAX_PATH];
if( fontFileNamePost )
snprintf( dataFile, sizeof dataFile, "/system/fonts/%s-%s.ttf", fontFileName, fontFileNamePost );
else else
snprintf( dataFile, sizeof dataFile, "/system/fonts/%s.ttf", fontFileName ); fontNamePost = "regular";
if( access( dataFile, R_OK ) != 0 )
{
fontFileNamePost = NULL;
fontFileName = "DroidSans";
if( bBold )
fontFileNamePost = "Bold";
if( fontFileNamePost )
snprintf( dataFile, sizeof dataFile, "/system/fonts/%s-%s.ttf", fontFileName, fontFileNamePost );
else
snprintf( dataFile, sizeof dataFile, "/system/fonts/%s.ttf", fontFileName );
if( access( dataFile, R_OK ) != 0 )
return NULL;
}
return dataFile; snprintf(fontFile, sizeof fontFile, "platform/resource/linux_fonts/%s-%s.ttf", fontName, fontNamePost);
return fontFile;
#endif #endif
} }
#endif #endif

Loading…
Cancel
Save