Added initial code changes to support Chinese Fonts

This commit is contained in:
Mark Vejvoda 2010-05-03 06:16:32 +00:00
parent 677da7f9d5
commit c3793d0cfb
6 changed files with 135 additions and 6 deletions

Binary file not shown.

View File

@ -28,12 +28,14 @@
#include "renderer.h"
#include "simple_threads.h"
#include <memory>
#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);

View File

@ -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 <string>
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

View File

@ -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);

View File

@ -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;
}

View File

@ -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());