Skip to content
Permalink
Browse files

gh-1833: Fix border rendering issues (bar placement).

  • Loading branch information...
Maximus5 committed Mar 3, 2019
1 parent 0ab7c31 commit 1cf74da476bf946c9a97d502314532682fc828a4
Showing with 27 additions and 20 deletions.
  1. +17 −7 src/ConEmu/FontMgr.cpp
  2. +10 −13 src/ConEmu/VirtualConsole.cpp
@@ -1988,11 +1988,8 @@ bool CFontMgr::Create(CLogFont inFont, CFontPtr& rpFont, CustomFontFamily** ppCu
hFont = CreateFontIndirect(&tmpFont);

wchar_t szFontFace[32];
// ghWnd is preferred, different monitors may have different properties
HDC hScreenDC = GetDC(ghWnd); // GetDC(0);
HDC hDC = CreateCompatibleDC(hScreenDC);
ReleaseDC(ghWnd, hScreenDC);
hScreenDC = NULL;
CEDC hDC(NULL);
hDC.Create(800, 600);
MBoxAssert(hDC);

if (hFont)
@@ -2037,7 +2034,6 @@ bool CFontMgr::Create(CLogFont inFont, CFontPtr& rpFont, CustomFontFamily** ppCu
{
rpFont->m_tm.tmHeight = nRastHeight;
rpFont->m_tm.tmAveCharWidth = rpFont->m_tm.tmMaxCharWidth = nRastWidth;
rpFont->mb_Monospace = true;
}

rpFont->mp_otm = LoadOutline(hDC, NULL/*hFont*/); // шрифт УЖЕ выбран в DC
@@ -2073,9 +2069,23 @@ bool CFontMgr::Create(CLogFont inFont, CFontPtr& rpFont, CustomFontFamily** ppCu

// Лучше поставим AveCharWidth. MaxCharWidth для "условно моноширинного" Consolas почти равен высоте.
if (gpSet->FontSizeX3 && ((int)gpSet->FontSizeX3 > FontDefWidthMin) && ((int)gpSet->FontSizeX3 <= FontDefWidthMax))
{
inFont.lfWidth = EvalCellWidth();
}
else if (rpFont->mb_Monospace)
{
// Same logic as in CEDC::TextExtentPoint!
wchar_t text[] = L"N";
RECT rc = {};
if (::DrawText(hDC, text, 1, &rc, DT_CALCRECT|DT_NOPREFIX) != 0)
inFont.lfWidth = rc.right;
else
inFont.lfWidth = rpFont->m_tm.tmAveCharWidth;
}
else
{
inFont.lfWidth = rpFont->m_tm.tmAveCharWidth;
}

// Обновлять реальный размер шрифта в диалоге настройки не будем, были случаи, когда
// tmHeight был меньше, чем запрашивалось, однако, если пытаться создать шрифт с этим "обновленным"
@@ -2094,7 +2104,7 @@ bool CFontMgr::Create(CLogFont inFont, CFontPtr& rpFont, CustomFontFamily** ppCu
bSucceeded = (hFont != NULL);
}

DeleteDC(hDC);
hDC.Delete();
}

if (bSucceeded)
@@ -1238,6 +1238,11 @@ WORD CVirtualConsole::CharWidth(wchar_t ch, const CharAttr& attr)
// Font mapper is not used in this case
return MakeUShort(m_Sizes.nFontWidth);
}
else if (isCharSpaceSingle(ch))
{
// mitigate font bugs
return MakeUShort(m_Sizes.nFontWidth);
}

TODO("fnt_UCharMap, m_UCharMapFont");

@@ -2731,20 +2736,12 @@ void CVirtualConsole::UpdateText()
SelectFont(fnt_Normal);

// pointers
wchar_t* ConCharLine = NULL;
CharAttr* ConAttrLine = NULL;
DWORD* ConCharXLine = NULL;
wchar_t* ConCharLine = mpsz_ConChar;
CharAttr* ConAttrLine = mpn_ConAttrEx;
DWORD* ConCharXLine = ConCharX;
// counters
int pos, row;
{
int i;
i = 0; //TextLen - TextWidth; // TextLen = TextWidth/*80*/ * TextHeight/*25*/;
pos = 0; //Height - nFontHeight; // Height = TextHeight * nFontHeight;
row = 0; //TextHeight - 1;
ConCharLine = mpsz_ConChar + i;
ConAttrLine = mpn_ConAttrEx + i;
ConCharXLine = ConCharX + i;
}
int pos = 0, row = 0;
// max vertical coordinate of line allowed
int nMaxPos = m_Sizes.Height - m_Sizes.nFontHeight;

if (!ConCharLine || !ConAttrLine || !ConCharXLine)

0 comments on commit 1cf74da

Please sign in to comment.
You can’t perform that action at this time.