mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 09:23:03 +00:00
support dock position setting
Change-Id: I9234175a1d910415af56866668a0eebf0d7cb060
This commit is contained in:
parent
1dfa6568dc
commit
ecd94e4220
@ -85,6 +85,12 @@ public:
|
||||
inline void setPosition(int value)
|
||||
{ setProperty("Position", QVariant::fromValue(int(value))); }
|
||||
|
||||
Q_PROPERTY(quint32 IconSize READ iconSize WRITE setIconSize NOTIFY IconSizeChanged)
|
||||
inline quint32 iconSize() const
|
||||
{ return qvariant_cast< quint32 >(property("IconSize")); }
|
||||
inline void setIconSize(quint32 value)
|
||||
{ setProperty("IconSize", QVariant::fromValue(value)); }
|
||||
|
||||
public Q_SLOTS: // METHODS
|
||||
inline QDBusPendingReply<> ActivateWindow(uint in0)
|
||||
{
|
||||
@ -132,6 +138,7 @@ void EntriesChanged();
|
||||
void HideModeChanged();
|
||||
void HideStateChanged();
|
||||
void PositionChanged();
|
||||
void IconSizeChanged();
|
||||
};
|
||||
|
||||
namespace com {
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
#define APP_DRAG_THRESHOLD 20
|
||||
|
||||
int AppItem::IconBaseSize;
|
||||
QPoint AppItem::MousePressPos;
|
||||
DBusClientManager *AppItem::ClientInter = nullptr;
|
||||
//uint AppItem::ActiveWindowId = 0;
|
||||
@ -33,6 +34,26 @@ const QString AppItem::appId() const
|
||||
return m_id;
|
||||
}
|
||||
|
||||
void AppItem::setIconBaseSize(const int size)
|
||||
{
|
||||
IconBaseSize = size;
|
||||
}
|
||||
|
||||
int AppItem::iconBaseSize()
|
||||
{
|
||||
return IconBaseSize;
|
||||
}
|
||||
|
||||
int AppItem::itemBaseWidth()
|
||||
{
|
||||
return itemBaseHeight() / 0.7;
|
||||
}
|
||||
|
||||
int AppItem::itemBaseHeight()
|
||||
{
|
||||
return IconBaseSize / 0.8;
|
||||
}
|
||||
|
||||
void AppItem::paintEvent(QPaintEvent *e)
|
||||
{
|
||||
DockItem::paintEvent(e);
|
||||
@ -41,12 +62,12 @@ void AppItem::paintEvent(QPaintEvent *e)
|
||||
return;
|
||||
|
||||
const QRect itemRect = rect();
|
||||
const int iconSize = std::min(itemRect.width(), itemRect.height());
|
||||
// const int iconSize = std::min(itemRect.width(), itemRect.height());
|
||||
|
||||
QRect iconRect;
|
||||
iconRect.setWidth(iconSize);
|
||||
iconRect.setHeight(iconSize);
|
||||
iconRect.moveTopLeft(itemRect.center() - iconRect.center());
|
||||
// QRect iconRect;
|
||||
// iconRect.setWidth(iconSize);
|
||||
// iconRect.setHeight(iconSize);
|
||||
// iconRect.moveTopLeft(itemRect.center() - iconRect.center());
|
||||
|
||||
QPainter painter(this);
|
||||
|
||||
@ -60,7 +81,7 @@ void AppItem::paintEvent(QPaintEvent *e)
|
||||
painter.fillRect(backgroundRect, Qt::gray);
|
||||
|
||||
// draw icon
|
||||
painter.drawPixmap(rect().center() - m_icon.rect().center(), m_icon);
|
||||
painter.drawPixmap(itemRect.center() - m_icon.rect().center(), m_icon);
|
||||
|
||||
// draw text
|
||||
// painter.setPen(Qt::red);
|
||||
|
@ -13,6 +13,10 @@ public:
|
||||
explicit AppItem(const QDBusObjectPath &entry, QWidget *parent = nullptr);
|
||||
|
||||
const QString appId() const;
|
||||
static void setIconBaseSize(const int size);
|
||||
static int iconBaseSize();
|
||||
static int itemBaseHeight();
|
||||
static int itemBaseWidth();
|
||||
|
||||
private:
|
||||
void paintEvent(QPaintEvent *e);
|
||||
@ -40,6 +44,7 @@ private:
|
||||
QString m_id;
|
||||
QPixmap m_icon;
|
||||
|
||||
static int IconBaseSize;
|
||||
static QPoint MousePressPos;
|
||||
static DBusClientManager *ClientInter;
|
||||
// static uint ActiveWindowId;
|
||||
|
@ -6,20 +6,19 @@
|
||||
#include <QMouseEvent>
|
||||
#include <QJsonObject>
|
||||
|
||||
Position DockItem::DockPosition = Position::Top;
|
||||
|
||||
DockItem::DockItem(const ItemType type, QWidget *parent)
|
||||
: QWidget(parent),
|
||||
m_side(Position::Top),
|
||||
m_type(type),
|
||||
|
||||
m_menuManagerInter(new DBusMenuManager(this))
|
||||
{
|
||||
}
|
||||
|
||||
void DockItem::setDockSide(const Position side)
|
||||
void DockItem::setDockPosition(const Position side)
|
||||
{
|
||||
m_side = side;
|
||||
|
||||
update();
|
||||
DockPosition = side;
|
||||
}
|
||||
|
||||
DockItem::ItemType DockItem::itemType() const
|
||||
|
@ -22,7 +22,7 @@ public:
|
||||
|
||||
public:
|
||||
explicit DockItem(const ItemType type, QWidget *parent = nullptr);
|
||||
void setDockSide(const Position side);
|
||||
static void setDockPosition(const Position side);
|
||||
|
||||
ItemType itemType() const;
|
||||
|
||||
@ -38,10 +38,11 @@ protected:
|
||||
virtual const QString contextMenu() const;
|
||||
|
||||
protected:
|
||||
Position m_side;
|
||||
ItemType m_type;
|
||||
|
||||
DBusMenuManager *m_menuManagerInter;
|
||||
|
||||
static Position DockPosition;
|
||||
};
|
||||
|
||||
#endif // DOCKITEM_H
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "mainpanel.h"
|
||||
#include "item/appitem.h"
|
||||
|
||||
#include <QBoxLayout>
|
||||
#include <QDragEnterEvent>
|
||||
@ -7,6 +8,7 @@ DockItem *MainPanel::DragingItem = nullptr;
|
||||
|
||||
MainPanel::MainPanel(QWidget *parent)
|
||||
: QFrame(parent),
|
||||
m_position(Dock::Top),
|
||||
m_itemLayout(new QBoxLayout(QBoxLayout::LeftToRight, this)),
|
||||
|
||||
m_itemController(DockItemController::instance(this))
|
||||
@ -35,9 +37,11 @@ MainPanel::MainPanel(QWidget *parent)
|
||||
setLayout(m_itemLayout);
|
||||
}
|
||||
|
||||
void MainPanel::updateDockPosition(const Position dockSide)
|
||||
void MainPanel::updateDockPosition(const Position dockPosition)
|
||||
{
|
||||
switch (dockSide)
|
||||
m_position = dockPosition;
|
||||
|
||||
switch (m_position)
|
||||
{
|
||||
case Position::Top:
|
||||
case Position::Bottom: m_itemLayout->setDirection(QBoxLayout::LeftToRight); break;
|
||||
@ -112,7 +116,24 @@ DockItem *MainPanel::itemAt(const QPoint &point)
|
||||
|
||||
void MainPanel::adjustItemSize()
|
||||
{
|
||||
const QSize size(80, 60);
|
||||
QSize itemSize;
|
||||
switch (m_position)
|
||||
{
|
||||
case Top:
|
||||
case Bottom:
|
||||
itemSize.setHeight(height());
|
||||
itemSize.setWidth(AppItem::itemBaseWidth());
|
||||
break;
|
||||
|
||||
case Left:
|
||||
case Right:
|
||||
itemSize.setWidth(width());
|
||||
itemSize.setHeight(AppItem::itemBaseHeight());
|
||||
break;
|
||||
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
|
||||
const QList<DockItem *> itemList = m_itemController->itemList();
|
||||
for (auto item : itemList)
|
||||
@ -120,12 +141,10 @@ void MainPanel::adjustItemSize()
|
||||
switch (item->itemType())
|
||||
{
|
||||
case DockItem::Launcher:
|
||||
case DockItem::App: item->setFixedSize(size); break;
|
||||
case DockItem::App: item->setFixedSize(itemSize); break;
|
||||
default:;
|
||||
}
|
||||
}
|
||||
|
||||
updateGeometry();
|
||||
}
|
||||
|
||||
void MainPanel::itemInserted(const int index, DockItem *item)
|
||||
@ -133,8 +152,6 @@ void MainPanel::itemInserted(const int index, DockItem *item)
|
||||
initItemConnection(item);
|
||||
m_itemLayout->insertWidget(index, item);
|
||||
|
||||
item->setFixedWidth(80);
|
||||
|
||||
adjustSize();
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@ class MainPanel : public QFrame
|
||||
public:
|
||||
explicit MainPanel(QWidget *parent = 0);
|
||||
|
||||
void updateDockPosition(const Position dockSide);
|
||||
void updateDockPosition(const Position dockPosition);
|
||||
|
||||
private:
|
||||
void resizeEvent(QResizeEvent *e);
|
||||
@ -33,6 +33,7 @@ private slots:
|
||||
void itemDragStarted();
|
||||
|
||||
private:
|
||||
Position m_position;
|
||||
QBoxLayout *m_itemLayout;
|
||||
|
||||
DockItemController *m_itemController;
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "docksettings.h"
|
||||
#include "item/appitem.h"
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
@ -29,9 +30,8 @@ DockSettings::DockSettings(QObject *parent)
|
||||
{
|
||||
m_position = Dock::Position(m_dockInter->position());
|
||||
m_displayMode = Dock::DisplayMode(m_dockInter->displayMode());
|
||||
|
||||
m_mainWindowSize.setWidth(m_displayInter->primaryRect().width);
|
||||
m_mainWindowSize.setHeight(60);
|
||||
m_iconSize = m_dockInter->iconSize();
|
||||
AppItem::setIconBaseSize(m_iconSize);
|
||||
|
||||
m_fashionModeAct.setCheckable(true);
|
||||
m_efficientModeAct.setCheckable(true);
|
||||
@ -81,6 +81,8 @@ DockSettings::DockSettings(QObject *parent)
|
||||
|
||||
connect(&m_settingsMenu, &DMenu::triggered, this, &DockSettings::menuActionClicked);
|
||||
connect(m_dockInter, &DBusDock::PositionChanged, this, &DockSettings::positionChanged);
|
||||
|
||||
calculateWindowConfig();
|
||||
}
|
||||
|
||||
Position DockSettings::position() const
|
||||
@ -134,6 +136,13 @@ void DockSettings::menuActionClicked(DAction *action)
|
||||
if (action == &m_rightPosAct)
|
||||
return m_dockInter->setPosition(Right);
|
||||
|
||||
if (action == &m_largeSizeAct)
|
||||
return m_dockInter->setIconSize(ICON_SIZE_LARGE);
|
||||
if (action == &m_mediumSizeAct)
|
||||
return m_dockInter->setIconSize(ICON_SIZE_MEDIUM);
|
||||
if (action == &m_smallSizeAct)
|
||||
return m_dockInter->setIconSize(ICON_SIZE_SMALL);
|
||||
|
||||
if (action == &m_keepShownAct)
|
||||
return m_dockInter->setHideMode(KeepShowing);
|
||||
if (action == &m_keepHiddenAct)
|
||||
@ -145,10 +154,18 @@ void DockSettings::menuActionClicked(DAction *action)
|
||||
void DockSettings::positionChanged()
|
||||
{
|
||||
m_position = Dock::Position(m_dockInter->position());
|
||||
DockItem::setDockPosition(m_position);
|
||||
|
||||
calculateWindowConfig();
|
||||
|
||||
emit dataChanged();
|
||||
}
|
||||
|
||||
void DockSettings::calculateWindowConfig()
|
||||
{
|
||||
const QRect primaryRect = m_displayInter->primaryRect();
|
||||
const int defaultHeight = 60;
|
||||
const int defaultWidth = 60;
|
||||
const int defaultHeight = AppItem::itemBaseHeight();
|
||||
const int defaultWidth = AppItem::itemBaseWidth();
|
||||
|
||||
switch (m_position)
|
||||
{
|
||||
@ -167,11 +184,4 @@ void DockSettings::positionChanged()
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
|
||||
emit dataChanged();
|
||||
}
|
||||
|
||||
void DockSettings::calculateWindowConfig()
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -22,6 +22,8 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
|
||||
initComponents();
|
||||
initConnections();
|
||||
|
||||
m_positionUpdateTimer->start();
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
|
Loading…
x
Reference in New Issue
Block a user