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:
Robert Roebling 2000-11-23 21:42:55 +00:00
parent 96997d6511
commit 733b25e1a9

View File

@ -650,9 +650,6 @@ void wxPostScriptDC::DoDrawPolygon (int n, wxPoint points[], wxCoord xoffset, wx
wxCoord xx = XLOG2DEV(points[0].x + xoffset);
wxCoord yy = YLOG2DEV(points[0].y + yoffset);
wxCoord xx0 = xx;
wxCoord yy0 = yy;
fprintf( m_pstream, "%d %d moveto\n", xx, yy );
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);
}
fprintf( m_pstream, "%d %d lineto\n", xx0, yy0 );
fprintf( m_pstream, "closepath\n" );
fprintf( m_pstream, "stroke\n" );
}
}
@ -942,87 +939,83 @@ void wxPostScriptDC::SetFont( const wxFont& font )
m_font = font;
const char *name;
const char *style = "";
int Style = m_font.GetStyle();
int Weight = m_font.GetWeight();
const char *name;
switch (m_font.GetFamily())
{
case wxTELETYPE:
case wxMODERN:
name = "/Courier";
break;
case wxSWISS:
name = "/Helvetica";
{
if (Style == wxITALIC)
{
if (Weight == wxBOLD)
name = "/Courier-BoldOblique";
else
name = "/Courier-Oblique";
}
else
{
if (Weight == wxBOLD)
name = "/Courier-Bold";
else
name = "/Courier";
}
break;
}
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;
}
case wxSCRIPT:
name = "/Zapf-Chancery-MediumItalic";
{
name = "/ZapfChancery-MediumItalic";
Style = wxNORMAL;
Weight = wxNORMAL;
break;
}
case wxSWISS:
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))
{
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, name );
fprintf( m_pstream, " reencodeISO def\n" );
fprintf( m_pstream, buffer );
fprintf( m_pstream, name );
fprintf( m_pstream, " findfont\n" );
char buffer[100];
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
// 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;
/* get actual parameters */
const int Family = fontToUse->GetFamily();
const int Size = fontToUse->GetPointSize();
const int Style = fontToUse->GetStyle();
const int Weight = fontToUse->GetWeight();
int Family = fontToUse->GetFamily();
int Size = fontToUse->GetPointSize();
int Style = fontToUse->GetStyle();
int Weight = fontToUse->GetWeight();
/* if we have another font, read the font-metrics */
if (Family!=lastFamily || Size!=lastSize || Style!=lastStyle || Weight!=lastWeight)
@ -1964,31 +1957,38 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
switch (Family)
{
case wxTELETYPE:
case wxMODERN:
{
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "CourBoO";
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "CourBo";
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "CourO";
else name = "Cour";
}
case wxTELETYPE:
{
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "CourBoO.afm";
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "CourBo.afm";
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "CourO.afm";
else name = "Cour.afm";
break;
}
case wxROMAN:
{
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "TimesBoO";
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "TimesBo";
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "TimesO";
else name = "TimesRo";
}
{
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "TimesBoO.afm";
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "TimesBo.afm";
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "TimesO.afm";
else name = "TimesRo.afm";
break;
}
case wxSCRIPT:
{
name = "Zapf.afm";
Style = wxNORMAL;
Weight = wxNORMAL;
}
case wxSWISS:
default:
{
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "HelvBoO";
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "HelvBo";
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "HelvO";
else name = "Helv";
}
{
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "HelvBoO.afm";
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "HelvBo.afm";
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "HelvO.afm";
else name = "Helv.afm";
break;
}
}
/* 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 */
afmName << name << wxT(".afm");
afmName << name;
FILE *afmFile = wxFopen(afmName,wxT("r"));
if (afmFile==NULL)
{
afmName = wxThePrintSetupData->GetAFMPath();
afmName << wxFILE_SEP_PATH << name << wxT(".afm");
afmName << wxFILE_SEP_PATH << name;
afmFile = wxFopen(afmName,wxT("r"));
}
#ifdef __UNIX__
#ifndef __VMS__
#if defined(__UNIX__) && !defined(__VMS__)
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
@ -2034,11 +2034,14 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
afmName << wxFILE_SEP_PATH
<< wxT("share") << 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
<< name << wxT(".afm");
#endif
<< name;
afmFile = wxFopen(afmName,wxT("r"));
}
#endif
#endif
if (afmFile==NULL)
@ -2155,7 +2158,7 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
/ is done by adding the widths of the characters in the
/ string. they are given in 1/1000 of the size! */
double widthSum=0;
long sum=0;
wxCoord height=Size; /* by default */
unsigned char *p;
for(p=(unsigned char *)wxMBSTRINGCAST strbuf; *p; p++)
@ -2163,14 +2166,18 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
if(lastWidths[*p]== INT_MIN)
{
wxLogDebug(wxT("GetTextExtent: undefined width for character '%hc' (%d)\n"), *p,*p);
widthSum += (lastWidths[' ']/1000.0F * Size); /* assume space */
sum += lastWidths[' ']; /* assume space */
}
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) */
//if (lastDescender != INT_MIN)
//{