From a71f0d0e7cc14b2b65dd862fa9963b3798fc0777 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Thu, 8 Apr 2010 01:12:55 +0000 Subject: [PATCH] Bugfixes: - Allow for load screens for networked clients - Reworked the font loading for win32 so it will respect font names and sizes - Disabled Alt-Enter for win32 --- mk/windoze/Glest.suo | Bin 166912 -> 170496 bytes source/glest_game/game/game.cpp | 3 +- source/glest_game/main/main.cpp | 4 +- .../sources/platform/sdl/gl_wrap.cpp | 71 +++++++++++++++++- 4 files changed, 71 insertions(+), 7 deletions(-) diff --git a/mk/windoze/Glest.suo b/mk/windoze/Glest.suo index e43c3bd0926b28303fe9337aa682110c874c8d2e..e6767e9d961e58c2d7adadbf1a37a7a65f9e807a 100755 GIT binary patch delta 4557 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 Lm`O=^$PNDiXlJV& delta 2704 zcmZ8j4Nz3q6@KTkyDYna3lc?wupkN&Toyzmiey0`fCScnh<_;l1&xvw5v)ygMNEv1 ziX4YSn=wH&8mckKvwLl86~Q>hs&Q;uNm@J9Njr{FV-18g*r^$?l?8Cg_v66`+15jzOTazW&GFKVJbKRw>V^TXfg;V5A^l zcmZooH}pEz1`dnnV(ir=sRL%G(EGC9Z&)Arg{H^aQBJ&g(yrghU0>sqQFHVLZkfG< z3?FfG{tVn=$=Al}EiAr?Pb>unFmW?rc%`7dGbbtlic-egS-?o;&TGe0g1>wEa8T1v zVZ6xDCXLj$vV26H75t7t|9fr2O@5Uob9 zbPKqkf^*QPtE>%#USRwD3Vi&^a!MyK!8;VSTP(nH75?hYQX90F`>XA%Z$kSTAG+}i zVMqIkr(NqRbWtW{y;7;HQL1^D+M~&qArU+J-4~;5Bey`_u>wZH%U_=OIK5sY%eGsWBC6>M~#wo~oOO zzph(oPEbmC@+O|Xf`ZI2S*@yX_2)ZgS1W5V^Gp(2Q;gIc3BkB5!=}0$-LWW+r{mgB zTDm%I(EQ&BHR9wQpoV!+hnvqutCvpA5Ps_wn^MIqj8*rYoe1rxjri*Lh1l5@fq{Pu zN9!h?T6nVx$UP4>tDDccgzo9!;GlZHyHp<(%+p3*a0*@63uFB*vHA*Qhq~d?fAmA+ z*IhlJr{$3lgMELBL+i#ewd^ky&@6dNU)}+1?yROMb40kB(bwaLj%f*+6h@YPU{DLc zse<-90&AuxWA|Nu^k3tT{dfIU)4wL^)zjY=8u7+Go3w?3NqE;ASRNQ~n9Uz$bTIm8 zkAT?$lA9ie%0PKrzzQ8~#mwU`!BO1r+~zUD0GNNnzTC?L_#sQ4h$5>AtSv>NC^?0D ztgN2KZ~iMm3@ymR_&sBUE@xPm3$oh;jsR?TuBOg#2qC8df@E(P%<@I+=LNE$06c(( z+%yz_Eu)iBV3Uo}a8@@rUbDjRV~q6f1eUb~iTsIvAItAE%spCP#NCr;!LF&wcdiwNj(TDv-DU@gv+oVW^3}1Y8Ngg_Kf}2mpXihZXz3F3c zYyG6786fb^w+`y=0EcutU^`&6E||{0D>A8bhv-1p!$3N;7Aojk36q?6UxnJf%E@g6 ztF&fAzYj(=j-x;95}UQr*jcHgc}Y-8k#>dLX#hxP9mB9g^wgN~q8@z<2+-0hu zFG?UDgiOtYoj`BA06Cr_06|Ida2B0khsbepkmy5|iI9eEEB)C|HmWIw>#z#9)kRX( zJP4(>9AVTlq5&Hhg~+1S&;_(L5CSQ%2I9$SgQc|Z71%(Q>o6bN?uTI8HUm8kxsPz;_5a04#C6+uUr!b0Db%0?wkQRLuK5P}-QAg1LI zMAOoISgh?kO@7LE1avzAQb(Axjt|E01?)H%o11Otn|2hJ%cdImn3K3lvs}fNWu;w< zgoG)u%(D(aM-8W8C3d>(@`n`g2XsDKijJZ&vZ$8NhG)yu$ngy%%eAMW1zNfx%~J=n z1GOq4Ya5}^M2=X^Eghf(U&@Jv3FMx|tnHqj`Ye&{XpTtpO=qTaDXZjpgxf;Tj5DZESD*!`H11mAH}b{e^ndHn`C**Uh@QD=g|p>$C?LK^uQqky+k~;5XanQZ0oW~ z){h1n^*-#t{u3tJlPeZ^lC`tB>etb-GVn+1_r{jvnm!rz()BMZ*-Ac+s(B830^-SCBFgaT-^XZV7vd=v7X$QNyn{2t7qVEC;^mVGvUZ8+ z^Mj}RD^*XG=rv>S$I0@CjiT6O{4I~xf|8u|B93ae3h#Fr4Qv%(axKt4-DqH&xJvdM z5i?% pathList=config.getPathListForType(ptTechs,scenarioDir); for(int idx = 0; idx < pathList.size(); idx++) { const string path = pathList[idx]+ "/" +techName+ "/"+ "factions"+ "/"+ gameSettings.getFactionTypeName(i); diff --git a/source/glest_game/main/main.cpp b/source/glest_game/main/main.cpp index 3bc799c8..586cdbc0 100644 --- a/source/glest_game/main/main.cpp +++ b/source/glest_game/main/main.cpp @@ -213,8 +213,8 @@ void MainWindow::eventKeyDown(char key){ // This stupidity only required in win32. // We reload the textures so that #ifdef WIN32 - Renderer &renderer= Renderer::getInstance(); - renderer.reinitAll(); + //Renderer &renderer= Renderer::getInstance(); + //renderer.reinitAll(); #endif SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); diff --git a/source/shared_lib/sources/platform/sdl/gl_wrap.cpp b/source/shared_lib/sources/platform/sdl/gl_wrap.cpp index 4fa8e3a0..7aedbf05 100644 --- a/source/shared_lib/sources/platform/sdl/gl_wrap.cpp +++ b/source/shared_lib/sources/platform/sdl/gl_wrap.cpp @@ -22,7 +22,7 @@ #include "noimpl.h" #include "util.h" #include "window.h" - +#include #include "leak_dumper.h" using namespace Shared::Graphics::Gl; @@ -81,6 +81,19 @@ void PlatformContextGl::swapBuffers() { // Global Fcs // ====================================== +#ifdef WIN32 + +int CALLBACK EnumFontFamExProc(ENUMLOGFONTEX *lpelfe, + NEWTEXTMETRICEX *lpntme, + int FontType, + LPARAM lParam) { + std::vector *systemFontList = (std::vector *)lParam; + systemFontList->push_back((char *)lpelfe->elfFullName); + return 1; // I want to get all fonts +} + +#endif + void createGlFontBitmaps(uint32 &base, const string &type, int size, int width, int charCount, FontMetrics &metrics) { #ifdef X11_AVAILABLE @@ -173,16 +186,56 @@ void createGlFontBitmaps(uint32 &base, const string &type, int size, int width, #else // we badly need a solution portable to more than just glx //NOIMPL; + + std::string useRealFontName = type; + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] trying to load useRealFontName [%s], size = %d, width = %d\n",__FILE__,__FUNCTION__,__LINE__,useRealFontName.c_str(),size,width); + + static std::vector systemFontList; + if(systemFontList.size() == 0) { + LOGFONT lf; + //POSITION pos; + + lf.lfCharSet = ANSI_CHARSET; + lf.lfFaceName[0]='\0'; + + HDC hDC = wglGetCurrentDC(); + ::EnumFontFamiliesEx(hDC, + &lf, + (FONTENUMPROC) EnumFontFamExProc, + (LPARAM) &systemFontList, 0); + + for(unsigned int idx = 0; idx < systemFontList.size(); ++idx) { + string &fontName = systemFontList[idx]; + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] found system font [%s]\n",__FILE__,__FUNCTION__,__LINE__,fontName.c_str()); + } + } + else { + for(unsigned int idx = 0; idx < systemFontList.size(); ++idx) { + string &fontName = systemFontList[idx]; + //SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] checking font [%s]\n",__FILE__,__FUNCTION__,__LINE__,fontName.c_str()); + + if(_stricmp(useRealFontName.c_str(),fontName.c_str()) != 0) { + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] switch font name from [%s] to [%s]\n",__FILE__,__FUNCTION__,__LINE__,useRealFontName.c_str(),fontName.c_str()); + + useRealFontName = fontName; + break; + } + } + } + + HFONT font= CreateFont( - size, 0, 0, 0, width, 0, FALSE, FALSE, ANSI_CHARSET, - OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, - DEFAULT_PITCH, type.c_str()); + size, 0, 0, 0, width, FALSE, FALSE, FALSE, DEFAULT_CHARSET, + OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, + DEFAULT_PITCH| (useRealFontName.c_str() ? FF_DONTCARE:FF_SWISS), useRealFontName.c_str()); assert(font!=NULL); HDC dc= wglGetCurrentDC(); SelectObject(dc, font); BOOL err= wglUseFontBitmaps(dc, 0, charCount, base); + + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] wglUseFontBitmaps returned = %d, charCount = %d, base = %d\n",__FILE__,__FUNCTION__,__LINE__,err,charCount,base); FIXED one; one.value= 1; @@ -197,10 +250,16 @@ void createGlFontBitmaps(uint32 &base, const string &type, int size, int width, mat2.eM12= zero; mat2.eM21= zero; mat2.eM22= one; + + //MAT2 mat2 = {{0,1},{0,0},{0,0},{0,1}}; + //metrics GLYPHMETRICS glyphMetrics; int errorCode= GetGlyphOutline(dc, 'a', GGO_METRICS, &glyphMetrics, 0, NULL, &mat2); + + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] GetGlyphOutline returned = %d\n",__FILE__,__FUNCTION__,__LINE__,errorCode); + if(errorCode!=GDI_ERROR){ metrics.setHeight(static_cast(glyphMetrics.gmBlackBoxY)); } @@ -209,6 +268,10 @@ void createGlFontBitmaps(uint32 &base, const string &type, int size, int width, if(errorCode!=GDI_ERROR){ metrics.setWidth(i, static_cast(glyphMetrics.gmCellIncX)); } + else { + //SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] GetGlyphOutline returned = %d for i = %d\n",__FILE__,__FUNCTION__,__LINE__,errorCode,i); + metrics.setWidth(i, static_cast(6)); + } } DeleteObject(font);