zjf
2023-03-06 392b76515f40376b6d36f40a114850ef63650384
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
/////////////////////////////////////////////////////////////////////////////// 
// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
// All rights reserved. 
// 
// This software and its documentation and related materials are owned by 
// the Alliance. The software may only be incorporated into application 
// programs owned by members of the Alliance, subject to a signed 
// Membership Agreement and Supplemental Software License Agreement with the
// Alliance. The structure and organization of this software are the valuable  
// trade secrets of the Alliance and its suppliers. The software is also 
// protected by copyright law and international treaty provisions. Application  
// programs incorporating this software must include the following statement 
// with their copyright notices:
//   
//   This application incorporates Teigha(R) software pursuant to a license 
//   agreement with Open Design Alliance.
//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
//   All rights reserved.
//
// By use of this software, its documentation or related materials, you 
// acknowledge and accept the above terms.
///////////////////////////////////////////////////////////////////////////////
 
#ifndef _OdTtfDescriptor_h_Included_
#define _OdTtfDescriptor_h_Included_
 
#include "TD_PackPush.h"
 
#include "Gi/Gi.h"
#include "OdString.h"
 
/** \details
    This class implements TrueType Descriptor objects which provide an interface to
    the characteristics of a TrueType font.
    
    <group Other_Classes>
*/
class FIRSTDLL_EXPORT OdTtfDescriptor
{
  // Members
 
    OdUInt32        m_nFlags;
  OdString        m_sFontFile;
    OdString        m_Typeface;
 
public:
  // Constructor
 
  OdTtfDescriptor() : m_nFlags(0) 
  {
  }
 
  /** \param typeface [in]  Typeface.
    \param bold [in]  True if and only if a bold font.
    \param italic [in]  True if and only if an italic font.
    \param charset [in]  Character set.
    \param pitchAndFamily [in]  Pitch and Family.
    
    \remarks
    The two low-order bits of pitchAndFamily specify the pitch of the font.
    Bits 4 through 7 of pitchAndFamily specify the font family.
 
  */
  OdTtfDescriptor(const OdString& typeface, bool bold, bool italic, int charset, int pitchAndFamily)
    : m_Typeface(typeface),m_nFlags(0)
  {
    setTtfFlags(bold, italic, charset, pitchAndFamily);
  }
 
  // Accessors /transformers
 
  /** \details
    Returns the filename of this TtfDescriptor object.
  */
  const OdString &fileName() const     { return m_sFontFile; }
 
  /** \details
    Returns the typeface of this TtfDescriptor object.
  */
  const OdString &typeface() const     { return m_Typeface;  }
 
  OdUInt32 getTtfFlags() const  { return m_nFlags;    }
 
  /** \details
    Clears the filename of this TtfDescriptor object.
  */
  void clearFileName()
  { 
    m_sFontFile.empty();  
  }
  /** \details
    Clears the typeface of this TtfDescriptor object.
  */
  void clearTypeface()
  { 
    m_Typeface.empty();  
  }
  /** \details
    Adds the specified typeface to this TtfDescriptor object.
  */
  void addTypeface(OdChar typeface)
  { 
    m_Typeface += typeface;
  }
 
  /** \details
    Returns the flags of this TtfDescriptor object. 
    \param typeface [out]  Receives the full name of the font.
    \param bold [out]  Receives true if and only if this is a bold font.
    \param italic [out]  Receives true if and only if this is an italic font.
    \param charset [out]  Receives the character set.
    \param pitchAndFamily [out]  Receives the Pitch and Family.
    
    \remarks
    The two low-order bits of pitchAndFamily specify the pitch of the font.
    Bits 4 through 7 of pitchAndFamily specify the font family.
  */
    void getTtfFlags(bool& bold, bool& italic, int& charset, int& pitchAndFamily) const
  {
      bold = isBold();
      italic = isItalic();
      charset = charSet();
      pitchAndFamily = this->pitchAndFamily();
  }
 
  /** \details
    Sets the filename of this TtfDescriptor object.
    \param filename [in]  Filename.
  */
  void setFileName(const OdString& filename)  { m_sFontFile = filename; }
  /** \details
    Sets the typeface of this TtfDescriptor object.
    \param typeface [in]  Typeface.
  */
  void setTypeFace(const OdString& typeface)  { m_Typeface = typeface;  }
  /** \details
    Sets the flags of this TtfDescriptor object.
    \param flags [in]  Flags.
 
  */
  void setTtfFlags(OdUInt32 flags)           { m_nFlags = flags;      }
  /** \param bold [in]  True if and only if a bold font.
    \param italic [in]  True if and only if an italic font.
    \param charset [in]  Character set.
    \param pitchAndFamily [in]  Pitch and Family.
    
    \remarks
    The two low-order bits of pitchAndFamily specify the pitch of the font.
    Bits 4 through 7 of pitchAndFamily specify the font family.
  */
  void setTtfFlags(bool bold, bool italic, int charset, int pitchAndFamily)
  {
    setBold(bold);
    setItalic(italic);
    setCharSet(charset);
    setPitchAndFamily(pitchAndFamily);
  }
 
  /** \details
    Sets the bold flag of this TtfDescriptor object.
    \param bold [in]  True if and only if a bold font.
  */
   void setBold(bool bold)          { SETBIT(m_nFlags, 0x02000000, bold);  }
  /** \details
    Sets the italic flag of this TtfDescriptor object.
    \param italic [in]  True if and only if an italic font.
  */
   void setItalic(bool italic)        { SETBIT(m_nFlags, 0x01000000, italic);  }
  /** \details
    Sets the character set of this TtfDescriptor object.
    \param charset [in]  Character set.
  */
   void setCharSet(int charset)        { m_nFlags = ((m_nFlags & 0xFFFF00FF) | ((charset << 8) & 0x0000FF00)); }
  /** \details
    Sets the pitch and family of this TtfDescriptor object.
    \param pitchAndFamily [in]  Pitch and Family.
    
    \remarks
    The two low-order bits of pitchAndFamily specify the pitch of the font.
    Bits 4 through 7 of pitchAndFamily specify the font family.
  */
  void setPitchAndFamily(int pitchAndFamily) { m_nFlags = ((m_nFlags & 0xFFFFFF00) | (pitchAndFamily & 0x000000FF));  }
 
  /** \details
    Returns true if and only if this TtfDescriptor is a bold font.
  */
  bool isBold() const             { return GETBIT(m_nFlags, 0x02000000);  }
  /** \details
    Returns true if and only if this TtfDescriptor is an italic font.
  */
  bool isItalic() const           { return GETBIT(m_nFlags, 0x01000000);  }
  /** \details
    Returns the character set for this TtfDescriptor object.
  */
  OdUInt16 charSet() const        { return OdUInt16((m_nFlags & 0x0000ff00) >> 8); }
  /** \details
    Returns the pitch and family of this TtfDescriptor object.
    
    \remarks
    The two low-order bits of pitchAndFamily specify the pitch of the font.
    Bits 4 through 7 of pitchAndFamily specify the font family.
  */
  int pitchAndFamily() const      { return (m_nFlags & 0x000000ff); }
 
  /** \details
    Returns the pitch of this TtfDescriptor object.
  */
  int getPitch() const            { return (pitchAndFamily() & 0x00000003); }
  /** \details
    Returns the family of this TtfDescriptor object.
  */
  int getFamily() const           { return (pitchAndFamily() & 0x000000f0); }
};
 
#include "TD_PackPop.h"
 
#endif // _OdTtfDescriptor_h_Included_