Font sizes are... better... but not perfect.

merge-requests/5/head
Elliott Liggett 2021-07-19 23:46:11 -07:00
rodzic 274cc65dbf
commit 4fb9177f2c
4 zmienionych plików z 79 dodań i 26 usunięć

Wyświetl plik

@ -63,6 +63,16 @@ meterKind meter::getMeterType()
return meterType;
}
void meter::setMeterShortString(QString s)
{
meterShortString = s;
}
QString meter::getMeterShortString()
{
return meterShortString;
}
void meter::paintEvent(QPaintEvent *)
{
QPainter painter(this);
@ -72,6 +82,16 @@ void meter::paintEvent(QPaintEvent *)
// scale to the window size.
painter.setWindow(QRect(0, 0, 255+mXstart, widgetWindowHeight));
if(this->height() > widgetWindowHeight )
{
// Clamp down on stretching fonts.
// TODO: Make this more elegant
painter.setFont(QFont(this->fontInfo().family(), widgetWindowHeight/3.5));
} else {
painter.setFont(QFont(this->fontInfo().family(), widgetWindowHeight/2.5));
}
switch(meterType)
{
case meterS:
@ -94,6 +114,10 @@ void meter::paintEvent(QPaintEvent *)
peakRedLevel = 256; // No need for red here
drawScaleCenter(&painter);
break;
case meterVoltage:
peakRedLevel = 241;
drawScaleVd(&painter);
break;
default:
peakRedLevel = 200;
drawScaleRaw(&painter);
@ -146,7 +170,6 @@ void meter::paintEvent(QPaintEvent *)
painter.drawRect(mXstart+peak-1,mYstart,2,barHeight);
}
}
void meter::setLevel(int current)
@ -156,10 +179,6 @@ void meter::setLevel(int current)
avgLevels[(avgPosition++)%averageBalisticLength] = current;
peakLevels[(peakPosition++)%peakBalisticLength] = current;
// TODO: only average up to clamp(position, size) that way we don't average in
// zeros for the first couple of seconds. We might have to not use the accumulate function
// if we want to specify positions.
int sum=0;
for(unsigned int i=0; i < (unsigned int)std::min(avgPosition, (int)avgLevels.size()); i++)
@ -168,9 +187,6 @@ void meter::setLevel(int current)
}
this->average = sum / std::min(avgPosition, (int)avgLevels.size());
// this->average = std::accumulate(avgLevels.begin(), std::min(avgLevels.begin() + avgPosition, avgLevels.begin()+avgLevels.size())) / averageBalisticLength;
// this->peak = std::max_element(peakLevels.begin(), peakLevels.end());
this->peak = 0;
for(unsigned int i=0; i < peakLevels.size(); i++)
@ -202,7 +218,7 @@ void meter::updateDrawing(int num)
void meter::drawScaleRaw(QPainter *qp)
{
qp->setPen(lowTextColor);
qp->setFont(QFont("Arial", fontSize));
//qp->setFont(QFont("Arial", fontSize));
int i=mXstart;
for(; i<mXstart+256; i+=20)
{
@ -219,6 +235,45 @@ void meter::drawScaleRaw(QPainter *qp)
}
void meter::drawScaleVd(QPainter *qp)
{
qp->setPen(lowTextColor);
//qp->setFont(QFont("Arial", fontSize));
// 7300/9700 and others:
int midPointDn = 13;
int midPointVd = 10;
// 705:
//int midPointDn = 75;
//int midPointVd = 5;
int highPointDn = 241;
int highPointVd = 16;
float VdperDn = (float)(highPointVd-midPointVd) / float(highPointDn-midPointDn);
int i=mXstart;
for(; i<mXstart+midPointDn; i+=midPointDn/2)
{
qp->drawText(i,scaleTextYstart, QString("%1").arg( (int)((i-mXstart) * (float(midPointVd) / float(midPointDn)) )) );
}
for(; i<mXstart+255; i+= (highPointDn-midPointDn) / (highPointVd-midPointVd))
{
qp->drawText(i,scaleTextYstart, QString("%1").arg( (int) std::round( ((i-mXstart-midPointDn) * (VdperDn) ) + (midPointVd) )));
qp->drawLine(i,scaleTextYstart, i, scaleTextYstart+5);
}
// Now the lines:
qp->setPen(lowLineColor);
// Line: X1, Y1 -->to--> X2, Y2
qp->drawLine(mXstart,scaleLineYstart,peakRedLevel+mXstart,scaleLineYstart);
qp->setPen(Qt::red);
qp->drawLine(peakRedLevel+mXstart,scaleLineYstart,255+mXstart,scaleLineYstart);
}
void meter::drawScaleCenter(QPainter *qp)
{
// No known units
@ -250,7 +305,8 @@ void meter::drawScalePo(QPainter *qp)
float dnPerWatt = 143.0 / 50.0;
qp->setPen(lowTextColor);
qp->setFont(QFont("Arial", fontSize));
//qp->setFont(QFont("Arial", fontSize));
int i=mXstart;
// 13.3 DN per s-unit:
int p=0;
@ -304,7 +360,7 @@ void meter::drawScaleALC(QPainter *qp)
// From the manual: 0000=Minimum to 0120=Maximum
qp->setPen(lowTextColor);
qp->setFont(QFont("Arial", fontSize));
//qp->setFont(QFont("Arial", fontSize));
int i=mXstart;
int alc=0;
for(; i<mXstart+100; i += (20))
@ -360,13 +416,13 @@ void meter::drawScaleId(QPainter *qp)
void meter::drawScaleS(QPainter *qp)
{
qp->setPen(lowTextColor);
qp->setFont(QFont("Arial", fontSize));
//qp->setFont(QFont("Arial", fontSize));
int i=mXstart;
// 13.3 DN per s-unit:
int s=0;
for(; i<mXstart+120; i+=13)
{
qp->drawText(i,mXstart, QString("%1").arg(s++) );
qp->drawText(i,scaleTextYstart, QString("%1").arg(s++) );
}
// 2 DN per 1 dB now:
@ -381,7 +437,7 @@ void meter::drawScaleS(QPainter *qp)
for(; i<mXstart+255; i+=40)
{
qp->drawText(i,mXstart, QString("+%1").arg(s) );
qp->drawText(i,scaleTextYstart, QString("+%1").arg(s) );
s = s + 20;
}

10
meter.h
Wyświetl plik

@ -6,6 +6,7 @@
#include <vector>
#include <algorithm>
#include <numeric>
#include <cmath>
#include "rigcommander.h" // for meter types
@ -24,13 +25,16 @@ public slots:
void setLevels(int current, int peak, int average);
void setLevel(int current);
void setMeterType(meterKind type);
void setMeterShortString(QString);
QString getMeterShortString();
meterKind getMeterType();
private:
//QPainter painter;
meterKind meterType;
int fontSize = 5;
QString meterShortString;
int fontSize = 10;
int length=30;
int current=0;
int peak = 0;
@ -47,13 +51,13 @@ private:
int peakRedLevel=0;
int mXstart = 10; // Starting point for S=0.
int mXstart = 0; // Starting point for S=0.
int mYstart = 14; // height, down from top, where the drawing starts
int barHeight = 10; // Height of meter "bar" indicators
int scaleLineYstart = 12;
int scaleTextYstart = 10;
int widgetWindowHeight = mYstart + barHeight + 10; // height of drawing canvis.
int widgetWindowHeight = mYstart + barHeight + 0; // height of drawing canvis.
void drawScaleS(QPainter *qp);
void drawScaleCenter(QPainter *qp);

Wyświetl plik

@ -735,9 +735,6 @@ void wfmain::setupMainUI()
rigName->setText("NONE");
rigName->setFixedWidth(50);
SMeterReadings.fill(0,30);
powerMeterReadings.fill(0,30);
freq.MHzDouble = 0.0;
freq.Hz = 0;
oldFreqDialVal = ui->freqDial->value();
@ -5223,4 +5220,6 @@ void wfmain::on_debugBtn_clicked()
// ui->meterSPoWidget->setLevels(level, peak, average);
// ui->meterSPoWidget->update();
// }
}

Wyświetl plik

@ -576,12 +576,6 @@ private:
QByteArray spectrumPeaks;
QByteArray powerMeterReadings;
int powerMeterPos = 0;
QByteArray SMeterReadings;
int smeterPos=0;
QVector <QByteArray> wfimage;
unsigned int wfLengthMax;