mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-02 15:45:21 +00:00
fix: 解决任务栏时间日期文字显示异常的问题。
系统改变字体后,注销后时间日期显示异常;高效模式下,拉动高度时间字体无变化的问题。 Log: Bug: https://pms.uniontech.com/bug-view-181387.html Influence: 时间和日期显示。 Change-Id: I1d35d35afa54095ddd631775d7b9f190c53779fa
This commit is contained in:
parent
46f01047a2
commit
bdd4c4b722
@ -224,20 +224,29 @@ DateTimeDisplayer::DateTimeInfo DateTimeDisplayer::dateTimeInfo(const Dock::Posi
|
||||
info.m_dateRect = QRect(0, DATETIMESIZE / 2 + 1, textWidth, DATETIMESIZE / 2);
|
||||
return info;
|
||||
}
|
||||
int timeWidth = QFontMetrics(timeFont()).boundingRect(info.m_time).width() + 3;
|
||||
int dateWidth = QFontMetrics(m_dateFont).boundingRect(info.m_date).width() + 2;
|
||||
int timeWidth = QFontMetrics(timeFont()).boundingRect(info.m_time).width();
|
||||
int dateWidth = QFontMetrics(m_dateFont).boundingRect(info.m_date).width();
|
||||
|
||||
// 如果是上下方向
|
||||
if (m_showMultiRow) {
|
||||
// 日期时间多行显示(一般是高效模式下)
|
||||
info.m_timeRect = QRect(0, 0, timeWidth, height() / 2);
|
||||
info.m_dateRect = QRect(0, height() / 2, dateWidth, height() / 2);
|
||||
// 日期时间多行显示(一般是高效模式下,向下和向上偏移2个像素)
|
||||
info.m_timeRect = QRect(0, 2, timeWidth, height() / 2);
|
||||
info.m_dateRect = QRect(0, height() / 2 -2, dateWidth, height() / 2);
|
||||
} else {
|
||||
info.m_timeRect = QRect(ITEMSPACE, 0, timeWidth, height());
|
||||
int dateX = rect().width() - QFontMetrics(m_dateFont).width(info.m_date) - 2 - ITEMSPACE;
|
||||
// 如果时间的X坐标小于日期的X坐标,需要手动设置坐标在日期坐标的右侧
|
||||
if (dateX < info.m_timeRect.right())
|
||||
dateX = info.m_timeRect.right();
|
||||
info.m_dateRect = QRect(dateX, 0, dateWidth, height());
|
||||
// 3:时间和日期3部分间隔
|
||||
if (rect().width() > (ITEMSPACE * 3 + timeWidth + dateWidth)) {
|
||||
info.m_timeRect = QRect(ITEMSPACE, 0, timeWidth, height());
|
||||
|
||||
int dateX = info.m_timeRect.right() + (rect().width() -(ITEMSPACE * 2 + timeWidth + dateWidth));
|
||||
info.m_dateRect = QRect(dateX, 0, dateWidth, height());
|
||||
} else {
|
||||
// 宽度不满足间隔为ITEMSPACE的,需要自己计算间隔。
|
||||
int itemSpace = (rect().width() - timeWidth - dateWidth) / 3;
|
||||
info.m_timeRect = QRect(itemSpace, 0, timeWidth, height());
|
||||
|
||||
int dateX = info.m_timeRect.right() + itemSpace;
|
||||
info.m_dateRect = QRect(dateX, 0, dateWidth, height());
|
||||
}
|
||||
}
|
||||
|
||||
return info;
|
||||
@ -287,12 +296,20 @@ void DateTimeDisplayer::paintEvent(QPaintEvent *e)
|
||||
|
||||
int timeAlignFlag = Qt::AlignCenter;
|
||||
int dateAlignFlag = Qt::AlignCenter;
|
||||
|
||||
QFont strTimeFont = timeFont();
|
||||
|
||||
if (m_showMultiRow) {
|
||||
timeAlignFlag = Qt::AlignHCenter | Qt::AlignBottom;
|
||||
dateAlignFlag = Qt::AlignHCenter | Qt::AlignTop;
|
||||
} else {
|
||||
if (strTimeFont.pixelSize() >= rect().height()) {
|
||||
strTimeFont.setPixelSize(rect().height() - 2);
|
||||
m_dateFont.setPixelSize(rect().height() - 2);
|
||||
}
|
||||
}
|
||||
|
||||
painter.setFont(timeFont());
|
||||
painter.setFont(strTimeFont);
|
||||
painter.drawText(textRect(info.m_timeRect), timeAlignFlag, info.m_time);
|
||||
painter.setFont(m_dateFont);
|
||||
painter.drawText(textRect(info.m_dateRect), dateAlignFlag, info.m_date);
|
||||
@ -333,18 +350,17 @@ QFont DateTimeDisplayer::timeFont() const
|
||||
if (m_position == Dock::Position::Left || m_position == Dock::Position::Right)
|
||||
return DFontSizeManager::instance()->t6();
|
||||
|
||||
#define MINHEIGHT 40
|
||||
|
||||
// 如果是上下方向,且当前只有一行,则始终显示小号字体
|
||||
if (m_oneRow)
|
||||
if (m_oneRow || rect().height() <= MINHEIGHT)
|
||||
return DFontSizeManager::instance()->t10();
|
||||
|
||||
static QList<QFont> dateFontSize = { DFontSizeManager::instance()->t10(),
|
||||
DFontSizeManager::instance()->t9(),
|
||||
DFontSizeManager::instance()->t8(),
|
||||
DFontSizeManager::instance()->t7(),
|
||||
DFontSizeManager::instance()->t6() };
|
||||
DFontSizeManager::instance()->t7() };
|
||||
|
||||
#define MINHEIGHT 16
|
||||
// 获取最低高度为16,找到对应的索引值
|
||||
int index = qMin(qMax(static_cast<int>((rect().height() - MINHEIGHT) / 3), 0), dateFontSize.size() - 1);
|
||||
return dateFontSize[index];
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user