opennurbs_font.h
/* $NoKeywords: $ */
/*
//
// Copyright (c) 1993-2012 Robert McNeel & Associates. All rights reserved.
// OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
// McNeel & Associates.
//
// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
// MERCHANTABILITY ARE HEREBY DISCLAIMED.
//
// For complete openNURBS copyright information see <http://www.opennurbs.org>.
//
////////////////////////////////////////////////////////////////
*/
#if !defined(OPENNURBS_FONT_INC_)
#define OPENNURBS_FONT_INC_
class ON_CLASS ON_Font : public ON_Object
{
ON_OBJECT_DECLARE(ON_Font);
public:
ON_Font();
~ON_Font();
// C++ default copy construction and operator= work fine.
/*
Description:
Create a font with a specified facename and properties.
Parameters:
face_name - [in]
If face_name is null or empty, then "Arial" is used.
bBold - [in]
True for a bold version of the font.
bItalic - [in]
True for an italic version of the font.
Returns:
True if the font was created. The name of this font is
the face name with " Bold", " Italic" or " Bold Italic"
appended as
*/
bool CreateFontFromFaceName(
const wchar_t* face_name,
bool bBold,
bool bItalic
);
#if defined(ON_OS_WINDOWS_GDI)
ON_Font( const LOGFONT& logfont );
ON_Font& operator=( const LOGFONT& logfont );
#endif
//////////////////////////////////////////////////////////////////////
//
// ON_Object overrides
/*
Description:
Tests an object to see if its data members are correctly
initialized.
Parameters:
text_log - [in] if the object is not valid and text_log
is not NULL, then a brief englis description of the
reason the object is not valid is appened to the log.
The information appended to text_log is suitable for
low-level debugging purposes by programmers and is
not intended to be useful as a high level user
interface tool.
Returns:
@untitled table
true object is valid
false object is invalid, uninitialized, etc.
Remarks:
Overrides virtual ON_Object::IsValid
*/
ON_BOOL32 IsValid( ON_TextLog* text_log = NULL ) const;
// virtual
void Dump( ON_TextLog& ) const; // for debugging
// virtual
ON_BOOL32 Write(
ON_BinaryArchive& // serialize definition to binary archive
) const;
// virtual
ON_BOOL32 Read(
ON_BinaryArchive& // restore definition from binary archive
);
// virtual
ON_UUID ModelObjectId() const;
//////////////////////////////////////////////////////////////////////
//
// Interface
enum
{
#if defined(ON_OS_WINDOWS_GDI)
// Windows GDI facename length
// 13 November 2008 - Dale Lear
// Because:
// * Prior to this date the above "ON_OS_WINDOWS_GDI"
// was misspelled and this code did not get compiled.
// * The Windows headers defines LF_FACESIZE = 32
// * ON_Font has a member wchar_t m_facename[face_name_size] array
// * We cannot break the SDK by changing the size of ON_Font
//
// we cannot define face_name_size = LF_FACESIZE+1. So, I'm
// using the same "65" we use below. It is critical that
// face_name_size >= LF_FACESIZE+1
//
//face_name_size = LF_FACESIZE+1, // <- prior to 13 Nov but never used
face_name_size = 65,
// Windows GDI font weights
bold_weight = FW_BOLD,
medium_weight = FW_MEDIUM,
normal_weight = FW_NORMAL,
light_weight = FW_LIGHT,
// Windows GDI character sets
default_charset = DEFAULT_CHARSET,
symbol_charset = SYMBOL_CHARSET,
#else
face_name_size = 65, // must be >= 33
bold_weight = 700,
medium_weight = 500,
normal_weight = 400,
light_weight = 300,
default_charset = 1,
symbol_charset = 2,
#endif
normal_font_height = 256
};
// Ratio of linefeed to character height (1.6)
static
const double m_default_linefeed_ratio;
static
const int m_metrics_char; // ASCII code of character to used
// to get runtime "default" glyph
// metrics. (Currently an "I").
/*
Returns:
True if the font's character set should be SYMBOL_CHARSET;
*/
static
bool IsSymbolFontFaceName(
const wchar_t* facename
);
void SetFontName( const wchar_t* );
void SetFontName( const char* );
void GetFontName( ON_wString& ) const;
const wchar_t* FontName() const;
void SetFontIndex(int);
int FontIndex() const;
/*
Returns:
The ratio (height of linefeed)/(height of I).
*/
double LinefeedRatio() const;
void SetLinefeedRatio( double linefeed_ratio );
bool SetFontFaceName( const wchar_t* );
bool SetFontFaceName( const char* );
void GetFontFaceName( ON_wString& ) const;
const wchar_t* FontFaceName() const;
int FontWeight() const;
void SetFontWeight( int);
bool IsItalic() const;
void SetIsItalic( bool );
void SetItalic( bool );
bool IsBold() const;
void SetBold( bool );
// Added 7/12/07 LW
bool IsUnderlined() const;
void SetUnderlined( bool );
void Defaults();
/*
Returns:
Height of the 'I' character when the font is drawn
with m_logfont.lfHeight = ON_Font::normal_font_height.
*/
int HeightOfI() const;
/*
Returns:
Height of a linefeed when the font is drawn
with m_logfont.lfHeight = ON_Font::normal_font_height.
*/
int HeightOfLinefeed() const;
/*
Description:
Returns the ratio of the height of a typical upper case letter
to the height of a whole character cell.
Parameters:
none
Returns:
double - ratio of Windows Font Height / m_HeightOfH
*/
double AscentRatio() const;
/*
Description:
Compare the visible characteristics to another font
Parameters:
font_to_compare - [in] The cont to compare this one to
bCompareName - [in] if this is set, test if the names match
otherwise don't compare the names
Returns:
true if font_to_compare matches this one
false if font_to_match doesn't match this one
Added for v5 - 5/20/07
*/
bool CompareFontCharacteristics( ON_Font& font_to_compare, bool bCompareName) const;
#if defined(ON_OS_WINDOWS_GDI)
bool SetLogFont( const LOGFONT& logfont );
const LOGFONT& LogFont() const;
#endif
public:
ON_wString m_font_name; // Name of this font in the Rhino UI
int m_font_weight; // Same as m_logfont.lfWeight
bool m_font_italic; // Same as m_logfont.lfItalic
bool m_font_underlined;// Same as m_logfont.lfUnderlined (Added 7/12/07 LW)
double m_linefeed_ratio; // defaults to static s_linefeed_ratio.
int m_font_index; // font index in Rhino font table
ON_UUID m_font_id;
wchar_t m_facename[face_name_size]; // same as m_logfont.lfFaceName (
public:
/*
Description:
Insures the settings in the OS specific information, like
the Windows m_logfont field, match the persistent m_font_* values
above that are used for all OSs and used in UI code.
*/
void UpdateImplementationSettings();
#if defined(ON_OS_WINDOWS_GDI)
// Windows specific settins
LOGFONT m_logfont;
#endif
private:
// volitile - can be changed by ON_Font::HeightOfI() const.
int m_I_height; // height of the 'I' character when the font is drawn
// with m_logfont.lfHeight = 256.
};
#endif
ON_Font::m_font_index
int m_font_index
Definition: opennurbs_font.h:260
ON_Object::operator=
ON_Object & operator=(const ON_Object &)
ON_Object
Definition: opennurbs_object.h:376
ON_Font::m_font_name
ON_wString m_font_name
Definition: opennurbs_font.h:255
ON_Font::m_metrics_char
static const int m_metrics_char
Definition: opennurbs_font.h:153
ON_Font::m_font_weight
int m_font_weight
Definition: opennurbs_font.h:256
ON_wString
Definition: opennurbs_string.h:700
ON_Object::Read
virtual ON_BOOL32 Read(ON_BinaryArchive &binary_archive)
ON_Font::m_font_id
ON_UUID m_font_id
Definition: opennurbs_font.h:261
ON_Object::Write
virtual ON_BOOL32 Write(ON_BinaryArchive &binary_archive) const
ON_Font
Definition: opennurbs_font.h:20
ON_Object::ModelObjectId
virtual ON_UUID ModelObjectId() const
ON_BinaryArchive
Definition: opennurbs_archive.h:731
ON_TextLog
Definition: opennurbs_textlog.h:22
ON_Font::m_font_underlined
bool m_font_underlined
Definition: opennurbs_font.h:258
ON_Font::m_linefeed_ratio
double m_linefeed_ratio
Definition: opennurbs_font.h:259
ON_Font::m_font_italic
bool m_font_italic
Definition: opennurbs_font.h:257
ON_UUID
Definition: opennurbs_uuid.h:31
ON_Font::m_default_linefeed_ratio
static const double m_default_linefeed_ratio
Definition: opennurbs_font.h:150
ON_Object::Dump
virtual void Dump(ON_TextLog &) const
ON_Object::IsValid
virtual ON_BOOL32 IsValid(ON_TextLog *text_log=NULL) const =0