Point Cloud Library (PCL) 1.15.0
Loading...
Searching...
No Matches
opennurbs_font.h
1/* $NoKeywords: $ */
2/*
3//
4// Copyright (c) 1993-2012 Robert McNeel & Associates. All rights reserved.
5// OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
6// McNeel & Associates.
7//
8// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
9// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
10// MERCHANTABILITY ARE HEREBY DISCLAIMED.
11//
12// For complete openNURBS copyright information see <http://www.opennurbs.org>.
13//
14////////////////////////////////////////////////////////////////
15*/
16
17#if !defined(OPENNURBS_FONT_INC_)
18#define OPENNURBS_FONT_INC_
19
20class ON_CLASS ON_Font : public ON_Object
21{
22 ON_OBJECT_DECLARE(ON_Font);
23public:
26 // C++ default copy construction and operator= work fine.
27
28 /*
29 Description:
30 Create a font with a specified facename and properties.
31 Parameters:
32 face_name - [in]
33 If face_name is null or empty, then "Arial" is used.
34 bBold - [in]
35 True for a bold version of the font.
36 bItalic - [in]
37 True for an italic version of the font.
38 Returns:
39 True if the font was created. The name of this font is
40 the face name with " Bold", " Italic" or " Bold Italic"
41 appended as
42 */
44 const wchar_t* face_name,
45 bool bBold,
46 bool bItalic
47 );
48
49#if defined(ON_OS_WINDOWS_GDI)
50 ON_Font( const LOGFONT& logfont );
51 ON_Font& operator=( const LOGFONT& logfont );
52#endif
53
54 //////////////////////////////////////////////////////////////////////
55 //
56 // ON_Object overrides
57
58 /*
59 Description:
60 Tests an object to see if its data members are correctly
61 initialized.
62 Parameters:
63 text_log - [in] if the object is not valid and text_log
64 is not NULL, then a brief englis description of the
65 reason the object is not valid is appened to the log.
66 The information appended to text_log is suitable for
67 low-level debugging purposes by programmers and is
68 not intended to be useful as a high level user
69 interface tool.
70 Returns:
71 @untitled table
72 true object is valid
73 false object is invalid, uninitialized, etc.
74 Remarks:
75 Overrides virtual ON_Object::IsValid
76 */
77 ON_BOOL32 IsValid( ON_TextLog* text_log = NULL ) const;
78
79 // virtual
80 void Dump( ON_TextLog& ) const; // for debugging
81
82 // virtual
83 ON_BOOL32 Write(
84 ON_BinaryArchive& // serialize definition to binary archive
85 ) const;
86
87 // virtual
88 ON_BOOL32 Read(
89 ON_BinaryArchive& // restore definition from binary archive
90 );
91
92 // virtual
94
95 //////////////////////////////////////////////////////////////////////
96 //
97 // Interface
98
99 enum
100 {
101
102#if defined(ON_OS_WINDOWS_GDI)
103
104 // Windows GDI facename length
105
106 // 13 November 2008 - Dale Lear
107 // Because:
108 // * Prior to this date the above "ON_OS_WINDOWS_GDI"
109 // was misspelled and this code did not get compiled.
110 // * The Windows headers defines LF_FACESIZE = 32
111 // * ON_Font has a member wchar_t m_facename[face_name_size] array
112 // * We cannot break the SDK by changing the size of ON_Font
113 //
114 // we cannot define face_name_size = LF_FACESIZE+1. So, I'm
115 // using the same "65" we use below. It is critical that
116 // face_name_size >= LF_FACESIZE+1
117 //
118 //face_name_size = LF_FACESIZE+1, // <- prior to 13 Nov but never used
119 face_name_size = 65,
120
121 // Windows GDI font weights
122 bold_weight = FW_BOLD,
123 medium_weight = FW_MEDIUM,
124 normal_weight = FW_NORMAL,
125 light_weight = FW_LIGHT,
126
127 // Windows GDI character sets
128 default_charset = DEFAULT_CHARSET,
129 symbol_charset = SYMBOL_CHARSET,
130
131#else
132
133 face_name_size = 65, // must be >= 33
134
135 bold_weight = 700,
136 medium_weight = 500,
137 normal_weight = 400,
138 light_weight = 300,
139
140 default_charset = 1,
141 symbol_charset = 2,
142
143#endif
144
145 normal_font_height = 256
146 };
147
148 // Ratio of linefeed to character height (1.6)
149 static
151
152 static
153 const int m_metrics_char; // ASCII code of character to used
154 // to get runtime "default" glyph
155 // metrics. (Currently an "I").
156
157 /*
158 Returns:
159 True if the font's character set should be SYMBOL_CHARSET;
160 */
161 static
163 const wchar_t* facename
164 );
165
166 void SetFontName( const wchar_t* );
167 void SetFontName( const char* );
168
169 void GetFontName( ON_wString& ) const;
170 const wchar_t* FontName() const;
171
172 void SetFontIndex(int);
173 int FontIndex() const;
174
175 /*
176 Returns:
177 The ratio (height of linefeed)/(height of I).
178 */
179 double LinefeedRatio() const;
180
181 void SetLinefeedRatio( double linefeed_ratio );
182
183 bool SetFontFaceName( const wchar_t* );
184 bool SetFontFaceName( const char* );
185
187 const wchar_t* FontFaceName() const;
188
189 int FontWeight() const;
190 void SetFontWeight( int);
191
192 bool IsItalic() const;
193 void SetIsItalic( bool );
194 void SetItalic( bool );
195
196 bool IsBold() const;
197 void SetBold( bool );
198
199 // Added 7/12/07 LW
200 bool IsUnderlined() const;
201 void SetUnderlined( bool );
202
203 void Defaults();
204
205 /*
206 Returns:
207 Height of the 'I' character when the font is drawn
208 with m_logfont.lfHeight = ON_Font::normal_font_height.
209 */
210 int HeightOfI() const;
211
212 /*
213 Returns:
214 Height of a linefeed when the font is drawn
215 with m_logfont.lfHeight = ON_Font::normal_font_height.
216 */
217 int HeightOfLinefeed() const;
218
219 /*
220 Description:
221 Returns the ratio of the height of a typical upper case letter
222 to the height of a whole character cell.
223
224 Parameters:
225 none
226
227 Returns:
228 double - ratio of Windows Font Height / m_HeightOfH
229 */
230 double AscentRatio() const;
231
232 /*
233 Description:
234 Compare the visible characteristics to another font
235
236 Parameters:
237 font_to_compare - [in] The cont to compare this one to
238 bCompareName - [in] if this is set, test if the names match
239 otherwise don't compare the names
240
241 Returns:
242 true if font_to_compare matches this one
243 false if font_to_match doesn't match this one
244
245 Added for v5 - 5/20/07
246 */
247 bool CompareFontCharacteristics( ON_Font& font_to_compare, bool bCompareName) const;
248
249#if defined(ON_OS_WINDOWS_GDI)
250 bool SetLogFont( const LOGFONT& logfont );
251 const LOGFONT& LogFont() const;
252#endif
253
254public:
255 ON_wString m_font_name; // Name of this font in the Rhino UI
256 int m_font_weight; // Same as m_logfont.lfWeight
257 bool m_font_italic; // Same as m_logfont.lfItalic
258 bool m_font_underlined;// Same as m_logfont.lfUnderlined (Added 7/12/07 LW)
259 double m_linefeed_ratio; // defaults to static s_linefeed_ratio.
260 int m_font_index; // font index in Rhino font table
262 wchar_t m_facename[face_name_size]; // same as m_logfont.lfFaceName (
263
264public:
265
266 /*
267 Description:
268 Insures the settings in the OS specific information, like
269 the Windows m_logfont field, match the persistent m_font_* values
270 above that are used for all OSs and used in UI code.
271 */
273#if defined(ON_OS_WINDOWS_GDI)
274 // Windows specific settins
275 LOGFONT m_logfont;
276#endif
277
278private:
279 // volitile - can be changed by ON_Font::HeightOfI() const.
280 int m_I_height; // height of the 'I' character when the font is drawn
281 // with m_logfont.lfHeight = 256.
282};
283
284#endif
void SetFontIndex(int)
void SetLinefeedRatio(double linefeed_ratio)
void Dump(ON_TextLog &) const
double m_linefeed_ratio
void UpdateImplementationSettings()
bool m_font_italic
void SetFontName(const wchar_t *)
int m_font_weight
ON_wString m_font_name
bool SetFontFaceName(const wchar_t *)
void GetFontName(ON_wString &) const
ON_BOOL32 Read(ON_BinaryArchive &)
int FontIndex() const
const wchar_t * FontName() const
void GetFontFaceName(ON_wString &) const
bool SetFontFaceName(const char *)
bool IsBold() const
ON_BOOL32 Write(ON_BinaryArchive &) const
void SetUnderlined(bool)
bool IsUnderlined() const
const wchar_t * FontFaceName() const
ON_UUID ModelObjectId() const
int FontWeight() const
double LinefeedRatio() const
void Defaults()
static bool IsSymbolFontFaceName(const wchar_t *facename)
void SetItalic(bool)
bool CreateFontFromFaceName(const wchar_t *face_name, bool bBold, bool bItalic)
int HeightOfI() const
ON_BOOL32 IsValid(ON_TextLog *text_log=NULL) const
void SetBold(bool)
static const int m_metrics_char
ON_UUID m_font_id
static const double m_default_linefeed_ratio
bool CompareFontCharacteristics(ON_Font &font_to_compare, bool bCompareName) const
void SetFontWeight(int)
int HeightOfLinefeed() const
double AscentRatio() const
bool IsItalic() const
bool m_font_underlined
void SetIsItalic(bool)
void SetFontName(const char *)
ON_Object & operator=(const ON_Object &)