chore: 优化代码,方便维护

部分类中的成员变量过多,不方便理解和阅读,改成状态值,参考QWidget的windowFlag,更方便维护

Log:
Change-Id: I0dd02ab14c9f6a6aee4c9a53a9cbad4a9077961d
This commit is contained in:
Fan PengCheng 2021-04-14 17:44:50 +08:00
parent 4c08d38313
commit aad74ebbbc
2 changed files with 58 additions and 32 deletions

View File

@ -51,11 +51,7 @@ MultiScreenWorker::MultiScreenWorker(QWidget *parent, DWindowManagerHelper *help
, m_monitorUpdateTimer(new QTimer(this)) , m_monitorUpdateTimer(new QTimer(this))
, m_delayWakeTimer(new QTimer(this)) , m_delayWakeTimer(new QTimer(this))
, m_ds(DisplayManager::instance()->primary()) , m_ds(DisplayManager::instance()->primary())
, m_showAniStart(false) , m_state(AutoHide)
, m_hideAniStart(false)
, m_aniStart(false)
, m_autoHide(true)
, m_btnPress(false)
{ {
qInfo() << "init dock screen: " << m_ds.current(); qInfo() << "init dock screen: " << m_ds.current();
@ -100,6 +96,21 @@ void MultiScreenWorker::initShow()
} }
} }
/**
* @brief MultiScreenWorker::setStates
* @param state
* @param on true或false
*/
void MultiScreenWorker::setStates(RunStates state, bool on)
{
RunState type = static_cast<RunState>(int(state & RunState::RunState_Mask));
if (on)
m_state |= type;
else
m_state &= ~(type);
}
/** /**
* @brief dockRect * @brief dockRect
* @param screenName * @param screenName
@ -144,10 +155,10 @@ QRect MultiScreenWorker::dockRectWithoutScale(const QString &screenName, const P
void MultiScreenWorker::onAutoHideChanged(bool autoHide) void MultiScreenWorker::onAutoHideChanged(bool autoHide)
{ {
if (m_autoHide != autoHide) { if (testState(AutoHide) != autoHide)
m_autoHide = autoHide; setStates(AutoHide, autoHide);
}
if (m_autoHide) { if (testState(AutoHide)) {
/** /**
* DBus服务去修改m_hideMode的值 * DBus服务去修改m_hideMode的值
* KeepHidden * KeepHidden
@ -215,7 +226,7 @@ void MultiScreenWorker::handleDbusSignal(QDBusMessage msg)
void MultiScreenWorker::onRegionMonitorChanged(int x, int y, const QString &key) void MultiScreenWorker::onRegionMonitorChanged(int x, int y, const QString &key)
{ {
if (m_registerKey != key || m_btnPress) if (m_registerKey != key || testState(MousePress))
return; return;
tryToShowDock(x, y); tryToShowDock(x, y);
@ -325,7 +336,7 @@ void MultiScreenWorker::updateParentGeometry(const QVariant &value, const Positi
void MultiScreenWorker::updateParentGeometry(const QVariant &value) void MultiScreenWorker::updateParentGeometry(const QVariant &value)
{ {
if (!m_showAniStart && !m_hideAniStart) if (!testState(ShowAnimationStart) && !testState(HideAnimationStart))
return; return;
updateParentGeometry(value, m_position); updateParentGeometry(value, m_position);
@ -956,7 +967,10 @@ void MultiScreenWorker::reInitDisplayData()
*/ */
void MultiScreenWorker::displayAnimation(const QString &screen, const Position &pos, AniAction act) void MultiScreenWorker::displayAnimation(const QString &screen, const Position &pos, AniAction act)
{ {
if (!m_autoHide || qApp->property("DRAG_STATE").toBool() || m_aniStart || m_hideAniStart || m_showAniStart) if (!testState(AutoHide) || qApp->property("DRAG_STATE").toBool()
|| testState(ChangePositionAnimationStart)
|| testState(HideAnimationStart)
|| testState(ShowAnimationStart))
return; return;
QRect mainwindowRect = parent()->geometry(); QRect mainwindowRect = parent()->geometry();
@ -1035,18 +1049,18 @@ void MultiScreenWorker::displayAnimation(const QString &screen, const Position &
switch (act) { switch (act) {
case AniAction::Show: case AniAction::Show:
if (newState == QVariantAnimation::Running && oldState == QVariantAnimation::Stopped) { if (newState == QVariantAnimation::Running && oldState == QVariantAnimation::Stopped) {
m_showAniStart = true; setStates(ShowAnimationStart);
} }
if (newState == QVariantAnimation::Stopped && oldState == QVariantAnimation::Running) { if (newState == QVariantAnimation::Stopped && oldState == QVariantAnimation::Running) {
m_showAniStart = false; setStates(ShowAnimationStart, false);
} }
break; break;
case AniAction::Hide: case AniAction::Hide:
if (newState == QVariantAnimation::Running && oldState == QVariantAnimation::Stopped) { if (newState == QVariantAnimation::Running && oldState == QVariantAnimation::Stopped) {
m_hideAniStart = true; setStates(HideAnimationStart);
} }
if (newState == QVariantAnimation::Stopped && oldState == QVariantAnimation::Running) { if (newState == QVariantAnimation::Stopped && oldState == QVariantAnimation::Running) {
m_hideAniStart = false; setStates(HideAnimationStart, false);
} }
break; break;
default: default:
@ -1174,7 +1188,7 @@ void MultiScreenWorker::changeDockPosition(QString fromScreen, QString toScreen,
}); });
connect(group, &QVariantAnimation::finished, this, [ = ] { connect(group, &QVariantAnimation::finished, this, [ = ] {
m_aniStart = false; setStates(ChangePositionAnimationStart, false);
// 结束之后需要根据确定需要再隐藏 // 结束之后需要根据确定需要再隐藏
emit showAniFinished(); emit showAniFinished();
@ -1182,7 +1196,7 @@ void MultiScreenWorker::changeDockPosition(QString fromScreen, QString toScreen,
emit requestNotifyWindowManager(); emit requestNotifyWindowManager();
}); });
m_aniStart = true; setStates(ChangePositionAnimationStart);
group->start(QVariantAnimation::DeleteWhenStopped); group->start(QVariantAnimation::DeleteWhenStopped);
} }
@ -1297,13 +1311,13 @@ void MultiScreenWorker::checkXEventMonitorService()
{ {
auto connectionInit = [ = ](XEventMonitor * eventInter, XEventMonitor * extralEventInter, XEventMonitor * touchEventInter) { auto connectionInit = [ = ](XEventMonitor * eventInter, XEventMonitor * extralEventInter, XEventMonitor * touchEventInter) {
connect(eventInter, &XEventMonitor::CursorMove, this, &MultiScreenWorker::onRegionMonitorChanged); connect(eventInter, &XEventMonitor::CursorMove, this, &MultiScreenWorker::onRegionMonitorChanged);
connect(eventInter, &XEventMonitor::ButtonPress, this, [ = ] {m_btnPress = true;}); connect(eventInter, &XEventMonitor::ButtonPress, this, [ = ] { setStates(MousePress, true); });
connect(eventInter, &XEventMonitor::ButtonRelease, this, [ = ] {m_btnPress = false;}); connect(eventInter, &XEventMonitor::ButtonRelease, this, [ = ] { setStates(MousePress, false); });
connect(extralEventInter, &XEventMonitor::CursorMove, this, &MultiScreenWorker::onExtralRegionMonitorChanged); connect(extralEventInter, &XEventMonitor::CursorMove, this, &MultiScreenWorker::onExtralRegionMonitorChanged);
// 触屏时后端只发送press、release消息有move消息则为鼠标press置false // 触屏时后端只发送press、release消息有move消息则为鼠标press置false
connect(touchEventInter, &XEventMonitor::CursorMove, this, [ = ] {m_touchPress = false;}); connect(touchEventInter, &XEventMonitor::CursorMove, this, [ = ] { setStates(TouchPress, false); });
connect(touchEventInter, &XEventMonitor::ButtonPress, this, &MultiScreenWorker::onTouchPress); connect(touchEventInter, &XEventMonitor::ButtonPress, this, &MultiScreenWorker::onTouchPress);
connect(touchEventInter, &XEventMonitor::ButtonRelease, this, &MultiScreenWorker::onTouchRelease); connect(touchEventInter, &XEventMonitor::ButtonRelease, this, &MultiScreenWorker::onTouchRelease);
}; };
@ -1478,7 +1492,7 @@ void MultiScreenWorker::onTouchPress(int type, int x, int y, const QString &key)
return; return;
} }
m_touchPress = true; setStates(TouchPress);
m_touchPos = QPoint(x, y); m_touchPos = QPoint(x, y);
} }
@ -1489,10 +1503,10 @@ void MultiScreenWorker::onTouchRelease(int type, int x, int y, const QString &ke
return; return;
} }
if (!m_touchPress) { if (!testState(TouchPress)) {
return; return;
} }
m_touchPress = false; setStates(TouchPress, false);
// 不从指定方向划入,不进行任务栏唤醒;如当任务栏在下,需从下往上划 // 不从指定方向划入,不进行任务栏唤醒;如当任务栏在下,需从下往上划
switch (m_position) { switch (m_position) {
@ -1528,7 +1542,7 @@ void MultiScreenWorker::onTouchRelease(int type, int x, int y, const QString &ke
*/ */
void MultiScreenWorker::tryToShowDock(int eventX, int eventY) void MultiScreenWorker::tryToShowDock(int eventX, int eventY)
{ {
if ( qApp->property("DRAG_STATE").toBool() || m_aniStart) { if ( qApp->property("DRAG_STATE").toBool() || testState(ChangePositionAnimationStart)) {
qWarning() << "dock is draging or animation is running"; qWarning() << "dock is draging or animation is running";
return; return;
} }
@ -1572,7 +1586,7 @@ void MultiScreenWorker::tryToShowDock(int eventX, int eventY)
return; return;
} }
if (m_showAniStart) { if (testState(ShowAnimationStart)) {
qDebug() << "animation is running"; qDebug() << "animation is running";
return; return;
} }

View File

@ -115,6 +115,20 @@ public:
Hide Hide
}; };
enum RunState {
ShowAnimationStart = 0x1, // 单次显示动画正在运行状态
HideAnimationStart = 0x2, // 单次隐藏动画正在运行状态
ChangePositionAnimationStart = 0x4, // 任务栏切换位置动画运行状态
AutoHide = 0x8, // 和MenuWorker保持一致,未设置此state时表示菜单已经打开
MousePress = 0x10, // 当前鼠标是否被按下
TouchPress = 0x20, // 当前触摸屏下是否按下
// 如果要添加新的状态,可以在上面添加
RunState_Mask = 0xffffffff,
};
Q_DECLARE_FLAGS(RunStates, RunState)
MultiScreenWorker(QWidget *parent, DWindowManagerHelper *helper); MultiScreenWorker(QWidget *parent, DWindowManagerHelper *helper);
~MultiScreenWorker(); ~MultiScreenWorker();
@ -122,6 +136,9 @@ public:
DBusDock *dockInter() { return m_dockInter; } DBusDock *dockInter() { return m_dockInter; }
inline bool testState(RunState state) { return (m_state & state); }
void setStates(RunStates state, bool on = true);
inline const QString &lastScreen() { return m_ds.last(); } inline const QString &lastScreen() { return m_ds.last(); }
inline const QString &deskScreen() { return m_ds.current(); } inline const QString &deskScreen() { return m_ds.current(); }
inline const Position &position() { return m_position; } inline const Position &position() { return m_position; }
@ -252,17 +269,12 @@ private:
QString m_registerKey; QString m_registerKey;
QString m_extralRegisterKey; QString m_extralRegisterKey;
QString m_touchRegisterKey; // 触控屏唤起任务栏监控区域key QString m_touchRegisterKey; // 触控屏唤起任务栏监控区域key
bool m_showAniStart; // 动画显示过程正在执行标志
bool m_hideAniStart; // 动画隐藏过程正在执行标志
bool m_aniStart; // changeDockPosition是否正在运行中
bool m_autoHide; // 和MenuWorker保持一致,为false时表示菜单已经打开
bool m_btnPress; // 鼠标按下时移动到唤醒区域不应该响应唤醒
bool m_touchPress; // 触屏按下
QPoint m_touchPos; // 触屏按下坐标 QPoint m_touchPos; // 触屏按下坐标
QList<MonitRect> m_monitorRectList; // 监听唤起任务栏区域 QList<MonitRect> m_monitorRectList; // 监听唤起任务栏区域
QList<MonitRect> m_extralRectList; // 任务栏外部区域,随m_monitorRectList一起更新 QList<MonitRect> m_extralRectList; // 任务栏外部区域,随m_monitorRectList一起更新
QList<MonitRect> m_touchRectList; // 监听触屏唤起任务栏区域 QList<MonitRect> m_touchRectList; // 监听触屏唤起任务栏区域
QString m_delayScreen; // 任务栏将要切换到的屏幕名 QString m_delayScreen; // 任务栏将要切换到的屏幕名
RunStates m_state;
/*****************************************************************/ /*****************************************************************/
}; };