From 5fb0527acf2cc8e6f00a822a2a3fe9201596fa85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Sat, 2 Dec 2017 16:03:55 +0100 Subject: [PATCH] Enhance DisassemblyWidget highlighting --- src/utils/Configuration.cpp | 8 +++-- src/widgets/DisassemblyWidget.cpp | 59 +++++++++++++++---------------- 2 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/utils/Configuration.cpp b/src/utils/Configuration.cpp index 94b08e57..76e28d46 100644 --- a/src/utils/Configuration.cpp +++ b/src/utils/Configuration.cpp @@ -29,6 +29,8 @@ void Configuration::loadDefaultTheme() QColor color8 = QColor(108, 108, 108); QColor color9 = QColor(128, 64, 0); + QColor highlightColor = QColor(210, 210, 255); + // Instructions setColor("comment", color4); setColor("usrcmt", color2); @@ -90,7 +92,7 @@ void Configuration::loadDefaultTheme() setColor("gui.cflow", color0); setColor("gui.dataoffset", color0); setColor("gui.border", color0); - setColor("highlight", color0); + setColor("highlight", highlightColor); // Windows background setColor("gui.background", QColor(255, 255, 255)); // Disassembly nodes background @@ -111,6 +113,8 @@ void Configuration::loadDarkTheme() QColor color8 = QColor(108, 108, 108); QColor color9 = QColor(255, 128, 0); + QColor highlightColor = QColor(64, 115, 115); + // Instructions setColor("comment", color4); setColor("usrcmt", color2); @@ -172,7 +176,7 @@ void Configuration::loadDarkTheme() setColor("gui.cflow", color0); setColor("gui.dataoffset", color0); setColor("gui.border", color0); - setColor("highlight", color0); + setColor("highlight", highlightColor); // Windows background setColor("gui.background", QColor(36, 66, 79)); // Disassembly nodes background diff --git a/src/widgets/DisassemblyWidget.cpp b/src/widgets/DisassemblyWidget.cpp index a9b39f7e..43c2fd77 100644 --- a/src/widgets/DisassemblyWidget.cpp +++ b/src/widgets/DisassemblyWidget.cpp @@ -229,57 +229,56 @@ void DisassemblyWidget::highlightCurrentLine() { QList extraSelections; + QColor highlightColor = ConfigColor("highlight"); + QColor highlightWordColor = ConfigColor("highlight"); + highlightWordColor.setAlpha(128); + QColor highlightWordCurrentLineColor = ConfigColor("gui.background"); + highlightWordCurrentLineColor.setAlpha(128); + // Highlight the current line - if (mDisasTextEdit->isReadOnly()) - { - QTextEdit::ExtraSelection selection; - QColor lineColor = ConfigColor("gui.highlight"); - lineColor.setAlpha(128); - selection.format.setBackground(lineColor); - selection.format.setProperty(QTextFormat::FullWidthSelection, true); - selection.cursor = mDisasTextEdit->textCursor(); - selection.cursor.clearSelection(); - extraSelections.append(selection); - } + QTextEdit::ExtraSelection selection; + selection.format.setBackground(highlightColor); + selection.format.setProperty(QTextFormat::FullWidthSelection, true); + selection.cursor = mDisasTextEdit->textCursor(); + selection.cursor.clearSelection(); + extraSelections.append(selection); // Highlight the current word QTextCursor cursor = mDisasTextEdit->textCursor(); cursor.select(QTextCursor::WordUnderCursor); - - QTextEdit::ExtraSelection currentWord; - - QColor highlightColor = ConfigColor("comment"); - highlightColor.setAlpha(128); - currentWord.format.setBackground(highlightColor); - - currentWord.cursor = cursor; - extraSelections.append(currentWord); - currentWord.cursor.clearSelection(); - - // Highlight all the words in the document same as the actual one QString searchString = cursor.selectedText(); + + cursor.movePosition(QTextCursor::StartOfLine); + int listStartPos = cursor.position(); + cursor.movePosition(QTextCursor::EndOfLine); + int lineEndPos = cursor.position(); + + // Highlight all the words in the document same as the current one QTextDocument *document = mDisasTextEdit->document(); - //QTextCursor highlightCursor(document); QTextEdit::ExtraSelection highlightSelection; highlightSelection.cursor = cursor; - highlightSelection.format.setBackground(highlightColor); - QTextCursor cursor2(document); - - cursor2.beginEditBlock(); - highlightSelection.cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor); + while (!highlightSelection.cursor.isNull() && !highlightSelection.cursor.atEnd()) { highlightSelection.cursor = document->find(searchString, highlightSelection.cursor, QTextDocument::FindWholeWords); if (!highlightSelection.cursor.isNull()) { + if (highlightSelection.cursor.position() >= listStartPos && highlightSelection.cursor.position() <= lineEndPos) + { + highlightSelection.format.setBackground(highlightWordCurrentLineColor); + } + else + { + highlightSelection.format.setBackground(highlightWordColor); + } + highlightSelection.cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor); extraSelections.append(highlightSelection); } } - cursor2.endEditBlock(); mDisasTextEdit->setExtraSelections(extraSelections); }