X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/906c935a80b10d53cecf57f71ab5f3f4f1d529ec..d57d0505d4c2186592833f18c3d40532d3a4bf0e:/src/common/dcsvg.cpp
diff --git a/src/common/dcsvg.cpp b/src/common/dcsvg.cpp
index 9aeb7e9530..494d78b519 100644
--- a/src/common/dcsvg.cpp
+++ b/src/common/dcsvg.cpp
@@ -195,7 +195,7 @@ wxSize wxSVGFileDCImpl::GetPPI() const
void wxSVGFileDCImpl::DoDrawLine (wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
{
- if (m_graphics_changed) NewGraphics();
+ NewGraphicsIfNeeded();
wxString s;
s.Printf ( wxT(" \n"), x1,y1,x2,y2 );
if (m_OK)
@@ -218,7 +218,7 @@ void wxSVGFileDCImpl::DoDrawLines(int n, wxPoint points[], wxCoord xoffset , wxC
void wxSVGFileDCImpl::DoDrawPoint (wxCoord x1, wxCoord y1)
{
wxString s;
- if (m_graphics_changed) NewGraphics();
+ NewGraphicsIfNeeded();
s = wxT(" ") + wxString(wxT("\n"));
write(s);
DoDrawLine ( x1,y1,x1,y1 );
@@ -239,7 +239,7 @@ void wxSVGFileDCImpl::DoDrawText(const wxString& text, wxCoord x1, wxCoord y1)
void wxSVGFileDCImpl::DoDrawRotatedText(const wxString& sText, wxCoord x, wxCoord y, double angle)
{
//known bug; if the font is drawn in a scaled DC, it will not behave exactly as wxMSW
- if (m_graphics_changed) NewGraphics();
+ NewGraphicsIfNeeded();
wxString s, sTmp;
// calculate bounding box
@@ -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")
- 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) + 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
- sTmp.Printf ( wxT(" "), 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(" \n