optimize ui effects

Change-Id: I71e9ccadad67b2deed61c4ce0b6271fa35499f3f
This commit is contained in:
石博文 2016-06-23 14:28:47 +08:00 committed by Hualet Wang
parent f15ddf008a
commit 8d63061963
9 changed files with 102 additions and 32 deletions

View File

@ -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())

View File

@ -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<void (AppItem::*)()>(&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;
}

View File

@ -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;

View File

@ -7,6 +7,7 @@
#include <QJsonObject>
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;

View File

@ -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

View File

@ -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)

View File

@ -16,7 +16,8 @@ private:
void mousePressEvent(QMouseEvent *e);
private:
QPixmap m_icon;
QPixmap m_smallIcon;
QPixmap m_largeIcon;
};
#endif // LAUNCHERITEM_H

View File

@ -63,12 +63,12 @@ void MainPanel::updateDockDisplayMode(const DisplayMode displayMode)
{
m_displayMode = displayMode;
const QList<DockItem *> itemList = m_itemController->itemList();
for (auto item : itemList)
{
if (item->itemType() == DockItem::Placeholder)
item->setVisible(displayMode == Dock::Efficient);
}
// const QList<DockItem *> itemList = m_itemController->itemList();
// for (auto item : itemList)
// {
// if (item->itemType() == DockItem::Placeholder)
// item->setVisible(displayMode == Dock::Efficient);
// }
}
void MainPanel::resizeEvent(QResizeEvent *e)

View File

@ -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();