Ported DrawPolygone fix and new PS font name
matching from stable branch. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8784 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
96997d6511
commit
733b25e1a9
@ -650,9 +650,6 @@ void wxPostScriptDC::DoDrawPolygon (int n, wxPoint points[], wxCoord xoffset, wx
|
|||||||
wxCoord xx = XLOG2DEV(points[0].x + xoffset);
|
wxCoord xx = XLOG2DEV(points[0].x + xoffset);
|
||||||
wxCoord yy = YLOG2DEV(points[0].y + yoffset);
|
wxCoord yy = YLOG2DEV(points[0].y + yoffset);
|
||||||
|
|
||||||
wxCoord xx0 = xx;
|
|
||||||
wxCoord yy0 = yy;
|
|
||||||
|
|
||||||
fprintf( m_pstream, "%d %d moveto\n", xx, yy );
|
fprintf( m_pstream, "%d %d moveto\n", xx, yy );
|
||||||
|
|
||||||
CalcBoundingBox( points[0].x + xoffset, points[0].y + yoffset );
|
CalcBoundingBox( points[0].x + xoffset, points[0].y + yoffset );
|
||||||
@ -667,7 +664,7 @@ void wxPostScriptDC::DoDrawPolygon (int n, wxPoint points[], wxCoord xoffset, wx
|
|||||||
CalcBoundingBox( points[i].x + xoffset, points[i].y + yoffset);
|
CalcBoundingBox( points[i].x + xoffset, points[i].y + yoffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf( m_pstream, "%d %d lineto\n", xx0, yy0 );
|
fprintf( m_pstream, "closepath\n" );
|
||||||
fprintf( m_pstream, "stroke\n" );
|
fprintf( m_pstream, "stroke\n" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -942,87 +939,83 @@ void wxPostScriptDC::SetFont( const wxFont& font )
|
|||||||
|
|
||||||
m_font = font;
|
m_font = font;
|
||||||
|
|
||||||
const char *name;
|
|
||||||
const char *style = "";
|
|
||||||
int Style = m_font.GetStyle();
|
int Style = m_font.GetStyle();
|
||||||
int Weight = m_font.GetWeight();
|
int Weight = m_font.GetWeight();
|
||||||
|
|
||||||
|
const char *name;
|
||||||
switch (m_font.GetFamily())
|
switch (m_font.GetFamily())
|
||||||
{
|
{
|
||||||
case wxTELETYPE:
|
case wxTELETYPE:
|
||||||
case wxMODERN:
|
case wxMODERN:
|
||||||
name = "/Courier";
|
{
|
||||||
break;
|
if (Style == wxITALIC)
|
||||||
case wxSWISS:
|
{
|
||||||
name = "/Helvetica";
|
if (Weight == wxBOLD)
|
||||||
|
name = "/Courier-BoldOblique";
|
||||||
|
else
|
||||||
|
name = "/Courier-Oblique";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Weight == wxBOLD)
|
||||||
|
name = "/Courier-Bold";
|
||||||
|
else
|
||||||
|
name = "/Courier";
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case wxROMAN:
|
case wxROMAN:
|
||||||
// name = "/Times-Roman";
|
{
|
||||||
name = "/Times"; // Altered by EDZ
|
if (Style == wxITALIC)
|
||||||
|
{
|
||||||
|
if (Weight == wxBOLD)
|
||||||
|
name = "/Times-BoldItalic";
|
||||||
|
else
|
||||||
|
name = "/Times-Italic";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Weight == wxBOLD)
|
||||||
|
name = "/Times-Bold";
|
||||||
|
else
|
||||||
|
name = "/Times-Roman";
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case wxSCRIPT:
|
case wxSCRIPT:
|
||||||
name = "/Zapf-Chancery-MediumItalic";
|
{
|
||||||
|
name = "/ZapfChancery-MediumItalic";
|
||||||
Style = wxNORMAL;
|
Style = wxNORMAL;
|
||||||
Weight = wxNORMAL;
|
Weight = wxNORMAL;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
case wxSWISS:
|
||||||
default:
|
default:
|
||||||
case wxDEFAULT: // Sans Serif Font
|
{
|
||||||
name = "/LucidaSans";
|
if (Style == wxITALIC)
|
||||||
|
{
|
||||||
|
if (Weight == wxBOLD)
|
||||||
|
name = "/Helvetica-BoldOblique";
|
||||||
|
else
|
||||||
|
name = "/Helvetica-Oblique";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Weight == wxBOLD)
|
||||||
|
name = "/Helvetica-Bold";
|
||||||
|
else
|
||||||
|
name = "/Helvetica";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Style == wxNORMAL && (Weight == wxNORMAL || Weight == wxLIGHT))
|
fprintf( m_pstream, name );
|
||||||
{
|
|
||||||
if (m_font.GetFamily () == wxROMAN)
|
|
||||||
style = "-Roman";
|
|
||||||
else
|
|
||||||
style = "";
|
|
||||||
}
|
|
||||||
else if (Style == wxNORMAL && Weight == wxBOLD)
|
|
||||||
{
|
|
||||||
style = "-Bold";
|
|
||||||
}
|
|
||||||
else if (Style == wxITALIC && (Weight == wxNORMAL || Weight == wxLIGHT))
|
|
||||||
{
|
|
||||||
if (m_font.GetFamily () == wxROMAN)
|
|
||||||
style = "-Italic";
|
|
||||||
else
|
|
||||||
style = "-Oblique";
|
|
||||||
}
|
|
||||||
else if (Style == wxITALIC && Weight == wxBOLD)
|
|
||||||
{
|
|
||||||
if (m_font.GetFamily () == wxROMAN)
|
|
||||||
style = "-BoldItalic";
|
|
||||||
else
|
|
||||||
style = "-BoldOblique";
|
|
||||||
}
|
|
||||||
else if (Style == wxSLANT && (Weight == wxNORMAL || Weight == wxLIGHT))
|
|
||||||
{
|
|
||||||
if (m_font.GetFamily () == wxROMAN)
|
|
||||||
style = "-Italic";
|
|
||||||
else
|
|
||||||
style = "-Oblique";
|
|
||||||
}
|
|
||||||
else if (Style == wxSLANT && Weight == wxBOLD)
|
|
||||||
{
|
|
||||||
if (m_font.GetFamily () == wxROMAN)
|
|
||||||
style = "-BoldItalic";
|
|
||||||
else
|
|
||||||
style = "-BoldOblique";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
style = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
char buffer[100];
|
|
||||||
strcpy( buffer, name );
|
|
||||||
strcat( buffer, style );
|
|
||||||
|
|
||||||
fprintf( m_pstream, buffer );
|
|
||||||
fprintf( m_pstream, " reencodeISO def\n" );
|
fprintf( m_pstream, " reencodeISO def\n" );
|
||||||
fprintf( m_pstream, buffer );
|
fprintf( m_pstream, name );
|
||||||
fprintf( m_pstream, " findfont\n" );
|
fprintf( m_pstream, " findfont\n" );
|
||||||
|
|
||||||
|
char buffer[100];
|
||||||
sprintf( buffer, "%f scalefont setfont\n", YLOG2DEVREL(m_font.GetPointSize() * 1000) / 1000.0F);
|
sprintf( buffer, "%f scalefont setfont\n", YLOG2DEVREL(m_font.GetPointSize() * 1000) / 1000.0F);
|
||||||
// this is a hack - we must scale font size (in pts) according to m_scaleY but
|
// this is a hack - we must scale font size (in pts) according to m_scaleY but
|
||||||
// YLOG2DEVREL works with wxCoord type (int or longint). Se we first convert font size
|
// YLOG2DEVREL works with wxCoord type (int or longint). Se we first convert font size
|
||||||
@ -1946,10 +1939,10 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
|
|||||||
double UnderlineThickness = 0.0;
|
double UnderlineThickness = 0.0;
|
||||||
|
|
||||||
/* get actual parameters */
|
/* get actual parameters */
|
||||||
const int Family = fontToUse->GetFamily();
|
int Family = fontToUse->GetFamily();
|
||||||
const int Size = fontToUse->GetPointSize();
|
int Size = fontToUse->GetPointSize();
|
||||||
const int Style = fontToUse->GetStyle();
|
int Style = fontToUse->GetStyle();
|
||||||
const int Weight = fontToUse->GetWeight();
|
int Weight = fontToUse->GetWeight();
|
||||||
|
|
||||||
/* if we have another font, read the font-metrics */
|
/* if we have another font, read the font-metrics */
|
||||||
if (Family!=lastFamily || Size!=lastSize || Style!=lastStyle || Weight!=lastWeight)
|
if (Family!=lastFamily || Size!=lastSize || Style!=lastStyle || Weight!=lastWeight)
|
||||||
@ -1964,31 +1957,38 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
|
|||||||
|
|
||||||
switch (Family)
|
switch (Family)
|
||||||
{
|
{
|
||||||
case wxTELETYPE:
|
|
||||||
case wxMODERN:
|
case wxMODERN:
|
||||||
{
|
case wxTELETYPE:
|
||||||
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "CourBoO";
|
{
|
||||||
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "CourBo";
|
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "CourBoO.afm";
|
||||||
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "CourO";
|
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "CourBo.afm";
|
||||||
else name = "Cour";
|
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "CourO.afm";
|
||||||
}
|
else name = "Cour.afm";
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case wxROMAN:
|
case wxROMAN:
|
||||||
{
|
{
|
||||||
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "TimesBoO";
|
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "TimesBoO.afm";
|
||||||
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "TimesBo";
|
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "TimesBo.afm";
|
||||||
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "TimesO";
|
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "TimesO.afm";
|
||||||
else name = "TimesRo";
|
else name = "TimesRo.afm";
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
case wxSCRIPT:
|
||||||
|
{
|
||||||
|
name = "Zapf.afm";
|
||||||
|
Style = wxNORMAL;
|
||||||
|
Weight = wxNORMAL;
|
||||||
|
}
|
||||||
|
case wxSWISS:
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "HelvBoO";
|
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "HelvBoO.afm";
|
||||||
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "HelvBo";
|
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "HelvBo.afm";
|
||||||
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "HelvO";
|
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "HelvO.afm";
|
||||||
else name = "Helv";
|
else name = "Helv.afm";
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get the directory of the AFM files */
|
/* get the directory of the AFM files */
|
||||||
@ -2014,17 +2014,17 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
|
|||||||
|
|
||||||
/* new elements JC Sun Aug 25 23:21:44 MET DST 1996 */
|
/* new elements JC Sun Aug 25 23:21:44 MET DST 1996 */
|
||||||
|
|
||||||
afmName << name << wxT(".afm");
|
afmName << name;
|
||||||
FILE *afmFile = wxFopen(afmName,wxT("r"));
|
FILE *afmFile = wxFopen(afmName,wxT("r"));
|
||||||
|
|
||||||
if (afmFile==NULL)
|
if (afmFile==NULL)
|
||||||
{
|
{
|
||||||
afmName = wxThePrintSetupData->GetAFMPath();
|
afmName = wxThePrintSetupData->GetAFMPath();
|
||||||
afmName << wxFILE_SEP_PATH << name << wxT(".afm");
|
afmName << wxFILE_SEP_PATH << name;
|
||||||
afmFile = wxFopen(afmName,wxT("r"));
|
afmFile = wxFopen(afmName,wxT("r"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __UNIX__
|
#if defined(__UNIX__) && !defined(__VMS__)
|
||||||
#ifndef __VMS__
|
|
||||||
if (afmFile==NULL)
|
if (afmFile==NULL)
|
||||||
/* please do NOT change the line above to "else if (afmFile==NULL)" -
|
/* please do NOT change the line above to "else if (afmFile==NULL)" -
|
||||||
- afmFile = fopen() may fail and in that case the next if branch
|
- afmFile = fopen() may fail and in that case the next if branch
|
||||||
@ -2034,11 +2034,14 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
|
|||||||
afmName << wxFILE_SEP_PATH
|
afmName << wxFILE_SEP_PATH
|
||||||
<< wxT("share") << wxFILE_SEP_PATH
|
<< wxT("share") << wxFILE_SEP_PATH
|
||||||
<< wxT("wx") << wxFILE_SEP_PATH
|
<< wxT("wx") << wxFILE_SEP_PATH
|
||||||
|
#if defined(__LINUX__) || defined(__FREEBSD__)
|
||||||
|
<< wxT("gs_afm") << wxFILE_SEP_PATH
|
||||||
|
#else
|
||||||
<< wxT("afm") << wxFILE_SEP_PATH
|
<< wxT("afm") << wxFILE_SEP_PATH
|
||||||
<< name << wxT(".afm");
|
#endif
|
||||||
|
<< name;
|
||||||
afmFile = wxFopen(afmName,wxT("r"));
|
afmFile = wxFopen(afmName,wxT("r"));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (afmFile==NULL)
|
if (afmFile==NULL)
|
||||||
@ -2155,7 +2158,7 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
|
|||||||
/ is done by adding the widths of the characters in the
|
/ is done by adding the widths of the characters in the
|
||||||
/ string. they are given in 1/1000 of the size! */
|
/ string. they are given in 1/1000 of the size! */
|
||||||
|
|
||||||
double widthSum=0;
|
long sum=0;
|
||||||
wxCoord height=Size; /* by default */
|
wxCoord height=Size; /* by default */
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
for(p=(unsigned char *)wxMBSTRINGCAST strbuf; *p; p++)
|
for(p=(unsigned char *)wxMBSTRINGCAST strbuf; *p; p++)
|
||||||
@ -2163,14 +2166,18 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
|
|||||||
if(lastWidths[*p]== INT_MIN)
|
if(lastWidths[*p]== INT_MIN)
|
||||||
{
|
{
|
||||||
wxLogDebug(wxT("GetTextExtent: undefined width for character '%hc' (%d)\n"), *p,*p);
|
wxLogDebug(wxT("GetTextExtent: undefined width for character '%hc' (%d)\n"), *p,*p);
|
||||||
widthSum += (lastWidths[' ']/1000.0F * Size); /* assume space */
|
sum += lastWidths[' ']; /* assume space */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
widthSum += ((lastWidths[*p]/1000.0F)*Size);
|
sum += lastWidths[*p];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double widthSum = sum;
|
||||||
|
widthSum *= Size;
|
||||||
|
widthSum /= 1000.0F;
|
||||||
|
|
||||||
/* add descender to height (it is usually a negative value) */
|
/* add descender to height (it is usually a negative value) */
|
||||||
//if (lastDescender != INT_MIN)
|
//if (lastDescender != INT_MIN)
|
||||||
//{
|
//{
|
||||||
|
Loading…
Reference in New Issue
Block a user