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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
|
/*-----------------------------------------------------------------
LOG
GEM - Graphics Environment for Multimedia
A text
Copyright (c) 1997-1999 Mark Danks. mark@danks.org
Copyright (c) Günther Geiger. geiger@epy.co.at
Copyright (c) 2001-2011 IOhannes m zmölnig. forum::für::umläute. IEM. zmoelnig@iem.at
Copyright (c) 2005 Georg Holzmann <grh@mur.at>
For information on usage and redistribution, and for a DISCLAIMER OF ALL
WARRANTIES, see the file, "GEM.LICENSE.TERMS" in this distribution.
-----------------------------------------------------------------*/
#ifndef _INCLUDE__GEM_BASE_TEXTBASE_H_
#define _INCLUDE__GEM_BASE_TEXTBASE_H_
#ifdef _WIN32
# pragma warning( disable : 4786 )
# pragma warning( disable : 4788 )
#endif
#include "Gem/GemConfig.h"
#include "Base/GemBase.h"
#include <vector>
#include <string>
#ifdef FTGL
# define FONT_SCALE 0.2/3.0
# ifdef HAVE_FTGL_FTGL_H
# include "FTGL/ftgl.h"
# else
# include "FTFont.h"
# endif
#else
# define FONT_SCALE 1.0
#endif
using std::vector;
using std::string;
using std::wstring;
/*-----------------------------------------------------------------
-------------------------------------------------------------------
CLASS
TextBase
Base class for text objects
DESCRIPTION
"ft1" - The font size
"text" - The text to draw
-----------------------------------------------------------------*/
class GEM_EXTERN TextBase : public GemBase
{
CPPEXTERN_HEADER(TextBase, GemBase);
public:
//////////
// Constructor with args
TextBase(int argc, t_atom *argv);
protected:
//////////
// Destructor
virtual ~TextBase();
//////////
// Do the rendering
virtual void render(GemState*);
//////////
// break a string according to '\n'
virtual void breakLine(wstring line);
//-- moocow
//////////
// Set the text string from an ASCII list
virtual void stringMess(int argc, t_atom *argv);
//-- /moocow
//////////
// Set the text string
virtual void textMess(int argc, t_atom *argv);
//////////
// The font to use
virtual void fontNameMess(const std::string filename);
//////////
// set line distance
virtual void linedistMess(float dist);
//////////
// Set the font size
virtual void setFontSize(float size);
virtual void setFontSize();
//////////
// Set the precision for rendering
virtual void setPrecision(float prec);
//////////
// The different types of justification
enum JustifyWidth { LEFT, RIGHT, CENTER, BASEW };
enum JustifyHeight { BOTTOM, TOP, MIDDLE, BASEH };
enum JustifyDepth { FRONT, BACK, HALFWAY, BASED };
//////////
// Set the justification
virtual void setJustification(JustifyWidth wType);
virtual void setJustification(JustifyWidth wType, JustifyHeight hType);
virtual void setJustification(JustifyWidth wType, JustifyHeight hType, JustifyDepth dType);
//////////
// do the justification
// x1,...,z2 just defines the bounding box of the rendered string.
// y_offset is the offset of the current line
virtual void justifyFont(float x1, float y1, float z1,
float x2, float y2, float z2, float y_offset=0);
//-----------------------------------
// GROUP: Member variables
//-----------------------------------
//////////
// The text to display
// (one entry for each line)
vector<wstring> m_theText;
//////////
// distance between the lines
// (1 = 1 line, 0.5 = 0.5 lines, ...)
float m_dist;
///////////
// vector with the offset
// of the individual lines
vector<float> m_lineDist;
//////////
// Do we have a valid font?
int m_valid;
//////////
// The font fize
float m_fontSize;
//////////
// The font depth (only for extruded fonts)
float m_fontDepth;
//////////
// The rendering precision
float m_precision;
//////////
// The width justification
JustifyWidth m_widthJus;
//////////
// The height justification
JustifyHeight m_heightJus;
//////////
// The depth justification
JustifyDepth m_depthJus;
//////////
// The inlet
t_inlet *m_inlet;
//////////
// The default font name
static std::string DEFAULT_FONT;
//////////
// The font structure
#ifdef FTGL
FTFont *m_font;
/* this should delete (m_font) if it is notnull and recreate it.
* a pointer to the new structure is returned (and is set to m_font).
* if creation fails, the font is cleaned-up and NULL is returned
*/
virtual FTFont* makeFont(const char*fontname)=0;
/* this is just handy to reload a font */
t_symbol* m_fontname;
/* on starting to render, we reload the font, to make sure it is there
* this rids us of having to reload the font by hand everytime the rendering is restarted
*/
virtual void startRendering(void);
/* render one line of the text */
virtual void renderLine(const char*line,float dist);
virtual void renderLine(const wchar_t*line,float dist);
#endif
private:
///////////
// helpers:
///////////
// helper to make the
// line distance vector
void makeLineDist();
//////////
// Static member functions
static void textMessCallback(void *data, t_symbol *, int argc, t_atom *argv);
static void stringMessCallback(void *data, t_symbol *, int argc, t_atom *argv); //--moo
static void fontSizeMessCallback(void *data, t_floatarg size);
static void linedistMessCallback(void *data, t_floatarg dist);
static void precisionMessCallback(void *data, t_floatarg prec);
static void fontNameMessCallback(void *data, t_symbol *s);
static void justifyMessCallback(void *data, t_symbol *, int, t_atom*);
};
#endif // for header file
|