summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Font.cc37
1 files changed, 22 insertions, 15 deletions
diff --git a/src/Font.cc b/src/Font.cc
index 0ca7d5a..5f70f29 100644
--- a/src/Font.cc
+++ b/src/Font.cc
@@ -19,12 +19,16 @@
19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20// DEALINGS IN THE SOFTWARE. 20// DEALINGS IN THE SOFTWARE.
21 21
22//$Id: Font.cc,v 1.6 2002/05/02 07:19:02 fluxgen Exp $ 22//$Id: Font.cc,v 1.7 2002/08/04 15:36:19 fluxgen Exp $
23 23
24 24
25#include "Font.hh" 25#include "Font.hh"
26
27#include "StringUtil.hh" 26#include "StringUtil.hh"
27
28#ifdef HAVE_CONFIG_H
29#include "../config.h"
30#endif // HAVE_CONFIG_H
31
28//use gnu extensions 32//use gnu extensions
29#ifndef _GNU_SOURCE 33#ifndef _GNU_SOURCE
30#define _GNU_SOURCE 34#define _GNU_SOURCE
@@ -36,13 +40,9 @@
36#include <string> 40#include <string>
37#include <cstdio> 41#include <cstdio>
38 42
39#ifdef HAVE_CONFIG_H
40# include "../config.h"
41#endif // HAVE_CONFIG_H
42#ifdef HAVE_SETLOCALE 43#ifdef HAVE_SETLOCALE
43#include <locale.h> 44#include <locale.h>
44#endif //HAVE_SETLOCALE 45#endif //HAVE_SETLOCALE
45#include "i18n.hh"
46 46
47namespace FbTk 47namespace FbTk
48{ 48{
@@ -54,8 +54,11 @@ m_display(display) {
54 m_font.fontstruct = 0; 54 m_font.fontstruct = 0;
55 m_font.set_extents = 0; 55 m_font.set_extents = 0;
56 m_font.set = 0; 56 m_font.set = 0;
57 //TODO: should only be done once 57
58 m_multibyte = I18n::instance()->multibyte(); 58 // MB_CUR_MAX returns the size of a char in the current locale
59 if (MB_CUR_MAX > 1)
60 m_multibyte = true;
61
59 if (name!=0) { 62 if (name!=0) {
60 load(name); 63 load(name);
61 } 64 }
@@ -96,7 +99,7 @@ bool Font::loadFromDatabase(XrmDatabase &database, const char *rname, const char
96 XrmValue value; 99 XrmValue value;
97 char *value_type; 100 char *value_type;
98 101
99 //this should probably be moved to a Database class so we can keep 102 //This should probably be moved to a Database class so we can keep
100 //track of database init 103 //track of database init
101 104
102 if (XrmGetResource(database, rname, rclass, &value_type, &value)) { 105 if (XrmGetResource(database, rname, rclass, &value_type, &value)) {
@@ -109,7 +112,7 @@ bool Font::loadFromDatabase(XrmDatabase &database, const char *rname, const char
109 return false; 112 return false;
110 113
111} 114}
112unsigned int Font::getTextWidth(const char *text, unsigned int size) const { 115unsigned int Font::textWidth(const char *text, unsigned int size) const {
113 if (text==0) 116 if (text==0)
114 return 0; 117 return 0;
115 if (multibyte()) { 118 if (multibyte()) {
@@ -126,11 +129,15 @@ unsigned int Font::getTextWidth(const char *text, unsigned int size) const {
126 return 0; 129 return 0;
127} 130}
128 131
129unsigned int Font::getHeight() const { 132unsigned int Font::height() const {
130 if (multibyte() && getFontSetExtents()) 133 if (!isLoaded())
131 return getFontSetExtents()->max_ink_extent.height; 134 return 0;
132 if (getFontStruct()) 135
133 return getFontStruct()->ascent + getFontStruct()->descent; 136 if (multibyte() && fontSetExtents())
137 return fontSetExtents()->max_ink_extent.height;
138 if (fontStruct())
139 return fontStruct()->ascent + fontStruct()->descent;
140
134 return 0; 141 return 0;
135} 142}
136 143