don't crash in GetTextExtent() under Windows where print data is not a wxPostScriptPrintNativeData; use wxStandardPaths to find the location of AFM files instead

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35122 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-08-06 01:21:59 +00:00
parent 305561828c
commit d36d1be926

View File

@@ -40,6 +40,7 @@
#include "wx/paper.h" #include "wx/paper.h"
#include "wx/filefn.h" #include "wx/filefn.h"
#include "wx/math.h" #include "wx/math.h"
#include "wx/stdpaths.h"
#ifdef __WXMSW__ #ifdef __WXMSW__
@@ -1962,22 +1963,39 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
FILE *afmFile = NULL; FILE *afmFile = NULL;
// Get the directory of the AFM files
wxString afmName;
// VZ: I don't know if the cast always works under Unix but it clearly
// never does under Windows where the pointer is
// wxWindowsPrintNativeData and so calling GetFontMetricPath() on
// it just crashes
#ifndef __WIN32__
wxPostScriptPrintNativeData *data = wxPostScriptPrintNativeData *data =
(wxPostScriptPrintNativeData *) m_printData.GetNativeData(); (wxPostScriptPrintNativeData *) m_printData.GetNativeData();
// Get the directory of the AFM files
wxString afmName;
if (!data->GetFontMetricPath().empty()) if (!data->GetFontMetricPath().empty())
{ {
afmName = data->GetFontMetricPath(); afmName = data->GetFontMetricPath();
afmName << wxFILE_SEP_PATH << name; afmName << wxFILE_SEP_PATH << name;
afmFile = wxFopen(afmName,wxT("r")); }
#endif // __WIN32__
if ( !afmName.empty() )
afmFile = wxFopen(afmName, wxT("r"));
if ( !afmFile )
{
} }
#if defined(__UNIX__) && !defined(__VMS__) if ( !afmFile )
if (afmFile==NULL)
{ {
#if defined(__UNIX__) && !defined(__VMS__)
afmName = wxGetDataDir(); afmName = wxGetDataDir();
#else // !__UNIX__
afmName = wxStandardPaths::Get().GetDataDir();
#endif // __UNIX__/!__UNIX__
afmName << wxFILE_SEP_PATH afmName << wxFILE_SEP_PATH
#if defined(__LINUX__) || defined(__FREEBSD__) #if defined(__LINUX__) || defined(__FREEBSD__)
<< wxT("gs_afm") << wxFILE_SEP_PATH << wxT("gs_afm") << wxFILE_SEP_PATH
@@ -1987,7 +2005,6 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
<< name; << name;
afmFile = wxFopen(afmName,wxT("r")); afmFile = wxFopen(afmName,wxT("r"));
} }
#endif
/* 2. open and process the file /* 2. open and process the file
/ a short explanation of the AFM format: / a short explanation of the AFM format: