1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
// ==============================================================
// 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>
#include <vector>
#include "font_text.h"
#include "leak_dumper.h"
using std::string;
//class Text;
namespace Shared { namespace Graphics {
// =====================================================
// class FontMetrics
// =====================================================
class FontMetrics {
private:
float *widths;
float height;
//float yOffsetFactor;
Text *textHandler;
public:
//static float DEFAULT_Y_OFFSET_FACTOR;
FontMetrics(Text *textHandler=NULL);
~FontMetrics();
//void setYOffsetFactor(float yOffsetFactor);
//float getYOffsetFactor() const;
void setTextHandler(Text *textHandler);
Text * getTextHandler();
void setWidth(int i, float width) {this->widths[i] = width;}
void setHeight(float height) {this->height= height;}
float getTextWidth(const string &str);
float getHeight(const string &str) const;
string wordWrapText(string text, int maxWidth);
};
// =====================================================
// class Font
// =====================================================
class Font {
public:
static int charCount;
static std::string fontTypeName;
static bool fontIsMultibyte;
static bool forceLegacyFonts;
static bool fontIsRightToLeft;
static bool fontSupportMixedRightToLeft;
static float scaleFontValue;
static float scaleFontValueCenterHFactor;
static int baseSize;
static int faceResolution;
static string langHeightText;
public:
enum Width {
wNormal= 400,
wBold= 700
};
protected:
string type;
int width;
bool inited;
int size;
FontMetrics metrics;
Text *textHandler;
public:
//constructor & destructor
Font(FontTextHandlerType type);
virtual ~Font();
virtual void init()=0;
virtual void end()=0;
//get
int getWidth() const;
FontMetrics *getMetrics() {return &metrics;}
Text * getTextHandler() {return textHandler;}
string getType() const;
//set
void setType(string typeX11, string typeGeneric, string typeGenericFamily);
void setWidth(int width);
int getSize() const;
void setSize(int size);
static void bidi_cvt(string &str_);
static void resetToDefaults();
};
// =====================================================
// class Font2D
// =====================================================
class Font2D: public Font {
public:
Font2D(FontTextHandlerType type=ftht_2D);
virtual ~Font2D() {};
};
// =====================================================
// class Font3D
// =====================================================
class Font3D: public Font {
protected:
float depth;
public:
Font3D(FontTextHandlerType type=ftht_3D);
virtual ~Font3D() {};
float getDepth() const {return depth;}
void setDepth(float depth) {this->depth= depth;}
};
Font3D *ConvertFont2DTo3D(Font2D *font);
const char* findFont(const char *firstFontToTry=NULL,const char *firstFontFamilyToTry=NULL);
}}//end namespace
#endif
|