refactor fill to end

This commit is contained in:
Roy Qu 2024-02-27 08:30:45 +08:00
parent 03e267d59a
commit 2a3afffba9
2 changed files with 16 additions and 42 deletions

View File

@ -534,8 +534,7 @@ void QSynEditPainter::paintEditAreas(const EditingAreaList &areaList)
void QSynEditPainter::paintHighlightToken(const QString& lineText, void QSynEditPainter::paintHighlightToken(const QString& lineText,
const QList<int> &glyphStartCharList, const QList<int> &glyphStartCharList,
const QList<int> &glyphStartPositionsList, const QList<int> &glyphStartPositionsList)
bool bFillToEOL)
{ {
bool isComplexToken; bool isComplexToken;
int nC1, nC2, nC1Sel, nC2Sel; int nC1, nC2, nC1Sel, nC2Sel;
@ -625,43 +624,6 @@ void QSynEditPainter::paintHighlightToken(const QString& lineText,
mTokenAccu.font, mTokenAccu.showSpecialGlyphs); mTokenAccu.font, mTokenAccu.showSpecialGlyphs);
} }
} }
// Fill the background to the end of this line if necessary.
if (bFillToEOL && rcToken.left() < rcLine.right()) {
if (mIsSpecialLine && colSpBG.isValid())
colBG = colSpBG;
else
colBG = colEditorBG();
if (mIsComplexLine) {
nX1 = fixXValue(mLineSelStart);
nX2 = fixXValue(mLineSelEnd);
if (rcToken.left() < nX1) {
setDrawingColors(false);
rcToken.setRight(nX1);
// if (TokenAccu.Len != 0 && TokenAccu.Style != FontStyle::fsNone)
// AdjustEndRect();
mPainter->fillRect(rcToken,mPainter->brush());
rcToken.setLeft(nX1);
}
if (rcToken.left() < nX2) {
setDrawingColors(true);
rcToken.setRight(nX2);
mPainter->fillRect(rcToken,mPainter->brush());
rcToken.setLeft(nX2);
}
if (rcToken.left() < rcLine.right()) {
setDrawingColors(false);
rcToken.setRight(rcLine.right());
mPainter->fillRect(rcToken,mPainter->brush());
}
} else {
setDrawingColors(mIsLineSelected);
rcToken.setRight(rcLine.right());
// if (TokenAccu.Len != 0 && TokenAccu.Style != FontStyle::fsNone)
// AdjustEndRect();
mPainter->fillRect(rcToken,mPainter->brush());
}
}
} }
// Store the token chars with the attributes in the TokenAccu // Store the token chars with the attributes in the TokenAccu
@ -723,7 +685,7 @@ void QSynEditPainter::addHighlightToken(
} }
// If we can't append it, then we have to paint the old token chars first. // If we can't append it, then we have to paint the old token chars first.
if (!bCanAppend) if (!bCanAppend)
paintHighlightToken(lineText, glyphStartCharList, glyphStartPositionList, false); paintHighlightToken(lineText, glyphStartCharList, glyphStartPositionList);
} }
if (bInitFont) { if (bInitFont) {
mTokenAccu.style = style; mTokenAccu.style = style;
@ -954,6 +916,8 @@ void QSynEditPainter::paintLines()
mIsComplexLine = false; mIsComplexLine = false;
mLineSelStart = 0; mLineSelStart = 0;
mLineSelEnd = 0; mLineSelEnd = 0;
bool selToEnd = false;;
// Does the selection intersect the visible area? // Does the selection intersect the visible area?
if (bAnySelection && (row >= mSelStart.row) && (row <= mSelEnd.row)) { if (bAnySelection && (row >= mSelStart.row) && (row <= mSelEnd.row)) {
// Default to a fully selected line. This is correct for the smLine // Default to a fully selected line. This is correct for the smLine
@ -981,6 +945,8 @@ void QSynEditPainter::paintLines()
mLineSelEnd = xpos; mLineSelEnd = xpos;
mIsComplexLine = true; mIsComplexLine = true;
} }
} else {
selToEnd = true;
} }
} //endif bAnySelection } //endif bAnySelection
@ -991,6 +957,14 @@ void QSynEditPainter::paintLines()
rcLine.setHeight(mEdit->mTextHeight); rcLine.setHeight(mEdit->mTextHeight);
mIsLineSelected = (!mIsComplexLine) && (mLineSelStart > 0); mIsLineSelected = (!mIsComplexLine) && (mLineSelStart > 0);
if (mIsSpecialLine && colSpBG.isValid())
colBG = colSpBG;
else
colBG = colEditorBG();
setDrawingColors(selToEnd);
mPainter->fillRect(rcLine,mPainter->brush());
rcToken = rcLine; rcToken = rcLine;
int lineWidth; int lineWidth;
@ -1200,7 +1174,7 @@ void QSynEditPainter::paintLines()
} }
// Draw anything that's left in the TokenAccu record. Fill to the end // Draw anything that's left in the TokenAccu record. Fill to the end
// of the invalid area with the correct colors. // of the invalid area with the correct colors.
paintHighlightToken(sLine, glyphStartCharList, glyphStartPositionsList, true); paintHighlightToken(sLine, glyphStartCharList, glyphStartPositionsList);
//Paint editingAreaBorders //Paint editingAreaBorders
foreach (const PEditingArea& area, areaList) { foreach (const PEditingArea& area, areaList) {

View File

@ -69,7 +69,7 @@ private:
void paintEditAreas(const EditingAreaList& areaList); void paintEditAreas(const EditingAreaList& areaList);
void paintHighlightToken(const QString& lineText, void paintHighlightToken(const QString& lineText,
const QList<int> &glyphStartCharList, const QList<int> &glyphStartCharList,
const QList<int> &glyphStartPositionsList, bool bFillToEOL); const QList<int> &glyphStartPositionsList);
void addHighlightToken( void addHighlightToken(
const QString& lineText, const QString& lineText,
const QString& token, int tokenLeft, const QString& token, int tokenLeft,