mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 09:23:03 +00:00
feat(plugin):plugin layout
This commit is contained in:
parent
0277d1404f
commit
c112e33bef
@ -65,27 +65,38 @@ MainPanelControl::~MainPanelControl()
|
|||||||
|
|
||||||
void MainPanelControl::init()
|
void MainPanelControl::init()
|
||||||
{
|
{
|
||||||
m_mainPanelLayout->setMargin(0);
|
// 主窗口
|
||||||
m_mainPanelLayout->setContentsMargins(0, 0, 0, 0);
|
|
||||||
m_fixedAreaLayout->setMargin(0);
|
|
||||||
m_fixedAreaLayout->setContentsMargins(0, 0, 0, 0);
|
|
||||||
m_pluginLayout->setMargin(0);
|
|
||||||
m_pluginLayout->setContentsMargins(10, 10, 10, 10);
|
|
||||||
m_trayAreaLayout->setMargin(0);
|
|
||||||
m_trayAreaLayout->setContentsMargins(10, 10, 10, 10);
|
|
||||||
m_appAreaSonLayout->setMargin(0);
|
|
||||||
m_appAreaSonLayout->setContentsMargins(0, 0, 0, 0);
|
|
||||||
m_mainPanelLayout->addWidget(m_fixedAreaWidget);
|
m_mainPanelLayout->addWidget(m_fixedAreaWidget);
|
||||||
m_fixedAreaWidget->setLayout(m_fixedAreaLayout);
|
|
||||||
m_mainPanelLayout->addWidget(m_appAreaWidget);
|
m_mainPanelLayout->addWidget(m_appAreaWidget);
|
||||||
m_mainPanelLayout->addWidget(m_trayAreaWidget);
|
m_mainPanelLayout->addWidget(m_trayAreaWidget);
|
||||||
m_trayAreaWidget->setLayout(m_trayAreaLayout);
|
|
||||||
m_mainPanelLayout->addWidget(m_pluginAreaWidget);
|
m_mainPanelLayout->addWidget(m_pluginAreaWidget);
|
||||||
m_pluginAreaWidget->setLayout(m_pluginLayout);
|
|
||||||
m_appAreaSonWidget->setLayout(m_appAreaSonLayout);
|
m_mainPanelLayout->setMargin(0);
|
||||||
|
m_mainPanelLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
|
m_mainPanelLayout->setSpacing(0);
|
||||||
|
|
||||||
|
// 固定区域
|
||||||
|
m_fixedAreaWidget->setLayout(m_fixedAreaLayout);
|
||||||
|
m_fixedAreaLayout->setMargin(0);
|
||||||
|
m_fixedAreaLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
m_fixedAreaLayout->setSpacing(0);
|
m_fixedAreaLayout->setSpacing(0);
|
||||||
|
|
||||||
|
// 应用程序
|
||||||
|
m_appAreaSonWidget->setLayout(m_appAreaSonLayout);
|
||||||
|
m_appAreaSonLayout->setMargin(0);
|
||||||
|
m_appAreaSonLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
m_appAreaSonLayout->setSpacing(0);
|
m_appAreaSonLayout->setSpacing(0);
|
||||||
|
|
||||||
|
// 托盘
|
||||||
|
m_trayAreaWidget->setLayout(m_trayAreaLayout);
|
||||||
|
m_trayAreaLayout->setMargin(0);
|
||||||
|
m_trayAreaLayout->setContentsMargins(10, 10, 10, 10);
|
||||||
m_trayAreaLayout->setSpacing(0);
|
m_trayAreaLayout->setSpacing(0);
|
||||||
|
|
||||||
|
// 插件
|
||||||
|
m_pluginAreaWidget->setLayout(m_pluginLayout);
|
||||||
|
m_pluginLayout->setMargin(0);
|
||||||
|
m_pluginLayout->setContentsMargins(0, 10, 10, 10);
|
||||||
m_pluginLayout->setSpacing(10);
|
m_pluginLayout->setSpacing(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,6 +122,7 @@ void MainPanelControl::updateMainPanelLayout()
|
|||||||
m_pluginLayout->setDirection(QBoxLayout::LeftToRight);
|
m_pluginLayout->setDirection(QBoxLayout::LeftToRight);
|
||||||
m_trayAreaLayout->setDirection(QBoxLayout::LeftToRight);
|
m_trayAreaLayout->setDirection(QBoxLayout::LeftToRight);
|
||||||
m_appAreaSonLayout->setDirection(QBoxLayout::LeftToRight);
|
m_appAreaSonLayout->setDirection(QBoxLayout::LeftToRight);
|
||||||
|
m_pluginLayout->setContentsMargins(0, 10, 10, 10);
|
||||||
break;
|
break;
|
||||||
case Position::Right:
|
case Position::Right:
|
||||||
case Position::Left:
|
case Position::Left:
|
||||||
@ -123,6 +135,7 @@ void MainPanelControl::updateMainPanelLayout()
|
|||||||
m_pluginLayout->setDirection(QBoxLayout::TopToBottom);
|
m_pluginLayout->setDirection(QBoxLayout::TopToBottom);
|
||||||
m_trayAreaLayout->setDirection(QBoxLayout::TopToBottom);
|
m_trayAreaLayout->setDirection(QBoxLayout::TopToBottom);
|
||||||
m_appAreaSonLayout->setDirection(QBoxLayout::TopToBottom);
|
m_appAreaSonLayout->setDirection(QBoxLayout::TopToBottom);
|
||||||
|
m_pluginLayout->setContentsMargins(10, 0, 10, 10);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -157,6 +170,8 @@ void MainPanelControl::addTrayAreaItem(int index, QWidget *wdg)
|
|||||||
void MainPanelControl::addPluginAreaItem(int index, QWidget *wdg)
|
void MainPanelControl::addPluginAreaItem(int index, QWidget *wdg)
|
||||||
{
|
{
|
||||||
m_pluginLayout->insertWidget(index, wdg);
|
m_pluginLayout->insertWidget(index, wdg);
|
||||||
|
QTimer::singleShot(50, this, [ = ] {m_pluginAreaWidget->adjustSize();});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainPanelControl::removeFixedAreaItem(QWidget *wdg)
|
void MainPanelControl::removeFixedAreaItem(QWidget *wdg)
|
||||||
@ -647,3 +662,8 @@ void MainPanelControl::onPositionChanged()
|
|||||||
{
|
{
|
||||||
updateMainPanelLayout();
|
updateMainPanelLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainPanelControl::itemUpdated(DockItem *item)
|
||||||
|
{
|
||||||
|
item->parentWidget()->adjustSize();
|
||||||
|
}
|
||||||
|
@ -90,6 +90,7 @@ public slots:
|
|||||||
void removeItem(DockItem *item);
|
void removeItem(DockItem *item);
|
||||||
void onDisplayModeChanged();
|
void onDisplayModeChanged();
|
||||||
void onPositionChanged();
|
void onPositionChanged();
|
||||||
|
void itemUpdated(DockItem *item);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QBoxLayout *m_mainPanelLayout;
|
QBoxLayout *m_mainPanelLayout;
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
#define SNI_WATCHER_SERVICE "org.kde.StatusNotifierWatcher"
|
#define SNI_WATCHER_SERVICE "org.kde.StatusNotifierWatcher"
|
||||||
#define SNI_WATCHER_PATH "/StatusNotifierWatcher"
|
#define SNI_WATCHER_PATH "/StatusNotifierWatcher"
|
||||||
|
|
||||||
#define MAINWINDOW_MAX_SIZE (100)
|
#define MAINWINDOW_MAX_SIZE DOCK_MAX_SIZE
|
||||||
#define MAINWINDOW_MIN_SIZE (40)
|
#define MAINWINDOW_MIN_SIZE (40)
|
||||||
#define DRAG_AREA_SIZE (5)
|
#define DRAG_AREA_SIZE (5)
|
||||||
|
|
||||||
@ -468,6 +468,7 @@ 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);
|
||||||
connect(DockItemManager::instance(), &DockItemManager::itemRemoved, m_mainPanel, &MainPanelControl::removeItem, Qt::DirectConnection);
|
connect(DockItemManager::instance(), &DockItemManager::itemRemoved, m_mainPanel, &MainPanelControl::removeItem, Qt::DirectConnection);
|
||||||
|
connect(DockItemManager::instance(), &DockItemManager::itemUpdated, m_mainPanel, &MainPanelControl::itemUpdated, Qt::DirectConnection);
|
||||||
connect(DockItemManager::instance(), &DockItemManager::requestRefershWindowVisible, this, &MainWindow::updatePanelVisible, Qt::QueuedConnection);
|
connect(DockItemManager::instance(), &DockItemManager::requestRefershWindowVisible, this, &MainWindow::updatePanelVisible, Qt::QueuedConnection);
|
||||||
connect(DockItemManager::instance(), &DockItemManager::requestWindowAutoHide, m_settings, &DockSettings::setAutoHide);
|
connect(DockItemManager::instance(), &DockItemManager::requestWindowAutoHide, m_settings, &DockSettings::setAutoHide);
|
||||||
connect(m_mainPanel, &MainPanelControl::itemMoved, DockItemManager::instance(), &DockItemManager::itemMoved, Qt::DirectConnection);
|
connect(m_mainPanel, &MainPanelControl::itemMoved, DockItemManager::instance(), &DockItemManager::itemMoved, Qt::DirectConnection);
|
||||||
|
@ -41,6 +41,9 @@ namespace Dock {
|
|||||||
|
|
||||||
// 插件最小尺寸,图标采用深色
|
// 插件最小尺寸,图标采用深色
|
||||||
#define PLUGIN_MIN_ICON_NAME "-dark"
|
#define PLUGIN_MIN_ICON_NAME "-dark"
|
||||||
|
|
||||||
|
// dock最大尺寸
|
||||||
|
#define DOCK_MAX_SIZE 100
|
||||||
///
|
///
|
||||||
/// \brief The DisplayMode enum
|
/// \brief The DisplayMode enum
|
||||||
/// spec dock display mode
|
/// spec dock display mode
|
||||||
|
@ -46,6 +46,8 @@ DatetimeWidget::DatetimeWidget(QWidget *parent)
|
|||||||
int dateHeight = fm_date.boundingRect("8888/88/88").height();
|
int dateHeight = fm_date.boundingRect("8888/88/88").height();
|
||||||
|
|
||||||
m_timeOffset = (timeHeight - dateHeight) / 2;
|
m_timeOffset = (timeHeight - dateHeight) / 2;
|
||||||
|
|
||||||
|
setMinimumSize(PLUGIN_BACKGROUND_MIN_SIZE, PLUGIN_BACKGROUND_MIN_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DatetimeWidget::set24HourFormat(const bool value)
|
void DatetimeWidget::set24HourFormat(const bool value)
|
||||||
@ -65,16 +67,35 @@ void DatetimeWidget::set24HourFormat(const bool value)
|
|||||||
|
|
||||||
QSize DatetimeWidget::sizeHint() const
|
QSize DatetimeWidget::sizeHint() const
|
||||||
{
|
{
|
||||||
QFontMetrics fm(qApp->font());
|
// 最大尺寸
|
||||||
|
QFontMetrics fm(TIME_FONT);
|
||||||
if (m_24HourFormat)
|
return fm.boundingRect("88:88 A.A.").size() + QSize(20, 20);
|
||||||
return fm.boundingRect("8888/88/88").size() + QSize(30, 10);
|
|
||||||
else
|
|
||||||
return fm.boundingRect("88:88 A.A.").size() + QSize(30, 20);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DatetimeWidget::resizeEvent(QResizeEvent *e)
|
void DatetimeWidget::resizeEvent(QResizeEvent *e)
|
||||||
{
|
{
|
||||||
|
const Dock::Position position = qApp->property(PROP_POSITION).value<Dock::Position>();
|
||||||
|
|
||||||
|
QFontMetrics fm(TIME_FONT);
|
||||||
|
QString format;
|
||||||
|
if (m_24HourFormat)
|
||||||
|
format = "hh:mm";
|
||||||
|
else
|
||||||
|
format = "hh:mm AP";
|
||||||
|
|
||||||
|
QSize timeSize = fm.boundingRect(QDateTime::currentDateTime().toString(format)).size();
|
||||||
|
QSize dateSize = QFontMetrics(DATE_FONT).boundingRect("0000/00/00").size();
|
||||||
|
if (timeSize.width() < dateSize.width())
|
||||||
|
timeSize.setWidth(dateSize.width());
|
||||||
|
|
||||||
|
if (position == Dock::Bottom || position == Dock::Top) {
|
||||||
|
setMaximumWidth(timeSize.width());
|
||||||
|
setMaximumHeight(QWIDGETSIZE_MAX);
|
||||||
|
} else {
|
||||||
|
setMaximumWidth(QWIDGETSIZE_MAX);
|
||||||
|
setMaximumHeight(timeSize.height() * 2);
|
||||||
|
}
|
||||||
|
|
||||||
QWidget::resizeEvent(e);
|
QWidget::resizeEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,9 +103,6 @@ void DatetimeWidget::paintEvent(QPaintEvent *e)
|
|||||||
{
|
{
|
||||||
Q_UNUSED(e);
|
Q_UNUSED(e);
|
||||||
|
|
||||||
const auto ratio = devicePixelRatioF();
|
|
||||||
const Dock::DisplayMode displayMode = qApp->property(PROP_DISPLAY_MODE).value<Dock::DisplayMode>();
|
|
||||||
const Dock::Position position = qApp->property(PROP_POSITION).value<Dock::Position>();
|
|
||||||
const QDateTime current = QDateTime::currentDateTime();
|
const QDateTime current = QDateTime::currentDateTime();
|
||||||
|
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
|
@ -73,7 +73,7 @@ void WiredItem::paintEvent(QPaintEvent *e)
|
|||||||
|
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
const auto ratio = devicePixelRatioF();
|
const auto ratio = devicePixelRatioF();
|
||||||
const QRectF &rf = QRectF(pos(), QSize(std::min(width(), height()), std::min(width(), height())));
|
const QRectF &rf = rect();
|
||||||
const QRectF &rfp = QRectF(m_icon.rect());
|
const QRectF &rfp = QRectF(m_icon.rect());
|
||||||
const int x = rf.center().x() - rfp.center().x() / ratio;
|
const int x = rf.center().x() - rfp.center().x() / ratio;
|
||||||
const int y = rf.center().y() - rfp.center().y() / ratio;
|
const int y = rf.center().y() - rfp.center().y() / ratio;
|
||||||
@ -82,6 +82,16 @@ void WiredItem::paintEvent(QPaintEvent *e)
|
|||||||
|
|
||||||
void WiredItem::resizeEvent(QResizeEvent *e)
|
void WiredItem::resizeEvent(QResizeEvent *e)
|
||||||
{
|
{
|
||||||
|
const Dock::Position position = qApp->property(PROP_POSITION).value<Dock::Position>();
|
||||||
|
// 保持横纵比
|
||||||
|
if (position == Dock::Bottom || position == Dock::Top) {
|
||||||
|
setMaximumWidth(height());
|
||||||
|
setMaximumHeight(QWIDGETSIZE_MAX);
|
||||||
|
} else {
|
||||||
|
setMaximumHeight(width());
|
||||||
|
setMaximumWidth(QWIDGETSIZE_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
DeviceItem::resizeEvent(e);
|
DeviceItem::resizeEvent(e);
|
||||||
|
|
||||||
m_delayTimer->start();
|
m_delayTimer->start();
|
||||||
@ -133,7 +143,7 @@ void WiredItem::reloadIcon()
|
|||||||
const quint64 index = QDateTime::currentMSecsSinceEpoch() / 200;
|
const quint64 index = QDateTime::currentMSecsSinceEpoch() / 200;
|
||||||
const int num = (index % 5) + 1;
|
const int num = (index % 5) + 1;
|
||||||
m_icon = QIcon(QString(":/wired/resources/wired/network-wired-symbolic-connecting%1.svg").arg(num))
|
m_icon = QIcon(QString(":/wired/resources/wired/network-wired-symbolic-connecting%1.svg").arg(num))
|
||||||
.pixmap(iconSize * ratio, iconSize * ratio);
|
.pixmap(iconSize * ratio, iconSize * ratio);
|
||||||
m_icon.setDevicePixelRatio(ratio);
|
m_icon.setDevicePixelRatio(ratio);
|
||||||
update();
|
update();
|
||||||
return;
|
return;
|
||||||
|
@ -49,9 +49,9 @@ WirelessItem::WirelessItem(WirelessDevice *device)
|
|||||||
m_wirelessTips->setText(tr("No Network"));
|
m_wirelessTips->setText(tr("No Network"));
|
||||||
|
|
||||||
connect(m_refreshTimer, &QTimer::timeout, this, &WirelessItem::onRefreshTimeout);
|
connect(m_refreshTimer, &QTimer::timeout, this, &WirelessItem::onRefreshTimeout);
|
||||||
connect(m_device, static_cast<void (NetworkDevice::*) (const QString &statStr) const>(&NetworkDevice::statusChanged), this, &WirelessItem::deviceStateChanged);
|
connect(m_device, static_cast<void (NetworkDevice::*)(const QString &statStr) const>(&NetworkDevice::statusChanged), this, &WirelessItem::deviceStateChanged);
|
||||||
connect(static_cast<WirelessDevice *>(m_device.data()), &WirelessDevice::activeApInfoChanged, m_refreshTimer, static_cast<void (QTimer::*) ()>(&QTimer::start));
|
connect(static_cast<WirelessDevice *>(m_device.data()), &WirelessDevice::activeApInfoChanged, m_refreshTimer, static_cast<void (QTimer::*)()>(&QTimer::start));
|
||||||
connect(static_cast<WirelessDevice *>(m_device.data()), &WirelessDevice::activeWirelessConnectionInfoChanged, m_refreshTimer, static_cast<void (QTimer::*) ()>(&QTimer::start));
|
connect(static_cast<WirelessDevice *>(m_device.data()), &WirelessDevice::activeWirelessConnectionInfoChanged, m_refreshTimer, static_cast<void (QTimer::*)()>(&QTimer::start));
|
||||||
|
|
||||||
//QMetaObject::invokeMethod(this, "init", Qt::QueuedConnection);
|
//QMetaObject::invokeMethod(this, "init", Qt::QueuedConnection);
|
||||||
QTimer::singleShot(0, this, &WirelessItem::refreshTips);
|
QTimer::singleShot(0, this, &WirelessItem::refreshTips);
|
||||||
@ -104,8 +104,7 @@ void WirelessItem::paintEvent(QPaintEvent *e)
|
|||||||
pixmap.setDevicePixelRatio(ratio);
|
pixmap.setDevicePixelRatio(ratio);
|
||||||
|
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
if (displayMode == Dock::Fashion)
|
if (displayMode == Dock::Fashion) {
|
||||||
{
|
|
||||||
QPixmap pixmap = backgroundPix(iconSize * ratio);
|
QPixmap pixmap = backgroundPix(iconSize * ratio);
|
||||||
pixmap.setDevicePixelRatio(ratio);
|
pixmap.setDevicePixelRatio(ratio);
|
||||||
painter.drawPixmap(rect().center() - pixmap.rect().center() / ratio, pixmap);
|
painter.drawPixmap(rect().center() - pixmap.rect().center() / ratio, pixmap);
|
||||||
@ -122,6 +121,16 @@ void WirelessItem::resizeEvent(QResizeEvent *e)
|
|||||||
{
|
{
|
||||||
DeviceItem::resizeEvent(e);
|
DeviceItem::resizeEvent(e);
|
||||||
|
|
||||||
|
const Dock::Position position = qApp->property(PROP_POSITION).value<Dock::Position>();
|
||||||
|
// 保持横纵比
|
||||||
|
if (position == Dock::Bottom || position == Dock::Top) {
|
||||||
|
setMaximumWidth(height());
|
||||||
|
setMaximumHeight(QWIDGETSIZE_MAX);
|
||||||
|
} else {
|
||||||
|
setMaximumHeight(width());
|
||||||
|
setMaximumWidth(QWIDGETSIZE_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
m_icons.clear();
|
m_icons.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,8 +197,8 @@ const QPixmap WirelessItem::iconPix(const Dock::DisplayMode displayMode, const i
|
|||||||
}
|
}
|
||||||
|
|
||||||
QString key = QString("wireless-%1%2")
|
QString key = QString("wireless-%1%2")
|
||||||
.arg(type)
|
.arg(type)
|
||||||
.arg(displayMode == Dock::Fashion ? "" : "-symbolic");
|
.arg(displayMode == Dock::Fashion ? "" : "-symbolic");
|
||||||
|
|
||||||
if (state == NetworkDevice::DeviceStatus::Activated && !NetworkPlugin::isConnectivity()) {
|
if (state == NetworkDevice::DeviceStatus::Activated && !NetworkPlugin::isConnectivity()) {
|
||||||
key = "network-wireless-offline-symbolic";
|
key = "network-wireless-offline-symbolic";
|
||||||
@ -238,7 +247,7 @@ void WirelessItem::init()
|
|||||||
connect(m_APList, &WirelessList::requestWirelessScan, this, &WirelessItem::requestWirelessScan);
|
connect(m_APList, &WirelessList::requestWirelessScan, this, &WirelessItem::requestWirelessScan);
|
||||||
connect(m_APList, &WirelessList::requestSetAppletVisible, this, &WirelessItem::requestSetAppletVisible);
|
connect(m_APList, &WirelessList::requestSetAppletVisible, this, &WirelessItem::requestSetAppletVisible);
|
||||||
|
|
||||||
QTimer::singleShot(0, this, [=]() {
|
QTimer::singleShot(0, this, [ = ]() {
|
||||||
m_refreshTimer->start();
|
m_refreshTimer->start();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,6 @@ OnboardItem::OnboardItem(QWidget *parent)
|
|||||||
{
|
{
|
||||||
setMouseTracking(true);
|
setMouseTracking(true);
|
||||||
setMinimumSize(PLUGIN_BACKGROUND_MIN_SIZE, PLUGIN_BACKGROUND_MIN_SIZE);
|
setMinimumSize(PLUGIN_BACKGROUND_MIN_SIZE, PLUGIN_BACKGROUND_MIN_SIZE);
|
||||||
setMaximumSize(PLUGIN_BACKGROUND_MAX_SIZE, PLUGIN_BACKGROUND_MAX_SIZE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize OnboardItem::sizeHint() const
|
QSize OnboardItem::sizeHint() const
|
||||||
@ -61,14 +60,6 @@ void OnboardItem::paintEvent(QPaintEvent *e)
|
|||||||
|
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
if (std::min(width(), height()) > PLUGIN_BACKGROUND_MIN_SIZE) {
|
if (std::min(width(), height()) > PLUGIN_BACKGROUND_MIN_SIZE) {
|
||||||
painter.setRenderHint(QPainter::Antialiasing, true);
|
|
||||||
painter.setOpacity(0.5);
|
|
||||||
|
|
||||||
DStyleHelper dstyle(style());
|
|
||||||
const int radius = dstyle.pixelMetric(DStyle::PM_FrameRadius);
|
|
||||||
|
|
||||||
QPainterPath path;
|
|
||||||
path.addRoundedRect(rect(), radius, radius);
|
|
||||||
|
|
||||||
QColor color = QColor::fromRgb(40, 40, 40);;
|
QColor color = QColor::fromRgb(40, 40, 40);;
|
||||||
|
|
||||||
@ -80,6 +71,19 @@ void OnboardItem::paintEvent(QPaintEvent *e)
|
|||||||
color = QColor::fromRgb(20, 20, 20);
|
color = QColor::fromRgb(20, 20, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||||
|
painter.setOpacity(0.5);
|
||||||
|
|
||||||
|
DStyleHelper dstyle(style());
|
||||||
|
const int radius = dstyle.pixelMetric(DStyle::PM_FrameRadius);
|
||||||
|
|
||||||
|
QPainterPath path;
|
||||||
|
|
||||||
|
int minSize = std::min(width(), height());
|
||||||
|
QRect rc(0, 0, minSize, minSize);
|
||||||
|
rc.moveTo(rect().center() - rc.center());
|
||||||
|
|
||||||
|
path.addRoundedRect(rc, radius, radius);
|
||||||
painter.fillPath(path, color);
|
painter.fillPath(path, color);
|
||||||
} else {
|
} else {
|
||||||
iconName.append(PLUGIN_MIN_ICON_NAME);
|
iconName.append(PLUGIN_MIN_ICON_NAME);
|
||||||
@ -142,10 +146,10 @@ void OnboardItem::resizeEvent(QResizeEvent *event)
|
|||||||
// 保持横纵比
|
// 保持横纵比
|
||||||
if (position == Dock::Bottom || position == Dock::Top) {
|
if (position == Dock::Bottom || position == Dock::Top) {
|
||||||
setMaximumWidth(height());
|
setMaximumWidth(height());
|
||||||
setMaximumHeight(PLUGIN_BACKGROUND_MAX_SIZE);
|
setMaximumHeight(QWIDGETSIZE_MAX);
|
||||||
} else {
|
} else {
|
||||||
setMaximumHeight(width());
|
setMaximumHeight(width());
|
||||||
setMaximumWidth(PLUGIN_BACKGROUND_MAX_SIZE);
|
setMaximumWidth(QWIDGETSIZE_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget::resizeEvent(event);
|
QWidget::resizeEvent(event);
|
||||||
|
@ -37,13 +37,12 @@ PluginWidget::PluginWidget(QWidget *parent)
|
|||||||
, m_pressed(false)
|
, m_pressed(false)
|
||||||
{
|
{
|
||||||
setMouseTracking(true);
|
setMouseTracking(true);
|
||||||
setMinimumSize(PLUGIN_ICON_MIN_SIZE, PLUGIN_ICON_MIN_SIZE);
|
setMinimumSize(PLUGIN_BACKGROUND_MIN_SIZE, PLUGIN_BACKGROUND_MIN_SIZE);
|
||||||
setMaximumSize(PLUGIN_BACKGROUND_MAX_SIZE, PLUGIN_BACKGROUND_MAX_SIZE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize PluginWidget::sizeHint() const
|
QSize PluginWidget::sizeHint() const
|
||||||
{
|
{
|
||||||
return QSize(PLUGIN_ICON_MIN_SIZE, PLUGIN_ICON_MIN_SIZE);
|
return QSize(PLUGIN_BACKGROUND_MAX_SIZE, PLUGIN_BACKGROUND_MAX_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PluginWidget::paintEvent(QPaintEvent *e)
|
void PluginWidget::paintEvent(QPaintEvent *e)
|
||||||
@ -56,17 +55,18 @@ void PluginWidget::paintEvent(QPaintEvent *e)
|
|||||||
|
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
|
|
||||||
QColor color = QColor::fromRgb(40, 40, 40);;
|
|
||||||
|
|
||||||
if (m_hover) {
|
|
||||||
color = QColor::fromRgb(60, 60, 60);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_pressed) {
|
|
||||||
color = QColor::fromRgb(20, 20, 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rect().height() > PLUGIN_BACKGROUND_MIN_SIZE) {
|
if (rect().height() > PLUGIN_BACKGROUND_MIN_SIZE) {
|
||||||
|
|
||||||
|
QColor color = QColor::fromRgb(40, 40, 40);;
|
||||||
|
|
||||||
|
if (m_hover) {
|
||||||
|
color = QColor::fromRgb(60, 60, 60);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_pressed) {
|
||||||
|
color = QColor::fromRgb(20, 20, 20);
|
||||||
|
}
|
||||||
|
|
||||||
painter.setRenderHint(QPainter::Antialiasing, true);
|
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||||
painter.setOpacity(0.5);
|
painter.setOpacity(0.5);
|
||||||
|
|
||||||
@ -74,7 +74,12 @@ void PluginWidget::paintEvent(QPaintEvent *e)
|
|||||||
const int radius = dstyle.pixelMetric(DStyle::PM_FrameRadius);
|
const int radius = dstyle.pixelMetric(DStyle::PM_FrameRadius);
|
||||||
|
|
||||||
QPainterPath path;
|
QPainterPath path;
|
||||||
path.addRoundedRect(rect(), radius, radius);
|
|
||||||
|
int minSize = std::min(width(), height());
|
||||||
|
QRect rc(0, 0, minSize, minSize);
|
||||||
|
rc.moveTo(rect().center() - rc.center());
|
||||||
|
|
||||||
|
path.addRoundedRect(rc, radius, radius);
|
||||||
painter.fillPath(path, color);
|
painter.fillPath(path, color);
|
||||||
} else {
|
} else {
|
||||||
// 最小尺寸时,不画背景,采用深色图标
|
// 最小尺寸时,不画背景,采用深色图标
|
||||||
@ -137,11 +142,11 @@ void PluginWidget::resizeEvent(QResizeEvent *event)
|
|||||||
const Dock::Position position = qApp->property(PROP_POSITION).value<Dock::Position>();
|
const Dock::Position position = qApp->property(PROP_POSITION).value<Dock::Position>();
|
||||||
// 保持横纵比
|
// 保持横纵比
|
||||||
if (position == Dock::Bottom || position == Dock::Top) {
|
if (position == Dock::Bottom || position == Dock::Top) {
|
||||||
setMinimumWidth(height());
|
setMaximumWidth(height());
|
||||||
setMinimumHeight(PLUGIN_ICON_MIN_SIZE);
|
setMaximumHeight(QWIDGETSIZE_MAX);
|
||||||
} else {
|
} else {
|
||||||
setMinimumWidth(PLUGIN_ICON_MIN_SIZE);
|
setMaximumHeight(width());
|
||||||
setMinimumHeight(width());
|
setMaximumWidth(QWIDGETSIZE_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget::resizeEvent(event);
|
QWidget::resizeEvent(event);
|
||||||
|
@ -47,6 +47,8 @@ TrashWidget::TrashWidget(QWidget *parent)
|
|||||||
|
|
||||||
updateIcon();
|
updateIcon();
|
||||||
setAcceptDrops(true);
|
setAcceptDrops(true);
|
||||||
|
|
||||||
|
setMinimumSize(PLUGIN_ICON_MIN_SIZE, PLUGIN_ICON_MIN_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget *TrashWidget::popupApplet()
|
QWidget *TrashWidget::popupApplet()
|
||||||
@ -56,7 +58,7 @@ QWidget *TrashWidget::popupApplet()
|
|||||||
|
|
||||||
QSize TrashWidget::sizeHint() const
|
QSize TrashWidget::sizeHint() const
|
||||||
{
|
{
|
||||||
return QSize(26, 26);
|
return QSize(DOCK_MAX_SIZE, DOCK_MAX_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString TrashWidget::contextMenu() const
|
const QString TrashWidget::contextMenu() const
|
||||||
@ -172,6 +174,16 @@ void TrashWidget::paintEvent(QPaintEvent *e)
|
|||||||
|
|
||||||
void TrashWidget::resizeEvent(QResizeEvent *e)
|
void TrashWidget::resizeEvent(QResizeEvent *e)
|
||||||
{
|
{
|
||||||
|
const Dock::Position position = qApp->property(PROP_POSITION).value<Dock::Position>();
|
||||||
|
// 保持横纵比
|
||||||
|
if (position == Dock::Bottom || position == Dock::Top) {
|
||||||
|
setMaximumWidth(height());
|
||||||
|
setMaximumHeight(QWIDGETSIZE_MAX);
|
||||||
|
} else {
|
||||||
|
setMaximumHeight(width());
|
||||||
|
setMaximumWidth(QWIDGETSIZE_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
QWidget::resizeEvent(e);
|
QWidget::resizeEvent(e);
|
||||||
|
|
||||||
updateIcon();
|
updateIcon();
|
||||||
@ -188,7 +200,7 @@ void TrashWidget::updateIcon()
|
|||||||
if (displayMode == Dock::Efficient)
|
if (displayMode == Dock::Efficient)
|
||||||
iconString.append("-symbolic");
|
iconString.append("-symbolic");
|
||||||
|
|
||||||
const int size = displayMode == Dock::Fashion ? std::min(width(), height()) * 0.8 : 16;
|
const int size = std::min(width(), height()) ;
|
||||||
QIcon icon = QIcon::fromTheme(iconString);
|
QIcon icon = QIcon::fromTheme(iconString);
|
||||||
m_icon = icon.pixmap(size * devicePixelRatioF(), size * devicePixelRatioF());
|
m_icon = icon.pixmap(size * devicePixelRatioF(), size * devicePixelRatioF());
|
||||||
m_icon.setDevicePixelRatio(devicePixelRatioF());
|
m_icon.setDevicePixelRatio(devicePixelRatioF());
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "constants.h"
|
||||||
#include "abstracttraywidget.h"
|
#include "abstracttraywidget.h"
|
||||||
|
|
||||||
#include <xcb/xproto.h>
|
#include <xcb/xproto.h>
|
||||||
@ -26,8 +27,8 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
AbstractTrayWidget::AbstractTrayWidget(QWidget *parent, Qt::WindowFlags f)
|
AbstractTrayWidget::AbstractTrayWidget(QWidget *parent, Qt::WindowFlags f)
|
||||||
: QWidget(parent, f),
|
: QWidget(parent, f)
|
||||||
m_handleMouseReleaseTimer(new QTimer(this))
|
, m_handleMouseReleaseTimer(new QTimer(this))
|
||||||
{
|
{
|
||||||
m_handleMouseReleaseTimer->setSingleShot(true);
|
m_handleMouseReleaseTimer->setSingleShot(true);
|
||||||
m_handleMouseReleaseTimer->setInterval(100);
|
m_handleMouseReleaseTimer->setInterval(100);
|
||||||
@ -70,8 +71,8 @@ void AbstractTrayWidget::mouseReleaseEvent(QMouseEvent *e)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void AbstractTrayWidget::handleMouseRelease() {
|
void AbstractTrayWidget::handleMouseRelease()
|
||||||
|
{
|
||||||
Q_ASSERT(sender() == m_handleMouseReleaseTimer);
|
Q_ASSERT(sender() == m_handleMouseReleaseTimer);
|
||||||
|
|
||||||
// do not dealwith all mouse event of SystemTray, class SystemTrayItem will handle it
|
// do not dealwith all mouse event of SystemTray, class SystemTrayItem will handle it
|
||||||
@ -116,3 +117,18 @@ const QRect AbstractTrayWidget::perfectIconRect() const
|
|||||||
|
|
||||||
return iconRect;
|
return iconRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AbstractTrayWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
{
|
||||||
|
QWidget::resizeEvent(event);
|
||||||
|
|
||||||
|
const Dock::Position position = qApp->property(PROP_POSITION).value<Dock::Position>();
|
||||||
|
// 保持横纵比
|
||||||
|
if (position == Dock::Bottom || position == Dock::Top) {
|
||||||
|
setMaximumWidth(height());
|
||||||
|
setMaximumHeight(QWIDGETSIZE_MAX);
|
||||||
|
} else {
|
||||||
|
setMaximumHeight(width());
|
||||||
|
setMaximumWidth(QWIDGETSIZE_MAX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -58,6 +58,7 @@ protected:
|
|||||||
|
|
||||||
void handleMouseRelease();
|
void handleMouseRelease();
|
||||||
const QRect perfectIconRect() const;
|
const QRect perfectIconRect() const;
|
||||||
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTimer *m_handleMouseReleaseTimer;
|
QTimer *m_handleMouseReleaseTimer;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user