MCPcopy Create free account
hub / github.com/KDE/kdiff3 / recalcWordWrapHelper

Method recalcWordWrapHelper

src/difftextwindow.cpp:1779–1939  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1777}
1778
1779void DiffTextWindow::recalcWordWrapHelper(size_t wrapLineVectorSize, qint32 visibleTextWidth, size_t cacheListIdx)
1780{
1781 if(d->m_bWordWrap)
1782 {
1783 if(ProgressProxy::wasCancelled())
1784 return;
1785 if(visibleTextWidth < 0)
1786 visibleTextWidth = getVisibleTextAreaWidth();
1787 else //TODO: Drop after line number area is converted to a QWidget.
1788 visibleTextWidth -= d->leftInfoWidth() * fontMetrics().horizontalAdvance('0');
1789 LineType i;
1790 size_t wrapLineIdx = 0;
1791 size_t size = d->getDiff3LineVector()->size();
1792 LineType firstD3LineIdx = SafeInt<LineType>(wrapLineVectorSize > 0 ? 0 : cacheListIdx * s_linesPerRunnable);
1793 LineType endIdx = SafeInt<LineType>(wrapLineVectorSize > 0 ? size : std::min<size_t>(firstD3LineIdx + s_linesPerRunnable, size));
1794 std::vector<WrapLineCacheData>& wrapLineCache = d->m_wrapLineCacheList[cacheListIdx];
1795 size_t cacheListIdx2 = 0;
1796 QTextLayout textLayout(QString(), font(), this);
1797
1798 for(i = firstD3LineIdx; i < endIdx; ++i)
1799 {
1800 if(ProgressProxy::wasCancelled())
1801 return;
1802
1803 LineType linesNeeded = 0;
1804 if(wrapLineVectorSize == 0)
1805 {
1806 QString s = d->getString(i);
1807 textLayout.clearLayout();
1808 textLayout.setText(s);
1809 d->prepareTextLayout(textLayout, visibleTextWidth);
1810 linesNeeded = textLayout.lineCount();
1811 for(qint32 l = 0; l < linesNeeded; ++l)
1812 {
1813 QTextLine line = textLayout.lineAt(l);
1814 wrapLineCache.push_back(WrapLineCacheData(i, line.textStart(), line.textLength()));
1815 }
1816 }
1817 else if(wrapLineVectorSize > 0 && cacheListIdx2 < d->m_wrapLineCacheList.size())
1818 {
1819 WrapLineCacheData* pWrapLineCache = d->m_wrapLineCacheList[cacheListIdx2].data();
1820 size_t cacheIdx = 0;
1821 size_t clc = d->m_wrapLineCacheList.size() - 1;
1822 size_t cllc = d->m_wrapLineCacheList.back().size();
1823 size_t curCount = d->m_wrapLineCacheList[cacheListIdx2].size() - 1;
1824 LineType l = 0;
1825
1826 while(wrapLineIdx + l < d->m_diff3WrapLineVector.size() && (cacheListIdx2 < clc || (cacheListIdx2 == clc && cacheIdx < cllc)) && pWrapLineCache->d3LineIdx() <= i)
1827 {
1828 if(pWrapLineCache->d3LineIdx() == i)
1829 {
1830 Diff3WrapLine* pDiff3WrapLine = &d->m_diff3WrapLineVector[wrapLineIdx + l];
1831 pDiff3WrapLine->wrapLineOffset = pWrapLineCache->textStart();
1832 pDiff3WrapLine->wrapLineLength = pWrapLineCache->textLength();
1833 ++l;
1834 }
1835 if(cacheIdx < curCount)
1836 {

Callers

nothing calls this directly

Calls 15

WrapLineCacheDataClass · 0.85
leftInfoWidthMethod · 0.80
setTextMethod · 0.80
prepareTextLayoutMethod · 0.80
push_backMethod · 0.80
textStartMethod · 0.80
textLengthMethod · 0.80
dataMethod · 0.80
d3LineIdxMethod · 0.80
linesNeededForDisplayMethod · 0.80
setLinesNeededMethod · 0.80
beginLineMethod · 0.80

Tested by

no test coverage detected