| 80 | } |
| 81 | |
| 82 | void RegisterView::paintEvent(QPaintEvent* event) |
| 83 | { |
| 84 | QPainter painter(this); |
| 85 | painter.setPen(this->palette().text().color()); |
| 86 | m_renderStart = QPoint(0, ui.registerTabs->pos().y() + ui.registerTabs->size().height()); |
| 87 | const QSize renderSize = QSize(this->size().width(), this->size().height() - ui.registerTabs->size().height()); |
| 88 | |
| 89 | m_rowHeight = painter.fontMetrics().height() + 2; |
| 90 | m_rowEnd = m_rowStart + (renderSize.height() / m_rowHeight) - 1; // Maybe move this to a onsize event |
| 91 | |
| 92 | bool alternate = m_rowStart % 2; |
| 93 | |
| 94 | const int categoryIndex = ui.registerTabs->currentIndex(); |
| 95 | |
| 96 | // Used for 128 bit and VU0f registers |
| 97 | const int titleStartX = m_renderStart.x() + (painter.fontMetrics().averageCharWidth() * 6); |
| 98 | m_fieldWidth = ((renderSize.width() - (painter.fontMetrics().averageCharWidth() * 6)) / 4); |
| 99 | |
| 100 | m_fieldStartX[0] = titleStartX; |
| 101 | m_fieldStartX[1] = titleStartX + m_fieldWidth; |
| 102 | m_fieldStartX[2] = titleStartX + (m_fieldWidth * 2); |
| 103 | m_fieldStartX[3] = titleStartX + (m_fieldWidth * 3); |
| 104 | |
| 105 | if (categoryIndex == EECAT_VU0F) |
| 106 | { |
| 107 | painter.fillRect(m_renderStart.x(), m_renderStart.y(), renderSize.width(), m_rowHeight, this->palette().highlight()); |
| 108 | |
| 109 | painter.drawText(m_fieldStartX[0], m_renderStart.y(), m_fieldWidth, m_rowHeight, Qt::AlignLeft, "W"); |
| 110 | painter.drawText(m_fieldStartX[1], m_renderStart.y(), m_fieldWidth, m_rowHeight, Qt::AlignLeft, "Z"); |
| 111 | painter.drawText(m_fieldStartX[2], m_renderStart.y(), m_fieldWidth, m_rowHeight, Qt::AlignLeft, "Y"); |
| 112 | painter.drawText(m_fieldStartX[3], m_renderStart.y(), m_fieldWidth, m_rowHeight, Qt::AlignLeft, "X"); |
| 113 | |
| 114 | m_renderStart += QPoint(0, m_rowHeight); // Make room for VU0f titles |
| 115 | } |
| 116 | |
| 117 | // Find the longest register name and calculate where to place our values |
| 118 | // off of that. |
| 119 | // Can probably constexpr the loop out as register names are known during runtime |
| 120 | int safeValueStartX = 0; |
| 121 | for (int i = 0; i < cpu().getRegisterCount(categoryIndex); i++) |
| 122 | { |
| 123 | const int registerNameWidth = strlen(cpu().getRegisterName(categoryIndex, i)); |
| 124 | if (safeValueStartX < registerNameWidth) |
| 125 | { |
| 126 | safeValueStartX = registerNameWidth; |
| 127 | } |
| 128 | } |
| 129 | |
| 130 | // Add a space between the value and name |
| 131 | safeValueStartX += 2; |
| 132 | // Convert to width in pixels |
| 133 | safeValueStartX *= painter.fontMetrics().averageCharWidth(); |
| 134 | // Make it relative to where we start rendering |
| 135 | safeValueStartX += m_renderStart.x(); |
| 136 | |
| 137 | for (s32 i = 0; i < cpu().getRegisterCount(categoryIndex) - m_rowStart; i++) |
| 138 | { |
| 139 | const s32 registerIndex = i + m_rowStart; |
nothing calls this directly
no test coverage detected