From 21b57c8329599ff154229c544e04c79d1d2c67a0 Mon Sep 17 00:00:00 2001 From: Pavel Moseev Date: Fri, 1 Nov 2019 15:04:59 +0300 Subject: [PATCH] Fix incorrect display of user interface elements Change some user interface elements to better display them when changing the program locale. (closes: #37308) Add maximize window to full screen. Ignore DPI changes in system settings. Fix redrawing user interface elements after turning tooltip on or off. --- src/FractionPainter.cpp | 2 +- src/FractionRingWidget.cpp | 80 +++++++++++++++++++++++-------- 2 files changed, 61 insertions(+), 21 deletions(-) diff --git a/src/FractionPainter.cpp b/src/FractionPainter.cpp index 777d862..5f7550e 100644 --- a/src/FractionPainter.cpp +++ b/src/FractionPainter.cpp @@ -68,7 +68,7 @@ void FractionPainter::paintWidget(QPainter & paint) int old_y = 0; // ratios and operation signs are painted with the same font - m_font.setPointSize(24); + m_font.setPixelSize(24); m_font.setBold(true); paint.setFont(m_font); diff --git a/src/FractionRingWidget.cpp b/src/FractionRingWidget.cpp index 586e0df..074f02e 100644 --- a/src/FractionRingWidget.cpp +++ b/src/FractionRingWidget.cpp @@ -49,8 +49,8 @@ #include "settingsclass.h" #include "TaskColors.h" -#define MARG_LEFT 10 -#define MARG_TOP 70 +#define MARG_LEFT 20 +#define MARG_TOP 10 /* constructor */ FractionRingWidget::FractionRingWidget() @@ -64,6 +64,9 @@ FractionRingWidget::FractionRingWidget() setCaption(i18n("Learning")); + QFont defaultFont; + defaultFont.setPixelSize(16); // Ignore DPI changes + layout1 = new QGridLayout(); layout1->setObjectName(QStringLiteral("layout1")); @@ -74,7 +77,7 @@ FractionRingWidget::FractionRingWidget() interfaceWidget = new QWidget(this); interfaceWidget->setObjectName(QStringLiteral("interfaceWidget")); - interfaceWidget->setFixedSize(QSize(270, 300)); + interfaceWidget->setFixedSize(QSize(270, 240)); gridLayout = new QGridLayout(); gridLayout->setObjectName(QStringLiteral("gridLayout")); @@ -99,7 +102,7 @@ FractionRingWidget::FractionRingWidget() colorListRight[4] = QColor(255, 186, 190); // 742, 520 - setFixedSize(QSize(742, 520)); + setMinimumSize(850, 600); setPalette(QPalette(bgColor)); setAutoFillBackground(true); @@ -115,11 +118,13 @@ FractionRingWidget::FractionRingWidget() leftInfoLabel = new QLabel(this); leftInfoLabel->setObjectName(QStringLiteral("leftInfoLabel")); leftInfoLabel->setText(i18nc("Expands the ratio shown on the left by the given factor. Please note, expanding is not the same as multiplying. For example, expanding a ratio by 2 basically means multiplying the ratio with 2/2 and not with 2/1!", "Expand")); + leftInfoLabel->setFont(defaultFont); gridLayout->addWidget(leftInfoLabel, 1, 0, Qt::AlignCenter); rightInfoLabel = new QLabel(this); rightInfoLabel->setObjectName(QStringLiteral("rightInfoLabel")); rightInfoLabel->setText(i18nc("Expands the ratio shown on the left by the given factor. Please note, expanding is not the same as multiplying. For example, expanding a ratio by 2 basically means multiplying the ratio with 2/2 and not with 2/1!", "Expand")); + rightInfoLabel->setFont(defaultFont); gridLayout->addWidget(rightInfoLabel, 1, 1, Qt::AlignCenter); // SpinBox ----------------------------------------- @@ -128,6 +133,7 @@ FractionRingWidget::FractionRingWidget() leftSpinBox->setRange(1, 6); leftSpinBox->setMaximumWidth(50); leftSpinBox->setMinimumWidth(50); + leftSpinBox->setFont(defaultFont); gridLayout->addWidget(leftSpinBox, 2, 0, Qt::AlignTop | Qt::AlignHCenter); rightSpinBox = new QSpinBox(this); @@ -135,6 +141,7 @@ FractionRingWidget::FractionRingWidget() rightSpinBox->setRange(1, 6); rightSpinBox->setMaximumWidth(50); rightSpinBox->setMinimumWidth(50); + rightSpinBox->setFont(defaultFont); gridLayout->addWidget(rightSpinBox, 2, 1, Qt::AlignTop | Qt::AlignHCenter); QObject::connect(leftSpinBox, static_cast(&QSpinBox::valueChanged), this, &FractionRingWidget::slotLeftSpinBoxValueChanged); @@ -144,19 +151,20 @@ FractionRingWidget::FractionRingWidget() resetButton = new QPushButton(this); resetButton->setObjectName(QStringLiteral("resetButton")); resetButton->setText(i18n("New")); - resetButton->setMaximumWidth(70); + resetButton->setMinimumWidth(150); + resetButton->setFont(defaultFont); gridLayout->addWidget(resetButton, 3, 0, 1, 2, Qt::AlignCenter); QObject::connect(resetButton, &QPushButton::clicked, this, &FractionRingWidget::NewTask); // grid row settings -------------------------------- - gridLayout->setRowMinimumHeight(0, 185); - gridLayout->setRowMinimumHeight(1, 10); - gridLayout->setRowMinimumHeight(2, 15); - gridLayout->setRowMinimumHeight(3, 85); + gridLayout->setRowMinimumHeight(0, 85); + gridLayout->setRowMinimumHeight(1, 5); + gridLayout->setRowMinimumHeight(2, 55); + gridLayout->setRowMinimumHeight(3, 50); interfaceWidget->setLayout(gridLayout); - layout1->addWidget(interfaceWidget, 1, 0, Qt::AlignTop | Qt::AlignHCenter); + layout1->addWidget(interfaceWidget, 1, 0, Qt::AlignVCenter | Qt::AlignHCenter); // textedit ----------------------------------------- textMsg = new QTextEdit(this); @@ -165,15 +173,16 @@ FractionRingWidget::FractionRingWidget() textMsg->setReadOnly(true); textMsg->setPalette(QPalette(QColor(255, 255, 255))); textMsg->setAutoFillBackground(true); - layout1->addWidget(textMsg, 0, 1, 2, 1, Qt::AlignCenter); + textMsg->setFont(defaultFont); + layout1->addWidget(textMsg, 0, 1, 2, 1, Qt::AlignVCenter| Qt::AlignHCenter); // grid row settings -------------------------------- - layout1->setRowMinimumHeight(0, MARG_TOP - 20); + layout1->setRowMinimumHeight(0, MARG_TOP - 5); layout1->setRowMinimumHeight(1, 370 - MARG_TOP); // grid column settings ----------------------------- - layout1->setColumnMinimumWidth(0, 460 + MARG_LEFT); - layout1->setColumnMinimumWidth(1, 282 - MARG_LEFT); + layout1->setColumnMinimumWidth(0, 488 + MARG_LEFT); + layout1->setColumnMinimumWidth(1, 325 - MARG_LEFT); baseWidget->setLayout(layout1); @@ -194,10 +203,14 @@ void FractionRingWidget::setupActions() #ifdef DEBUG qDebug() << QStringLiteral("setupActions FractionRingWidget"); #endif + QFont defaultFont; + defaultFont.setPixelSize(17); // Ignore DPI changes + // new task action m_NewTaskAction = new QWidgetAction(this); m_NewTaskAction->setText(i18nc("@action opens a new question", "&New")); m_NewTaskAction->setIcon(QIcon::fromTheme(QStringLiteral("document-new"))); + m_NewTaskAction->setFont(defaultFont); actionCollection()->addAction(QStringLiteral("NewTask"), m_NewTaskAction); actionCollection()->setDefaultShortcuts(m_NewTaskAction, KStandardShortcut::shortcut(KStandardShortcut::New)); connect(m_NewTaskAction, &QAction::triggered, this, &FractionRingWidget::NewTask); @@ -206,12 +219,14 @@ void FractionRingWidget::setupActions() m_BackAction = new QWidgetAction(this); m_BackAction->setText(i18nc("@action go to the main screen", "Back")); m_BackAction->setIcon(QIcon::fromTheme(QStringLiteral("go-previous"))); + m_BackAction->setFont(defaultFont); actionCollection()->addAction(QStringLiteral("Back"), m_BackAction); actionCollection()->setDefaultShortcuts(m_BackAction, KStandardShortcut::shortcut(KStandardShortcut::Back)); connect(m_BackAction, &QAction::triggered, this, &FractionRingWidget::GoBack); // hint action (hide it as it doesn't exist here) m_HintAction = new QAction(QIcon::fromTheme(QStringLiteral("games-hint")), i18nc("@action opens hint", "Hint"), this); + m_HintAction->setFont(defaultFont); actionCollection()->addAction(QStringLiteral("Hint"), m_HintAction); connect(m_HintAction, &QAction::triggered, this, &FractionRingWidget::Hint); @@ -269,7 +284,20 @@ void FractionRingWidget::paintEvent(QPaintEvent *) painter.setPen(penBorder); painter.setBrush(bgOutsideRing); - QRectF rect(MARG_LEFT, MARG_TOP, 440, 440); + int interfaceWidgetLeft = interfaceWidget->geometry().left(); + int interfaceWidgetTop = interfaceWidget->geometry().top(); + + int offsetX = 0; // offset for all Rings + int offsetY = 0; + int d1 = 470; // Outside Ring Diameter + int outsideOffsetX = interfaceWidgetLeft + MARG_LEFT - 117; // outside offset + int outsideOffsetY = interfaceWidgetTop + MARG_TOP - 50; + int centerCoordX = d1*0.5 + outsideOffsetX; // Ring center coordinates + int centerCoordY = d1*0.5 + outsideOffsetY; + + QRectF rect(outsideOffsetX, outsideOffsetY, d1, d1); + + update(); int startAngle = 90 * 16; int spanAngle = 0; @@ -293,15 +321,23 @@ void FractionRingWidget::paintEvent(QPaintEvent *) } // Spacer Ring ------------------------------- + int d2 = 414; // Spacer Ring Diameter + offsetX = centerCoordX - d2*0.5; + offsetY = centerCoordY - d2*0.5; + painter.setPen(penBorder); painter.setBrush(bgColor); - rect.setRect(MARG_LEFT + 27, MARG_TOP + 27, 386, 386); + rect.setRect(offsetX, offsetY, d2, d2); painter.drawEllipse(rect); // Inside Ring ------------------------------- + int d3 = 400; // Inside Ring Diameter + offsetX = centerCoordX - d3*0.5; + offsetY = centerCoordY - d3*0.5; + painter.setPen(penBorder); painter.setBrush(bgInsideRing); - rect.setRect(MARG_LEFT + 33, MARG_TOP + 33, 374, 374); + rect.setRect(offsetX, offsetY, d3, d3); painter.drawEllipse(rect); painter.setPen(penBorder); @@ -320,9 +356,13 @@ void FractionRingWidget::paintEvent(QPaintEvent *) } // Inside Area ------------------------------- + int d4 = 344; // Inside Area Diameter + offsetX = centerCoordX - d4*0.5; + offsetY = centerCoordY - d4*0.5; + painter.setPen(penBorder); painter.setBrush(QColor(230, 230, 240)); - rect.setRect(MARG_LEFT + 60, MARG_TOP + 60, 320, 320); + rect.setRect(offsetX, offsetY, d4, d4); painter.drawEllipse(rect); // left mold --------------------------------- @@ -330,14 +370,14 @@ void FractionRingWidget::paintEvent(QPaintEvent *) pen.setWidth(2); painter.setPen(pen); painter.setBrush(QColor(205, 225, 240, 150)); - rect.setRect(MARG_LEFT + 118, MARG_TOP + 120, 80, 160); + rect.setRect(outsideOffsetX + 112, outsideOffsetY + 127, 105, 160); painter.drawRect(rect); // right mold -------------------------------- pen.setColor(bgInsideMold); painter.setPen(pen); painter.setBrush(QColor(240, 210, 160)); - rect.setRect(MARG_LEFT + 252, MARG_TOP + 120, 80, 160); + rect.setRect(outsideOffsetX + 246, outsideOffsetY + 127, 106, 160); painter.drawRect(rect); } -- 2.21.0