From 8d63061963beaba7c66779fc68184d8d2a19d9a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=8D=9A=E6=96=87?= Date: Thu, 23 Jun 2016 14:28:47 +0800 Subject: [PATCH] optimize ui effects Change-Id: I71e9ccadad67b2deed61c4ce0b6271fa35499f3f --- frame/controller/dockitemcontroller.cpp | 2 +- frame/item/appitem.cpp | 93 +++++++++++++++++++------ frame/item/appitem.h | 5 +- frame/item/dockitem.cpp | 6 ++ frame/item/dockitem.h | 2 + frame/item/launcheritem.cpp | 9 ++- frame/item/launcheritem.h | 3 +- frame/panel/mainpanel.cpp | 12 ++-- frame/util/docksettings.cpp | 2 + 9 files changed, 102 insertions(+), 32 deletions(-) diff --git a/frame/controller/dockitemcontroller.cpp b/frame/controller/dockitemcontroller.cpp index 8983e44f2..91a402e4f 100644 --- a/frame/controller/dockitemcontroller.cpp +++ b/frame/controller/dockitemcontroller.cpp @@ -58,7 +58,7 @@ DockItemController::DockItemController(QObject *parent) m_pluginsInter(new DockPluginsController(this)), m_placeholderItem(new PlaceholderItem) { - m_placeholderItem->hide(); +// m_placeholderItem->hide(); m_itemList.append(new LauncherItem); for (auto entry : m_appInter->entries()) diff --git a/frame/item/appitem.cpp b/frame/item/appitem.cpp index ae9e0cebc..e460e97df 100644 --- a/frame/item/appitem.cpp +++ b/frame/item/appitem.cpp @@ -20,7 +20,9 @@ AppItem::AppItem(const QDBusObjectPath &entry, QWidget *parent) initClientManager(); m_id = m_itemEntry->id(); + m_active = m_itemEntry->active(); + connect(m_itemEntry, &DBusDockEntry::ActiveChanged, this, &AppItem::activeChanged); connect(m_itemEntry, &DBusDockEntry::TitlesChanged, this, &AppItem::updateTitle); connect(m_itemEntry, &DBusDockEntry::ActiveChanged, this, static_cast(&AppItem::update)); @@ -45,7 +47,10 @@ int AppItem::iconBaseSize() int AppItem::itemBaseWidth() { - return itemBaseHeight() * 1.4; + if (DockDisplayMode == Dock::Fashion) + return itemBaseHeight() * 1.1; + else + return itemBaseHeight() * 1.4; } int AppItem::itemBaseHeight() @@ -57,7 +62,7 @@ void AppItem::paintEvent(QPaintEvent *e) { DockItem::paintEvent(e); - if (m_draging || !m_itemEntry->isValid()) + if (m_draging) return; QPainter painter(this); @@ -68,29 +73,69 @@ void AppItem::paintEvent(QPaintEvent *e) // draw background const QRect backgroundRect = itemRect.marginsRemoved(QMargins(1, 2, 1, 2)); - if (m_itemEntry->active()) + if (DockDisplayMode == Efficient) { - painter.fillRect(backgroundRect, QColor(70, 100, 200, 120)); - - const int activeLineWidth = 3; - QRect activeRect = backgroundRect; - switch (DockPosition) + if (m_active) { - case Top: activeRect.setBottom(activeRect.top() + activeLineWidth); break; - case Bottom: activeRect.setTop(activeRect.bottom() - activeLineWidth); break; - case Left: activeRect.setRight(activeRect.left() + activeLineWidth); break; - case Right: activeRect.setLeft(activeRect.right() - activeLineWidth); break; - } + painter.fillRect(backgroundRect, QColor(70, 100, 200, 120)); - painter.fillRect(activeRect, QColor(47, 168, 247)); + const int activeLineWidth = 3; + QRect activeRect = backgroundRect; + switch (DockPosition) + { + case Top: activeRect.setBottom(activeRect.top() + activeLineWidth); break; + case Bottom: activeRect.setTop(activeRect.bottom() - activeLineWidth); break; + case Left: activeRect.setRight(activeRect.left() + activeLineWidth); break; + case Right: activeRect.setLeft(activeRect.right() - activeLineWidth); break; + } + + painter.fillRect(activeRect, QColor(47, 168, 247)); + } + else if (!m_titles.isEmpty()) + painter.fillRect(backgroundRect, QColor(255, 255, 255, 50)); + // else + // painter.fillRect(backgroundRect, Qt::gray); + } + else + { + if (!m_titles.isEmpty()) + { + const int activeLineWidth = 1; + const int activeLineLength = 20; + QRect activeRect = itemRect; + switch (DockPosition) + { + case Top: + activeRect.setBottom(activeRect.top() + activeLineWidth); + activeRect.setWidth(activeLineLength); + activeRect.moveLeft((itemRect.width() - activeRect.width()) / 2); + break; + case Bottom: + activeRect.setTop(activeRect.bottom() - activeLineWidth); + activeRect.setWidth(activeLineLength); + activeRect.moveLeft((itemRect.width() - activeRect.width()) / 2); + break; + case Left: + activeRect.setRight(activeRect.left() + activeLineWidth); + activeRect.setHeight(activeLineLength); + activeRect.moveTop((itemRect.height() - activeRect.height()) / 2); + break; + case Right: + activeRect.setLeft(activeRect.right() - activeLineWidth); + activeRect.setHeight(activeLineLength); + activeRect.moveTop((itemRect.height() - activeRect.height()) / 2); + break; + } + + painter.fillRect(activeRect, QColor(163, 167, 166)); + } } - else if (!m_titles.isEmpty()) - painter.fillRect(backgroundRect, QColor(255, 255, 255, 50)); -// else -// painter.fillRect(backgroundRect, Qt::gray); // draw icon - painter.drawPixmap(itemRect.center() - m_icon.rect().center(), m_icon); + if (DockDisplayMode == Efficient) + painter.drawPixmap(itemRect.center() - m_smallIcon.rect().center(), m_smallIcon); + else + painter.drawPixmap(itemRect.center() - m_largeIcon.rect().center(), m_largeIcon); } void AppItem::mouseReleaseEvent(QMouseEvent *e) @@ -195,7 +240,13 @@ void AppItem::updateTitle() void AppItem::updateIcon() { const QString icon = m_itemEntry->icon(); - const int iconSize = qMin(width(), height()) * 0.7; + const int iconSize = qMin(width(), height()); - m_icon = ThemeAppIcon::getIcon(icon, iconSize); + m_smallIcon = ThemeAppIcon::getIcon(icon, iconSize * 0.6); + m_largeIcon = ThemeAppIcon::getIcon(icon, iconSize * 0.8); +} + +void AppItem::activeChanged() +{ + m_active = !m_active; } diff --git a/frame/item/appitem.h b/frame/item/appitem.h index d3854fa17..60b084455 100644 --- a/frame/item/appitem.h +++ b/frame/item/appitem.h @@ -34,15 +34,18 @@ private: private slots: void updateTitle(); void updateIcon(); + void activeChanged(); private: DBusDockEntry *m_itemEntry; bool m_draging; + bool m_active; WindowDict m_titles; QString m_id; - QPixmap m_icon; + QPixmap m_smallIcon; + QPixmap m_largeIcon; static int IconBaseSize; static QPoint MousePressPos; diff --git a/frame/item/dockitem.cpp b/frame/item/dockitem.cpp index 9309dab88..d52166975 100644 --- a/frame/item/dockitem.cpp +++ b/frame/item/dockitem.cpp @@ -7,6 +7,7 @@ #include Position DockItem::DockPosition = Position::Top; +DisplayMode DockItem::DockDisplayMode = DisplayMode::Efficient; DockItem::DockItem(const ItemType type, QWidget *parent) : QWidget(parent), @@ -21,6 +22,11 @@ void DockItem::setDockPosition(const Position side) DockPosition = side; } +void DockItem::setDockDisplayMode(const DisplayMode mode) +{ + DockDisplayMode = mode; +} + DockItem::ItemType DockItem::itemType() const { return m_type; diff --git a/frame/item/dockitem.h b/frame/item/dockitem.h index 7c6a8356e..37dc50dfd 100644 --- a/frame/item/dockitem.h +++ b/frame/item/dockitem.h @@ -23,6 +23,7 @@ public: public: explicit DockItem(const ItemType type, QWidget *parent = nullptr); static void setDockPosition(const Position side); + static void setDockDisplayMode(const DisplayMode mode); ItemType itemType() const; @@ -45,6 +46,7 @@ protected: DBusMenuManager *m_menuManagerInter; static Position DockPosition; + static DisplayMode DockDisplayMode; }; #endif // DOCKITEM_H diff --git a/frame/item/launcheritem.cpp b/frame/item/launcheritem.cpp index 1aee84204..eba20a6a5 100644 --- a/frame/item/launcheritem.cpp +++ b/frame/item/launcheritem.cpp @@ -18,14 +18,19 @@ void LauncherItem::paintEvent(QPaintEvent *e) return; QPainter painter(this); - painter.drawPixmap(rect().center() - m_icon.rect().center(), m_icon); + if (DockDisplayMode == Fashion) + painter.drawPixmap(rect().center() - m_largeIcon.rect().center(), m_largeIcon); + else + painter.drawPixmap(rect().center() - m_smallIcon.rect().center(), m_smallIcon); } void LauncherItem::resizeEvent(QResizeEvent *e) { DockItem::resizeEvent(e); - m_icon = ThemeAppIcon::getIcon("deepin-launcher", qMin(width(), height()) * 0.7); + const int iconSize = qMin(width(), height()); + m_smallIcon = ThemeAppIcon::getIcon("deepin-launcher", iconSize * 0.6); + m_largeIcon = ThemeAppIcon::getIcon("deepin-launcher", iconSize * 0.8); } void LauncherItem::mousePressEvent(QMouseEvent *e) diff --git a/frame/item/launcheritem.h b/frame/item/launcheritem.h index 472e3c486..eebb58c52 100644 --- a/frame/item/launcheritem.h +++ b/frame/item/launcheritem.h @@ -16,7 +16,8 @@ private: void mousePressEvent(QMouseEvent *e); private: - QPixmap m_icon; + QPixmap m_smallIcon; + QPixmap m_largeIcon; }; #endif // LAUNCHERITEM_H diff --git a/frame/panel/mainpanel.cpp b/frame/panel/mainpanel.cpp index 5933aca83..f2d0818ed 100644 --- a/frame/panel/mainpanel.cpp +++ b/frame/panel/mainpanel.cpp @@ -63,12 +63,12 @@ void MainPanel::updateDockDisplayMode(const DisplayMode displayMode) { m_displayMode = displayMode; - const QList itemList = m_itemController->itemList(); - for (auto item : itemList) - { - if (item->itemType() == DockItem::Placeholder) - item->setVisible(displayMode == Dock::Efficient); - } +// const QList itemList = m_itemController->itemList(); +// for (auto item : itemList) +// { +// if (item->itemType() == DockItem::Placeholder) +// item->setVisible(displayMode == Dock::Efficient); +// } } void MainPanel::resizeEvent(QResizeEvent *e) diff --git a/frame/util/docksettings.cpp b/frame/util/docksettings.cpp index 234a131ec..ee0951eef 100644 --- a/frame/util/docksettings.cpp +++ b/frame/util/docksettings.cpp @@ -34,6 +34,7 @@ DockSettings::DockSettings(QObject *parent) m_iconSize = m_dockInter->iconSize(); AppItem::setIconBaseSize(m_iconSize); DockItem::setDockPosition(m_position); + DockItem::setDockDisplayMode(m_displayMode); m_fashionModeAct.setCheckable(true); m_efficientModeAct.setCheckable(true); @@ -196,6 +197,7 @@ void DockSettings::iconSizeChanged() void DockSettings::displayModeChanged() { m_displayMode = Dock::DisplayMode(m_dockInter->displayMode()); + DockItem::setDockDisplayMode(m_displayMode); calculateWindowConfig();