fix scaling of PS text output when X and Y scale are different

svn: r895
This commit is contained in:
Matthew Flatt 2005-09-21 11:53:53 +00:00
parent e2c11d5476
commit fb848b4ae5

View File

@ -967,7 +967,7 @@ void wxPostScriptDC::SetFont (wxFont * the_font)
size = current_font->GetPointSize(); size = current_font->GetPointSize();
next_font_name = name; next_font_name = name;
next_font_size = YSCALEREL(size); next_font_size = size;
} }
static void set_pattern(wxPostScriptDC *dc, wxPSStream *pstream, wxBitmap *bm, int rop, wxColour *col) static void set_pattern(wxPostScriptDC *dc, wxPSStream *pstream, wxBitmap *bm, int rop, wxColour *col)
@ -1368,20 +1368,27 @@ void wxPostScriptDC::DrawText(DRAW_TEXT_CONST char *text, double x, double y,
if (angle != 0.0) { if (angle != 0.0) {
pstream->Out(XSCALE(x)); pstream->Out(" "); pstream->Out(YSCALE(y)); pstream->Out(XSCALE(x)); pstream->Out(" "); pstream->Out(YSCALE(y));
pstream->Out(" translate\n"); pstream->Out(" translate\n");
if ((user_scale_x != 1) || (user_scale_y != 1)) {
pstream->Out(user_scale_x); pstream->Out(" "); pstream->Out(user_scale_y); pstream->Out(" scale\n");
}
pstream->Out(angle * 180 / pie); pstream->Out(angle * 180 / pie);
pstream->Out(" rotate 0 "); pstream->Out(" rotate 0 ");
pstream->Out(YSCALEREL(-size)); pstream->Out(-size);
pstream->Out(" moveto\n"); pstream->Out(" moveto\n");
} else { } else {
pstream->Out(XSCALE(x)); pstream->Out(" "); pstream->Out(YSCALE(y + size)); pstream->Out(XSCALE(x)); pstream->Out(" "); pstream->Out(YSCALE(y + size));
pstream->Out(" moveto\n"); pstream->Out(" moveto\n");
if ((user_scale_x != 1) || (user_scale_y != 1)) {
pstream->Out("gsave\n");
pstream->Out(user_scale_x); pstream->Out(" "); pstream->Out(user_scale_y); pstream->Out(" scale\n");
}
} }
sym_map = current_font->GetFamily() == wxSYMBOL; sym_map = current_font->GetFamily() == wxSYMBOL;
wxPostScriptDrawText((Scheme_Object *)pstream->f, name, text, dt, combine, use16, current_font_size, wxPostScriptDrawText((Scheme_Object *)pstream->f, name, text, dt, combine, use16, current_font_size,
sym_map); sym_map);
if (angle != 0.0) { if ((angle != 0.0) || (user_scale_x != 1) || (user_scale_y != 1)) {
pstream->Out("grestore\n"); pstream->Out("grestore\n");
} }