]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/dcpsg.cpp
Better behaviour on NT (no dialogs when searching drives)
[wxWidgets.git] / src / generic / dcpsg.cpp
index 96b05d4f7cf9a334c35e0f62f5534dfd022d6493..6b5c65a0e7cc8a5d24b47d315d204e876031fea0 100644 (file)
@@ -1005,7 +1005,10 @@ void wxPostScriptDC::SetFont( const wxFont& font )
     fprintf( m_pstream, buffer );
     fprintf( m_pstream, " findfont\n" );
 
-    fprintf( m_pstream, "%f scalefont setfont\n", YLOG2DEVREL(m_font.GetPointSize() * 1000) / 1000.0F);
+    sprintf( buffer, "%f scalefont setfont\n", YLOG2DEVREL(m_font.GetPointSize() * 1000) / 1000.0F);
+    for (int i = 0; i < 100; i++)
+        if (buffer[i] == ',') buffer[i] = '.';
+    fprintf( m_pstream, buffer );
                 // 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
                 // to 1/1000th of pt and then back.
@@ -1021,11 +1024,18 @@ void wxPostScriptDC::SetPen( const wxPen& pen )
 
     m_pen = pen;
 
-    #ifdef __WXMSW__
-    fprintf( m_pstream, "%d setlinewidth\n", XLOG2DEVREL(m_pen.GetWidth()) );
-    #else
-    fprintf( m_pstream, "%d setlinewidth\n", XLOG2DEVREL(m_pen.GetWidth()) );
-    #endif
+    {
+        char buffer[100];
+        #ifdef __WXMSW__
+        sprintf( buffer, "%f setlinewidth\n", XLOG2DEVREL(1000 * m_pen.GetWidth()) / 1000.0f );
+        #else
+        sprintf( buffer, "%f setlinewidth\n", XLOG2DEVREL(1000 * m_pen.GetWidth()) / 1000.0f );
+        #endif
+        for (int i = 0; i < 100; i++)
+            if (buffer[i] == ',') buffer[i] = '.'; 
+        fprintf( m_pstream, buffer );
+    }
+
 /*
      Line style - WRONG: 2nd arg is OFFSET
 
@@ -1085,10 +1095,14 @@ void wxPostScriptDC::SetPen( const wxPen& pen )
         double redPS = (double)(red) / 255.0;
         double bluePS = (double)(blue) / 255.0;
         double greenPS = (double)(green) / 255.0;
-
-        fprintf( m_pstream,
+        
+        char buffer[100];
+        sprintf( buffer,
                 "%.8f %.8f %.8f setrgbcolor\n",
                 redPS, greenPS, bluePS );
+        for (int i = 0; i < 100; i++)
+            if (buffer[i] == ',') buffer[i] = '.'; 
+        fprintf( m_pstream, buffer );
 
         m_currentRed = red;
         m_currentBlue = blue;
@@ -1129,9 +1143,13 @@ void wxPostScriptDC::SetBrush( const wxBrush& brush )
         double bluePS = (double)(blue) / 255.0;
         double greenPS = (double)(green) / 255.0;
 
-        fprintf( m_pstream,
+        char buffer[100];
+        sprintf( buffer,
                 "%.8f %.8f %.8f setrgbcolor\n",
                 redPS, greenPS, bluePS );
+        for (int i = 0; i < 100; i++)
+            if (buffer[i] == ',') buffer[i] = '.'; 
+        fprintf( m_pstream, buffer );
 
         m_currentRed = red;
         m_currentBlue = blue;
@@ -1175,9 +1193,13 @@ void wxPostScriptDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y )
             double bluePS = (double)(blue) / 255.0;
             double greenPS = (double)(green) / 255.0;
 
-            fprintf( m_pstream,
-                    "%.8f %.8f %.8f setrgbcolor\n",
-                    redPS, greenPS, bluePS );
+            char buffer[100];
+            sprintf( buffer,
+                "%.8f %.8f %.8f setrgbcolor\n",
+                redPS, greenPS, bluePS );
+            for (int i = 0; i < 100; i++)
+                if (buffer[i] == ',') buffer[i] = '.'; 
+            fprintf( m_pstream, buffer );
 
             m_currentRed = red;
             m_currentBlue = blue;
@@ -1228,17 +1250,21 @@ void wxPostScriptDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y )
     if (m_font.GetUnderlined())
     {
         wxCoord uy = (wxCoord)(y + size - m_underlinePosition);
+        char buffer[100];
 
-        fprintf( m_pstream,
+        sprintf( buffer,
                 "gsave\n"
                 "%d %d moveto\n"
-                "%d setlinewidth\n"
+                "%f setlinewidth\n"
                 "%d %d lineto\n"
                 "stroke\n"
                 "grestore\n",
                 XLOG2DEV(x), YLOG2DEV(uy),
-                (wxCoord)m_underlineThickness,
+                m_underlineThickness,
                 XLOG2DEV(x + text_w), YLOG2DEV(uy) );
+        for (i = 0; i < 100; i++)
+            if (buffer[i] == ',') buffer[i] = '.'; 
+        fprintf( m_pstream, buffer );
     }
 
     CalcBoundingBox( x, y );
@@ -1283,9 +1309,13 @@ void wxPostScriptDC::DoDrawRotatedText( const wxString& text, wxCoord x, wxCoord
             double bluePS = (double)(blue) / 255.0;
             double greenPS = (double)(green) / 255.0;
 
-            fprintf( m_pstream,
-                    "%.8f %.8f %.8f setrgbcolor\n",
-                    redPS, greenPS, bluePS );
+            char buffer[100];
+            sprintf( buffer,
+                "%.8f %.8f %.8f setrgbcolor\n",
+                redPS, greenPS, bluePS );
+            for (int i = 0; i < 100; i++)
+                if (buffer[i] == ',') buffer[i] = '.'; 
+            fprintf( m_pstream, buffer );
 
             m_currentRed = red;
             m_currentBlue = blue;
@@ -1300,7 +1330,13 @@ void wxPostScriptDC::DoDrawRotatedText( const wxString& text, wxCoord x, wxCoord
     // FIXME only correct for 90 degrees
     fprintf(m_pstream, "%d %d moveto\n",
             XLOG2DEV((wxCoord)(x + size)), YLOG2DEV(by) );
-    fprintf(m_pstream, "%.8f rotate\n", angle);
+            
+    char buffer[100];
+    sprintf(buffer, "%.8f rotate\n", angle);
+    int i;
+    for (i = 0; i < 100; i++)
+        if (buffer[i] == ',') buffer[i] = '.'; 
+    fprintf(m_pstream, buffer);
 
     /* I don't know how to write char to a stream, so I use a mini string */
     char tmpbuf[2];
@@ -1309,7 +1345,6 @@ void wxPostScriptDC::DoDrawRotatedText( const wxString& text, wxCoord x, wxCoord
     fprintf( m_pstream, "(" );
     const wxWX2MBbuf textbuf = text.mb_str();
     int len = strlen(textbuf);
-    int i;
     for (i = 0; i < len; i++)
     {
         int c = (unsigned char) textbuf[i];
@@ -1333,24 +1368,32 @@ void wxPostScriptDC::DoDrawRotatedText( const wxString& text, wxCoord x, wxCoord
     }
 
     fprintf( m_pstream, ") show\n" );
-    fprintf( m_pstream, "%.8f rotate\n", -angle );
+    
+    sprintf( buffer, "%.8f rotate\n", -angle );
+    for (i = 0; i < 100; i++)
+        if (buffer[i] == ',') buffer[i] = '.'; 
+    fprintf( m_pstream, buffer );
 
     if (m_font.GetUnderlined())
     {
         wxCoord uy = (wxCoord)(y + size - m_underlinePosition);
         wxCoord w, h;
+        char buffer[100];
         GetTextExtent(text, &w, &h);
 
-        fprintf( m_pstream,
+        sprintf( buffer,
                  "gsave\n"
                  "%d %d moveto\n"
-                 "%ld setlinewidth\n"
+                 "%f setlinewidth\n"
                  "%d %d lineto\n"
                  "stroke\n"
                  "grestore\n",
                  XLOG2DEV(x), YLOG2DEV(uy),
-                 (long)m_underlineThickness,
+                 m_underlineThickness,
                  XLOG2DEV(x + w), YLOG2DEV(uy) );
+        for (i = 0; i < 100; i++)
+            if (buffer[i] == ',') buffer[i] = '.'; 
+        fprintf( m_pstream, buffer );
     }
 
     CalcBoundingBox( x, y );
@@ -1538,7 +1581,7 @@ bool wxPostScriptDC::StartDoc( const wxString& message )
 
     if (!m_pstream)
     {
-        wxMessageBox( _("Cannot open file for PostScript printing!"), _("Error"), wxOK );
+        wxLogError( _("Cannot open file for PostScript printing!"));
         m_ok = FALSE;
         return FALSE;
     }
@@ -1755,7 +1798,12 @@ void wxPostScriptDC::StartPage()
         // fprintf( m_pstream, "90 rotate llx neg ury nef translate\n" );
     }
 
-    fprintf( m_pstream, "%.8f %.8f scale\n", scale_x, scale_y );
+    char buffer[100];
+    sprintf( buffer, "%.8f %.8f scale\n", scale_x, scale_y );
+    for (int i = 0; i < 100; i++)
+        if (buffer[i] == ',') buffer[i] = '.';
+    fprintf( m_pstream, buffer );
+    
     fprintf( m_pstream, "%d %d translate\n", translate_x, translate_y );
 }
 
@@ -2071,18 +2119,19 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
         lastWidths[220] = lastWidths['U'];  // Ü
         lastWidths[252] = lastWidths['u'];  // ü
         lastWidths[223] = lastWidths[251];  // ß
-    }
 
-    /* JC: calculate UnderlineThickness/UnderlinePosition */
-    {
+        /* JC: calculate UnderlineThickness/UnderlinePosition */
+
         // VS: dirty, but is there any better solution?
         double *pt;
         pt = (double*) &m_underlinePosition;
-        *pt = UnderlinePosition * fontToUse->GetPointSize() / 1000.0f;
+        *pt = YLOG2DEVREL(UnderlinePosition * fontToUse->GetPointSize()) / 1000.0f;
         pt = (double*) &m_underlineThickness;
-        *pt = UnderlineThickness * fontToUse->GetPointSize() / 1000.0f * m_scaleFactor;
+        *pt = YLOG2DEVREL(UnderlineThickness * fontToUse->GetPointSize()) / 1000.0f;
+
     }
 
+
     /* 3. now the font metrics are read in, calc size this
        /  is done by adding the widths of the characters in the
        /  string. they are given in 1/1000 of the size! */