forked from qt-creator/qt-creator
TextEditor: Draw background first.
Task-number: QTCREATORBUG-13028 Change-Id: I14ae1794c920b3877f9eca468e1180042b51fb3f Reviewed-by: Jarek Kobus <jaroslaw.kobus@digia.com> Reviewed-by: David Schulz <david.schulz@digia.com>
This commit is contained in:
@@ -46,13 +46,7 @@ SelectableTextEditorWidget::~SelectableTextEditorWidget()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectableTextEditorWidget::paintEvent(QPaintEvent *e)
|
void SelectableTextEditorWidget::innerPaintEvent(QPaintEvent *e)
|
||||||
{
|
|
||||||
paintSelections(e);
|
|
||||||
BaseTextEditorWidget::paintEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SelectableTextEditorWidget::paintSelections(QPaintEvent *e)
|
|
||||||
{
|
{
|
||||||
QPainter painter(viewport());
|
QPainter painter(viewport());
|
||||||
|
|
||||||
|
@@ -58,11 +58,8 @@ public:
|
|||||||
m_selections = selections;
|
m_selections = selections;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual void paintEvent(QPaintEvent *e);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void paintSelections(QPaintEvent *e);
|
void innerPaintEvent(QPaintEvent *e);
|
||||||
void paintSelections(QPainter &painter,
|
void paintSelections(QPainter &painter,
|
||||||
const QList<DiffSelection> &selections,
|
const QList<DiffSelection> &selections,
|
||||||
const QTextBlock &block,
|
const QTextBlock &block,
|
||||||
|
@@ -3435,6 +3435,27 @@ static QTextLayout::FormatRange createBlockCursorCharFormatRange(int pos, const
|
|||||||
|
|
||||||
void BaseTextEditorWidget::paintEvent(QPaintEvent *e)
|
void BaseTextEditorWidget::paintEvent(QPaintEvent *e)
|
||||||
{
|
{
|
||||||
|
// draw backgrond to the right of the wrap column before everything else
|
||||||
|
qreal lineX = 0;
|
||||||
|
QPointF offset(contentOffset());
|
||||||
|
QRect viewportRect = viewport()->rect();
|
||||||
|
QRect er = e->rect();
|
||||||
|
|
||||||
|
const FontSettings &fs = textDocument()->fontSettings();
|
||||||
|
const QTextCharFormat &searchScopeFormat = fs.toTextCharFormat(C_SEARCH_SCOPE);
|
||||||
|
const QTextCharFormat &ifdefedOutFormat = fs.toTextCharFormat(C_DISABLED_CODE);
|
||||||
|
|
||||||
|
if (d->m_visibleWrapColumn > 0) {
|
||||||
|
QPainter painter(viewport());
|
||||||
|
// Don't use QFontMetricsF::averageCharWidth here, due to it returning
|
||||||
|
// a fractional size even when this is not supported by the platform.
|
||||||
|
lineX = QFontMetricsF(font()).width(QLatin1Char('x')) * d->m_visibleWrapColumn + offset.x() + 4;
|
||||||
|
if (lineX < viewportRect.width())
|
||||||
|
painter.fillRect(QRectF(lineX, er.top(), viewportRect.width() - lineX, er.height()),
|
||||||
|
ifdefedOutFormat.background());
|
||||||
|
}
|
||||||
|
|
||||||
|
innerPaintEvent(e);
|
||||||
/*
|
/*
|
||||||
Here comes an almost verbatim copy of
|
Here comes an almost verbatim copy of
|
||||||
QPlainTextEdit::paintEvent() so we can adjust the extra
|
QPlainTextEdit::paintEvent() so we can adjust the extra
|
||||||
@@ -3446,22 +3467,13 @@ void BaseTextEditorWidget::paintEvent(QPaintEvent *e)
|
|||||||
QTextDocument *doc = document();
|
QTextDocument *doc = document();
|
||||||
BaseTextDocumentLayout *documentLayout = qobject_cast<BaseTextDocumentLayout*>(doc->documentLayout());
|
BaseTextDocumentLayout *documentLayout = qobject_cast<BaseTextDocumentLayout*>(doc->documentLayout());
|
||||||
QTC_ASSERT(documentLayout, return);
|
QTC_ASSERT(documentLayout, return);
|
||||||
const FontSettings &fs = textDocument()->fontSettings();
|
|
||||||
const QTextCharFormat &searchScopeFormat = fs.toTextCharFormat(C_SEARCH_SCOPE);
|
|
||||||
const QTextCharFormat &ifdefedOutFormat = fs.toTextCharFormat(C_DISABLED_CODE);
|
|
||||||
|
|
||||||
QPointF offset(contentOffset());
|
|
||||||
QTextBlock textCursorBlock = textCursor().block();
|
QTextBlock textCursorBlock = textCursor().block();
|
||||||
|
|
||||||
bool hasMainSelection = textCursor().hasSelection();
|
bool hasMainSelection = textCursor().hasSelection();
|
||||||
bool suppressSyntaxInIfdefedOutBlock = (ifdefedOutFormat.foreground()
|
bool suppressSyntaxInIfdefedOutBlock = (ifdefedOutFormat.foreground()
|
||||||
!= palette().foreground());
|
!= palette().foreground());
|
||||||
|
|
||||||
QRect er = e->rect();
|
|
||||||
QRect viewportRect = viewport()->rect();
|
|
||||||
|
|
||||||
qreal lineX = 0;
|
|
||||||
|
|
||||||
// Set a brush origin so that the WaveUnderline knows where the wave started
|
// Set a brush origin so that the WaveUnderline knows where the wave started
|
||||||
painter.setBrushOrigin(offset);
|
painter.setBrushOrigin(offset);
|
||||||
|
|
||||||
@@ -3607,15 +3619,8 @@ void BaseTextEditorWidget::paintEvent(QPaintEvent *e)
|
|||||||
|
|
||||||
// draw wrap column after ifdefed out blocks
|
// draw wrap column after ifdefed out blocks
|
||||||
if (d->m_visibleWrapColumn > 0) {
|
if (d->m_visibleWrapColumn > 0) {
|
||||||
// Don't use QFontMetricsF::averageCharWidth here, due to it returning
|
|
||||||
// a fractional size even when this is not supported by the platform.
|
|
||||||
lineX = QFontMetricsF(font()).width(QLatin1Char('x')) * d->m_visibleWrapColumn + offset.x() + 4;
|
|
||||||
|
|
||||||
if (lineX < viewportRect.width()) {
|
if (lineX < viewportRect.width()) {
|
||||||
const QBrush background = ifdefedOutFormat.background();
|
const QBrush background = ifdefedOutFormat.background();
|
||||||
painter.fillRect(QRectF(lineX, er.top(), viewportRect.width() - lineX, er.height()),
|
|
||||||
background);
|
|
||||||
|
|
||||||
const QColor col = (palette().base().color().value() > 128) ? Qt::black : Qt::white;
|
const QColor col = (palette().base().color().value() > 128) ? Qt::black : Qt::white;
|
||||||
const QPen pen = painter.pen();
|
const QPen pen = painter.pen();
|
||||||
painter.setPen(blendColors(background.isOpaque() ? background.color() : palette().base().color(),
|
painter.setPen(blendColors(background.isOpaque() ? background.color() : palette().base().color(),
|
||||||
|
@@ -495,6 +495,7 @@ protected:
|
|||||||
bool viewportEvent(QEvent *event);
|
bool viewportEvent(QEvent *event);
|
||||||
void resizeEvent(QResizeEvent *);
|
void resizeEvent(QResizeEvent *);
|
||||||
void paintEvent(QPaintEvent *);
|
void paintEvent(QPaintEvent *);
|
||||||
|
virtual void innerPaintEvent(QPaintEvent *) {}
|
||||||
void timerEvent(QTimerEvent *);
|
void timerEvent(QTimerEvent *);
|
||||||
void mouseMoveEvent(QMouseEvent *);
|
void mouseMoveEvent(QMouseEvent *);
|
||||||
void mousePressEvent(QMouseEvent *);
|
void mousePressEvent(QMouseEvent *);
|
||||||
|
Reference in New Issue
Block a user