]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dcsvg.cpp
Fix text origin and bounding box computations in wxSVGFileDC.
[wxWidgets.git] / src / common / dcsvg.cpp
index 6d922b3faefa6512bbc70c9838427734d2ff6d04..494d78b5193a873a46304ed50b0029bbef221324 100644 (file)
@@ -253,23 +253,26 @@ void wxSVGFileDCImpl::DoDrawRotatedText(const wxString& sText, wxCoord x, wxCoor
     CalcBoundingBox((wxCoord)(x + w*cos(rad)), (wxCoord)(y - h*sin(rad)));
 
     // wxT("bottom left") and wxT("bottom right")
     CalcBoundingBox((wxCoord)(x + w*cos(rad)), (wxCoord)(y - h*sin(rad)));
 
     // wxT("bottom left") and wxT("bottom right")
-    x += (wxCoord)(h*sin(rad));
-    y += (wxCoord)(h*cos(rad));
-    CalcBoundingBox(x, y);
     CalcBoundingBox((wxCoord)(x + h*sin(rad)), (wxCoord)(y + h*cos(rad)));
     CalcBoundingBox((wxCoord)(x + h*sin(rad)), (wxCoord)(y + h*cos(rad)));
+    CalcBoundingBox((wxCoord)(x + h*sin(rad) + w*cos(rad)), (wxCoord)(y + h*cos(rad) - w*sin(rad)));
 
     if (m_backgroundMode == wxBRUSHSTYLE_SOLID)
     {
         // draw background first
         // just like DoDrawRectangle except we pass the text color to it and set the border to a 1 pixel wide text background
 
 
     if (m_backgroundMode == wxBRUSHSTYLE_SOLID)
     {
         // draw background first
         // just like DoDrawRectangle except we pass the text color to it and set the border to a 1 pixel wide text background
 
-        sTmp.Printf ( wxT(" <rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" "), x,y+desc-h, w, h );
+        sTmp.Printf ( wxT(" <rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" "), x, y, w, h );
         s = sTmp + wxT("style=\"") + wxBrushString(m_textBackgroundColour);
         s += wxT("stroke-width:1; ") + wxPenString(m_textBackgroundColour);
         sTmp.Printf ( wxT("\" transform=\"rotate( %s %d %d )  \" />"), NumStr(-angle), x,y );
         s += sTmp + wxT("\n");
         write(s);
     }
         s = sTmp + wxT("style=\"") + wxBrushString(m_textBackgroundColour);
         s += wxT("stroke-width:1; ") + wxPenString(m_textBackgroundColour);
         sTmp.Printf ( wxT("\" transform=\"rotate( %s %d %d )  \" />"), NumStr(-angle), x,y );
         s += sTmp + wxT("\n");
         write(s);
     }
+
+    // convert x,y to SVG text x,y (the coordinates of the text baseline)
+    x = (wxCoord)(x + (h-desc)*sin(rad));
+    y = (wxCoord)(y + (h-desc)*cos(rad));
+
     //now do the text itself
     s.Printf (wxT(" <text x=\"%d\" y=\"%d\" "),x,y );
 
     //now do the text itself
     s.Printf (wxT(" <text x=\"%d\" y=\"%d\" "),x,y );