pointer returned by GetNativeFontInfo() is now const and must not be deleted (replaces patch 810192)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23875 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-09-24 01:23:37 +00:00
parent cb0afb2662
commit 3bf5a59b5e
23 changed files with 291 additions and 170 deletions

View File

@@ -152,6 +152,7 @@ public:
virtual bool GetUnderlined() const;
virtual wxString GetFaceName() const;
virtual wxFontEncoding GetEncoding() const;
virtual const wxNativeFontInfo *GetNativeFontInfo() const;
virtual void SetPointSize(int pointSize);
virtual void SetFamily(int family);

View File

@@ -156,7 +156,7 @@ public:
virtual bool GetUnderlined() const = 0;
virtual wxString GetFaceName() const = 0;
virtual wxFontEncoding GetEncoding() const = 0;
virtual wxNativeFontInfo *GetNativeFontInfo() const;
virtual const wxNativeFontInfo *GetNativeFontInfo() const = 0;
virtual bool IsFixedWidth() const;

View File

@@ -139,6 +139,28 @@ public:
// reset to the default state
void Init();
// init with the parameters of the given font
void InitFromFont(const wxFont& font)
{
// translate all font parameters
SetStyle((wxFontStyle)font.GetStyle());
SetWeight((wxFontWeight)font.GetWeight());
SetUnderlined(font.GetUnderlined());
SetPointSize(font.GetPointSize());
// set the family/facename
SetFamily((wxFontFamily)font.GetFamily());
const wxString& facename = font.GetFaceName();
if ( !facename.empty() )
{
SetFaceName(facename);
}
// deal with encoding now (it may override the font family and facename
// so do it after setting them)
SetEncoding(font.GetEncoding());
}
// accessors and modifiers for the font elements
int GetPointSize() const;
wxFontStyle GetStyle() const;

View File

@@ -84,7 +84,7 @@ public:
virtual wxString GetFaceName() const;
virtual bool GetUnderlined() const;
virtual wxFontEncoding GetEncoding() const;
virtual wxNativeFontInfo *GetNativeFontInfo() const;
virtual const wxNativeFontInfo *GetNativeFontInfo() const;
virtual bool IsFixedWidth() const;
virtual void SetPointSize( int pointSize );

View File

@@ -84,7 +84,7 @@ public:
virtual wxString GetFaceName() const;
virtual bool GetUnderlined() const;
virtual wxFontEncoding GetEncoding() const;
virtual wxNativeFontInfo *GetNativeFontInfo() const;
virtual const wxNativeFontInfo *GetNativeFontInfo() const;
virtual bool IsFixedWidth() const;
virtual void SetPointSize( int pointSize );

View File

@@ -16,103 +16,6 @@
#pragma interface "font.h"
#endif
class WXDLLEXPORT wxFontRefData: public wxGDIRefData
{
friend class WXDLLEXPORT wxFont;
public:
wxFontRefData()
: m_fontId(0)
, m_pointSize(10)
, m_family(wxDEFAULT)
, m_style(wxNORMAL)
, m_weight(wxNORMAL)
, m_underlined(FALSE)
, m_faceName(wxT("Geneva"))
, m_encoding(wxFONTENCODING_DEFAULT)
, m_macFontNum(0)
, m_macFontSize(0)
, m_macFontStyle(0)
, m_macATSUFontID()
{
Init(10, wxDEFAULT, wxNORMAL, wxNORMAL, FALSE,
wxT("Geneva"), wxFONTENCODING_DEFAULT);
}
wxFontRefData(const wxFontRefData& data)
: wxGDIRefData()
, m_fontId(data.m_fontId)
, m_pointSize(data.m_pointSize)
, m_family(data.m_family)
, m_style(data.m_style)
, m_weight(data.m_weight)
, m_underlined(data.m_underlined)
, m_faceName(data.m_faceName)
, m_encoding(data.m_encoding)
, m_macFontNum(data.m_macFontNum)
, m_macFontSize(data.m_macFontSize)
, m_macFontStyle(data.m_macFontStyle)
, m_macATSUFontID(data.m_macATSUFontID)
{
Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
data.m_underlined, data.m_faceName, data.m_encoding);
}
wxFontRefData(int size,
int family,
int style,
int weight,
bool underlined,
const wxString& faceName,
wxFontEncoding encoding)
: m_fontId(0)
, m_pointSize(size)
, m_family(family)
, m_style(style)
, m_weight(weight)
, m_underlined(underlined)
, m_faceName(faceName)
, m_encoding(encoding)
, m_macFontNum(0)
, m_macFontSize(0)
, m_macFontStyle(0)
, m_macATSUFontID(0)
{
Init(size, family, style, weight, underlined, faceName, encoding);
}
virtual ~wxFontRefData();
void SetNoAntiAliasing( bool no = TRUE ) { m_noAA = no; }
bool GetNoAntiAliasing() { return m_noAA; }
protected:
// common part of all ctors
void Init(int size,
int family,
int style,
int weight,
bool underlined,
const wxString& faceName,
wxFontEncoding encoding);
// font characterstics
int m_fontId;
int m_pointSize;
int m_family;
int m_style;
int m_weight;
bool m_underlined;
wxString m_faceName;
wxFontEncoding m_encoding;
bool m_noAA; // No anti-aliasing
public:
short m_macFontNum;
short m_macFontSize;
unsigned char m_macFontStyle;
wxUint32 m_macATSUFontID;
public:
void MacFindFont() ;
};
// ----------------------------------------------------------------------------
// wxFont
// ----------------------------------------------------------------------------
@@ -174,6 +77,7 @@ public:
virtual bool GetUnderlined() const;
virtual wxString GetFaceName() const;
virtual wxFontEncoding GetEncoding() const;
virtual const wxNativeFontInfo *GetNativeFontInfo() const;
virtual void SetPointSize(int pointSize);
virtual void SetFamily(int family);

View File

@@ -81,6 +81,7 @@ public:
virtual bool GetUnderlined() const;
virtual wxFontEncoding GetEncoding() const;
virtual bool IsFixedWidth() const;
virtual const wxNativeFontInfo *GetNativeFontInfo() const;
virtual void SetPointSize(int pointSize);
virtual void SetFamily(int family);

View File

@@ -67,7 +67,7 @@ public:
virtual bool GetUnderlined() const;
virtual wxString GetFaceName() const;
virtual wxFontEncoding GetEncoding() const;
virtual wxNativeFontInfo *GetNativeFontInfo() const;
virtual const wxNativeFontInfo *GetNativeFontInfo() const;
virtual void SetPointSize(int pointSize);
virtual void SetFamily(int family);

View File

@@ -72,7 +72,7 @@ public:
virtual bool GetUnderlined() const;
virtual wxString GetFaceName() const;
virtual wxFontEncoding GetEncoding() const;
virtual wxNativeFontInfo* GetNativeFontInfo() const;
virtual const wxNativeFontInfo *GetNativeFontInfo() const;
virtual void SetPointSize(int pointSize);
virtual void SetFamily(int family);

View File

@@ -93,7 +93,7 @@ public:
virtual bool GetUnderlined(void) const;
virtual wxString GetFaceName(void) const;
virtual wxFontEncoding GetEncoding(void) const;
virtual wxNativeFontInfo* GetNativeFontInfo() const;
virtual const wxNativeFontInfo* GetNativeFontInfo() const;
virtual void SetPointSize(int nPointSize);
virtual void SetFamily(int nFamily);

View File

@@ -71,7 +71,7 @@ public:
virtual bool GetUnderlined() const;
virtual wxString GetFaceName() const;
virtual wxFontEncoding GetEncoding() const;
virtual wxNativeFontInfo *GetNativeFontInfo() const;
virtual const wxNativeFontInfo *GetNativeFontInfo() const;
virtual bool IsFixedWidth() const;

View File

@@ -80,6 +80,11 @@ int wxFont::GetWeight() const
return 0;
}
const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
{
return NULL;
}
void wxGetNativeFontEncoding(wxFontEncoding, wxNativeEncodingInfo*);
bool wxFont::Create(int pointSize, int family, int style, int weight, bool underlined, const wxString& faceName, wxFontEncoding encoding)

View File

@@ -131,25 +131,6 @@ bool wxFontBase::IsFixedWidth() const
return GetFamily() == wxFONTFAMILY_TELETYPE;
}
wxNativeFontInfo *wxFontBase::GetNativeFontInfo() const
{
#ifdef wxNO_NATIVE_FONTINFO
wxNativeFontInfo *fontInfo = new wxNativeFontInfo();
fontInfo->SetPointSize(GetPointSize());
fontInfo->SetFamily((wxFontFamily)GetFamily());
fontInfo->SetStyle((wxFontStyle)GetStyle());
fontInfo->SetWeight((wxFontWeight)GetWeight());
fontInfo->SetUnderlined(GetUnderlined());
fontInfo->SetFaceName(GetFaceName());
fontInfo->SetEncoding(GetEncoding());
return fontInfo;
#else
return (wxNativeFontInfo *)NULL;
#endif
}
void wxFontBase::DoSetNativeFontInfo(const wxNativeFontInfo& info)
{
#ifdef wxNO_NATIVE_FONTINFO
@@ -168,11 +149,10 @@ void wxFontBase::DoSetNativeFontInfo(const wxNativeFontInfo& info)
wxString wxFontBase::GetNativeFontInfoDesc() const
{
wxString fontDesc;
wxNativeFontInfo *fontInfo = GetNativeFontInfo();
const wxNativeFontInfo *fontInfo = GetNativeFontInfo();
if ( fontInfo )
{
fontDesc = fontInfo->ToString();
delete fontInfo;
}
return fontDesc;
@@ -181,11 +161,10 @@ wxString wxFontBase::GetNativeFontInfoDesc() const
wxString wxFontBase::GetNativeFontInfoUserDesc() const
{
wxString fontDesc;
wxNativeFontInfo *fontInfo = GetNativeFontInfo();
const wxNativeFontInfo *fontInfo = GetNativeFontInfo();
if ( fontInfo )
{
fontDesc = fontInfo->ToUserString();
delete fontInfo;
}
return fontDesc;
@@ -362,7 +341,7 @@ wxString wxNativeFontInfo::ToString() const
void wxNativeFontInfo::Init()
{
pointSize = wxNORMAL_FONT->GetPointSize();
pointSize = 0;
family = wxFONTFAMILY_DEFAULT;
style = wxFONTSTYLE_NORMAL;
weight = wxFONTWEIGHT_NORMAL;

View File

@@ -790,7 +790,7 @@ bool wxFont::GetNoAntiAliasing()
return M_FONTDATA->m_noAA;
}
wxNativeFontInfo *wxFont::GetNativeFontInfo() const
const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
{
wxCHECK_MSG( Ok(), (wxNativeFontInfo *)NULL, wxT("invalid font") );
@@ -799,7 +799,7 @@ wxNativeFontInfo *wxFont::GetNativeFontInfo() const
GetInternalFont();
#endif
return new wxNativeFontInfo(M_FONTDATA->m_nativeFontInfo);
return &(M_FONTDATA->m_nativeFontInfo);
}
bool wxFont::IsFixedWidth() const

View File

@@ -790,7 +790,7 @@ bool wxFont::GetNoAntiAliasing()
return M_FONTDATA->m_noAA;
}
wxNativeFontInfo *wxFont::GetNativeFontInfo() const
const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
{
wxCHECK_MSG( Ok(), (wxNativeFontInfo *)NULL, wxT("invalid font") );
@@ -799,7 +799,7 @@ wxNativeFontInfo *wxFont::GetNativeFontInfo() const
GetInternalFont();
#endif
return new wxNativeFontInfo(M_FONTDATA->m_nativeFontInfo);
return &(M_FONTDATA->m_nativeFontInfo);
}
bool wxFont::IsFixedWidth() const

View File

@@ -6,7 +6,7 @@
// Created: 1998-01-01
// RCS-ID: $Id$
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
@@ -29,6 +29,106 @@
IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
#endif
class WXDLLEXPORT wxFontRefData: public wxGDIRefData
{
friend class WXDLLEXPORT wxFont;
public:
wxFontRefData()
: m_fontId(0)
, m_pointSize(10)
, m_family(wxDEFAULT)
, m_style(wxNORMAL)
, m_weight(wxNORMAL)
, m_underlined(FALSE)
, m_faceName(wxT("Geneva"))
, m_encoding(wxFONTENCODING_DEFAULT)
, m_macFontNum(0)
, m_macFontSize(0)
, m_macFontStyle(0)
, m_macATSUFontID()
{
Init(10, wxDEFAULT, wxNORMAL, wxNORMAL, FALSE,
wxT("Geneva"), wxFONTENCODING_DEFAULT);
}
wxFontRefData(const wxFontRefData& data)
: wxGDIRefData()
, m_fontId(data.m_fontId)
, m_pointSize(data.m_pointSize)
, m_family(data.m_family)
, m_style(data.m_style)
, m_weight(data.m_weight)
, m_underlined(data.m_underlined)
, m_faceName(data.m_faceName)
, m_encoding(data.m_encoding)
, m_macFontNum(data.m_macFontNum)
, m_macFontSize(data.m_macFontSize)
, m_macFontStyle(data.m_macFontStyle)
, m_macATSUFontID(data.m_macATSUFontID)
{
Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
data.m_underlined, data.m_faceName, data.m_encoding);
}
wxFontRefData(int size,
int family,
int style,
int weight,
bool underlined,
const wxString& faceName,
wxFontEncoding encoding)
: m_fontId(0)
, m_pointSize(size)
, m_family(family)
, m_style(style)
, m_weight(weight)
, m_underlined(underlined)
, m_faceName(faceName)
, m_encoding(encoding)
, m_macFontNum(0)
, m_macFontSize(0)
, m_macFontStyle(0)
, m_macATSUFontID(0)
{
Init(size, family, style, weight, underlined, faceName, encoding);
}
virtual ~wxFontRefData();
void SetNoAntiAliasing( bool no = TRUE ) { m_noAA = no; }
bool GetNoAntiAliasing() { return m_noAA; }
protected:
// common part of all ctors
void Init(int size,
int family,
int style,
int weight,
bool underlined,
const wxString& faceName,
wxFontEncoding encoding);
// font characterstics
int m_fontId;
int m_pointSize;
int m_family;
int m_style;
int m_weight;
bool m_underlined;
wxString m_faceName;
wxFontEncoding m_encoding;
bool m_noAA; // No anti-aliasing
public:
short m_macFontNum;
short m_macFontSize;
unsigned char m_macFontStyle;
wxUint32 m_macATSUFontID;
wxNativeFontInfo m_info;
public:
void MacFindFont() ;
};
// ============================================================================
// implementation
// ============================================================================
@@ -313,3 +413,12 @@ bool wxFont::GetNoAntiAliasing()
return M_FONTDATA->m_noAA;
}
const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
{
wxCHECK_MSG( Ok(), NULL, wxT("invalid font") );
M_FONTDATA->m_info.InitFromFont(*this);
return &(M_FONTDATA->m_info);
}

View File

@@ -6,7 +6,7 @@
// Created: 1998-01-01
// RCS-ID: $Id$
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
@@ -29,6 +29,106 @@
IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
#endif
class WXDLLEXPORT wxFontRefData: public wxGDIRefData
{
friend class WXDLLEXPORT wxFont;
public:
wxFontRefData()
: m_fontId(0)
, m_pointSize(10)
, m_family(wxDEFAULT)
, m_style(wxNORMAL)
, m_weight(wxNORMAL)
, m_underlined(FALSE)
, m_faceName(wxT("Geneva"))
, m_encoding(wxFONTENCODING_DEFAULT)
, m_macFontNum(0)
, m_macFontSize(0)
, m_macFontStyle(0)
, m_macATSUFontID()
{
Init(10, wxDEFAULT, wxNORMAL, wxNORMAL, FALSE,
wxT("Geneva"), wxFONTENCODING_DEFAULT);
}
wxFontRefData(const wxFontRefData& data)
: wxGDIRefData()
, m_fontId(data.m_fontId)
, m_pointSize(data.m_pointSize)
, m_family(data.m_family)
, m_style(data.m_style)
, m_weight(data.m_weight)
, m_underlined(data.m_underlined)
, m_faceName(data.m_faceName)
, m_encoding(data.m_encoding)
, m_macFontNum(data.m_macFontNum)
, m_macFontSize(data.m_macFontSize)
, m_macFontStyle(data.m_macFontStyle)
, m_macATSUFontID(data.m_macATSUFontID)
{
Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
data.m_underlined, data.m_faceName, data.m_encoding);
}
wxFontRefData(int size,
int family,
int style,
int weight,
bool underlined,
const wxString& faceName,
wxFontEncoding encoding)
: m_fontId(0)
, m_pointSize(size)
, m_family(family)
, m_style(style)
, m_weight(weight)
, m_underlined(underlined)
, m_faceName(faceName)
, m_encoding(encoding)
, m_macFontNum(0)
, m_macFontSize(0)
, m_macFontStyle(0)
, m_macATSUFontID(0)
{
Init(size, family, style, weight, underlined, faceName, encoding);
}
virtual ~wxFontRefData();
void SetNoAntiAliasing( bool no = TRUE ) { m_noAA = no; }
bool GetNoAntiAliasing() { return m_noAA; }
protected:
// common part of all ctors
void Init(int size,
int family,
int style,
int weight,
bool underlined,
const wxString& faceName,
wxFontEncoding encoding);
// font characterstics
int m_fontId;
int m_pointSize;
int m_family;
int m_style;
int m_weight;
bool m_underlined;
wxString m_faceName;
wxFontEncoding m_encoding;
bool m_noAA; // No anti-aliasing
public:
short m_macFontNum;
short m_macFontSize;
unsigned char m_macFontStyle;
wxUint32 m_macATSUFontID;
wxNativeFontInfo m_info;
public:
void MacFindFont() ;
};
// ============================================================================
// implementation
// ============================================================================
@@ -313,3 +413,12 @@ bool wxFont::GetNoAntiAliasing()
return M_FONTDATA->m_noAA;
}
const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
{
wxCHECK_MSG( Ok(), NULL, wxT("invalid font") );
M_FONTDATA->m_info.InitFromFont(*this);
return &(M_FONTDATA->m_info);
}

View File

@@ -74,6 +74,8 @@ private:
wxMGLFontLibrary *m_library;
bool m_valid;
wxNativeFontInfo m_info;
friend class wxFont;
};
@@ -264,6 +266,14 @@ bool wxFont::IsFixedWidth() const
return (bool)(M_FONTDATA->m_library->GetFamily()->GetInfo()->isFixed);
}
const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
{
wxCHECK_MSG( Ok(), NULL, wxT("invalid font") );
M_FONTDATA->m_info.InitFromFont(*this);
return &(M_FONTDATA->m_info);
}
// ----------------------------------------------------------------------------
// change font attributes

View File

@@ -485,14 +485,14 @@ wxFontEncoding wxFont::GetEncoding() const
return M_FONTDATA->m_encoding;
}
wxNativeFontInfo *wxFont::GetNativeFontInfo() const
const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
{
wxCHECK_MSG( Ok(), (wxNativeFontInfo *)NULL, wxT("invalid font") );
if(M_FONTDATA->m_nativeFontInfo.GetXFontName().IsEmpty())
GetInternalFont();
return new wxNativeFontInfo(M_FONTDATA->m_nativeFontInfo);
return &(M_FONTDATA->m_nativeFontInfo);
}
// ----------------------------------------------------------------------------

View File

@@ -948,12 +948,10 @@ wxFontEncoding wxFont::GetEncoding() const
return M_FONTDATA->GetEncoding();
}
wxNativeFontInfo *wxFont::GetNativeFontInfo() const
const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
{
if ( M_FONTDATA->HasNativeFontInfo() )
return new wxNativeFontInfo(M_FONTDATA->GetNativeFontInfo());
return 0;
return M_FONTDATA->HasNativeFontInfo() ? &(M_FONTDATA->GetNativeFontInfo())
: NULL;
}
bool wxFont::IsFixedWidth() const

View File

@@ -234,36 +234,20 @@ wxFontEncoding wxGetFontEncFromCharSet(int cs)
void wxFillLogFont(LOGFONT *logFont, const wxFont *font)
{
wxNativeFontInfo fi;
// maybe we already have LOGFONT for this font?
wxNativeFontInfo *fontinfo = font->GetNativeFontInfo();
if ( !fontinfo )
const wxNativeFontInfo *pFI = font->GetNativeFontInfo();
if ( !pFI )
{
// use wxNativeFontInfo methods to build a LOGFONT for this font
fontinfo = new wxNativeFontInfo;
fi.InitFromFont(*font);
// translate all font parameters
fontinfo->SetStyle((wxFontStyle)font->GetStyle());
fontinfo->SetWeight((wxFontWeight)font->GetWeight());
fontinfo->SetUnderlined(font->GetUnderlined());
fontinfo->SetPointSize(font->GetPointSize());
// set the family/facename
fontinfo->SetFamily((wxFontFamily)font->GetFamily());
wxString facename = font->GetFaceName();
if ( !facename.empty() )
{
fontinfo->SetFaceName(facename);
}
// deal with encoding now (it may override the font family and facename
// so do it after setting them)
fontinfo->SetEncoding(font->GetEncoding());
pFI = &fi;
}
// transfer all the data to LOGFONT
*logFont = fontinfo->lf;
delete fontinfo;
*logFont = pFI->lf;
}
wxFont wxCreateFontFromLogFont(const LOGFONT *logFont)

View File

@@ -1140,11 +1140,10 @@ wxFontEncoding wxFont::GetEncoding() const
return M_FONTDATA->GetEncoding();
} // end of wxFont::GetEncoding
wxNativeFontInfo* wxFont::GetNativeFontInfo() const
const wxNativeFontInfo* wxFont::GetNativeFontInfo() const
{
if (M_FONTDATA->HasNativeFontInfo())
return new wxNativeFontInfo(M_FONTDATA->GetNativeFontInfo());
return 0;
return M_FONTDATA->HasNativeFontInfo() ? &(M_FONTDATA->GetNativeFontInfo())
: NULL;
} // end of wxFont::GetNativeFontInfo
//

View File

@@ -752,7 +752,7 @@ bool wxFont::GetNoAntiAliasing()
return M_FONTDATA->m_noAA;
}
wxNativeFontInfo *wxFont::GetNativeFontInfo() const
const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
{
wxCHECK_MSG( Ok(), (wxNativeFontInfo *)NULL, wxT("invalid font") );
@@ -762,7 +762,7 @@ wxNativeFontInfo *wxFont::GetNativeFontInfo() const
GetInternalFont();
#endif
return new wxNativeFontInfo(M_FONTDATA->m_nativeFontInfo);
return &(M_FONTDATA->m_nativeFontInfo);
}
bool wxFont::IsFixedWidth() const