修改适配非等宽字体的计数器
This commit is contained in:
+74
-3
@@ -36,6 +36,8 @@
|
||||
#include <QScroller>
|
||||
#include <QFontMetrics>
|
||||
#include <QPainter>
|
||||
#include "MainWidget.h"
|
||||
#include "scene/ItemCommon.h"
|
||||
|
||||
extern MyInputMethod *myInputMethod;
|
||||
unsigned char test_flag,open_close;
|
||||
@@ -647,6 +649,72 @@ void MainWidget::generateCharRamData()
|
||||
|
||||
}
|
||||
|
||||
void MainWidget::generateCharRamDataV2()
|
||||
{
|
||||
if(sysPara->status.variNum == 0)
|
||||
return;
|
||||
|
||||
qDebug()<<"sysPara->status.variNum:"<<sysPara->status.variNum;
|
||||
|
||||
int ramAddress = 0;
|
||||
int i;
|
||||
for( i = 0; i < sysPara->status.variNum; i++){
|
||||
vars_t *p_var = &sysPara->status.vars[i];
|
||||
p_var->bassAddr = -1;
|
||||
if(p_var->original){ //清除原来的记录
|
||||
if(p_var->dat){
|
||||
free(p_var->dat);
|
||||
}
|
||||
p_var->original = false;
|
||||
}
|
||||
|
||||
int width;
|
||||
if(p_var->bassAddr == -1){
|
||||
width = (p_var->digitalNum)?(10*(p_var->width/p_var->digitalNum)):12;
|
||||
int height = p_var->height;
|
||||
|
||||
QString fontname = Public::getFontFamily(height,p_var->type);
|
||||
QFont font(fontname);
|
||||
|
||||
// 用 0 间距,间距交给FPGA处理
|
||||
font.setLetterSpacing(QFont::AbsoluteSpacing, 0);
|
||||
qDebug() << "Generate char, letter space: " << p_var->letterSpace << "font height: " << height;
|
||||
|
||||
static constexpr char *NUMBERS = "0123456789";
|
||||
QImage image = ItemUtils::txtToImage(NUMBERS, font, Qt::black, Qt::transparent);
|
||||
int imgH = image.height();
|
||||
int imgW = image.width();
|
||||
|
||||
int rowByteNum = imgH/8 + ((imgH%8)?1:0); // 一列占用字节数
|
||||
unsigned char *dat = (unsigned char *)calloc(imgW, rowByteNum);
|
||||
for(int k = 0; k < imgH; k++){
|
||||
for(int j = 0; j < imgW; j ++){
|
||||
QRgb rgb = image.pixel(j,k);
|
||||
int abit = ((rgb >> 24)&0xff) > 0x80 ? 1 : 0;
|
||||
dat[rowByteNum * j + k / 8] |= (abit << (k%8));
|
||||
}
|
||||
}
|
||||
|
||||
// 填充宽度表
|
||||
QFontMetrics fm(font);
|
||||
for(int i = 0; i < 10; ++i) {
|
||||
p_var->widthTable[i] = fm.horizontalAdvance(NUMBERS[i]);
|
||||
}
|
||||
|
||||
// 填充其他值
|
||||
p_var->bassAddr = ramAddress;
|
||||
p_var->datHeight = imgH;
|
||||
|
||||
p_var->datWidth = imgW;
|
||||
p_var->rowByteNum = rowByteNum;
|
||||
p_var->dat = dat;
|
||||
p_var->original = true;
|
||||
p_var->currVal = -1; //相当于初始化
|
||||
ramAddress += rowByteNum * imgW;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QList<QRect> MainWidget::variableItemsUpdate()
|
||||
{
|
||||
if(!pPicScene) {
|
||||
@@ -1033,7 +1101,7 @@ void MainWidget::SendPrintDataToFpga(unsigned char alterEnable, bool isUpdate)
|
||||
|
||||
if(!isUpdate) {
|
||||
sysPara->devOp->writeFpgaPrintPara(1);
|
||||
sysPara->devOp->writeFpgaVariCtrl();
|
||||
sysPara->devOp->writeFpgaVariCtrlv2();
|
||||
}
|
||||
|
||||
sysPara->devOp->fpgaWr(0,blankDat1,sizeof(blankDat1));//...所加的空白偏移地址
|
||||
@@ -2057,7 +2125,10 @@ void MainWidget::onPreviewScene()
|
||||
imageToPrintData(image, 0, 0);
|
||||
|
||||
// /*--------------------------------------------------------------------------*/
|
||||
generateCharRamData();
|
||||
// generateCharRamData();
|
||||
|
||||
generateCharRamDataV2();
|
||||
|
||||
if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1)sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1;
|
||||
sysPara->status.currPrintRow = qMin(sysPara->status.currPrintRow, MAX_PRINT_ROW_NUM-1);
|
||||
|
||||
@@ -2605,4 +2676,4 @@ void MainWidget::UpdateUIVersion(){
|
||||
QString Mac = QString::number(sysPara->status.machineMac);
|
||||
LogInfo::setRunStatusText(QString("Mac:%1").arg(Mac));
|
||||
LogInfo::showVerionInformation(Mac,VernonBach,fpgaVersion,STM32Ver);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user