|
10 | 10 |
|
11 | 11 | #include "edbee/models/textdocument.h" |
12 | 12 | #include "edbee/models/texteditorconfig.h" |
| 13 | +#include "edbee/texteditorcontroller.h" |
13 | 14 | #include "edbee/views/texttheme.h" |
14 | 15 | #include "edbee/views/textselection.h" |
15 | 16 | #include "edbee/views/textrenderer.h" |
@@ -60,6 +61,7 @@ void TextEditorRenderer::render(QPainter *painter) |
60 | 61 | renderLineSelection( painter, line ); |
61 | 62 | renderLineSeparator( painter, line ); |
62 | 63 | renderLineText( painter, line ); |
| 64 | + renderLineBorderedRanges( painter, line ); |
63 | 65 | } |
64 | 66 |
|
65 | 67 | renderCarets(painter); |
@@ -112,6 +114,48 @@ void TextEditorRenderer::renderLineSelection(QPainter *painter,int line) |
112 | 114 | } |
113 | 115 |
|
114 | 116 |
|
| 117 | +void TextEditorRenderer::renderLineBorderedRanges(QPainter *painter,int line) |
| 118 | +{ |
| 119 | +//PROF_BEGIN_NAMED("render-selection") |
| 120 | + TextDocument* doc = renderer()->textDocument(); |
| 121 | + TextRangeSet* sel = renderer()->controller()->borderedTextRanges(); |
| 122 | + int lineHeight = renderer()->lineHeight(); |
| 123 | + |
| 124 | + QPen pen(themeRef_->foregroundColor(), 0.5); |
| 125 | + |
| 126 | + |
| 127 | + int firstRangeIdx=0; |
| 128 | + int lastRangeIdx=0; |
| 129 | +/// TODO: iprove ranges at line by calling rangesForOffsets first for only the visible offsets! |
| 130 | + if( sel->rangesAtLine( line, firstRangeIdx, lastRangeIdx ) ) { |
| 131 | + |
| 132 | + QTextLayout* textLayout = renderer()->textLayoutForLine(line); |
| 133 | + QRectF rect = textLayout->boundingRect(); |
| 134 | + QTextLine textLine = textLayout->lineAt(0); |
| 135 | + |
| 136 | + int lastLineColumn = doc->lineLength(line); |
| 137 | + |
| 138 | + // draw all 'ranges' on this line |
| 139 | + for( int rangeIdx = firstRangeIdx; rangeIdx <= lastRangeIdx; ++rangeIdx ) { |
| 140 | + TextRange& range = sel->range(rangeIdx); |
| 141 | + int startColumn = doc->columnFromOffsetAndLine( range.min(), line ); |
| 142 | + int endColumn = doc->columnFromOffsetAndLine( range.max(), line ); |
| 143 | + |
| 144 | + int startX = textLine.cursorToX( startColumn ); |
| 145 | + int endX = textLine.cursorToX( endColumn ); |
| 146 | + |
| 147 | + if( range.length() > 0 && endColumn+1 >= lastLineColumn) endX += 3; |
| 148 | + |
| 149 | + QPainterPath path; |
| 150 | + path.addRoundedRect(startX, line*lineHeight + rect.top(), endX - startX, rect.height(),5,5); |
| 151 | + painter->strokePath(path, pen); |
| 152 | +// painter->strok(startX, line*lineHeight + rect.top(), endX - startX, rect.height(), themeRef_->selectionColor() ); //QColor::fromRgb(0xDD, 0x88, 0xEE) ); |
| 153 | + } |
| 154 | + } |
| 155 | +//PROF_END |
| 156 | +} |
| 157 | + |
| 158 | + |
115 | 159 |
|
116 | 160 | void TextEditorRenderer::renderLineSeparator(QPainter *painter,int line) |
117 | 161 | { |
|
0 commit comments