mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 09:23:03 +00:00
fix: 修复高缩放率下图标显示异常的问题
1、高缩放率下计算图标任务栏尺寸需要乘以缩放率的数值 2、加载声音图标带上具体的后缀名,否则会出现图标显示异常 3、自定义图标的尺寸的显示,需要重新计算图标的宽度 Log: 修复高分屏下图标显示异常 Influence: 高分屏,高缩放率,观察任务栏插件区域的图标 Bug: https://pms.uniontech.com/bug-view-183543.html Bug: https://pms.uniontech.com/bug-view-184089.html Change-Id: Iaa8833b20608129e5c10c8614702a9e5afeae2d9
This commit is contained in:
parent
50dad25442
commit
da1b436796
@ -52,7 +52,7 @@ DockTrayWindow::DockTrayWindow(DockInter *dockInter, QWidget *parent)
|
|||||||
, m_toolLineLabel(new QLabel(this))
|
, m_toolLineLabel(new QLabel(this))
|
||||||
, m_dateTimeWidget(new DateTimeDisplayer(true, this))
|
, m_dateTimeWidget(new DateTimeDisplayer(true, this))
|
||||||
, m_systemPuginWidget(new SystemPluginWindow(dockInter, this))
|
, m_systemPuginWidget(new SystemPluginWindow(dockInter, this))
|
||||||
, m_quickIconWidget(new QuickPluginWindow(this))
|
, m_quickIconWidget(new QuickPluginWindow(Dock::DisplayMode::Efficient, this))
|
||||||
, m_trayView(new TrayGridView(this))
|
, m_trayView(new TrayGridView(this))
|
||||||
, m_model(TrayModel::getDockModel())
|
, m_model(TrayModel::getDockModel())
|
||||||
, m_delegate(new TrayDelegate(m_trayView, this))
|
, m_delegate(new TrayDelegate(m_trayView, this))
|
||||||
|
@ -89,7 +89,6 @@ MainPanelControl::MainPanelControl(DockInter *dockInter, QWidget *parent)
|
|||||||
, m_multiWindowLayout(new QBoxLayout(QBoxLayout::LeftToRight, m_multiWindowWidget))
|
, m_multiWindowLayout(new QBoxLayout(QBoxLayout::LeftToRight, m_multiWindowWidget))
|
||||||
, m_toolSonAreaWidget(new QWidget(m_toolAreaWidget))
|
, m_toolSonAreaWidget(new QWidget(m_toolAreaWidget))
|
||||||
, m_toolSonLayout(new QBoxLayout(QBoxLayout::LeftToRight, m_toolSonAreaWidget))
|
, m_toolSonLayout(new QBoxLayout(QBoxLayout::LeftToRight, m_toolSonAreaWidget))
|
||||||
, m_pluginLayout(new QBoxLayout(QBoxLayout::LeftToRight, this))
|
|
||||||
, m_position(Position::Bottom)
|
, m_position(Position::Bottom)
|
||||||
, m_placeholderItem(nullptr)
|
, m_placeholderItem(nullptr)
|
||||||
, m_appDragWidget(nullptr)
|
, m_appDragWidget(nullptr)
|
||||||
@ -226,13 +225,11 @@ void MainPanelControl::updateMainPanelLayout()
|
|||||||
m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||||
m_mainPanelLayout->setDirection(QBoxLayout::LeftToRight);
|
m_mainPanelLayout->setDirection(QBoxLayout::LeftToRight);
|
||||||
m_fixedAreaLayout->setDirection(QBoxLayout::LeftToRight);
|
m_fixedAreaLayout->setDirection(QBoxLayout::LeftToRight);
|
||||||
m_pluginLayout->setDirection(QBoxLayout::LeftToRight);
|
|
||||||
m_appAreaSonLayout->setDirection(QBoxLayout::LeftToRight);
|
m_appAreaSonLayout->setDirection(QBoxLayout::LeftToRight);
|
||||||
m_recentLayout->setDirection(QBoxLayout::LeftToRight);
|
m_recentLayout->setDirection(QBoxLayout::LeftToRight);
|
||||||
m_multiWindowLayout->setDirection(QBoxLayout::LeftToRight);
|
m_multiWindowLayout->setDirection(QBoxLayout::LeftToRight);
|
||||||
m_toolAreaLayout->setDirection(QBoxLayout::LeftToRight);
|
m_toolAreaLayout->setDirection(QBoxLayout::LeftToRight);
|
||||||
m_toolSonLayout->setDirection(QBoxLayout::LeftToRight);
|
m_toolSonLayout->setDirection(QBoxLayout::LeftToRight);
|
||||||
m_pluginLayout->setContentsMargins(10, 0, 10, 0);
|
|
||||||
m_multiWindowLayout->setContentsMargins(0, 2, 0, 2);
|
m_multiWindowLayout->setContentsMargins(0, 2, 0, 2);
|
||||||
break;
|
break;
|
||||||
case Position::Right:
|
case Position::Right:
|
||||||
@ -241,13 +238,11 @@ void MainPanelControl::updateMainPanelLayout()
|
|||||||
m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||||
m_mainPanelLayout->setDirection(QBoxLayout::TopToBottom);
|
m_mainPanelLayout->setDirection(QBoxLayout::TopToBottom);
|
||||||
m_fixedAreaLayout->setDirection(QBoxLayout::TopToBottom);
|
m_fixedAreaLayout->setDirection(QBoxLayout::TopToBottom);
|
||||||
m_pluginLayout->setDirection(QBoxLayout::TopToBottom);
|
|
||||||
m_appAreaSonLayout->setDirection(QBoxLayout::TopToBottom);
|
m_appAreaSonLayout->setDirection(QBoxLayout::TopToBottom);
|
||||||
m_recentLayout->setDirection(QBoxLayout::TopToBottom);
|
m_recentLayout->setDirection(QBoxLayout::TopToBottom);
|
||||||
m_multiWindowLayout->setDirection(QBoxLayout::TopToBottom);
|
m_multiWindowLayout->setDirection(QBoxLayout::TopToBottom);
|
||||||
m_toolAreaLayout->setDirection(QBoxLayout::TopToBottom);
|
m_toolAreaLayout->setDirection(QBoxLayout::TopToBottom);
|
||||||
m_toolSonLayout->setDirection(QBoxLayout::TopToBottom);
|
m_toolSonLayout->setDirection(QBoxLayout::TopToBottom);
|
||||||
m_pluginLayout->setContentsMargins(0, 10, 0, 10);
|
|
||||||
m_multiWindowLayout->setContentsMargins(2, 0, 2, 0);
|
m_multiWindowLayout->setContentsMargins(2, 0, 2, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -409,7 +404,6 @@ void MainPanelControl::insertItem(int index, DockItem *item)
|
|||||||
resizeDockIcon();
|
resizeDockIcon();
|
||||||
|
|
||||||
item->checkEntry();
|
item->checkEntry();
|
||||||
QTimer::singleShot(0, this, &MainPanelControl::updatePluginsLayout);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**从任务栏移除某一应用,并更新任务栏图标大小
|
/**从任务栏移除某一应用,并更新任务栏图标大小
|
||||||
@ -455,17 +449,7 @@ void MainPanelControl::moveItem(DockItem *sourceItem, DockItem *targetItem)
|
|||||||
int idx = -1;
|
int idx = -1;
|
||||||
if (targetItem->itemType() == DockItem::App)
|
if (targetItem->itemType() == DockItem::App)
|
||||||
idx = m_appAreaSonLayout->indexOf(targetItem);
|
idx = m_appAreaSonLayout->indexOf(targetItem);
|
||||||
else if (targetItem->itemType() == DockItem::Plugins){
|
else if (targetItem->itemType() == DockItem::FixedPlugin)
|
||||||
//因为日期时间插件大小和其他插件大小有异,为了设置边距,在各插件中增加了一层布局
|
|
||||||
//因此有拖动图标时,需要从多的一层布局中判断是否相同插件而获取插件位置顺序
|
|
||||||
for (int i = 0; i < m_pluginLayout->count(); ++i) {
|
|
||||||
QLayout *layout = m_pluginLayout->itemAt(i)->layout();
|
|
||||||
if (layout && layout->itemAt(0)->widget() == targetItem) {
|
|
||||||
idx = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (targetItem->itemType() == DockItem::FixedPlugin)
|
|
||||||
idx = m_fixedAreaLayout->indexOf(targetItem);
|
idx = m_fixedAreaLayout->indexOf(targetItem);
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
@ -955,22 +939,6 @@ void MainPanelControl::moveAppSonWidget()
|
|||||||
m_appAreaSonWidget->move(rect.x(), rect.y());
|
m_appAreaSonWidget->move(rect.x(), rect.y());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**通知布局器,控件已发生变化,需要重新设置几何位置
|
|
||||||
* @brief MainPanelControl::updatePluginsLayout
|
|
||||||
*/
|
|
||||||
void MainPanelControl::updatePluginsLayout()
|
|
||||||
{
|
|
||||||
for (int i = 0; i < m_pluginLayout->count(); ++i) {
|
|
||||||
QLayout *layout = m_pluginLayout->itemAt(i)->layout();
|
|
||||||
if (layout) {
|
|
||||||
PluginsItem *pItem = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
|
|
||||||
if (pItem && pItem->sizeHint().width() != -1) {
|
|
||||||
pItem->updateGeometry();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainPanelControl::updateDockInter(DockInter *dockInter)
|
void MainPanelControl::updateDockInter(DockInter *dockInter)
|
||||||
{
|
{
|
||||||
m_dockInter = dockInter;
|
m_dockInter = dockInter;
|
||||||
@ -998,21 +966,30 @@ QSize MainPanelControl::suitableSize(const Position &position, int screenSize, d
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 如果是特效模式
|
// 如果是特效模式
|
||||||
int totalLength = static_cast<int>(screenSize / ratio);
|
int totalLength = getScreenSize();
|
||||||
// 减去插件区域的尺寸
|
// 减去插件区域的尺寸
|
||||||
totalLength -= trayAreaSize();
|
totalLength -= trayAreaSize(ratio);
|
||||||
|
|
||||||
|
if (m_fixedSpliter->isVisible())
|
||||||
|
totalLength -= SPLITER_SIZE;
|
||||||
|
if (m_appSpliter->isVisible())
|
||||||
|
totalLength -= SPLITER_SIZE;
|
||||||
|
if (m_recentSpliter->isVisible())
|
||||||
|
totalLength -= SPLITER_SIZE;
|
||||||
|
|
||||||
// 需要参与计算的图标的总数
|
// 需要参与计算的图标的总数
|
||||||
int iconCount = m_fixedAreaLayout->count() + m_appAreaSonLayout->count() + m_recentLayout->count() + m_toolSonLayout->count();
|
int iconCount = m_fixedAreaLayout->count() + m_appAreaSonLayout->count() + m_recentLayout->count() + m_toolSonLayout->count();
|
||||||
int multiWindowCount = m_multiWindowLayout->count();
|
int multiWindowCount = m_multiWindowLayout->count();
|
||||||
if (iconCount <= 0 && multiWindowCount <= 0) {
|
if (iconCount <= 0 && multiWindowCount <= 0) {
|
||||||
if (position == Position::Top || position == Position::Bottom)
|
if (position == Position::Top || position == Position::Bottom)
|
||||||
return QSize((static_cast<int>(dockSize / ratio)), dockSize);
|
return QSize((static_cast<int>(dockSize)), dockSize);
|
||||||
|
|
||||||
return QSize(dockSize, static_cast<int>(dockSize / ratio));
|
return QSize(dockSize, static_cast<int>(dockSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
int redundantLength = (totalLength % iconCount);
|
int redundantLength = (totalLength % iconCount);
|
||||||
// icon宽度 = (总宽度-余数)/icon个数
|
// icon宽度 = (总宽度-余数)/icon个数
|
||||||
int iconSize = qMin(((totalLength - redundantLength) / iconCount), dockSize);
|
int iconSize = qMin((static_cast<int>((totalLength - redundantLength) / iconCount / ratio)), dockSize);
|
||||||
|
|
||||||
if (position == Position::Top || position == Position::Bottom) {
|
if (position == Position::Top || position == Position::Bottom) {
|
||||||
int spliterWidth = m_fixedSpliter->isVisible() ? SPLITER_SIZE : 0;
|
int spliterWidth = m_fixedSpliter->isVisible() ? SPLITER_SIZE : 0;
|
||||||
@ -1034,10 +1011,10 @@ QSize MainPanelControl::suitableSize(const Position &position, int screenSize, d
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int panelWidth = qMin(iconSize * iconCount + multiSize + static_cast<int>(spliterWidth / ratio),
|
int panelWidth = qMin(iconSize * iconCount + multiSize + static_cast<int>(spliterWidth),
|
||||||
static_cast<int>((screenSize - DOCKSPACE) / deviceRatio));
|
static_cast<int>((screenSize - DOCKSPACE)));
|
||||||
|
|
||||||
return QSize(panelWidth, static_cast<int>(dockSize / ratio));
|
return QSize(panelWidth, static_cast<int>(dockSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
int spliterHeight = m_fixedSpliter->isVisible() ? SPLITER_SIZE : 0;
|
int spliterHeight = m_fixedSpliter->isVisible() ? SPLITER_SIZE : 0;
|
||||||
@ -1059,8 +1036,8 @@ QSize MainPanelControl::suitableSize(const Position &position, int screenSize, d
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int panelHeight = qMin(iconSize * iconCount + multiSize + static_cast<int>(spliterHeight / ratio),
|
int panelHeight = qMin(iconSize * iconCount + multiSize + static_cast<int>(spliterHeight),
|
||||||
static_cast<int>((screenSize - DOCKSPACE)/ deviceRatio));
|
static_cast<int>((screenSize - DOCKSPACE)));
|
||||||
|
|
||||||
return QSize(dockSize, panelHeight);
|
return QSize(dockSize, panelHeight);
|
||||||
}
|
}
|
||||||
@ -1111,10 +1088,10 @@ int MainPanelControl::getScreenSize() const
|
|||||||
return screenRect.height();
|
return screenRect.height();
|
||||||
}
|
}
|
||||||
|
|
||||||
int MainPanelControl::trayAreaSize() const
|
int MainPanelControl::trayAreaSize(qreal ratio) const
|
||||||
{
|
{
|
||||||
if (m_displayMode == Dock::DisplayMode::Efficient)
|
if (m_displayMode == Dock::DisplayMode::Efficient)
|
||||||
return (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom ? m_tray->width() : m_tray->height());
|
return (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom ? m_tray->width() * ratio: m_tray->height() * ratio);
|
||||||
|
|
||||||
int length = 0;
|
int length = 0;
|
||||||
QWidgetList topLevelWidgets = qApp->topLevelWidgets();
|
QWidgetList topLevelWidgets = qApp->topLevelWidgets();
|
||||||
@ -1123,10 +1100,11 @@ int MainPanelControl::trayAreaSize() const
|
|||||||
if (!topWindow)
|
if (!topWindow)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (topWindow->windowType() != MainWindowBase::DockWindowType::MainWindow)
|
if (topWindow->windowType() != MainWindowBase::DockWindowType::MainWindow) {
|
||||||
length += (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom ? topWindow->width() : topWindow->height());
|
length += (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom ? topWindow->width() * ratio : topWindow->height() * ratio);
|
||||||
|
}
|
||||||
|
|
||||||
length += topWindow->dockSpace();
|
length += topWindow->dockSpace() * ratio;
|
||||||
}
|
}
|
||||||
|
|
||||||
return length;
|
return length;
|
||||||
@ -1138,7 +1116,6 @@ int MainPanelControl::trayAreaSize() const
|
|||||||
void MainPanelControl::resizeDockIcon()
|
void MainPanelControl::resizeDockIcon()
|
||||||
{
|
{
|
||||||
int iconSize = 0;
|
int iconSize = 0;
|
||||||
int tray_item_size = 0;
|
|
||||||
// 总宽度
|
// 总宽度
|
||||||
if (m_displayMode == DisplayMode::Fashion) {
|
if (m_displayMode == DisplayMode::Fashion) {
|
||||||
// 时尚模式
|
// 时尚模式
|
||||||
@ -1152,7 +1129,7 @@ void MainPanelControl::resizeDockIcon()
|
|||||||
if (iconCount <= 0)
|
if (iconCount <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int totalLength = getScreenSize() - trayAreaSize();
|
int totalLength = getScreenSize() - trayAreaSize(qApp->devicePixelRatio());
|
||||||
|
|
||||||
if (m_fixedSpliter->isVisible())
|
if (m_fixedSpliter->isVisible())
|
||||||
totalLength -= SPLITER_SIZE;
|
totalLength -= SPLITER_SIZE;
|
||||||
@ -1165,26 +1142,8 @@ void MainPanelControl::resizeDockIcon()
|
|||||||
int yu = (totalLength % iconCount);
|
int yu = (totalLength % iconCount);
|
||||||
// icon宽度 = (总宽度-余数)/icon个数
|
// icon宽度 = (总宽度-余数)/icon个数
|
||||||
iconSize = (totalLength - yu) / iconCount;
|
iconSize = (totalLength - yu) / iconCount;
|
||||||
// 计算插件图标的最大或最小值
|
|
||||||
tray_item_size = qBound(20, iconSize, 40);
|
|
||||||
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
|
|
||||||
tray_item_size = qMin(tray_item_size, height());
|
|
||||||
tray_item_size = std::min(tray_item_size, height() - 20);
|
|
||||||
} else {
|
|
||||||
tray_item_size = qMin(tray_item_size,width());
|
|
||||||
tray_item_size = std::min(tray_item_size, width() - 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tray_item_size < 20)
|
|
||||||
tray_item_size = 20;
|
|
||||||
|
|
||||||
// 余数
|
|
||||||
yu = (totalLength % iconCount);
|
|
||||||
// icon宽度 = (总宽度-余数)/icon个数
|
|
||||||
iconSize = (totalLength - yu) / iconCount;
|
|
||||||
} else {
|
} else {
|
||||||
int totalLength = ((m_position == Position::Top) || (m_position == Position::Bottom)) ? width() : height();
|
int totalLength = getScreenSize() - trayAreaSize(qApp->devicePixelRatio());
|
||||||
totalLength -= trayAreaSize();
|
|
||||||
// 减去3个分割线的宽度
|
// 减去3个分割线的宽度
|
||||||
if (m_fixedSpliter->isVisible())
|
if (m_fixedSpliter->isVisible())
|
||||||
totalLength -= SPLITER_SIZE;
|
totalLength -= SPLITER_SIZE;
|
||||||
@ -1193,34 +1152,8 @@ void MainPanelControl::resizeDockIcon()
|
|||||||
if (m_recentSpliter->isVisible())
|
if (m_recentSpliter->isVisible())
|
||||||
totalLength -= SPLITER_SIZE;
|
totalLength -= SPLITER_SIZE;
|
||||||
|
|
||||||
int pluginItemCount = 0;
|
|
||||||
int calcPluginItemCount = 0;
|
|
||||||
// 因为日期时间大小和其他插件大小有异,为了设置边距,在各插件中增加了一层布局
|
|
||||||
// 因此需要通过多一层布局来获取各插件
|
|
||||||
for (int i = 0; i < m_pluginLayout->count(); ++ i) {
|
|
||||||
QLayout *layout = m_pluginLayout->itemAt(i)->layout();
|
|
||||||
if (layout) {
|
|
||||||
PluginsItem *w = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
|
|
||||||
if (w) {
|
|
||||||
// 如果插件大小由自己决定,则不参与计算需要减去其宽度,其他插件则需要参与计算并计数
|
|
||||||
if ((m_position == Position::Top || m_position == Position::Bottom) && (w->sizeHint().height() != -1)) {
|
|
||||||
totalLength -= w->width();
|
|
||||||
} else if ((m_position == Position::Top || m_position == Position::Bottom) && (w->sizeHint().width() != -1)) {
|
|
||||||
totalLength -= w->height();
|
|
||||||
} else {
|
|
||||||
calcPluginItemCount ++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 所有插件个数,用于计算插件之间的间隔之和
|
|
||||||
pluginItemCount ++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 减去插件间隔大小, 只有一个插件或没有插件都是间隔20,2个或以上每多一个插件多间隔10
|
// 减去插件间隔大小, 只有一个插件或没有插件都是间隔20,2个或以上每多一个插件多间隔10
|
||||||
if (pluginItemCount > 1)
|
totalLength -= 20;
|
||||||
totalLength -= (pluginItemCount + 1) * 10;
|
|
||||||
else
|
|
||||||
totalLength -= 20;
|
|
||||||
|
|
||||||
if (totalLength < 0)
|
if (totalLength < 0)
|
||||||
return;
|
return;
|
||||||
@ -1236,19 +1169,6 @@ void MainPanelControl::resizeDockIcon()
|
|||||||
// icon宽度 = (总宽度-余数)/icon个数
|
// icon宽度 = (总宽度-余数)/icon个数
|
||||||
iconSize = (totalLength - yu) / iconCount;
|
iconSize = (totalLength - yu) / iconCount;
|
||||||
|
|
||||||
// 计算插件图标的最大或最小值
|
|
||||||
tray_item_size = qBound(20, iconSize, 40);
|
|
||||||
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
|
|
||||||
tray_item_size = qMin(tray_item_size,height());
|
|
||||||
tray_item_size = std::min(tray_item_size, height() - 20);
|
|
||||||
} else {
|
|
||||||
tray_item_size = qMin(tray_item_size,width());
|
|
||||||
tray_item_size = std::min(tray_item_size, width() - 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tray_item_size < 20)
|
|
||||||
tray_item_size = 20;
|
|
||||||
|
|
||||||
// 余数
|
// 余数
|
||||||
yu = (totalLength % iconCount);
|
yu = (totalLength % iconCount);
|
||||||
// icon宽度 = (总宽度-余数)/icon个数
|
// icon宽度 = (总宽度-余数)/icon个数
|
||||||
@ -1258,20 +1178,20 @@ void MainPanelControl::resizeDockIcon()
|
|||||||
iconSize = iconSize / qApp->devicePixelRatio();
|
iconSize = iconSize / qApp->devicePixelRatio();
|
||||||
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
|
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
|
||||||
if (iconSize >= height()) {
|
if (iconSize >= height()) {
|
||||||
calcuDockIconSize(height(), height(), tray_item_size);
|
calcuDockIconSize(height(), height());
|
||||||
} else {
|
} else {
|
||||||
calcuDockIconSize(iconSize, height(), tray_item_size);
|
calcuDockIconSize(iconSize, height());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (iconSize >= width()) {
|
if (iconSize >= width()) {
|
||||||
calcuDockIconSize(width(), width(), tray_item_size);
|
calcuDockIconSize(width(), width());
|
||||||
} else {
|
} else {
|
||||||
calcuDockIconSize(width(), iconSize, tray_item_size);
|
calcuDockIconSize(width(), iconSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainPanelControl::calcuDockIconSize(int w, int h, int traySize)
|
void MainPanelControl::calcuDockIconSize(int w, int h)
|
||||||
{
|
{
|
||||||
int appItemSize = qMin(w, h);
|
int appItemSize = qMin(w, h);
|
||||||
for (int i = 0; i < m_fixedAreaLayout->count(); ++i)
|
for (int i = 0; i < m_fixedAreaLayout->count(); ++i)
|
||||||
@ -1361,42 +1281,6 @@ void MainPanelControl::calcuDockIconSize(int w, int h, int traySize)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 因为日期时间大小和其他插件大小有异,为了设置边距,在各插件中增加了一层布局
|
|
||||||
// 因此需要通过多一层布局来获取各插件
|
|
||||||
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
|
|
||||||
// 三方插件
|
|
||||||
for (int i = 0; i < m_pluginLayout->count(); ++ i) {
|
|
||||||
QLayout *layout = m_pluginLayout->itemAt(i)->layout();
|
|
||||||
if (!layout || !layout->itemAt(0))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
PluginsItem *pItem = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
|
|
||||||
if (!pItem)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (pItem->sizeHint().height() == -1)
|
|
||||||
pItem->setFixedSize(traySize, traySize);
|
|
||||||
else if (pItem->sizeHint().height() > height())
|
|
||||||
pItem->resize(pItem->width(), height());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// 三方插件
|
|
||||||
for (int i = 0; i < m_pluginLayout->count(); i++) {
|
|
||||||
QLayout *layout = m_pluginLayout->itemAt(i)->layout();
|
|
||||||
if (!layout || !layout->itemAt(0))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
PluginsItem *pItem = qobject_cast<PluginsItem *>(layout->itemAt(0)->widget());
|
|
||||||
if (!pItem)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (pItem->sizeHint().width() == -1)
|
|
||||||
pItem->setFixedSize(traySize, traySize);
|
|
||||||
else if (pItem->sizeHint().width() > width())
|
|
||||||
pItem->resize(width(), pItem->height());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int appTopAndBottomMargin = 0;
|
int appTopAndBottomMargin = 0;
|
||||||
int appLeftAndRightMargin = 0;
|
int appLeftAndRightMargin = 0;
|
||||||
|
|
||||||
|
@ -51,7 +51,6 @@ public:
|
|||||||
void setPositonValue(Position position);
|
void setPositonValue(Position position);
|
||||||
void setDisplayMode(DisplayMode dislayMode);
|
void setDisplayMode(DisplayMode dislayMode);
|
||||||
void resizeDockIcon();
|
void resizeDockIcon();
|
||||||
void updatePluginsLayout();
|
|
||||||
void updateDockInter(DockInter *dockInter);
|
void updateDockInter(DockInter *dockInter);
|
||||||
|
|
||||||
QSize suitableSize(const Position &position, int screenSize, double deviceRatio) const;
|
QSize suitableSize(const Position &position, int screenSize, double deviceRatio) const;
|
||||||
@ -79,14 +78,14 @@ private:
|
|||||||
void removeFixedAreaItem(QWidget *wdg);
|
void removeFixedAreaItem(QWidget *wdg);
|
||||||
void removeAppAreaItem(QWidget *wdg);
|
void removeAppAreaItem(QWidget *wdg);
|
||||||
int getScreenSize() const;
|
int getScreenSize() const;
|
||||||
int trayAreaSize() const;
|
int trayAreaSize(qreal ratio) const;
|
||||||
|
|
||||||
// 拖拽相关
|
// 拖拽相关
|
||||||
void startDrag(DockItem *);
|
void startDrag(DockItem *);
|
||||||
DockItem *dropTargetItem(DockItem *sourceItem, QPoint point);
|
DockItem *dropTargetItem(DockItem *sourceItem, QPoint point);
|
||||||
void moveItem(DockItem *sourceItem, DockItem *targetItem);
|
void moveItem(DockItem *sourceItem, DockItem *targetItem);
|
||||||
void handleDragMove(QDragMoveEvent *e, bool isFilter);
|
void handleDragMove(QDragMoveEvent *e, bool isFilter);
|
||||||
void calcuDockIconSize(int w, int h, int traySize);
|
void calcuDockIconSize(int w, int h);
|
||||||
bool checkNeedShowDesktop();
|
bool checkNeedShowDesktop();
|
||||||
bool appIsOnDock(const QString &appDesktop);
|
bool appIsOnDock(const QString &appDesktop);
|
||||||
void dockRecentApp(DockItem *dockItem);
|
void dockRecentApp(DockItem *dockItem);
|
||||||
@ -129,8 +128,6 @@ private:
|
|||||||
QWidget *m_toolSonAreaWidget; // 工具区域,用来存放回收站等工具
|
QWidget *m_toolSonAreaWidget; // 工具区域,用来存放回收站等工具
|
||||||
QBoxLayout *m_toolSonLayout; // 工具区域布局
|
QBoxLayout *m_toolSonLayout; // 工具区域布局
|
||||||
|
|
||||||
QBoxLayout *m_pluginLayout; // 插件区域布局
|
|
||||||
|
|
||||||
Position m_position;
|
Position m_position;
|
||||||
QPointer<PlaceholderItem> m_placeholderItem;
|
QPointer<PlaceholderItem> m_placeholderItem;
|
||||||
QString m_draggingMimeKey;
|
QString m_draggingMimeKey;
|
||||||
|
@ -69,13 +69,6 @@ MainWindow::MainWindow(MultiScreenWorker *multiScreenWorker, QWidget *parent)
|
|||||||
m_mainPanel->insertItem(-1, item);
|
m_mainPanel->insertItem(-1, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::resizeEvent(QResizeEvent *event)
|
|
||||||
{
|
|
||||||
MainWindowBase::resizeEvent(event);
|
|
||||||
|
|
||||||
m_mainPanel->updatePluginsLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::initConnections()
|
void MainWindow::initConnections()
|
||||||
{
|
{
|
||||||
connect(DockItemManager::instance(), &DockItemManager::itemInserted, m_mainPanel, &MainPanelControl::insertItem, Qt::DirectConnection);
|
connect(DockItemManager::instance(), &DockItemManager::itemInserted, m_mainPanel, &MainPanelControl::insertItem, Qt::DirectConnection);
|
||||||
|
@ -64,7 +64,6 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
using QWidget::show;
|
using QWidget::show;
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
|
||||||
void initConnections();
|
void initConnections();
|
||||||
void resizeDockIcon();
|
void resizeDockIcon();
|
||||||
|
|
||||||
|
@ -87,12 +87,13 @@ typedef struct DragInfo{
|
|||||||
}
|
}
|
||||||
} DragInfo;
|
} DragInfo;
|
||||||
|
|
||||||
QuickPluginWindow::QuickPluginWindow(QWidget *parent)
|
QuickPluginWindow::QuickPluginWindow(Dock::DisplayMode displayMode, QWidget *parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
, m_mainLayout(new QBoxLayout(QBoxLayout::RightToLeft, this))
|
, m_mainLayout(new QBoxLayout(QBoxLayout::RightToLeft, this))
|
||||||
, m_position(Dock::Position::Bottom)
|
, m_position(Dock::Position::Bottom)
|
||||||
, m_dragInfo(new DragInfo)
|
, m_dragInfo(new DragInfo)
|
||||||
, m_dragEnterMimeData(nullptr)
|
, m_dragEnterMimeData(nullptr)
|
||||||
|
, m_displayMode(displayMode)
|
||||||
{
|
{
|
||||||
initUi();
|
initUi();
|
||||||
initConnection();
|
initConnection();
|
||||||
@ -115,7 +116,9 @@ void QuickPluginWindow::initUi()
|
|||||||
m_mainLayout->setDirection(QBoxLayout::RightToLeft);
|
m_mainLayout->setDirection(QBoxLayout::RightToLeft);
|
||||||
m_mainLayout->setContentsMargins(0, 0, 0, 0);
|
m_mainLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
m_mainLayout->setSpacing(ITEMSPACE);
|
m_mainLayout->setSpacing(ITEMSPACE);
|
||||||
m_mainLayout->addSpacing(STARTSPACE);
|
// 时尚模式下的插件右侧的区域增加空白的间隔
|
||||||
|
if (m_displayMode == Dock::DisplayMode::Fashion)
|
||||||
|
m_mainLayout->addSpacing(STARTSPACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickPluginWindow::setPositon(Position position)
|
void QuickPluginWindow::setPositon(Position position)
|
||||||
@ -397,6 +400,7 @@ void QuickPluginWindow::onRequestUpdate()
|
|||||||
itemWidget = pluginItems[item];
|
itemWidget = pluginItems[item];
|
||||||
} else {
|
} else {
|
||||||
itemWidget = new QuickDockItem(item, quickController->itemKey(item), this);
|
itemWidget = new QuickDockItem(item, quickController->itemKey(item), this);
|
||||||
|
itemWidget->setPosition(m_position);
|
||||||
updateDockItemSize(itemWidget);
|
updateDockItemSize(itemWidget);
|
||||||
itemWidget->installEventFilter(this);
|
itemWidget->installEventFilter(this);
|
||||||
itemWidget->setMouseTracking(true);
|
itemWidget->setMouseTracking(true);
|
||||||
@ -783,12 +787,20 @@ QSize QuickDockItem::suitableSize() const
|
|||||||
if (!pixmap.isNull()) {
|
if (!pixmap.isNull()) {
|
||||||
QSize size = pixmap.size();
|
QSize size = pixmap.size();
|
||||||
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
|
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
|
||||||
if (size.width() < widgetSize)
|
if (size.width() < widgetSize) {
|
||||||
size.setWidth(widgetSize);
|
size.setWidth(widgetSize);
|
||||||
|
} else {
|
||||||
|
int scaleWidth = size.width() / (size.height() / (widgetSize * 1.0f));
|
||||||
|
size.setWidth(scaleWidth);
|
||||||
|
}
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
if (size.height() < widgetSize)
|
if (size.height() < widgetSize) {
|
||||||
size.setHeight(widgetSize);
|
size.setHeight(widgetSize);
|
||||||
|
} else {
|
||||||
|
int scaleHeight = size.height() / (size.width() / (widgetSize * 1.0f));
|
||||||
|
size.setHeight(scaleHeight);
|
||||||
|
}
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ class QuickPluginWindow : public QWidget
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit QuickPluginWindow(QWidget *parent = nullptr);
|
explicit QuickPluginWindow(Dock::DisplayMode displayMode, QWidget *parent = nullptr);
|
||||||
~QuickPluginWindow() override;
|
~QuickPluginWindow() override;
|
||||||
|
|
||||||
void setPositon(Dock::Position position);
|
void setPositon(Dock::Position position);
|
||||||
@ -93,6 +93,7 @@ private:
|
|||||||
Dock::Position m_position;
|
Dock::Position m_position;
|
||||||
struct DragInfo *m_dragInfo;
|
struct DragInfo *m_dragInfo;
|
||||||
QuickPluginMimeData *m_dragEnterMimeData;
|
QuickPluginMimeData *m_dragEnterMimeData;
|
||||||
|
Dock::DisplayMode m_displayMode;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 用于在任务栏上显示的插件
|
// 用于在任务栏上显示的插件
|
||||||
|
@ -210,6 +210,7 @@ void SystemPluginWindow::onPluginItemUpdated(PluginsItemInterface *pluginItem)
|
|||||||
item->update();
|
item->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 图标的尺寸
|
||||||
#define ICONSIZE 20
|
#define ICONSIZE 20
|
||||||
#define ICONTEXTSPACE 6
|
#define ICONTEXTSPACE 6
|
||||||
#define PLUGIN_ITEM_DRAG_THRESHOLD 20
|
#define PLUGIN_ITEM_DRAG_THRESHOLD 20
|
||||||
@ -293,20 +294,21 @@ void StretchPluginsItem::paintEvent(QPaintEvent *event)
|
|||||||
|
|
||||||
QSize StretchPluginsItem::suitableSize(const Position &position) const
|
QSize StretchPluginsItem::suitableSize(const Position &position) const
|
||||||
{
|
{
|
||||||
int iconSize = static_cast<int>(ICONSIZE * (qApp->devicePixelRatio()));
|
|
||||||
if (position == Dock::Position::Top || position == Dock::Position::Bottom) {
|
if (position == Dock::Position::Top || position == Dock::Position::Bottom) {
|
||||||
int textWidth = 0;
|
int textWidth = 0;
|
||||||
if (needShowText())
|
if (needShowText())
|
||||||
textWidth = QFontMetrics(textFont(position)).boundingRect(m_pluginInter->pluginDisplayName()).width();
|
textWidth = QFontMetrics(textFont(position)).boundingRect(m_pluginInter->pluginDisplayName()).width();
|
||||||
return QSize(qMax(textWidth, iconSize) + (m_displayMode == Dock::DisplayMode::Efficient ? 5 : 10) * 2, -1);
|
return QSize(qMax(textWidth, ICONSIZE) + (m_displayMode == Dock::DisplayMode::Efficient ? 5 : 10) * 2, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int height = 6; // 图标上边距6
|
int height = 6; // 图标上边距6
|
||||||
height += iconSize; // 图标尺寸20
|
height += ICONSIZE; // 图标尺寸20
|
||||||
height += ICONTEXTSPACE; // 图标与文字间距6
|
if (m_displayMode == Dock::DisplayMode::Fashion) {
|
||||||
if (needShowText()) // 只有在显示文本的时候才计算文本的高度
|
height += ICONTEXTSPACE; // 图标与文字间距6
|
||||||
height += QFontMetrics(textFont(position)).height(); // 文本高度
|
if (needShowText()) // 只有在显示文本的时候才计算文本的高度
|
||||||
height += 4; // 下间距4
|
height += QFontMetrics(textFont(position)).height(); // 文本高度
|
||||||
|
}
|
||||||
|
height += 4; // 下间距4
|
||||||
return QSize(-1, height);
|
return QSize(-1, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -338,8 +340,6 @@ bool StretchPluginsItem::needShowText() const
|
|||||||
if (m_displayMode == Dock::DisplayMode::Efficient)
|
if (m_displayMode == Dock::DisplayMode::Efficient)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// 图标的尺寸
|
|
||||||
#define ICONSIZE 20
|
|
||||||
// 图标与文本,图标距离上方和文本距离下方的尺寸
|
// 图标与文本,图标距离上方和文本距离下方的尺寸
|
||||||
#define SPACEMARGIN 6
|
#define SPACEMARGIN 6
|
||||||
// 文本的高度
|
// 文本的高度
|
||||||
|
@ -56,7 +56,7 @@ TrayManagerWindow::TrayManagerWindow(QWidget *parent)
|
|||||||
, m_dockInter(new DockInter(dockServiceName(), dockServicePath(), QDBusConnection::sessionBus(), this))
|
, m_dockInter(new DockInter(dockServiceName(), dockServicePath(), QDBusConnection::sessionBus(), this))
|
||||||
, m_systemPluginWidget(new SystemPluginWindow(m_dockInter, this))
|
, m_systemPluginWidget(new SystemPluginWindow(m_dockInter, this))
|
||||||
, m_appPluginWidget(new QWidget(m_appPluginDatetimeWidget))
|
, m_appPluginWidget(new QWidget(m_appPluginDatetimeWidget))
|
||||||
, m_quickIconWidget(new QuickPluginWindow(m_appPluginWidget))
|
, m_quickIconWidget(new QuickPluginWindow(Dock::DisplayMode::Fashion, m_appPluginWidget))
|
||||||
, m_dateTimeWidget(new DateTimeDisplayer(false, m_appPluginDatetimeWidget))
|
, m_dateTimeWidget(new DateTimeDisplayer(false, m_appPluginDatetimeWidget))
|
||||||
, m_appPluginLayout(new QBoxLayout(QBoxLayout::Direction::LeftToRight, this))
|
, m_appPluginLayout(new QBoxLayout(QBoxLayout::Direction::LeftToRight, this))
|
||||||
, m_mainLayout(new QBoxLayout(QBoxLayout::Direction::LeftToRight, this))
|
, m_mainLayout(new QBoxLayout(QBoxLayout::Direction::LeftToRight, this))
|
||||||
@ -161,7 +161,6 @@ void TrayManagerWindow::setPositon(Dock::Position position)
|
|||||||
void TrayManagerWindow::setDisplayMode(Dock::DisplayMode displayMode)
|
void TrayManagerWindow::setDisplayMode(Dock::DisplayMode displayMode)
|
||||||
{
|
{
|
||||||
m_displayMode = displayMode;
|
m_displayMode = displayMode;
|
||||||
m_systemPluginWidget->setDisplayMode(displayMode);
|
|
||||||
// 如果当前模式为高效模式,则设置当前的trayView为其计算位置的参照
|
// 如果当前模式为高效模式,则设置当前的trayView为其计算位置的参照
|
||||||
if (displayMode == Dock::DisplayMode::Fashion) {
|
if (displayMode == Dock::DisplayMode::Fashion) {
|
||||||
ExpandIconWidget::popupTrayView()->setReferGridView(m_trayView);
|
ExpandIconWidget::popupTrayView()->setReferGridView(m_trayView);
|
||||||
|
@ -109,7 +109,7 @@ bool QuickSettingContainer::eventFilter(QObject *watched, QEvent *event)
|
|||||||
case QEvent::MouseButtonPress: {
|
case QEvent::MouseButtonPress: {
|
||||||
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
|
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
|
||||||
QuickSettingItem *item = qobject_cast<QuickSettingItem *>(watched);
|
QuickSettingItem *item = qobject_cast<QuickSettingItem *>(watched);
|
||||||
if (item) {
|
if (item && item->pluginItem()->flags() & PluginFlag::Attribute_CanDrag) {
|
||||||
m_dragInfo->dragPosition = mouseEvent->pos();
|
m_dragInfo->dragPosition = mouseEvent->pos();
|
||||||
m_dragInfo->dragItem = item;
|
m_dragInfo->dragItem = item;
|
||||||
m_dragInfo->pluginInter = item->pluginItem();
|
m_dragInfo->pluginInter = item->pluginItem();
|
||||||
|
@ -283,6 +283,8 @@ QPixmap SoundItem::pixmap(DGuiApplicationHelper::ColorType colorType, int iconWi
|
|||||||
if (colorType == DGuiApplicationHelper::LightType)
|
if (colorType == DGuiApplicationHelper::LightType)
|
||||||
iconString.append(PLUGIN_MIN_ICON_NAME);
|
iconString.append(PLUGIN_MIN_ICON_NAME);
|
||||||
|
|
||||||
|
iconString.append(".svg");
|
||||||
|
|
||||||
return ImageUtil::loadSvg(":/" + iconString, QSize(iconWidth, iconHeight));
|
return ImageUtil::loadSvg(":/" + iconString, QSize(iconWidth, iconHeight));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user