namespace basctl
{
LineNumberWindow::LineNumberWindow(vcl::Window* pParent, ModulWindow* pModulWindow)
: Window(pParent, WB_BORDER)
, m_pModulWindow(pModulWindow)
, m_nCurYOffset(0)
{ // tdf#153853 The line number window does not need to be affected by RTL
EnableRTL(false);
void LineNumberWindow::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&)
{
SyncYOffset(); // Don't return even if invalidated, to avoid flicker
ExtTextEngine* txtEngine = m_pModulWindow->GetEditEngine(); if (!txtEngine) return;
TextView* txtView = m_pModulWindow->GetEditView(); if (!txtView) return;
int windowHeight = rRenderContext.GetOutputSize().Height(); int windowWidth = rRenderContext.GetOutputSize().Width(); int nLineHeight = rRenderContext.GetTextHeight(); if (!nLineHeight)
{ return;
}
// FIXME: it would be best if we could get notified of a font change // rather than doing that re-calculation at each Paint event
m_nBaseWidth = GetTextWidth(u"8"_ustr);
// reserve enough for 3 digit minimum, with a bit to spare for comfort
m_nWidth = m_nBaseWidth * 3 + m_nBaseWidth / 2; auto nMaxLineNumber = std::max(nEndLine, txtEngine->GetParagraphCount() + 1);
sal_uInt32 i = (nMaxLineNumber + 1) / 1000; while (i)
{
i /= 10;
m_nWidth += m_nBaseWidth;
}
for (sal_uInt32 n = nStartLine; n <= nEndLine; ++n, y += nLineHeight)
{ // Font weight for the selected lines is bold if (n == nParaEnd)
{
tools::Rectangle aRect(Point(0, y - m_nCurYOffset),
Point(windowWidth, y - m_nCurYOffset + nLineHeight));
rRenderContext.SetFillColor(m_HighlightColor);
rRenderContext.DrawRect(aRect);
rRenderContext.SetFont(aBoldFont);
} else
{
rRenderContext.SetFont(aNormalFont);
}
rRenderContext.SetTextColor(m_FontColor); const OUString aLineNumber = OUString::number(n); // tdf#153798 - align line numbers to the right
rRenderContext.DrawText(
Point(m_nWidth - GetTextWidth(aLineNumber) - m_nBaseWidth / 2, y - m_nCurYOffset),
aLineNumber);
} // Restore the original font
rRenderContext.SetFont(aNormalFont);
// Resize the parent after calculating the new width and height values
GetParent()->Resize();
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.