diff --git a/mk/windoze/Glest.suo b/mk/windoze/Glest.suo index c19b4b8b..66b5de97 100755 Binary files a/mk/windoze/Glest.suo and b/mk/windoze/Glest.suo differ diff --git a/source/glest_game/main/main.cpp b/source/glest_game/main/main.cpp index 48d67a2e..0c9cfdff 100644 --- a/source/glest_game/main/main.cpp +++ b/source/glest_game/main/main.cpp @@ -28,12 +28,14 @@ #include "renderer.h" #include "simple_threads.h" #include +#include "font.h" #include "leak_dumper.h" using namespace std; using namespace Shared::Platform; using namespace Shared::Util; +using namespace Shared::Graphics; namespace Glest{ namespace Game{ @@ -319,6 +321,17 @@ int glestMain(int argc, char** argv){ SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); + // 256 for English + // 30000 for Chinese + Font::charCount = config.getInt("FONT_CHARCOUNT",intToStr(256).c_str()); + Font::fontTypeName = config.getString("FONT_TYPENAME","Times New Roman"); + // Example values: + // DEFAULT_CHARSET (English) = 1 + // GB2312_CHARSET (Chinese) = 134 + Shared::Platform::charSet = config.getInt("FONT_CHARSET",intToStr(DEFAULT_CHARSET).c_str()); + + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] Font::charCount = %d, Font::fontTypeName [%s] Shared::Platform::charSet = %d\n",__FILE__,__FUNCTION__,__LINE__,Font::charCount,Font::fontTypeName.c_str(),Shared::Platform::charSet); + //showCursor(config.getBool("Windowed")); showCursor(false); diff --git a/source/shared_lib/include/graphics/font.h b/source/shared_lib/include/graphics/font.h new file mode 100644 index 00000000..cea90459 --- /dev/null +++ b/source/shared_lib/include/graphics/font.h @@ -0,0 +1,111 @@ +// ============================================================== +// This file is part of Glest Shared Library (www.glest.org) +// +// Copyright (C) 2001-2008 Martiņo Figueroa +// +// You can redistribute this code and/or modify it under +// the terms of the GNU General Public License as published +// by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version +// ============================================================== + +#ifndef _SHARED_GRAPHICS_FONT_H_ +#define _SHARED_GRAPHICS_FONT_H_ + +#include + +using std::string; + +namespace Shared{ namespace Graphics{ + +// ===================================================== +// class FontMetrics +// ===================================================== + +class FontMetrics{ +private: + float *widths; + float height; + +public: + FontMetrics(); + ~FontMetrics(); + + void setWidth(int i, float width) {widths[i]= width;} + void setHeight(float height) {this->height= height;} + + float getTextWidth(const string &str) const; + float getHeight() const; +}; + +// ===================================================== +// class Font +// ===================================================== + +class Font{ +public: + static int charCount; + static std::string fontTypeName; + +public: + enum Width{ + wNormal= 400, + wBold= 700 + }; + +protected: + string type; + int width; + bool inited; + FontMetrics metrics; + +public: + //constructor & destructor + Font(); + virtual ~Font(){}; + virtual void init()=0; + virtual void end()=0; + + //get + string getType() const {return type;} + int getWidth() const {return width;} + const FontMetrics *getMetrics() const {return &metrics;} + + //set + void setType(string type) {this->type= type;} + void setWidth(int width) {this->width= width;} +}; + +// ===================================================== +// class Font2D +// ===================================================== + +class Font2D: public Font{ +protected: + int size; + +public: + Font2D(); + + int getSize() const {return size;} + void setSize(int size) {this->size= size;} +}; + +// ===================================================== +// class Font3D +// ===================================================== + +class Font3D: public Font{ +protected: + float depth; + +public: + Font3D(); + + float getDepth() const {return depth;} + void setDepth(float depth) {this->depth= depth;} +}; + +}}//end namespace + +#endif diff --git a/source/shared_lib/include/platform/sdl/gl_wrap.h b/source/shared_lib/include/platform/sdl/gl_wrap.h index 0c7cdd6e..d58b13c1 100644 --- a/source/shared_lib/include/platform/sdl/gl_wrap.h +++ b/source/shared_lib/include/platform/sdl/gl_wrap.h @@ -61,6 +61,11 @@ public: // Global Fcs // ===================================================== +// Example values: +// DEFAULT_CHARSET (English) = 1 +// GB2312_CHARSET (Chinese) = 134 +static DWORD charSet = DEFAULT_CHARSET; + void createGlFontBitmaps(uint32 &base, const string &type, int size, int width, int charCount, FontMetrics &metrics); void createGlFontOutlines(uint32 &base, const string &type, int width, float depth, int charCount, FontMetrics &metrics); const char *getPlatformExtensions(const PlatformContextGl *pcgl); diff --git a/source/shared_lib/sources/graphics/font.cpp b/source/shared_lib/sources/graphics/font.cpp index 748b8bca..485942e2 100644 --- a/source/shared_lib/sources/graphics/font.cpp +++ b/source/shared_lib/sources/graphics/font.cpp @@ -48,11 +48,12 @@ float FontMetrics::getHeight() const{ // class Font // =============================================== -const int Font::charCount= 256; +int Font::charCount= 256; +std::string Font::fontTypeName = "Times New Roman"; Font::Font(){ inited= false; - type= "Times New Roman"; + type= fontTypeName; width= 400; } diff --git a/source/shared_lib/sources/platform/sdl/gl_wrap.cpp b/source/shared_lib/sources/platform/sdl/gl_wrap.cpp index e7545a7d..a609ea35 100644 --- a/source/shared_lib/sources/platform/sdl/gl_wrap.cpp +++ b/source/shared_lib/sources/platform/sdl/gl_wrap.cpp @@ -193,8 +193,8 @@ void createGlFontBitmaps(uint32 &base, const string &type, int size, int width, if(systemFontList.size() == 0) { LOGFONT lf; //POSITION pos; - - lf.lfCharSet = ANSI_CHARSET; + //lf.lfCharSet = ANSI_CHARSET; + lf.lfCharSet = (BYTE)charSet; lf.lfFaceName[0]='\0'; HDC hDC = wglGetCurrentDC(); @@ -222,9 +222,8 @@ void createGlFontBitmaps(uint32 &base, const string &type, int size, int width, } } - HFONT font= CreateFont( - size, 0, 0, 0, width, FALSE, FALSE, FALSE, DEFAULT_CHARSET, + size, 0, 0, 0, width, FALSE, FALSE, FALSE, charSet, OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH| (useRealFontName.c_str() ? FF_DONTCARE:FF_SWISS), useRealFontName.c_str());