Fix text origin and bounding box computations in wxSVGFileDC.
Text origin was calculated incorrectly for the rotated text and the bounding box was wrong even in non-rotated case. Fix this by using correct definition of the text anchor according to the SVG specification and add a test to the svg sample demonstrating this. Closes #14489. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72494 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -40,6 +40,8 @@
|
||||
#include "../sample.xpm"
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
|
||||
class MyChild;
|
||||
class MyCanvas;
|
||||
|
||||
@@ -321,7 +323,7 @@ MyCanvas::MyCanvas(MyChild *parent, const wxPoint& pos, const wxSize& size)
|
||||
SetBackgroundColour(wxColour(wxT("WHITE")));
|
||||
|
||||
m_child = parent;
|
||||
m_index = m_child->GetFrame()->GetCountOfChildren() % 7;
|
||||
m_index = m_child->GetFrame()->GetCountOfChildren() % 8;
|
||||
}
|
||||
|
||||
// Define the repainting behaviour
|
||||
@@ -493,6 +495,50 @@ void MyCanvas::OnDraw(wxDC& dc)
|
||||
#endif // wxUSE_STATUSBAR
|
||||
break;
|
||||
|
||||
case 7:
|
||||
wxString txtStr;
|
||||
wxCoord txtX, txtY, txtW, txtH, txtDescent, txtEL;
|
||||
wxCoord txtPad = 0;
|
||||
|
||||
wP = *wxRED_PEN;
|
||||
dc.SetPen(wP);
|
||||
//dc.SetBackgroundMode(wxBRUSHSTYLE_SOLID);
|
||||
//dc.SetTextBackground(*wxBLUE);
|
||||
|
||||
// Horizontal text
|
||||
txtStr = wxT("Horizontal string");
|
||||
dc.GetTextExtent(txtStr, &txtW, &txtH, &txtDescent, &txtEL);
|
||||
txtX = 50;
|
||||
txtY = 300;
|
||||
dc.DrawRectangle(txtX, txtY, txtW + 2*txtPad, txtH + 2*txtPad);
|
||||
dc.DrawText(txtStr, txtX + txtPad, txtY + txtPad);
|
||||
|
||||
// Vertical text
|
||||
txtStr = wxT("Vertical string");
|
||||
dc.GetTextExtent(txtStr, &txtW, &txtH, &txtDescent, &txtEL);
|
||||
txtX = 50;
|
||||
txtY = 250;
|
||||
dc.DrawRectangle(txtX, txtY - (txtW + 2*txtPad), txtH + 2*txtPad, txtW + 2*txtPad);
|
||||
dc.DrawRotatedText(txtStr, txtX + txtPad, txtY - txtPad, 90);
|
||||
|
||||
// 45 degree text
|
||||
txtStr = wxT("45 deg string");
|
||||
dc.GetTextExtent(txtStr, &txtW, &txtH, &txtDescent, &txtEL);
|
||||
double lenW = (double)(txtW + 2*txtPad) / sqrt(2.0);
|
||||
double lenH = (double)(txtH + 2*txtPad) / sqrt(2.0);
|
||||
double padding = (double)txtPad / sqrt(2.0);
|
||||
txtX = 150;
|
||||
txtY = 200;
|
||||
dc.DrawLine(txtX - padding, txtY, txtX + lenW, txtY - lenW); // top
|
||||
dc.DrawLine(txtX + lenW, txtY - lenW, txtX - padding + lenH + lenW, txtY + (lenH - lenW));
|
||||
dc.DrawLine(txtX - padding, txtY, txtX - padding + lenH, txtY + lenH);
|
||||
dc.DrawLine(txtX - padding + lenH, txtY + lenH, txtX - padding + lenH + lenW, txtY + (lenH - lenW)); // bottom
|
||||
dc.DrawRotatedText(txtStr, txtX, txtY, 45);
|
||||
#if wxUSE_STATUSBAR
|
||||
s = wxT("Text position test page");
|
||||
#endif // wxUSE_STATUSBAR
|
||||
break;
|
||||
|
||||
}
|
||||
#if wxUSE_STATUSBAR
|
||||
m_child->SetStatusText(s);
|
||||
|
Reference in New Issue
Block a user