- enhancement: Unique look&feel for the underline shown while ctrl+mouse over #include line.
- enhancement: Better look&feel for the wave underline shown for syntax errors.
This commit is contained in:
parent
64afb18dfd
commit
8561a035ae
2
NEWS.md
2
NEWS.md
|
@ -26,6 +26,8 @@ Red Panda C++ Version 2.27
|
||||||
- change: Force use utf8 as the exec encoding for fmtlib in the auto link options page.
|
- change: Force use utf8 as the exec encoding for fmtlib in the auto link options page.
|
||||||
- fix: After spaces in comments and strings, symbol completion for '{' and '(' are wrong.
|
- fix: After spaces in comments and strings, symbol completion for '{' and '(' are wrong.
|
||||||
- fix: Issue #230 Crash when input " in the txt files.
|
- fix: Issue #230 Crash when input " in the txt files.
|
||||||
|
- enhancement: Unique look&feel for the underline shown while ctrl+mouse over #include line.
|
||||||
|
- enhancement: Better look&feel for the wave underline shown for syntax errors.
|
||||||
|
|
||||||
Red Panda C++ Version 2.26
|
Red Panda C++ Version 2.26
|
||||||
- enhancement: Code suggestion for embedded std::vectors.
|
- enhancement: Code suggestion for embedded std::vectors.
|
||||||
|
|
|
@ -1141,10 +1141,10 @@ void Editor::onGutterPaint(QPainter &painter, int aLine, int X, int Y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Editor::onGetEditingAreas(int Line, QSynedit::EditingAreaList &areaList)
|
void Editor::onGetEditingAreas(int line, QSynedit::EditingAreaList &areaList)
|
||||||
{
|
{
|
||||||
areaList.clear();
|
areaList.clear();
|
||||||
if (mTabStopBegin>=0 && mTabStopY == Line) {
|
if (mTabStopBegin>=0 && mTabStopY == line) {
|
||||||
QSynedit::PEditingArea p = std::make_shared<QSynedit::EditingArea>();
|
QSynedit::PEditingArea p = std::make_shared<QSynedit::EditingArea>();
|
||||||
p->type = QSynedit::EditingAreaType::eatRectangleBorder;
|
p->type = QSynedit::EditingAreaType::eatRectangleBorder;
|
||||||
// int spaceCount = leftSpaces(mLineBeforeTabStop);
|
// int spaceCount = leftSpaces(mLineBeforeTabStop);
|
||||||
|
@ -1154,7 +1154,7 @@ void Editor::onGetEditingAreas(int Line, QSynedit::EditingAreaList &areaList)
|
||||||
p->color = syntaxer()->stringAttribute()->foreground();
|
p->color = syntaxer()->stringAttribute()->foreground();
|
||||||
areaList.append(p);
|
areaList.append(p);
|
||||||
}
|
}
|
||||||
PSyntaxIssueList lst = getSyntaxIssuesAtLine(Line);
|
PSyntaxIssueList lst = getSyntaxIssuesAtLine(line);
|
||||||
if (lst) {
|
if (lst) {
|
||||||
for (const PSyntaxIssue& issue: *lst) {
|
for (const PSyntaxIssue& issue: *lst) {
|
||||||
QSynedit::PEditingArea p=std::make_shared<QSynedit::EditingArea>();
|
QSynedit::PEditingArea p=std::make_shared<QSynedit::EditingArea>();
|
||||||
|
@ -1169,6 +1169,20 @@ void Editor::onGetEditingAreas(int Line, QSynedit::EditingAreaList &areaList)
|
||||||
areaList.append(p);
|
areaList.append(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
QString lineText = document()->getLine(line-1);
|
||||||
|
if (mParser && mParser->isIncludeLine(lineText)) {
|
||||||
|
if (line == mHoverModifiedLine) {
|
||||||
|
int pos1=std::max(lineText.indexOf("<"),lineText.indexOf("\""));
|
||||||
|
int pos2=std::max(lineText.lastIndexOf(">"),lineText.lastIndexOf("\""));
|
||||||
|
if (pos1>=0 && pos2>=0 && pos1 < pos2) {
|
||||||
|
QSynedit::PEditingArea p=std::make_shared<QSynedit::EditingArea>();
|
||||||
|
p->beginX = pos1+2;
|
||||||
|
p->endX = pos2+1;
|
||||||
|
p->type = QSynedit::EditingAreaType::eatUnderLine;
|
||||||
|
areaList.append(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Editor::onGetSpecialLineColors(int Line, QColor &foreground, QColor &backgroundColor)
|
bool Editor::onGetSpecialLineColors(int Line, QColor &foreground, QColor &backgroundColor)
|
||||||
|
@ -1210,15 +1224,6 @@ void Editor::onPreparePaintHighlightToken(int line, int aChar, const QString &to
|
||||||
}
|
}
|
||||||
QString lineText = document()->getLine(line-1);
|
QString lineText = document()->getLine(line-1);
|
||||||
if (mParser->isIncludeLine(lineText)) {
|
if (mParser->isIncludeLine(lineText)) {
|
||||||
if (line == mHoverModifiedLine) {
|
|
||||||
int pos1=std::max(lineText.indexOf("<"),lineText.indexOf("\""));
|
|
||||||
int pos2=std::max(lineText.lastIndexOf(">"),lineText.lastIndexOf("\""));
|
|
||||||
pos1++;
|
|
||||||
pos2++;
|
|
||||||
if (pos1>0 && pos2>0 && pos1<aChar && aChar < pos2) {
|
|
||||||
style.setFlag(QSynedit::FontStyle::fsUnderline);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (mParser->enabled() && attr->tokenType() == QSynedit::TokenType::Identifier) {
|
} else if (mParser->enabled() && attr->tokenType() == QSynedit::TokenType::Identifier) {
|
||||||
QSynedit::BufferCoord p{aChar,line};
|
QSynedit::BufferCoord p{aChar,line};
|
||||||
// BufferCoord pBeginPos,pEndPos;
|
// BufferCoord pBeginPos,pEndPos;
|
||||||
|
|
|
@ -341,7 +341,6 @@ void QSynEditPainter::paintToken(
|
||||||
const QFont& font, bool showGlyphs)
|
const QFont& font, bool showGlyphs)
|
||||||
{
|
{
|
||||||
bool startPaint;
|
bool startPaint;
|
||||||
int nX;
|
|
||||||
bool fontInited = false;
|
bool fontInited = false;
|
||||||
int tokenRight = tokenWidth+tokenLeft;
|
int tokenRight = tokenWidth+tokenLeft;
|
||||||
|
|
||||||
|
@ -351,7 +350,8 @@ void QSynEditPainter::paintToken(
|
||||||
// qDebug()<<startGlyph<<endGlyph;
|
// qDebug()<<startGlyph<<endGlyph;
|
||||||
|
|
||||||
if (last >= first && mRcToken.right() > mRcToken.left()) {
|
if (last >= first && mRcToken.right() > mRcToken.left()) {
|
||||||
nX = fixXValue(first);
|
int nX = fixXValue(first);
|
||||||
|
int nY = mRcToken.bottom()-mPainter->fontMetrics().descent();
|
||||||
first -= tokenLeft;
|
first -= tokenLeft;
|
||||||
last -= tokenLeft;
|
last -= tokenLeft;
|
||||||
QRect rcTokenBack = mRcToken;
|
QRect rcTokenBack = mRcToken;
|
||||||
|
@ -413,7 +413,7 @@ void QSynEditPainter::paintToken(
|
||||||
mPainter->setFont(font);
|
mPainter->setFont(font);
|
||||||
fontInited = true;
|
fontInited = true;
|
||||||
}
|
}
|
||||||
mPainter->drawText(nX,mRcToken.bottom()-mPainter->fontMetrics().descent() , textToPaint);
|
mPainter->drawText(nX, nY, textToPaint);
|
||||||
drawed = true;
|
drawed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -440,7 +440,7 @@ void QSynEditPainter::paintToken(
|
||||||
fontInited = true;
|
fontInited = true;
|
||||||
}
|
}
|
||||||
//qDebug()<<"Drawing"<<textToPaint;
|
//qDebug()<<"Drawing"<<textToPaint;
|
||||||
mPainter->drawText(nX+padding,mRcToken.bottom()-mPainter->fontMetrics().descent() , textToPaint);
|
mPainter->drawText(nX+padding, nY, textToPaint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
drawed = true;
|
drawed = true;
|
||||||
|
@ -461,12 +461,12 @@ void QSynEditPainter::paintEditAreas(const EditingAreaList &areaList)
|
||||||
{
|
{
|
||||||
QRect rc;
|
QRect rc;
|
||||||
int x1,x2;
|
int x1,x2;
|
||||||
int offset;
|
|
||||||
//painter->setClipRect(rcLine);
|
//painter->setClipRect(rcLine);
|
||||||
rc=mRcLine;
|
rc=mRcLine;
|
||||||
rc.setBottom(rc.bottom()-1);
|
rc.setBottom(rc.bottom()-1);
|
||||||
setDrawingColors(false);
|
setDrawingColors(false);
|
||||||
for (const PEditingArea& p:areaList) {
|
for (const PEditingArea& p:areaList) {
|
||||||
|
int penWidth = std::max(1,mEdit->font().pixelSize() / 15);
|
||||||
if (p->beginX > mRight)
|
if (p->beginX > mRight)
|
||||||
continue;
|
continue;
|
||||||
if (p->endX < mLeft)
|
if (p->endX < mLeft)
|
||||||
|
@ -481,30 +481,41 @@ void QSynEditPainter::paintEditAreas(const EditingAreaList &areaList)
|
||||||
x2 = p->endX;
|
x2 = p->endX;
|
||||||
rc.setLeft(fixXValue(x1));
|
rc.setLeft(fixXValue(x1));
|
||||||
rc.setRight(fixXValue(x2));
|
rc.setRight(fixXValue(x2));
|
||||||
mPainter->setPen(p->color);
|
QPen pen;
|
||||||
|
pen.setColor(p->color);
|
||||||
|
pen.setWidth(penWidth);
|
||||||
|
mPainter->setPen(pen);
|
||||||
mPainter->setBrush(Qt::NoBrush);
|
mPainter->setBrush(Qt::NoBrush);
|
||||||
switch(p->type) {
|
switch(p->type) {
|
||||||
case EditingAreaType::eatRectangleBorder:
|
case EditingAreaType::eatRectangleBorder:
|
||||||
mPainter->drawRect(rc);
|
mPainter->drawRect(rc);
|
||||||
break;
|
break;
|
||||||
case EditingAreaType::eatUnderLine:
|
case EditingAreaType::eatUnderLine: {
|
||||||
mPainter->drawLine(rc.left(),rc.bottom(),rc.right(),rc.bottom());
|
mPainter->drawLine(rc.left(),rc.bottom()-pen.width(),rc.right(),rc.bottom()-pen.width());
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case EditingAreaType::eatWaveUnderLine:
|
case EditingAreaType::eatWaveUnderLine: {
|
||||||
offset=3;
|
int maxOffset = 2*penWidth;
|
||||||
|
int offset = maxOffset;
|
||||||
int lastX=rc.left();
|
int lastX=rc.left();
|
||||||
int lastY=rc.bottom()-offset;
|
int lastY=rc.bottom()-offset;
|
||||||
int t = rc.left();
|
int t = rc.left();
|
||||||
while (t<rc.right()) {
|
while (t<rc.right()) {
|
||||||
t+=3;
|
t+=maxOffset;
|
||||||
if (t>rc.right())
|
if (t>=rc.right()) {
|
||||||
|
int diff = t - rc.right();
|
||||||
|
offset = (offset==0)?(maxOffset-diff):diff;
|
||||||
t = rc.right();
|
t = rc.right();
|
||||||
offset = 3 - offset;
|
|
||||||
mPainter->drawLine(lastX,lastY,t,rc.bottom()-offset);
|
mPainter->drawLine(lastX,lastY,t,rc.bottom()-offset);
|
||||||
|
} else {
|
||||||
|
offset = maxOffset - offset;
|
||||||
|
mPainter->drawLine(lastX,lastY,t,rc.bottom()-offset);
|
||||||
|
}
|
||||||
lastX = t;
|
lastX = t;
|
||||||
lastY = rc.bottom()-offset;
|
lastY = rc.bottom()-offset;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue