void tst_QFontMetrics::metrics() { QFont font; QFontDatabase fdb; // Query the QFontDatabase for a specific font, store the // result in family, style and size. QStringList families = fdb.families(); if (families.isEmpty()) return; QStringList::ConstIterator f_it, f_end = families.end(); for (f_it = families.begin(); f_it != f_end; ++f_it) { const QString &family = *f_it; QStringList styles = fdb.styles(family); QStringList::ConstIterator s_it, s_end = styles.end(); for (s_it = styles.begin(); s_it != s_end; ++s_it) { const QString &style = *s_it; if (fdb.isSmoothlyScalable(family, style)) { // smoothly scalable font... don't need to load every pointsize font = fdb.font(family, style, 12); QFontMetrics fontmetrics(font); QCOMPARE(fontmetrics.ascent() + fontmetrics.descent(), fontmetrics.height()); QCOMPARE(fontmetrics.height() + fontmetrics.leading(), fontmetrics.lineSpacing()); } else { QList<int> sizes = fdb.pointSizes(family, style); QVERIFY(!sizes.isEmpty()); QList<int>::ConstIterator z_it, z_end = sizes.end(); for (z_it = sizes.begin(); z_it != z_end; ++z_it) { const int size = *z_it; // Initialize the font, and check if it is an exact match font = fdb.font(family, style, size); QFontMetrics fontmetrics(font); QCOMPARE(fontmetrics.ascent() + fontmetrics.descent(), fontmetrics.height()); QCOMPARE(fontmetrics.height() + fontmetrics.leading(), fontmetrics.lineSpacing()); } } } } }
void ScintillaEditor::onTextChanged() { auto s = Settings::Settings::inst(); QFontMetrics fontmetrics(this->currentFont); auto enableLineNumbers = s->get(Settings::Settings::enableLineNumbers).toBool(); if (!enableLineNumbers) qsci->setMarginWidth(1, 20); else qsci->setMarginWidth(1, QString(trunc(log10(qsci->lines()) + 4), '0')); }
void GLC_RepFlyMover::glDraw() { Q_ASSERT(NULL != m_pRepMoverInfo); Q_ASSERT(!m_pRepMoverInfo->m_DoubleInfo.isEmpty()); // Get viewport informations const double calibre= 800.0; const double hRatio= static_cast<double>(m_pViewport->viewHSize()) / calibre; const double vRatio= static_cast<double>(m_pViewport->viewVSize()) / calibre; glDisable(GL_TEXTURE_2D); glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(hRatio * -1.0 ,hRatio * 1.0 ,vRatio * -1.0 ,vRatio * 1.0 ,-1.0 ,1.0); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); m_CenterCircle.render(glc::WireRenderFlag); m_Hud.render(glc::WireRenderFlag); m_Plane.render(glc::WireRenderFlag); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); m_CenterCircle.render(glc::TransparentRenderFlag); m_Hud.render(glc::TransparentRenderFlag); m_Plane.render(glc::TransparentRenderFlag); // Render velocity value + text QString velocity(QChar(' ') + QString::number(static_cast<int>(100.0 * m_pRepMoverInfo->m_DoubleInfo.first()))); QFont myFont; myFont.setBold(true); QFontMetrics fontmetrics(myFont); int txtHeight= fontmetrics.boundingRect(velocity).height(); double posy= 2.0 * static_cast<double>(txtHeight) / calibre; m_pViewport->qGLWidgetHandle()->renderText(- m_HudOffset.getX(), m_HudOffset.getY() - posy, 0.0, velocity, myFont); glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glEnable(GL_DEPTH_TEST); }
QDebugView::QDebugView(QWidget *parent) : QWidget(parent) { QFont font = Common_GetMonospacedFont(); QFontMetrics fontmetrics(font); int cxChar = fontmetrics.averageCharWidth(); int cyLine = fontmetrics.height(); this->setMinimumSize(cxChar * 55, cyLine * 14 + cyLine / 2); this->setMaximumHeight(cyLine * 14 + cyLine / 2); setFocusPolicy(Qt::ClickFocus); memset(m_wDebugCpuR, 255, sizeof(m_wDebugCpuR)); memset(m_okDebugCpuRChanged, 1, sizeof(m_okDebugCpuRChanged)); }
void QDebugView::drawProcessor(QPainter &painter, const CProcessor *pProc, int x, int y, WORD *arrR, BOOL *arrRChanged) { QFontMetrics fontmetrics(painter.font()); int cxChar = fontmetrics.averageCharWidth(); int cyLine = fontmetrics.height(); QColor colorText = painter.pen().color(); painter.setPen(QColor(Qt::gray)); painter.drawRect(x - cxChar, y - cyLine/2, 33 * cxChar, cyLine * 13 + cyLine/2); // Registers for (int r = 0; r < 8; r++) { painter.setPen(QColor(arrRChanged[r] ? Qt::red : colorText)); LPCTSTR strRegName = REGISTER_NAME[r]; painter.drawText(x, y + (1 + r) * cyLine, strRegName); WORD value = arrR[r]; //pProc->GetReg(r); DrawOctalValue(painter, x + cxChar * 3, y + (1 + r) * cyLine, value); DrawHexValue(painter, x + cxChar * 10, y + (1 + r) * cyLine, value); DrawBinaryValue(painter, x + cxChar * 15, y + (1 + r) * cyLine, value); } painter.setPen(colorText); // PSW value painter.setPen(QColor(arrRChanged[8] ? Qt::red : colorText)); painter.drawText(x, y + 10 * cyLine, _T("PS")); WORD psw = arrR[8]; // pProc->GetPSW(); DrawOctalValue(painter, x + cxChar * 3, y + 10 * cyLine, psw); DrawHexValue(painter, x + cxChar * 10, y + 10 * cyLine, psw); painter.drawText(x + cxChar * 15, y + 9 * cyLine, _T(" HP TNZVC")); DrawBinaryValue(painter, x + cxChar * 15, y + 10 * cyLine, psw); painter.setPen(colorText); // Processor mode - HALT or USER BOOL okHaltMode = pProc->IsHaltMode(); painter.drawText(x, y + 12 * cyLine, okHaltMode ? _T("HALT") : _T("USER")); // "Stopped" flag BOOL okStopped = pProc->IsStopped(); if (okStopped) painter.drawText(x + 6 * cxChar, y + 12 * cyLine, _T("STOP")); }
// ctors and dtor DHMWindow::DHMWindow(): mainboxlayout_(NULL), daslistlabel_(NULL), daslist_(NULL), dasset_(), dasfnset_() { // set basic attributes setAttribute(Qt::WA_DeleteOnClose); // layouts mainboxlayout_ = new QVBoxLayout; // das list daslistlabel_ = new QLabel("DAS List", this); QFontMetrics fontmetrics(daslistlabel_->font()); mainboxlayout_->addWidget(daslistlabel_); daslist_ = new QListWidget; daslist_->setMinimumSize( 40*fontmetrics.width("M"), 5*fontmetrics.height()); mainboxlayout_->addWidget(daslist_); // das file node list dasfnlistlabel_ = new QLabel("DAS File Node List", this); mainboxlayout_->addWidget(dasfnlistlabel_); dasfnlist_ = new QListWidget; dasfnlist_->setMinimumSize( 40*fontmetrics.width("M"), 5*fontmetrics.height()); mainboxlayout_->addWidget(dasfnlist_); // status messages messages_ = new QTextEdit; messages_->setReadOnly(true); messages_->setMinimumSize( 40*fontmetrics.width("M"), 5*fontmetrics.height()); mainboxlayout_->addWidget(messages_); // display on sub window delete layout(); setLayout(mainboxlayout_); // label window setWindowTitle(QString("DHM Viewer")); }
void QDebugView::drawMemoryForRegister(QPainter &painter, int reg, CProcessor *pProc, int x, int y) { QFontMetrics fontmetrics(painter.font()); int cxChar = fontmetrics.averageCharWidth(); int cyLine = fontmetrics.height(); QColor colorText = painter.pen().color(); WORD current = pProc->GetReg(reg); BOOL okExec = (reg == 7); // Читаем из памяти процессора в буфер WORD memory[16]; for (int idx = 0; idx < 16; idx++) { int addrtype; memory[idx] = g_pBoard->GetWordView( current + idx * 2 - 14, pProc->IsHaltMode(), okExec, &addrtype); } WORD address = current - 14; for (int index = 0; index < 14; index++) { // Рисуем строки // Адрес DrawOctalValue(painter, x + 4 * cxChar, y, address); // Значение по адресу WORD value = memory[index]; WORD wChanged = Emulator_GetChangeRamStatus(address); painter.setPen(wChanged != 0 ? Qt::red : colorText); DrawOctalValue(painter, x + 12 * cxChar, y, value); painter.setPen(colorText); // Текущая позиция if (address == current) { painter.drawText(x + 2 * cxChar, y, _T(">>")); painter.setPen(m_okDebugCpuRChanged[reg] != 0 ? Qt::red : colorText); painter.drawText(x, y, REGISTER_NAME[reg]); painter.setPen(colorText); } address += 2; y += cyLine; } }
void QDebugView::paintEvent(QPaintEvent * /*event*/) { if (g_pBoard == NULL) return; QPainter painter(this); painter.fillRect(0,0, this->width(), this->height(), Qt::white); QFont font = Common_GetMonospacedFont(); painter.setFont(font); QFontMetrics fontmetrics(font); int cxChar = fontmetrics.averageCharWidth(); int cyLine = fontmetrics.height(); CProcessor* pDebugPU = g_pBoard->GetCPU(); ASSERT(pDebugPU != NULL); WORD* arrR = m_wDebugCpuR; BOOL* arrRChanged = m_okDebugCpuRChanged; drawProcessor(painter, pDebugPU, cxChar * 2, 1 * cyLine, arrR, arrRChanged); // Draw stack drawMemoryForRegister(painter, 6, pDebugPU, 35 * cxChar, 1 * cyLine); drawPorts(painter, 57 * cxChar, 1 * cyLine); // Draw focus rect if (hasFocus()) { QStyleOptionFocusRect option; option.initFrom(this); option.state |= QStyle::State_KeyboardFocusChange; option.backgroundColor = QColor(Qt::gray); option.rect = this->rect(); style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this); } }
QMemoryView::QMemoryView() { m_ByteMode = false; m_wBaseAddress = 0; m_cyLineMemory = 0; m_nPageSize = 0; QFont font = Common_GetMonospacedFont(); QFontMetrics fontmetrics(font); int cxChar = fontmetrics.averageCharWidth(); int cyLine = fontmetrics.height(); m_cyLine = cyLine; this->setFont(font); this->setMinimumSize(cxChar * 68, cyLine * 9 + cyLine / 2); m_scrollbar = new QScrollBar(Qt::Vertical, this); m_scrollbar->setRange(0, 65536 - 16); m_scrollbar->setSingleStep(16); QObject::connect(m_scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollValueChanged())); setFocusPolicy(Qt::ClickFocus); }
void QDebugView::drawPorts(QPainter &painter, int x, int y) { QFontMetrics fontmetrics(painter.font()); int cxChar = fontmetrics.averageCharWidth(); int cyLine = fontmetrics.height(); painter.drawText(x, y, _T("Port")); WORD value; y += cyLine; value = g_pBoard->GetPortView(0177660); DrawOctalValue(painter, x + 0 * cxChar, y, 0177660); DrawOctalValue(painter, x + 8 * cxChar, y, value); //DrawBinaryValue(painter, x + 15 * cxChar, y, value); painter.drawText(x + 16 * cxChar, y, _T("keyb state")); y += cyLine; value = g_pBoard->GetPortView(0177662); DrawOctalValue(painter, x + 0 * cxChar, y, 0177662); DrawOctalValue(painter, x + 8 * cxChar, y, value); //DrawBinaryValue(painter, x + 15 * cxChar, y, value); painter.drawText(x + 16 * cxChar, y, _T("keyb data")); y += cyLine; value = g_pBoard->GetPortView(0177664); DrawOctalValue(painter, x + 0 * cxChar, y, 0177664); DrawOctalValue(painter, x + 8 * cxChar, y, value); //DrawBinaryValue(painter, x + 15 * cxChar, y, value); painter.drawText(x + 16 * cxChar, y, _T("scroll")); y += cyLine; value = g_pBoard->GetPortView(0177706); DrawOctalValue(painter, x + 0 * cxChar, y, 0177706); DrawOctalValue(painter, x + 8 * cxChar, y, value); //DrawBinaryValue(painter, x + 15 * cxChar, y, value); painter.drawText(x + 16 * cxChar, y, _T("timer reload")); y += cyLine; value = g_pBoard->GetPortView(0177710); DrawOctalValue(painter, x + 0 * cxChar, y, 0177710); DrawOctalValue(painter, x + 8 * cxChar, y, value); //DrawBinaryValue(painter, x + 15 * cxChar, y, value); painter.drawText(x + 16 * cxChar, y, _T("timer value")); y += cyLine; value = g_pBoard->GetPortView(0177712); DrawOctalValue(painter, x + 0 * cxChar, y, 0177712); DrawOctalValue(painter, x + 8 * cxChar, y, value); //DrawBinaryValue(painter, x + 15 * cxChar, y, value); painter.drawText(x + 16 * cxChar, y, _T("timer manage")); y += cyLine; value = g_pBoard->GetPortView(0177714); DrawOctalValue(painter, x + 0 * cxChar, y, 0177714); DrawOctalValue(painter, x + 8 * cxChar, y, value); //DrawBinaryValue(painter, x + 15 * cxChar, y, value); painter.drawText(x + 16 * cxChar, y, _T("parallel")); y += cyLine; value = g_pBoard->GetPortView(0177716); DrawOctalValue(painter, x + 0 * cxChar, y, 0177716); DrawOctalValue(painter, x + 8 * cxChar, y, value); //DrawBinaryValue(painter, x + 15 * cxChar, y, value); painter.drawText(x + 16 * cxChar, y, _T("system")); y += cyLine; value = g_pBoard->GetPortView(0177130); DrawOctalValue(painter, x + 0 * cxChar, y, 0177130); DrawOctalValue(painter, x + 8 * cxChar, y, value); //DrawBinaryValue(painter, x + 15 * cxChar, y, value); painter.drawText(x + 16 * cxChar, y, _T("floppy state")); y += cyLine; value = g_pBoard->GetPortView(0177132); DrawOctalValue(painter, x + 0 * cxChar, y, 0177132); DrawOctalValue(painter, x + 8 * cxChar, y, value); //DrawBinaryValue(painter, x + 15 * cxChar, y, value); painter.drawText(x + 16 * cxChar, y, _T("floppy data")); }
void QMemoryView::paintEvent(QPaintEvent * /*event*/) { if (g_pBoard == NULL) return; QPainter painter(this); painter.fillRect(0,0, this->width(), this->height(), Qt::white); QFont font = Common_GetMonospacedFont(); painter.setFont(font); QFontMetrics fontmetrics(font); int cxChar = fontmetrics.averageCharWidth(); int cyLine = fontmetrics.height(); CProcessor* pDebugPU = g_pBoard->GetCPU(); ASSERT(pDebugPU != NULL); QColor colorText = painter.pen().color(); m_cyLineMemory = cyLine; TCHAR buffer[7]; const TCHAR* ADDRESS_LINE = _T(" address 0 2 4 6 10 12 14 16"); painter.drawText(0, cyLine, ADDRESS_LINE); // Calculate m_nPageSize m_nPageSize = this->height() / cyLine - 1; quint16 address = m_wBaseAddress; int y = 2 * cyLine; for (;;) { // Draw lines DrawOctalValue(painter, 2 * cxChar, y, address); int x = 10 * cxChar; ushort wchars[16]; for (int j = 0; j < 8; j++) { // Draw words as octal value // Get word from memory quint16 word = 0; int addrtype; bool okHalt = false; quint16 wChanged = 0; okHalt = pDebugPU->IsHaltMode(); word = g_pBoard->GetWordView(address, okHalt, false, &addrtype); wChanged = Emulator_GetChangeRamStatus(address); if ((addrtype & (ADDRTYPE_IO | ADDRTYPE_DENY)) == 0) { painter.setPen(wChanged != 0 ? Qt::red : colorText); if (m_ByteMode) { PrintOctalValue(buffer, (word & 0xff)); painter.drawText(x, y, buffer + 3); PrintOctalValue(buffer, (word >> 8)); painter.drawText(x + 3 * cxChar + cxChar / 2, y, buffer + 3); } else DrawOctalValue(painter, x, y, word); } // Prepare characters to draw at right quint8 ch1 = (quint8)(word & 0xff); // LOBYTE ushort wch1 = Translate_BK_Unicode(ch1); if (ch1 < 32) wch1 = 0x00b7; wchars[j * 2] = wch1; quint8 ch2 = (quint8)((word >> 8) & 0xff); // HIBYTE ushort wch2 = Translate_BK_Unicode(ch2); if (ch2 < 32) wch2 = 0x00b7; wchars[j * 2 + 1] = wch2; address += 2; x += 7 * cxChar; }
void ScintillaEditor::onTextChanged() { QFontMetrics fontmetrics(this->currentFont); qsci->setMarginWidth(1, QString(trunc(log10(qsci->lines())+2), '0')); }