| 538 | } |
| 539 | |
| 540 | void CodeEditor::paintLineNumbers(QPaintEvent *event) |
| 541 | { |
| 542 | QPainter painter(lineNumbers); |
| 543 | QFont lineNoFont = font(); |
| 544 | QFontMetrics fm(lineNoFont); |
| 545 | lineNoFont.setPointSizeF(lineNoFont.pointSizeF()*0.8); |
| 546 | QFontMetrics fm2(lineNoFont); |
| 547 | int ascentDiff = fontMetrics().ascent() - fm2.ascent(); |
| 548 | painter.setFont(lineNoFont); |
| 549 | painter.fillRect(event->rect(), theme.lineNumberbackground.get(darkMode)); |
| 550 | |
| 551 | QTextBlock block = firstVisibleBlock(); |
| 552 | int blockNumber = block.blockNumber(); |
| 553 | |
| 554 | int top = static_cast<int>(blockBoundingGeometry(block).translated(contentOffset()).top()); |
| 555 | int bottom = top + static_cast<int>(blockBoundingRect(block).height()); |
| 556 | |
| 557 | // painter.fillRect(event->rect(), QColor::fromRgb(QRandomGenerator::global()->generate())); |
| 558 | |
| 559 | int curLine = textCursor().blockNumber(); |
| 560 | |
| 561 | while (block.isValid() && top <= event->rect().bottom()) { |
| 562 | if (block.isVisible() && bottom >= event->rect().top()) { |
| 563 | QString number = QString::number(blockNumber + 1); |
| 564 | int textTop = top + ascentDiff; |
| 565 | |
| 566 | if (errorLines.contains(blockNumber)) { |
| 567 | painter.setPen(theme.errorColor.get(darkMode)); |
| 568 | } else if (warningLines.contains(blockNumber)) { |
| 569 | painter.setPen(theme.warningColor.get(darkMode)); |
| 570 | } else if (blockNumber == curLine) { |
| 571 | painter.setPen(theme.foregroundActiveColor.get(darkMode)); |
| 572 | } else { |
| 573 | painter.setPen(theme.foregroundInactiveColor.get(darkMode)); |
| 574 | } |
| 575 | |
| 576 | painter.drawText(0, textTop, lineNumbers->width(), fm2.height(), |
| 577 | Qt::AlignRight, number); |
| 578 | } |
| 579 | |
| 580 | block = block.next(); |
| 581 | top = bottom; |
| 582 | bottom = top + static_cast<int>(blockBoundingRect(block).height()); |
| 583 | ++blockNumber; |
| 584 | } |
| 585 | } |
| 586 | |
| 587 | QColor CodeEditor::interpolate(QColor start,QColor end,double ratio) |
| 588 | { |