#endif
#include "wx/msw/private.h"
-#include "assert.h"
+#include <assert.h>
#if !USE_SHARED_LIBRARIES
IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
-#if USE_PORTABLE_FONTS_IN_MSW
+#if wxUSE_PORTABLE_FONTS_IN_MSW
IMPLEMENT_DYNAMIC_CLASS(wxFontNameDirectory, wxObject)
#endif
m_hFont = 0;
}
+wxFontRefData::wxFontRefData(const wxFontRefData& data)
+{
+ m_style = data.m_style;
+ m_temporary = FALSE;
+ m_pointSize = data.m_pointSize;
+ m_family = data.m_family;
+ m_fontId = data.m_fontId;
+ m_style = data.m_style;
+ m_weight = data.m_weight;
+ m_underlined = data.m_underlined;
+ m_faceName = data.m_faceName;
+ m_hFont = 0;
+}
+
wxFontRefData::~wxFontRefData(void)
{
if ( m_hFont )
/* Constructor for a font. Note that the real construction is done
* in wxDC::SetFont, when information is available about scaling etc.
*/
-wxFont::wxFont(int PointSize, int Family, int Style, int Weight, bool Underlined, const wxString& Face)
+wxFont::wxFont(int pointSize, int family, int style, int weight, bool underlined, const wxString& faceName)
{
- Create(PointSize, Family, Style, Weight, Underlined, Face);
+ Create(pointSize, family, style, weight, underlined, faceName);
if ( wxTheFontList )
wxTheFontList->Append(this);
}
-bool wxFont::Create(int PointSize, int Family, int Style, int Weight, bool Underlined, const wxString& Face)
+bool wxFont::Create(int pointSize, int family, int style, int weight, bool underlined, const wxString& faceName)
{
UnRef();
m_refData = new wxFontRefData;
- M_FONTDATA->m_family = Family;
- M_FONTDATA->m_style = Style;
- M_FONTDATA->m_weight = Weight;
- M_FONTDATA->m_pointSize = PointSize;
- M_FONTDATA->m_underlined = Underlined;
- M_FONTDATA->m_faceName = Face;
- M_FONTDATA->m_temporary = FALSE;
- M_FONTDATA->m_hFont = 0;
+ M_FONTDATA->m_family = family;
+ M_FONTDATA->m_style = style;
+ M_FONTDATA->m_weight = weight;
+ M_FONTDATA->m_pointSize = pointSize;
+ M_FONTDATA->m_underlined = underlined;
+ M_FONTDATA->m_faceName = faceName;
RealizeResource();
BYTE ff_italic;
int ff_weight = 0;
int ff_family = 0;
- wxString ff_face("");
+ wxString ff_face(_T(""));
switch (M_FONTDATA->m_family)
{
case wxSCRIPT: ff_family = FF_SCRIPT ;
- ff_face = "Script" ;
+ ff_face = _T("Script") ;
break ;
case wxDECORATIVE: ff_family = FF_DECORATIVE;
break;
case wxROMAN: ff_family = FF_ROMAN;
- ff_face = "Times New Roman" ;
+ ff_face = _T("Times New Roman") ;
break;
case wxTELETYPE:
case wxMODERN: ff_family = FF_MODERN;
- ff_face = "Courier New" ;
+ ff_face = _T("Courier New") ;
break;
case wxSWISS: ff_family = FF_SWISS;
- ff_face = "Arial";
+ ff_face = _T("Arial") ;
break;
case wxDEFAULT:
default: ff_family = FF_SWISS;
- ff_face = "Arial" ;
+ ff_face = _T("Arial") ;
}
if (M_FONTDATA->m_style == wxITALIC || M_FONTDATA->m_style == wxSLANT)
else if (M_FONTDATA->m_weight == wxBOLD)
ff_weight = FW_BOLD;
-#if defined(__X__) || (defined(__WINDOWS__) && USE_PORTABLE_FONTS_IN_MSW)
- ff_face = wxTheFontNameDirectory.GetScreenName(M_FONTDATA->m_family, M_FONTDATA->m_weight, M_FONTDATA->m_style);
-#else
- ff_face = M_FONTDATA->m_faceName;
- if ( ff_face.IsNull() )
- ff_face = "";
-#endif
+ const wxChar* pzFace = (const wxChar*) ff_face;
+ if (!M_FONTDATA->m_faceName.IsNull())
+ pzFace = (const wxChar*) M_FONTDATA->m_faceName ;
/* Always calculate fonts using the screen DC (is this the best strategy?)
* There may be confusion if a font is selected into a printer
// up fonts. So, set ppInch to a constant 96 dpi.
ppInch = 96;
-#if FONT_SIZE_COMPATIBILITY
+#if wxFONT_SIZE_COMPATIBILITY
// Incorrect, but compatible with old wxWindows behaviour
int nHeight = (M_FONTDATA->m_pointSize*ppInch/72);
#else
M_FONTDATA->m_hFont = (WXHFONT) CreateFont(nHeight, 0, 0, 0,ff_weight,ff_italic,(BYTE)ff_underline,
0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
- PROOF_QUALITY, DEFAULT_PITCH | ff_family, (ff_face == "" ? NULL : (const char *)ff_face));
-#ifdef DEBUG_CREATE
- if (m_hFont==NULL) wxError("Cannot create font","Internal Error") ;
+ PROOF_QUALITY, DEFAULT_PITCH | ff_family, pzFace);
+#ifdef WXDEBUG_CREATE
+ if (m_hFont==NULL) wxError(_T("Cannot create font"),_T("Internal Error")) ;
#endif
return (M_FONTDATA->m_hFont != (WXHFONT) NULL);
}
return FALSE;
}
-/*
-bool wxFont::UseResource(void)
-{
- IncrementResourceUsage();
- return TRUE;
-}
-
-bool wxFont::ReleaseResource(void)
-{
- DecrementResourceUsage();
- return TRUE;
-}
-*/
-
-WXHANDLE wxFont::GetResourceHandle(void)
+WXHANDLE wxFont::GetResourceHandle()
{
if ( !M_FONTDATA )
return 0;
return (WXHANDLE)M_FONTDATA->m_hFont ;
}
-bool wxFont::IsFree(void)
+bool wxFont::IsFree() const
{
return (M_FONTDATA && (M_FONTDATA->m_hFont == 0));
}
-void wxFont::SetPointSize(const int pointSize)
+void wxFont::Unshare()
{
- if ( !m_refData )
- m_refData = new wxFontRefData;
+ // Don't change shared data
+ if (!m_refData)
+ {
+ m_refData = new wxFontRefData();
+ }
+ else
+ {
+ wxFontRefData* ref = new wxFontRefData(*(wxFontRefData*)m_refData);
+ UnRef();
+ m_refData = ref;
+ }
+}
+
+void wxFont::SetPointSize(int pointSize)
+{
+ Unshare();
+
M_FONTDATA->m_pointSize = pointSize;
+
+ RealizeResource();
}
-void wxFont::SetFamily(const int family)
+void wxFont::SetFamily(int family)
{
- if ( !m_refData )
- m_refData = new wxFontRefData;
+ Unshare();
+
M_FONTDATA->m_family = family;
+
+ RealizeResource();
}
-void wxFont::SetStyle(const int style)
+void wxFont::SetStyle(int style)
{
- if ( !m_refData )
- m_refData = new wxFontRefData;
+ Unshare();
+
M_FONTDATA->m_style = style;
+
+ RealizeResource();
}
-void wxFont::SetWeight(const int weight)
+void wxFont::SetWeight(int weight)
{
- if ( !m_refData )
- m_refData = new wxFontRefData;
+ Unshare();
+
M_FONTDATA->m_weight = weight;
+
+ RealizeResource();
}
void wxFont::SetFaceName(const wxString& faceName)
{
- if ( !m_refData )
- m_refData = new wxFontRefData;
+ Unshare();
+
M_FONTDATA->m_faceName = faceName;
+
+ RealizeResource();
}
-void wxFont::SetUnderlined(const bool underlined)
+void wxFont::SetUnderlined(bool underlined)
{
- if ( !m_refData )
- m_refData = new wxFontRefData;
+ Unshare();
+
M_FONTDATA->m_underlined = underlined;
+
+ RealizeResource();
}
wxString wxFont::GetFamilyString(void) const
{
- wxString fam("");
+ wxString fam(_T(""));
switch (GetFamily())
{
case wxDECORATIVE:
- fam = "wxDECORATIVE";
+ fam = _T("wxDECORATIVE");
break;
case wxROMAN:
- fam = "wxROMAN";
+ fam = _T("wxROMAN");
break;
case wxSCRIPT:
- fam = "wxSCRIPT";
+ fam = _T("wxSCRIPT");
break;
case wxSWISS:
- fam = "wxSWISS";
+ fam = _T("wxSWISS");
break;
case wxMODERN:
- fam = "wxMODERN";
+ fam = _T("wxMODERN");
break;
case wxTELETYPE:
- fam = "wxTELETYPE";
+ fam = _T("wxTELETYPE");
break;
default:
- fam = "wxDEFAULT";
+ fam = _T("wxDEFAULT");
break;
}
return fam;
}
-/* New font system */
wxString wxFont::GetFaceName(void) const
{
- wxString str("");
+ wxString str(_T(""));
if (M_FONTDATA)
str = M_FONTDATA->m_faceName ;
return str;
wxString wxFont::GetStyleString(void) const
{
- wxString styl("");
+ wxString styl(_T(""));
switch (GetStyle())
{
case wxITALIC:
- styl = "wxITALIC";
+ styl = _T("wxITALIC");
break;
case wxSLANT:
- styl = "wxSLANT";
+ styl = _T("wxSLANT");
break;
default:
- styl = "wxNORMAL";
+ styl = _T("wxNORMAL");
break;
}
return styl;
wxString wxFont::GetWeightString(void) const
{
- wxString w("");
+ wxString w(_T(""));
switch (GetWeight())
{
case wxBOLD:
- w = "wxBOLD";
+ w = _T("wxBOLD");
break;
case wxLIGHT:
- w = "wxLIGHT";
+ w = _T("wxLIGHT");
break;
default:
- w = "wxNORMAL";
+ w = _T("wxNORMAL");
break;
}
return w;