After spending days trying to figure out why my mpText did not print correctly I found two things with mpText::Plot.
First; x and y is switched, m_offsetx is used for calculating y position and vice versa.
Second; It will only position the mpText correctly if the user scale is 1.0.
int left = -dc.LogicalToDeviceX(0)/xscale;
int width = 2*left;//dc.LogicalToDeviceX(0) - left;
if (width<0) width = -width; /// This is abs()
int bottom = dc.LogicalToDeviceY(0)/yscale;
int height = 2*bottom;// - -dc.LogicalToDeviceY(0);
int xxx = (int)((((float)width/100.0) * m_offsetx) + left - (tw/2)); //This is correct
int yyy = (int)((((float)height/100.0) * m_offsety) - bottom);
dc.DrawText( GetName(),
xxx,
yyy );
}
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The draw behaviour has been changed recently, so I figure out that mpText continued to use an old-fashioned drawing reference. Try the Subversion code, or just wait for the next release (I hope it'll come soon) to fix it.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
After spending days trying to figure out why my mpText did not print correctly I found two things with mpText::Plot.
First; x and y is switched, m_offsetx is used for calculating y position and vice versa.
Second; It will only position the mpText correctly if the user scale is 1.0.
void mpText::Plot(wxDC & dc, mpWindow & w)
{
dc.SetPen(m_pen);
dc.SetFont(m_font);
wxCoord tw=0, th=0;
dc.GetTextExtent( GetName(), &tw, &th);
//
double xscale, yscale;
dc.GetUserScale(&xscale, &yscale);
int left = -dc.LogicalToDeviceX(0)/xscale;
int width = 2*left;//dc.LogicalToDeviceX(0) - left;
if (width<0) width = -width; /// This is abs()
int bottom = dc.LogicalToDeviceY(0)/yscale;
int height = 2*bottom;// - -dc.LogicalToDeviceY(0);
int xxx = (int)((((float)width/100.0) * m_offsetx) + left - (tw/2)); //This is correct
int yyy = (int)((((float)height/100.0) * m_offsety) - bottom);
dc.DrawText( GetName(),
xxx,
yyy );
}
The draw behaviour has been changed recently, so I figure out that mpText continued to use an old-fashioned drawing reference. Try the Subversion code, or just wait for the next release (I hope it'll come soon) to fix it.