void GenericCodeEditor::updateCurrentLineHighlighting() { int currentCursorBlock = textCursor().blockNumber(); int first_block_num = qMin(mLastCursorBlock, currentCursorBlock); int second_block_num = qMax(mLastCursorBlock, currentCursorBlock); QRegion region(0,0,0,0); QTextBlock block = firstVisibleBlock(); int block_num = block.blockNumber(); qreal top = blockBoundingGeometry(block).translated(contentOffset()).top(); qreal max_top = viewport()->rect().bottom(); while (block.isValid() && block_num <= second_block_num && top <= max_top) { QRectF block_rect = blockBoundingRect(block); if (block_num == first_block_num || block_num == second_block_num) { region += block_rect.translated(0, top).toRect(); } top += block_rect.height(); block = block.next(); ++block_num; } viewport()->update( region ); }
void TextEdit::gutterPaintEvent(QPaintEvent *event) { QPainter painter(gutter); painter.fillRect(event->rect(), QColor(0xee, 0xee, 0xee)); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); int digiW = fontMetrics().width(QLatin1Char('9')); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(blockNumber + 1); painter.setPen(QColor(0x88, 0x88, 0x88)); painter.drawText(0, top, gutter->width() - digiW / 2, fontMetrics().height(), Qt::AlignRight, number); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
void GenericCodeEditor::paintEvent( QPaintEvent *event ) { if (mHighlightCurrentLine) { int cursor_block_num = textCursor().blockNumber(); QTextBlock block = firstVisibleBlock(); int block_num = block.blockNumber(); qreal top = blockBoundingGeometry(block).translated(contentOffset()).top(); qreal max_top = event->rect().bottom(); while (block.isValid() && block_num <= cursor_block_num && top <= max_top) { QRectF block_rect = blockBoundingRect(block); if (block_num == cursor_block_num) { QPainter painter(viewport()); painter.fillRect( block_rect.translated(0, top), mCurrentLineTextFormat.background().color() ); painter.end(); break; } top += block_rect.height(); block = block.next(); ++block_num; } } QPlainTextEdit::paintEvent(event); }
void ScriptEditBox::lineNumberAreaPaintEvent(QPaintEvent* event) { QPainter painter(_scriptLineNumberArea); painter.fillRect(event->rect(), Qt::lightGray); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QFont font = painter.font(); font.setBold(this->textCursor().blockNumber() == block.blockNumber()); painter.setFont(font); QString number = QString::number(blockNumber + 1); painter.setPen(Qt::black); painter.drawText(0, top, _scriptLineNumberArea->width(), fontMetrics().height(), Qt::AlignRight, number); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); blockNumber++; } }
//! Activated whenever LineNumberArea Widget paint event is raised. //! Writes the line numbers for the visible blocks. void ModelicaEditor::lineNumberAreaPaintEvent(QPaintEvent *event) { QPainter painter(mpLineNumberArea); painter.fillRect(event->rect(), QColor(240, 240, 240)); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(blockNumber + 1); // make the current highlighted line number darker if (blockNumber == textCursor().blockNumber()) { painter.setPen(QColor(64, 64, 64)); } else { painter.setPen(Qt::gray); } painter.setFont(document()->defaultFont()); QFontMetrics fontMetrics (document()->defaultFont()); painter.drawText(0, top, mpLineNumberArea->width() - 5, fontMetrics.height(), Qt::AlignRight, number); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
void BaseEditor::lineNumberAreaPaintEvent(QPaintEvent *event) { QPainter painter(lineNumberArea); painter.fillRect(event->rect(), QColor::fromRgb(0xEA,0xEA,0xEA)); painter.setFont(document()->defaultFont()); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); int height = QFontMetrics(document()->defaultFont()).height(); while(block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(blockNumber+1); painter.setPen(Qt::black); painter.drawText(0, top, lineNumberArea->width(), height, Qt::AlignRight, number); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
void CodeEditor::lineNumberAreaPaintEvent(QPaintEvent *event) { QPainter painter(lineNumberArea); painter.fillRect(event->rect(), QWidget::palette().color(QWidget::backgroundRole()).darker(50)); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(blockNumber + 1); painter.setPen(QWidget::palette().color(QWidget::foregroundRole()).darker(50)); painter.drawText(0, top, lineNumberArea->width(), fontMetrics().height(), Qt::AlignRight, number); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
void TikzEditor::printWhiteSpaces(QPainter &painter) { const QFontMetrics fontMetrics = QFontMetrics(document()->defaultFont()); for (QTextBlock block = firstVisibleBlock(); block.isValid(); block = block.next()) { if (blockBoundingGeometry(block).top() > viewport()->height()) break; const QString text = block.text(); const int textLength = text.length(); for (int i = 0; i < textLength; ++i) { QTextCursor cursor = textCursor(); cursor.setPosition(block.position() + i, QTextCursor::MoveAnchor); const QRect rect = cursorRect(cursor); // const QFontMetrics fontMetrics = QFontMetrics(cursor.charFormat().font()); if (m_showWhiteSpaces && text.at(i) == ' ') paintSpace(painter, rect.x() + spaceWidth() / 2.0, rect.y() + fontMetrics.height() / 2.0); else if (m_showTabulators && text.at(i) == '\t') paintTabstop(painter, rect.x() + spaceWidth() / 2.0, rect.y() + fontMetrics.height() / 2.0); } } }
void TikzEditor::showMatchingBrackets() { for (QTextBlock block = firstVisibleBlock(); block.isValid(); block = block.next()) { if (blockBoundingGeometry(block).top() > viewport()->height()) break; const QString text = block.text(); const int textLength = text.length(); for (int i = 0; i < textLength; ++i) { if (block.position() + i == m_matchingBegin || block.position() + i == m_matchingEnd) { QList<QTextEdit::ExtraSelection> extraSelectionList = extraSelections(); if (!isReadOnly()) { QTextEdit::ExtraSelection selection; selection.format.setBackground(m_matchingColor); selection.cursor = textCursor(); selection.cursor.setPosition(block.position() + i, QTextCursor::MoveAnchor); selection.cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor); extraSelectionList.append(selection); } setExtraSelections(extraSelectionList); } } } }
/************************************************* // Function: PaintLineNumberArea // Description: 绘制左侧行号区域 // Calls: // Called By: CLineNumberArea::paintEvent // Parameter: QPaintEvent *event // Return: void // Others: 通过CLineNumberArea类的paintEvent函数来调用本函数, 以保证能够实时更新该行数 *************************************************/ void CCodeEditor::PaintLineNumberArea(QPaintEvent *event) { QPainter painter(m_lineNumberArea); painter.fillRect(event->rect(), Qt::lightGray); /*行数背景颜色*/ QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); /*当前行(从0开始)*/ int top = (int)blockBoundingGeometry(block).translated(contentOffset()).top() + fontMetrics().descent();/*绘制区域的顶部*/ int bottom = top + (int)blockBoundingRect(block).height(); /*绘制区域的底部*/ /*绘制可见区域*/ while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(blockNumber + 1); painter.setPen(Qt::black); /*行号颜色*/ painter.drawText(0, top, m_lineNumberArea->width(), fontMetrics().height(), Qt::AlignCenter, number); } block = block.next(); top = bottom; bottom = top + (int)blockBoundingRect(block).height(); ++blockNumber; } }
void CodeEditor::lineNumberAreaPaintEvent(QPaintEvent *event) { QPainter painter(lineNumberArea); painter.fillRect(event->rect(), Qt::lightGray); //![extraAreaPaintEvent_0] //![extraAreaPaintEvent_1] QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); //![extraAreaPaintEvent_1] //![extraAreaPaintEvent_2] while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(blockNumber + 1); painter.setPen(Qt::black); painter.drawText(0, top, lineNumberArea->width(), fontMetrics().height(), Qt::AlignRight, number); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
void CodeEditor::lineNumberAreaPaintEvent(QPaintEvent *event) { QPainter painter( lineNumberArea ) ; painter.fillRect( event->rect(), QColor( Qt::lightGray ).lighter( 120 ) ) ; QTextBlock block = firstVisibleBlock() ; QTextCursor cursor = textCursor() ; int blockNumber = block.blockNumber() ; int top = (int) blockBoundingGeometry( block ).translated( contentOffset() ).top() ; int bottom = top + (int) blockBoundingRect(block).height() ; while ( block.isValid() && top <= event->rect().bottom() ) { if ( block.isVisible() && bottom >= event->rect().top() ) { QString number = QString::number( blockNumber + 1 ) ; if ( block == cursor.block() ) painter.setPen( QColor( Qt::black ) ) ; else painter.setPen( Qt::gray ) ; painter.drawText( 0, top, lineNumberArea->width(), fontMetrics().height(), Qt::AlignHCenter, number ) ; } block = block.next() ; top = bottom ; bottom = top + (int)blockBoundingRect( block ).height() ; blockNumber += 1 ; } }
void SourceWindow::keyPressEvent(QKeyEvent* ev) { int top1 = 0, top2; switch (ev->key()) { case Qt::Key_Plus: actionExpandRow(textCursor().blockNumber()); return; case Qt::Key_Minus: actionCollapseRow(textCursor().blockNumber()); return; case Qt::Key_Up: case Qt::Key_K: moveCursor(QTextCursor::PreviousBlock); return; case Qt::Key_Down: case Qt::Key_J: moveCursor(QTextCursor::NextBlock); return; case Qt::Key_Home: moveCursor(QTextCursor::Start); return; case Qt::Key_End: moveCursor(QTextCursor::End); return; case Qt::Key_PageUp: case Qt::Key_PageDown: top1 = firstVisibleBlock().blockNumber(); } QPlainTextEdit::keyPressEvent(ev); switch (ev->key()) { case Qt::Key_PageUp: case Qt::Key_PageDown: top2 = firstVisibleBlock().blockNumber(); { QTextCursor cursor = textCursor(); if (top1 < top2) cursor.movePosition(QTextCursor::NextBlock, QTextCursor::MoveAnchor, top2-top1); else cursor.movePosition(QTextCursor::PreviousBlock, QTextCursor::MoveAnchor, top1-top2); setTextCursor(cursor); } } }
void GenericCodeEditor::paintLineIndicator( QPaintEvent *e ) { QPalette plt( mLineIndicator->palette() ); QRect r( e->rect() ); QPainter p( mLineIndicator ); p.fillRect( r, plt.color( QPalette::Mid ) ); p.setPen( plt.color(QPalette::Dark) ); p.drawLine( r.topRight(), r.bottomRight() ); p.setPen( plt.color(QPalette::ButtonText) ); QTextDocument *doc = QPlainTextEdit::document(); QTextCursor cursor(textCursor()); int selStartBlock, selEndBlock; if (cursor.hasSelection()) { selStartBlock = doc->findBlock(cursor.selectionStart()).blockNumber(); selEndBlock = doc->findBlock(cursor.selectionEnd()).blockNumber(); } else selStartBlock = selEndBlock = -1; QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); qreal top = blockBoundingGeometry(block).translated(contentOffset()).top(); qreal bottom = top + blockBoundingRect(block).height(); while (block.isValid() && top <= e->rect().bottom()) { if (block.isVisible() && bottom >= e->rect().top()) { p.save(); QRectF numRect( 0, top, mLineIndicator->width() - 1, bottom - top ); int num = blockNumber; if (num >= selStartBlock && num <= selEndBlock) { num -= selStartBlock; p.setPen(Qt::NoPen); p.setBrush(plt.color(QPalette::Highlight)); p.drawRect(numRect); p.setPen(plt.color(QPalette::HighlightedText)); } QString number = QString::number(num + 1); p.drawText(0, top, mLineIndicator->width() - 4, bottom - top, Qt::AlignRight, number); p.restore(); } block = block.next(); top = bottom; bottom = top + blockBoundingRect(block).height(); ++blockNumber; } }
void CSVWorld::ScriptEdit::lineNumberAreaPaintEvent(QPaintEvent *event) { QPainter painter(mLineNumberArea); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); int startBlock = textCursor().blockNumber(); int endBlock = textCursor().blockNumber(); if(textCursor().hasSelection()) { QString str = textCursor().selection().toPlainText(); int selectedLines = str.count("\n")+1; if(textCursor().position() < textCursor().anchor()) endBlock += selectedLines; else startBlock -= selectedLines; } painter.setBackgroundMode(Qt::OpaqueMode); QFont font = painter.font(); QBrush background = painter.background(); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QFont newFont = painter.font(); QString number = QString::number(blockNumber + 1); if(blockNumber >= startBlock && blockNumber <= endBlock) { painter.setBackground(Qt::cyan); painter.setPen(Qt::darkMagenta); newFont.setBold(true); } else { painter.setBackground(background); painter.setPen(Qt::black); } painter.setFont(newFont); painter.drawText(0, top, mLineNumberArea->width(), fontMetrics().height(), Qt::AlignRight, number); painter.setFont(font); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
QPoint Editor::keyPopPoint(QTextCursor cursor) { int ht = fontMetrics().height(); int wd = fontMetrics().width(QLatin1Char('9')); int col = cursor.columnNumber(); int row = cursor.blockNumber()+2; // show just below line QTextBlock block = firstVisibleBlock(); int top = block.firstLineNumber(); QPoint pt = QPoint(lineNumberAreaWidth()+col*wd,(row-top)*ht); return pt; }
void MarkdownEditor::lineNumberAreaPaintEvent(QPaintEvent *event) { QPainter painter(lineNumberArea); int selStart = textCursor().selectionStart(); int selEnd = textCursor().selectionEnd(); QPalette palette = lineNumberArea->palette(); palette.setCurrentColorGroup(QPalette::Active); painter.fillRect(event->rect(), palette.color(QPalette::Background)); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); qreal top = blockBoundingGeometry(block).translated(contentOffset()).top(); qreal bottom = top; while (block.isValid() && top <= event->rect().bottom()) { top = bottom; const qreal height = blockBoundingRect(block).height(); bottom = top + height; if (block.isVisible() && bottom >= event->rect().top()) { painter.setPen(palette.color(QPalette::Dark)); bool selected = ( (selStart < block.position() + block.length() && selEnd > block.position()) || (selStart == selEnd && selStart == block.position()) ); if (selected) { painter.save(); painter.setPen(Qt::black); } const QString number = QString::number(blockNumber + 1); painter.drawText(0, top, lineNumberArea->width() - 4, height, Qt::AlignRight, number); if (selected) painter.restore(); } block = block.next(); ++blockNumber; } }
void SparqlTextEdit::paintLineNumbers(QPaintEvent *e) { QFontMetrics metrics(currentCharFormat().font()); int digits = 0; int blocks = blockCount(); do { blocks /= 10; ++digits; } while (blocks); int maxCharWidth = 0; for (char c = '0'; c <= '9'; c++) { maxCharWidth = qMax(maxCharWidth, metrics.width(c)); } int newLeftMargin = frameWidth() + maxCharWidth * digits; if (leftMargin != newLeftMargin) { leftMargin = newLeftMargin; setViewportMargins(leftMargin, 0, 0, 0); } QPainter painter(this); painter.setClipRect(lineNumbersRect(), Qt::IntersectClip); painter.fillRect(e->rect(), palette().window()); painter.setPen(palette().windowText().color()); painter.setFont(currentCharFormat().font()); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block) .translated(contentOffset()).top() + lineNumbersRect().top(); int bottom = top + (int) blockBoundingRect(block).height(); while (block.isValid() && top <= e->rect().bottom()) { if (block.isVisible() && bottom >= e->rect().top()) { QString number = QString::number(blockNumber + 1); painter.drawText(0, top, leftMargin, metrics.height(), Qt::AlignRight, number); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
void CodeEditor::paintEvent(QPaintEvent* event) { QPlainTextEdit::paintEvent(event); QPainter painter(viewport()); painter.setPen(Qt::darkGray); QTextBlock block = firstVisibleBlock(); QRectF rect; do { if (!block.isVisible()) continue; rect = blockBoundingGeometry(block).translated(contentOffset()); QTextLine line = block.layout()->lineAt(0); if (config->whitespaces) { QString txt = block.text(); for (int i = 0; i < txt.length(); i++) { // rect.x() <- учитывая горизонтальный скролинг QPoint point(rect.x() + line.cursorToX(i), rect.y() + line.ascent()); if (txt[i] == ' ') painter.drawText(point, QChar(0x00b7)); else if (txt[i] == '\t') painter.drawText(point, QChar(0x21b9)); } } int state = block.userState(); if (!(state & Error) && state & Folded) { QRect collapseRect(rect.x() + line.rect().x() + line.naturalTextWidth() + FONTWIDTH * 2, rect.y() + 2, FONTWIDTH * 6, line.height() - 4); painter.drawText(collapseRect, Qt::AlignCenter, state & Comment ? "...;" : "...)"); painter.drawRoundedRect(collapseRect, 4, 6); } } while ((block = block.next()).isValid() && rect.y() < viewport()->height()); }
void CodeEditor::lineNumberAreaPaintEvent(QPaintEvent *event) { QPainter painter( lineNumberArea ); //painter.fillRect(event->rect(), Qt::lightGray); painter.fillRect( event->rect(), lineNumberArea->palette().base() ); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number( blockNumber + 1 ); painter.setPen( lineNumberArea->palette().text().color() ); for( const fugio::SyntaxError &SE : mSyntaxErrors ) { if( SE.mLineStart <= blockNumber + 1 && SE.mLineEnd >= blockNumber + 1 ) { QRectF R( event->rect().left(), top, event->rect().width(), blockBoundingRect( block ).height() ); painter.fillRect( R, Qt::red ); painter.setPen( Qt::white ); break; } } painter.drawText( 0, top, lineNumberArea->width(), fontMetrics().height(), Qt::AlignRight, number ); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
void CodeEdit::lineNumberWidgetPaintEvent(QPaintEvent* event) { // qDebug() << "CodeEdit::lineNumberWidgetPaintEvent()"; QPainter painter(m_lineNumberWidget); painter.setPen(QPen(ApplicationManager::settings()->lineNumberColor())); painter.fillRect(event->rect(), QBrush(ApplicationManager::settings()->lineNumberBackgroundColor())); QTextBlock block = firstVisibleBlock(); int top = (int)blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom; while (block.isValid() && top <= event->rect().bottom()) { bottom = top + (int)blockBoundingRect(block).height(); if (block.isVisible() && bottom >= event->rect().top()) { painter.drawText(0, top, m_lineNumberWidget->width(), fontMetrics().height(),Qt::AlignRight, QString::number(block.blockNumber() + 1)); } block = block.next(); top = bottom; } }
/* Line numbers */ void JBEAM_TextBox::LineNumbersPaintEvent(QPaintEvent *event) { QPainter painter(LineNumbersA); painter.fillRect(event->rect(), Qt::white); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(blockNumber + 1); painter.setPen(Qt::gray); painter.drawText(0, top, LineNumbersA->width(), fontMetrics().height(), Qt::AlignRight, number); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
/** * @brief Draws the line number area. * @param event The paint event to handle. */ void TextEditorWidget::line_number_area_paint_event(QPaintEvent* event) { QPainter painter(line_number_area); QTextBlock block = firstVisibleBlock(); int block_number = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(block_number + 1) + " "; painter.setPen(Qt::black); painter.drawText(0, top, line_number_area->width(), fontMetrics().height(), Qt::AlignRight, number); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++block_number; } }
void PgxEditor::breakpointAreaPaintEvent(QPaintEvent *event) { QPainter painter(breakpointArea); painter.fillRect(event->rect(), QColor(230,230,230,128)); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(blockNumber + 1); painter.setPen(Qt::black); painter.drawText(-1, top+2, breakpointArea->width(), fontMetrics().height(), Qt::AlignRight, ""); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
void ScriptTextEdit::lineNumberAreaPaintEvent(QPaintEvent *event) { int lineAreaWidth = mLineNumberArea->width(); QPainter painter(mLineNumberArea); painter.fillRect(event->rect(), Qt::white); QPen linepen; linepen.setWidth(1); linepen.setColor( Qt::lightGray ); painter.setPen(linepen); painter.drawLine(lineAreaWidth-1,0,lineAreaWidth-1,mLineNumberArea->height()); int currentLine = textCursor().blockNumber(); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); QFont font=painter.font(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(blockNumber + 1); painter.setPen(Qt::darkGray); font.setBold(blockNumber==currentLine); painter.setFont( font ); painter.drawText(-2, top, lineAreaWidth, fontMetrics().height(), Qt::AlignRight | Qt::AlignVCenter, number); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
void MLScriptEditor::lineNumberAreaPaintEvent( QPaintEvent *event,const QColor& col) { QPainter painter(narea); painter.fillRect(event->rect(),col); QTextBlock block = firstVisibleBlock(); int indent = block.blockFormat().indent(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(blockNumber + 1); painter.setPen(Qt::black); painter.drawText(0, top, narea->width(), fontMetrics().height(),Qt::AlignRight, number); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
void CodeEditor::lineNumberAreaPaintEvent(QPaintEvent *event) { //paint on line number area QPainter painter(lineNumberArea); painter.fillRect(event->rect(), settings.value("linenumberpanelcolor", palette().color(QPalette::Window)).value<QColor>()); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(blockNumber + 1); painter.setPen(settings.value("fontcolor", palette().color(QPalette::Text)).value<QColor>()); painter.drawText(0, top, lineNumberArea->width() - debugAreaWidth, fontMetrics().height(), Qt::AlignRight, number); if (blockNumber + 1 == currentDebugLine) //blocks counting starts with 0, line number is equivalent (block number + 1) //if QTextOption::NoWrap is not set, lines count - visible lines, block count - lines divided by '\n' painter.drawPixmap(lineNumberArea->width() - debugAreaWidth + 3, top + fontMetrics().height() / 2 - debugImage.height() / 2, debugImage.width(), debugImage.height(), debugImage); if (breakpoints.contains(blockNumber + 1) && hasBreakpoints) painter.drawPixmap(lineNumberArea->width() - debugAreaWidth + 3, top + fontMetrics().height() / 2 - breakpointImage.height() / 2, breakpointImage.width(), breakpointImage.height(), breakpointImage); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
void PgxConsole::promptPaintEvent(QPaintEvent *event) { QPainter painter(prompt); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString pr = QLatin1String(">"); QString number; if(block.previous().isVisible() && block.previous().isValid()) { number = QString::number(blockNumber + 1); if(block.previous().text().endsWith("\\")) pr = QLatin1String(" "); else pr = QLatin1String(">"); } if(block.text().endsWith("\\")) { if(block.previous().text().endsWith("\\")) pr = QLatin1String(" "); else pr = QLatin1String(">"); } painter.setPen(Qt::lightGray); painter.drawText(0, top, prompt->width(), fontMetrics().height(), Qt::AlignCenter, pr); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } }
void SourceWindow::drawLineInfoArea(QPainter* p, QPaintEvent* event) { QTextBlock block = firstVisibleBlock(); p->setFont(m_lineNoFont); for (; block.isValid(); block = block.next()) { if (!block.isVisible()) continue; QRect r = blockBoundingGeometry(block).translated(contentOffset()).toRect(); if (r.bottom() < event->rect().top()) continue; // skip blocks that are higher than the region being updated else if (r.top() > event->rect().bottom()) break; // all the following blocks are lower then the region being updated int row = block.blockNumber(); uchar item = m_lineItems[row]; int h = r.height(); p->save(); p->translate(0, r.top()); if (item & liBP) { // enabled breakpoint int y = (h - m_brkena.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_brkena); } if (item & liBPdisabled) { // disabled breakpoint int y = (h - m_brkdis.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_brkdis); } if (item & liBPtemporary) { // temporary breakpoint marker int y = (h - m_brktmp.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_brktmp); } if (item & liBPconditional) { // conditional breakpoint marker int y = (h - m_brkcond.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_brkcond); } if (item & liBPorphan) { // orphaned breakpoint marker int y = (h - m_brkcond.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_brkorph); } if (item & liPC) { // program counter in innermost frame int y = (h - m_pcinner.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_pcinner); } if (item & liPCup) { // program counter somewhere up the stack int y = (h - m_pcup.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_pcup); } p->translate(m_widthItems, 0); if (!isRowDisassCode(row) && m_sourceCode[rowToLine(row)].canDisass) { int w = m_widthPlus; int x = w/2; int y = h/2; p->drawLine(x-2, y, x+2, y); if (!isRowExpanded(row)) { p->drawLine(x, y-2, x, y+2); } } p->translate(m_widthPlus, 0); if (!isRowDisassCode(row)) { p->drawText(0, 0, m_widthLineNo, h, Qt::AlignRight|Qt::AlignVCenter, QString().setNum(rowToLine(row)+1)); } p->restore(); } }
void QScriptEdit::extraAreaPaintEvent(QPaintEvent *e) { QRect rect = e->rect(); QPalette pal = palette(); pal.setCurrentColorGroup(QPalette::Active); QPainter painter(m_extraArea); painter.fillRect(rect, Qt::lightGray); const QFontMetrics fm(fontMetrics()); int markWidth = fm.lineSpacing(); int extraAreaWidth = m_extraArea->width(); QLinearGradient gradient(QPointF(extraAreaWidth - 10, 0), QPointF(extraAreaWidth, 0)); gradient.setColorAt(0, pal.color(QPalette::Background)); gradient.setColorAt(1, pal.color(QPalette::Base)); painter.fillRect(rect, gradient); QLinearGradient gradient2(QPointF(0, 0), QPointF(markWidth, 0)); gradient2.setColorAt(0, pal.color(QPalette::Dark)); gradient2.setColorAt(1, pal.color(QPalette::Background)); painter.fillRect(rect.intersected(QRect(rect.x(), rect.y(), markWidth, rect.height())), gradient2); painter.setPen(QPen(pal.color(QPalette::Background), 2)); if (isLeftToRight()) painter.drawLine(rect.x() + extraAreaWidth-1, rect.top(), rect.x() + extraAreaWidth-1, rect.bottom()); else painter.drawLine(rect.x(), rect.top(), rect.x(), rect.bottom()); painter.setRenderHint(QPainter::Antialiasing); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); qreal top = blockBoundingGeometry(block).translated(contentOffset()).top(); qreal bottom = top + blockBoundingRect(block).height(); QString imagesPath = QString::fromLatin1(":/qt/scripttools/debugging/images"); QString imageExt; // SVGs don't work on all platforms, even when QT_NO_SVG is not defined, so disable SVG usage for now. // #ifndef QT_NO_SVG #if 0 imageExt = QString::fromLatin1("svg"); #else imageExt = QString::fromLatin1("png"); #endif while (block.isValid() && top <= rect.bottom()) { if (block.isVisible() && bottom >= rect.top()) { int lineNumber = blockNumber + m_baseLineNumber; if (m_breakpoints.contains(lineNumber)) { int radius = fm.lineSpacing() - 1; QRect r(rect.x(), (int)top, radius, radius); QIcon icon(m_breakpoints[lineNumber].enabled ? QString::fromLatin1("%0/breakpoint.%1").arg(imagesPath).arg(imageExt) : QString::fromLatin1("%0/d_breakpoint.%1").arg(imagesPath).arg(imageExt)); icon.paint(&painter, r, Qt::AlignCenter); } if (m_executionLineNumber == lineNumber) { int radius = fm.lineSpacing() - 1; QRect r(rect.x(), (int)top, radius, radius); QIcon icon(QString::fromLatin1("%0/location.%1").arg(imagesPath).arg(imageExt)); icon.paint(&painter, r, Qt::AlignCenter); } if (!isExecutableLine(lineNumber)) painter.setPen(pal.color(QPalette::Mid)); else painter.setPen(QColor(Qt::darkCyan)); QString number = QString::number(lineNumber); painter.drawText(rect.x() + markWidth, (int)top, rect.x() + extraAreaWidth - markWidth - 4, fm.height(), Qt::AlignRight, number); } block = block.next(); top = bottom; bottom = top + blockBoundingRect(block).height(); ++blockNumber; } }