Patch level : 10.0
Files correlati : xvaga.dll Ricompilazione Demo : [ ] Commento : Migliorata gestione PDF per utenti "normali" di Win 2003 Server git-svn-id: svn://10.65.10.50/trunk@17503 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
40364c1a90
commit
904fa82d03
@ -197,18 +197,15 @@ BOOL GetFontFile(LPCTSTR lpszFontName,
|
||||
TCHAR szVersion[100];
|
||||
GetWinVer(szVersion, sizeof(szVersion)/sizeof(TCHAR)-1, &nVersion);
|
||||
|
||||
//TRACE(_T("szVersion=%s\n"), szVersion);
|
||||
|
||||
TCHAR szFontPath[1000];
|
||||
|
||||
LPCTSTR szFontPath = NULL;
|
||||
if ((nVersion >= WNTFIRST) && (nVersion <= WNTLAST))
|
||||
_tcscpy(szFontPath, _T("Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"));
|
||||
szFontPath = _T("Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts");
|
||||
else
|
||||
_tcscpy(szFontPath, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Fonts"));
|
||||
szFontPath = _T("Software\\Microsoft\\Windows\\CurrentVersion\\Fonts");
|
||||
|
||||
BOOL bResult = FALSE;
|
||||
|
||||
while (GetNextNameValue(HKEY_LOCAL_MACHINE, szFontPath, szName, szData) == ERROR_SUCCESS)
|
||||
while (GetNextNameValue(HKEY_LOCAL_MACHINE, szFontPath, szName, szData) == ERROR_SUCCESS)
|
||||
{
|
||||
if (_tcsnicmp(lpszFontName, szName, _tcslen(lpszFontName)) == 0)
|
||||
{
|
||||
@ -218,8 +215,7 @@ BOOL GetFontFile(LPCTSTR lpszFontName,
|
||||
bResult = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
szFontPath[0] = _T('\0'); // this will get next value, same key
|
||||
szFontPath = _T(""); // this will get next value, same key
|
||||
}
|
||||
|
||||
GetNextNameValue(HKEY_LOCAL_MACHINE, NULL, NULL, NULL); // close the registry key
|
||||
@ -477,22 +473,23 @@ static LONG GetNextNameValue(HKEY key, LPCTSTR pszSubkey, LPTSTR pszName, LPTSTR
|
||||
{
|
||||
static HKEY hkey = NULL; // registry handle, kept open between calls
|
||||
static DWORD dwIndex = 0; // count of values returned
|
||||
LONG retval;
|
||||
LONG retval = ERROR_SUCCESS;
|
||||
|
||||
// if all parameters are NULL then close key
|
||||
if (pszSubkey == NULL && pszName == NULL && pszData == NULL)
|
||||
{
|
||||
TRACE(_T("closing key\n"));
|
||||
if (hkey)
|
||||
RegCloseKey(hkey);
|
||||
::RegCloseKey(hkey);
|
||||
hkey = NULL;
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
// if subkey is specified then open key (first time)
|
||||
if (pszSubkey && pszSubkey[0] != 0)
|
||||
if (pszSubkey && *pszSubkey)
|
||||
{
|
||||
retval = RegOpenKeyEx(key, pszSubkey, 0, KEY_ALL_ACCESS, &hkey);
|
||||
// retval = ::RegOpenKeyEx(key, pszSubkey, 0, KEY_ALL_ACCESS, &hkey); // Incapace...
|
||||
retval = ::RegOpenKeyEx(key, pszSubkey, 0, KEY_READ, &hkey); // ... devi solo leggere!
|
||||
if (retval != ERROR_SUCCESS)
|
||||
{
|
||||
TRACE(_T("ERROR: RegOpenKeyEx failed\n"));
|
||||
@ -520,7 +517,7 @@ static LONG GetNextNameValue(HKEY key, LPCTSTR pszSubkey, LPTSTR pszName, LPTSTR
|
||||
DWORD dwValueDataSize = sizeof(szValueData)-1;
|
||||
DWORD dwType = 0;
|
||||
|
||||
retval = RegEnumValue(hkey, dwIndex, szValueName, &dwValueNameSize, NULL,
|
||||
retval = ::RegEnumValue(hkey, dwIndex, szValueName, &dwValueNameSize, NULL,
|
||||
&dwType, szValueData, &dwValueDataSize);
|
||||
if (retval == ERROR_SUCCESS)
|
||||
{
|
||||
@ -571,6 +568,10 @@ NT 3.51 2 3 51
|
||||
NT 4 2 4 0 1381
|
||||
2000 2 5 0 2195
|
||||
XP 2 5 1 2600
|
||||
2003 2 5 2
|
||||
Vista 2 6 0
|
||||
2008 2 6 1
|
||||
Win7 2 7
|
||||
|
||||
CE 3
|
||||
|
||||
|
@ -64,8 +64,7 @@ bool TwxPDFDC::StartDoc( const wxString& message )
|
||||
|
||||
PDF_TRY_DL(m_PDFlib, m_p)
|
||||
{
|
||||
wxString strFontPath = ::wxGetOSDirectory() + "\\Fonts";
|
||||
|
||||
const wxString strFontPath = ::wxGetOSDirectory() + "\\Fonts";
|
||||
m_PDFlib->PDF_set_parameter(m_p, "SearchPath", strFontPath);
|
||||
}
|
||||
PDF_CATCH_DL(m_PDFlib, m_p)
|
||||
@ -128,7 +127,6 @@ void TwxPDFDC::StartPage()
|
||||
SetPen(*wxBLACK_PEN);
|
||||
SetBackground(*wxWHITE_BRUSH);
|
||||
SetTextForeground(*wxBLACK);
|
||||
|
||||
}
|
||||
|
||||
void TwxPDFDC::EndPage()
|
||||
@ -326,7 +324,7 @@ void TwxPDFDC::DoDrawArc (wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2, wxCoor
|
||||
(y2 - yc < 0) ? 90.0 : -90.0 :
|
||||
-atan2(double(y2-yc), double(x2-xc)) * RAD2DEG;
|
||||
}
|
||||
while (alpha1 <= 0) alpha1 += 360;
|
||||
while (alpha1 < 0) alpha1 += 360;
|
||||
while (alpha2 <= 0) alpha2 += 360; // adjust angles to be between
|
||||
while (alpha1 > 360) alpha1 -= 360; // 0 and 360 degree
|
||||
while (alpha2 > 360) alpha2 -= 360;
|
||||
@ -687,8 +685,6 @@ void TwxPDFDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y )
|
||||
{
|
||||
wxCHECK_RET( m_ok, wxT("invalid PDF dc") );
|
||||
|
||||
wxCoord text_w;
|
||||
|
||||
SetFont(m_font);
|
||||
SetFontColor(m_textForegroundColour);
|
||||
|
||||
@ -696,7 +692,7 @@ void TwxPDFDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y )
|
||||
{
|
||||
m_PDFlib->PDF_set_text_pos(m_p, x, y + m_fontsize);
|
||||
m_PDFlib->PDF_show(m_p, text);
|
||||
text_w = m_PDFlib->PDF_stringwidth(m_p, text, m_fontnr, m_fontsize);
|
||||
wxCoord text_w = m_PDFlib->PDF_stringwidth(m_p, text, m_fontnr, m_fontsize);
|
||||
CalcBoundingBox( x, y );
|
||||
CalcBoundingBox( x + text_w , y + m_fontsize );
|
||||
}
|
||||
@ -794,6 +790,40 @@ void TwxPDFDC::DoGetTextExtent(const wxString& text,
|
||||
|
||||
//-- Settings ------------------------------------------------------------
|
||||
|
||||
bool TwxPDFDC::GetFontFamily(const wxFont& font, wxString& file, wxString& family) const
|
||||
{
|
||||
static wxFont m_LastFont;
|
||||
static wxString m_LastFile, m_strFamily;
|
||||
|
||||
if (!m_LastFont.IsOk() ||
|
||||
font.GetPointSize()!= m_LastFont.GetPointSize() ||
|
||||
font.GetWeight() != m_LastFont.GetWeight() ||
|
||||
font.GetStyle() != m_LastFont.GetStyle() ||
|
||||
font.GetFaceName() != m_LastFont.GetFaceName())
|
||||
{
|
||||
wxString strStyle = font.GetWeight() >= wxBOLD ? " Bold" : "";
|
||||
strStyle += font.GetStyle() == wxITALIC ? " Italic" : "";
|
||||
m_strFamily = font.GetFaceName();
|
||||
|
||||
TCHAR szDisplayName[MAX_PATH], szFontFile[MAX_PATH];
|
||||
bool ok = GetFontFile(m_strFamily + strStyle, szDisplayName, MAX_PATH, szFontFile, MAX_PATH) != 0;
|
||||
if(ok)
|
||||
m_strFamily += strStyle;
|
||||
else
|
||||
ok = GetFontFile(m_strFamily, szDisplayName, MAX_PATH, szFontFile, MAX_PATH) != 0;
|
||||
|
||||
m_LastFont = font;
|
||||
if (ok)
|
||||
m_LastFile = szFontFile;
|
||||
else
|
||||
m_LastFile = m_strFamily = wxEmptyString;
|
||||
}
|
||||
|
||||
file = m_LastFile;
|
||||
family = m_strFamily;
|
||||
return !file.IsEmpty();
|
||||
}
|
||||
|
||||
void TwxPDFDC::SetFont( const wxFont& font )
|
||||
{
|
||||
wxCHECK_RET( m_ok, wxT("invalid PDF dc") );
|
||||
@ -801,25 +831,16 @@ void TwxPDFDC::SetFont( const wxFont& font )
|
||||
if (!font.Ok())
|
||||
return;
|
||||
|
||||
wxString strStyle = (font.GetWeight()==wxBOLD?" Bold":"");
|
||||
strStyle += (font.GetStyle()==wxITALIC?" Italic":"");
|
||||
wxString strFamily = font.GetFaceName();
|
||||
|
||||
TCHAR szDisplayName[MAX_PATH], szFontFile[MAX_PATH];
|
||||
bool ok = GetFontFile(strFamily + strStyle, szDisplayName, MAX_PATH, szFontFile, MAX_PATH) != 0;
|
||||
if(!ok)
|
||||
ok = GetFontFile(strFamily, szDisplayName, MAX_PATH, szFontFile, MAX_PATH) != 0;
|
||||
else
|
||||
strFamily += strStyle;
|
||||
|
||||
wxString strFontFile, strFamily;
|
||||
bool ok = GetFontFamily(font, strFontFile, strFamily);
|
||||
if (ok)
|
||||
{
|
||||
PDF_TRY_DL(m_PDFlib, m_p)
|
||||
{
|
||||
const wxString strScope = m_PDFlib->PDF_get_parameter(m_p, "scope", 0);
|
||||
if (strScope != "document")
|
||||
if (strScope != "document") // Solitamente strScope = "page"
|
||||
{
|
||||
const wxString strParameter = strFamily + "=" + szFontFile;
|
||||
const wxString strParameter = strFamily + "=" + strFontFile;
|
||||
m_PDFlib->PDF_set_parameter(m_p, "FontOutline", strParameter);
|
||||
m_fontsize = font.GetPointSize();
|
||||
// maialata gigante da eliminare data dal fatto che a volte la GetPointSize() scazza
|
||||
@ -840,6 +861,8 @@ void TwxPDFDC::SetFont( const wxFont& font )
|
||||
wxLogError("%s: %s", m_PDFlib->PDF_get_apiname(m_p), m_PDFlib->PDF_get_errmsg(m_p));
|
||||
}
|
||||
}
|
||||
else
|
||||
wxLogError("SetFont(%s): Can't find font file", (const char*)font.GetFaceName());
|
||||
}
|
||||
|
||||
void TwxPDFDC::SetPen( const wxPen& pen )
|
||||
@ -870,23 +893,23 @@ void TwxPDFDC::SetPen( const wxPen& pen )
|
||||
|
||||
switch (intStyle)
|
||||
{
|
||||
case wxDOT:
|
||||
pdfdash = dotted;
|
||||
break;
|
||||
case wxSHORT_DASH:
|
||||
pdfdash = short_dashed;
|
||||
break;
|
||||
case wxLONG_DASH:
|
||||
pdfdash = long_dashed;
|
||||
break;
|
||||
case wxDOT_DASH:
|
||||
pdfdash = dotted_dashed;
|
||||
break;
|
||||
case wxSOLID:
|
||||
case wxTRANSPARENT:
|
||||
default:
|
||||
solid = true;
|
||||
break;
|
||||
case wxDOT:
|
||||
pdfdash = dotted;
|
||||
break;
|
||||
case wxSHORT_DASH:
|
||||
pdfdash = short_dashed;
|
||||
break;
|
||||
case wxLONG_DASH:
|
||||
pdfdash = long_dashed;
|
||||
break;
|
||||
case wxDOT_DASH:
|
||||
pdfdash = dotted_dashed;
|
||||
break;
|
||||
case wxSOLID:
|
||||
case wxTRANSPARENT:
|
||||
default:
|
||||
solid = true;
|
||||
break;
|
||||
}
|
||||
|
||||
PDF_TRY_DL(m_PDFlib, m_p)
|
||||
|
@ -16,6 +16,7 @@ class TwxPDFDC : public wxDC
|
||||
|
||||
protected:
|
||||
TwxPDFDC(); // Dummy constructor for dynamic construction
|
||||
bool GetFontFamily(const wxFont& font, wxString& file, wxString& family) const;
|
||||
|
||||
public:
|
||||
// Recommended constructor
|
||||
|
Loading…
x
Reference in New Issue
Block a user