Enabled QGraphicsItem caching for faster rendering of byte items and byte addresses, in the hex viewer widget

This commit is contained in:
Nav
2021-12-17 01:10:44 +00:00
parent bc7f7dae56
commit 47ff13c1a6
2 changed files with 15 additions and 6 deletions

View File

@@ -6,6 +6,10 @@
using namespace Bloom::Widgets; using namespace Bloom::Widgets;
void ByteAddressItem::setAddressHex(const QString& addressHex) { void ByteAddressItem::setAddressHex(const QString& addressHex) {
this->setCacheMode(
QGraphicsItem::CacheMode::ItemCoordinateCache,
QSize(ByteAddressItem::WIDTH, ByteAddressItem::HEIGHT)
);
this->addressHex = addressHex; this->addressHex = addressHex;
} }
@@ -13,13 +17,10 @@ void ByteAddressItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* o
painter->setRenderHints(QPainter::RenderHint::Antialiasing | QPainter::RenderHint::SmoothPixmapTransform, true); painter->setRenderHints(QPainter::RenderHint::Antialiasing | QPainter::RenderHint::SmoothPixmapTransform, true);
static const auto widgetRect = this->boundingRect(); static const auto widgetRect = this->boundingRect();
auto fontColor = QColor(0x8F, 0x91, 0x92); static auto fontColor = QColor(0x8F, 0x91, 0x92);
static auto font = painter->font(); static auto font = QFont("'Ubuntu', sans-serif");
font.setPixelSize(12); font.setPixelSize(12);
fontColor.setAlpha(!this->isEnabled() ? 100 : 255);
if (!this->isEnabled()) {
fontColor.setAlpha(100);
}
painter->setFont(font); painter->setFont(font);
painter->setPen(fontColor); painter->setPen(fontColor);

View File

@@ -19,6 +19,10 @@ address(address),
hoveredByteItem(hoveredByteItem), hoveredByteItem(hoveredByteItem),
settings(settings) settings(settings)
{ {
this->setCacheMode(
QGraphicsItem::CacheMode::ItemCoordinateCache,
QSize(ByteItem::WIDTH, ByteItem::HEIGHT)
);
this->setAcceptHoverEvents(true); this->setAcceptHoverEvents(true);
this->addressHex = "0x" + QString::number(this->address, 16).rightJustified(8, '0').toUpper(); this->addressHex = "0x" + QString::number(this->address, 16).rightJustified(8, '0').toUpper();
@@ -45,11 +49,15 @@ void ByteItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option,
static const auto widgetRect = this->boundingRect(); static const auto widgetRect = this->boundingRect();
static const auto standardTextColor = QColor(0xAF, 0xB1, 0xB3); static const auto standardTextColor = QColor(0xAF, 0xB1, 0xB3);
static const auto valueChangedTextColor = QColor(0x54, 0x7F, 0xBA); static const auto valueChangedTextColor = QColor(0x54, 0x7F, 0xBA);
static auto font = QFont("'Ubuntu', sans-serif");
static const auto stackMemoryBackgroundColor = QColor(0x5E, 0x50, 0x27, 255); static const auto stackMemoryBackgroundColor = QColor(0x5E, 0x50, 0x27, 255);
static const auto hoveredBackgroundColor = QColor(0x8E, 0x8B, 0x83, 70); static const auto hoveredBackgroundColor = QColor(0x8E, 0x8B, 0x83, 70);
static const auto hoveredNeighbourBackgroundColor = QColor(0x8E, 0x8B, 0x83, 30); static const auto hoveredNeighbourBackgroundColor = QColor(0x8E, 0x8B, 0x83, 30);
font.setPixelSize(11);
painter->setFont(font);
if (this->settings.highlightStackMemory && this->settings.stackPointerAddress.has_value() if (this->settings.highlightStackMemory && this->settings.stackPointerAddress.has_value()
&& this->address > this->settings.stackPointerAddress && this->address > this->settings.stackPointerAddress
) { ) {