Merge pull request #4290 from EmptyChaos/varwidth-fonts

WxDebugger: Fix variable width fonts in Code/Memory views
This commit is contained in:
shuffle2 2016-10-04 01:39:27 -07:00 committed by GitHub
commit 037f0a1803
2 changed files with 9 additions and 15 deletions

View File

@ -390,8 +390,9 @@ void CCodeView::OnPaint(wxPaintEvent& event)
{ {
wxFontMetrics metrics = paint_dc.GetFontMetrics(); wxFontMetrics metrics = paint_dc.GetFontMetrics();
char_width = metrics.averageWidth; char_width = metrics.averageWidth;
if (metrics.height > m_rowHeight) m_rowHeight = std::max(metrics.height, m_rowHeight);
m_rowHeight = metrics.height; if (!DebuggerFont.IsFixedWidth())
char_width = paint_dc.GetTextExtent("mxx").GetWidth() / 3; // (1em + 2ex) / 3
} }
std::unique_ptr<wxGraphicsContext> ctx(wxGraphicsContext::Create(paint_dc)); std::unique_ptr<wxGraphicsContext> ctx(wxGraphicsContext::Create(paint_dc));
@ -545,7 +546,7 @@ void CCodeView::OnPaint(wxPaintEvent& event)
// UnDecorateSymbolName(desc,temp,255,UNDNAME_COMPLETE); // UnDecorateSymbolName(desc,temp,255,UNDNAME_COMPLETE);
if (!desc.empty()) if (!desc.empty())
{ {
ctx->DrawText(StrToWxStr(desc), text_col + 45 * char_width, row_y); ctx->DrawText(StrToWxStr(desc), text_col + 44 * char_width, row_y);
} }
} }
@ -569,7 +570,7 @@ void CCodeView::OnPaint(wxPaintEvent& event)
for (int i = 0; i < num_branches; ++i) for (int i = 0; i < num_branches; ++i)
{ {
int x = text_col + 52 * char_width + (branches[i].srcAddr % 9) * 8; int x = text_col + 60 * char_width + (branches[i].srcAddr % 9) * 8;
branch_path.MoveToPoint(x - 2 * scale, branches[i].src); branch_path.MoveToPoint(x - 2 * scale, branches[i].src);
if (branches[i].dst < rc.height + 400 && branches[i].dst > -400) if (branches[i].dst < rc.height + 400 && branches[i].dst > -400)

View File

@ -269,22 +269,15 @@ void CMemoryView::OnPaint(wxPaintEvent& event)
wxPaintDC dc(this); wxPaintDC dc(this);
wxRect rc = GetClientRect(); wxRect rc = GetClientRect();
if (DebuggerFont.IsFixedWidth()) dc.SetFont(DebuggerFont);
{
dc.SetFont(DebuggerFont);
}
else
{
dc.SetFont(wxFont(DebuggerFont.GetPointSize(), wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL,
wxFONTWEIGHT_NORMAL, false, "Courier"));
}
int font_width; int font_width;
{ {
wxFontMetrics metrics = dc.GetFontMetrics(); wxFontMetrics metrics = dc.GetFontMetrics();
font_width = metrics.averageWidth; font_width = metrics.averageWidth;
if (metrics.height > rowHeight) rowHeight = std::max(rowHeight, metrics.height);
rowHeight = metrics.height; if (!DebuggerFont.IsFixedWidth())
font_width = dc.GetTextExtent("mxx").GetWidth() / 3; // (1em + 2ex) / 3
} }
const int row_start_x = m_left_col_width + 1; const int row_start_x = m_left_col_width + 1;