Skip to content

Commit

Permalink
fixed: 紧凑模式下,打开播放列表后点击全屏按钮,播放列表显示异常
Browse files Browse the repository at this point in the history
紧凑模式下,打开播放列表后点击全屏按钮,播放列表显示异常

Log: 修改紧凑模式下播放列表的高度为动态高度
  • Loading branch information
qingfuliu committed Nov 3, 2023
1 parent b4e7d24 commit 3f62711
Show file tree
Hide file tree
Showing 9 changed files with 103 additions and 142 deletions.
41 changes: 18 additions & 23 deletions src/common/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -856,23 +856,9 @@ MainWindow::MainWindow(QWidget *parent)
});

connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::sizeModeChanged, this, [=](DGuiApplicationHelper::SizeMode sizeMode) {
m_pToolbox->dSizeModeChanged();
if (m_bMiniMode) return;
m_pCommHintWid->hide();
if (m_pPlaylist && m_pPlaylist->state() == PlaylistWidget::State::Opened)
return;
QRect rfs = QRect(5, height() - TOOLBOX_HEIGHT - rect().top() - 5,
rect().width() - 10, TOOLBOX_HEIGHT);
if (sizeMode == DGuiApplicationHelper::NormalMode) {
m_pToolbox->setGeometry(rfs);
} else {
int h = rfs.height() * 0.66;
int offect = rfs.height() - h;
rfs.setHeight(h);
rfs.moveTop(rfs.y() + offect);
m_pToolbox->setGeometry(rfs);
}
m_pToolbox->updateMircastWidget(rfs.topRight());
updateProxyGeometry();
});
#endif

Expand Down Expand Up @@ -2840,27 +2826,36 @@ void MainWindow::updateProxyGeometry()

#ifdef DTKWIDGET_CLASS_DSizeMode
if (DGuiApplicationHelper::instance()->sizeMode() == DGuiApplicationHelper::CompactMode) {
int h = rfs.height() * 0.66;
int offect = rfs.height() - h;
rfs.setHeight(h);
rfs.moveTop(rfs.y() + offect);
if (m_pPlaylist && m_pPlaylist->state() == PlaylistWidget::State::Opened) {
rfs = QRect(5, height() - (TOOLBOX_SPACE_HEIGHT + TOOLBOX_DSIZEMODE_HEIGHT) - rect().top() - 5,
rect().width() - 10, (TOOLBOX_SPACE_HEIGHT + TOOLBOX_DSIZEMODE_HEIGHT + 7));
} else {
rfs = QRect(5, height() - TOOLBOX_DSIZEMODE_HEIGHT - rect().top() - 5,
rect().width() - 10, TOOLBOX_DSIZEMODE_HEIGHT);
}
}
#endif

m_pToolbox->setGeometry(rfs);
m_pToolbox->updateMircastWidget(rfs.topRight());
}

if (m_pPlaylist && !m_pPlaylist->toggling()) {
int toolbox_height = TOOLBOX_HEIGHT;
#ifdef DTKWIDGET_CLASS_DSizeMode
if (DGuiApplicationHelper::instance()->sizeMode() == DGuiApplicationHelper::CompactMode) {
toolbox_height = TOOLBOX_DSIZEMODE_HEIGHT;
}
#endif

#ifndef __sw_64__
QRect fixed((10), (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + TOOLBOX_HEIGHT + 5)),
QRect fixed((10), (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + toolbox_height + 5)),
view_rect.width() - 20, TOOLBOX_SPACE_HEIGHT);
if (utils::check_wayland_env()) {
fixed = QRect((10), (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + TOOLBOX_HEIGHT)),
fixed = QRect((10), (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + toolbox_height)),
view_rect.width() - 20, TOOLBOX_SPACE_HEIGHT);
}
#else
QRect fixed((10), (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + TOOLBOX_HEIGHT - 1)),
QRect fixed((10), (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + toolbox_height - 1)),
view_rect.width() - 20, TOOLBOX_SPACE_HEIGHT);
#endif
m_pPlaylist->setGeometry(fixed);
Expand Down
3 changes: 3 additions & 0 deletions src/common/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,9 @@ public slots:
*/
void play(const QList<QString> &listFiles);
void slotFinishedAddFiles(QList<QUrl>);
/**
* @brief 该函数主要设置 m_pToolbox 和 m_pPlaylist 的Geometry,在(紧凑/正常终模式之间切换时)和(全屏/非全屏模式之间切换时)调用
*/
void updateProxyGeometry();
void suspendToolsWindow();
void resumeToolsWindow();
Expand Down
50 changes: 25 additions & 25 deletions src/common/platform/platform_mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -882,23 +882,9 @@ Platform_MainWindow::Platform_MainWindow(QWidget *parent)
});

connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::sizeModeChanged, this, [=](DGuiApplicationHelper::SizeMode sizeMode) {
m_pToolbox->dSizeModeChanged();
if (m_bMiniMode) return;
m_pCommHintWid->hide();
if (m_pPlaylist && m_pPlaylist->state() == Platform_PlaylistWidget::State::Opened)
return;
QRect rfs = QRect(5, height() - TOOLBOX_HEIGHT - rect().top() - 5,
rect().width() - 10, TOOLBOX_HEIGHT);
if (sizeMode == DGuiApplicationHelper::NormalMode) {
m_pToolbox->setGeometry(rfs);
} else {
int h = rfs.height() * 0.66;
int offect = rfs.height() - h;
rfs.setHeight(h);
rfs.moveTop(rfs.y() + offect);
m_pToolbox->setGeometry(rfs);
}
m_pToolbox->updateMircastWidget(rfs.topRight());
updateProxyGeometry();
});
#endif

Expand Down Expand Up @@ -2847,25 +2833,39 @@ void Platform_MainWindow::updateProxyGeometry()
rfs = QRect(5, height() - TOOLBOX_HEIGHT - rect().top() - 5,
rect().width() - 10, TOOLBOX_HEIGHT);
}

#ifdef DTKWIDGET_CLASS_DSizeMode
if (DGuiApplicationHelper::instance()->sizeMode() == DGuiApplicationHelper::CompactMode) {
int h = rfs.height() * 0.66;
int offect = rfs.height() - h;
rfs.setHeight(h);
rfs.moveTop(rfs.y() + offect);
}
if (DGuiApplicationHelper::instance()->sizeMode() == DGuiApplicationHelper::CompactMode) {
if (m_pPlaylist && m_pPlaylist->state() == Platform_PlaylistWidget::State::Opened) {
rfs = QRect(5, height() - (TOOLBOX_SPACE_HEIGHT + TOOLBOX_DSIZEMODE_HEIGHT) - rect().top() - 5,
rect().width() - 10, (TOOLBOX_SPACE_HEIGHT + TOOLBOX_DSIZEMODE_HEIGHT + 7));
} else {
rfs = QRect(5, height() - TOOLBOX_DSIZEMODE_HEIGHT - rect().top() - 5,
rect().width() - 10, TOOLBOX_DSIZEMODE_HEIGHT);
}
}
#endif
m_pToolbox->setGeometry(rfs);
m_pToolbox->updateMircastWidget(QRect(5, height() - TOOLBOX_HEIGHT - rect().top() - 5,
rect().width() - 10, TOOLBOX_HEIGHT).topRight());
m_pToolbox->updateMircastWidget(rfs.topRight());
}

if (m_pPlaylist && !m_pPlaylist->toggling()) {
int toolbox_height = TOOLBOX_HEIGHT;
#ifdef DTKWIDGET_CLASS_DSizeMode
if (DGuiApplicationHelper::instance()->sizeMode() == DGuiApplicationHelper::CompactMode) {
toolbox_height = TOOLBOX_DSIZEMODE_HEIGHT;
}
#endif

#ifndef __sw_64__
QRect fixed((10), (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + TOOLBOX_HEIGHT + 5)),
QRect fixed((10), (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + toolbox_height + 5)),
view_rect.width() - 20, TOOLBOX_SPACE_HEIGHT);
if (utils::check_wayland_env()) {
fixed = QRect((10), (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + toolbox_height)),
view_rect.width() - 20, TOOLBOX_SPACE_HEIGHT);
}
#else
QRect fixed((10), (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + TOOLBOX_HEIGHT - 1)),
QRect fixed((10), (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + toolbox_height - 1)),
view_rect.width() - 20, TOOLBOX_SPACE_HEIGHT);
#endif
m_pPlaylist->setGeometry(fixed);
Expand Down
14 changes: 7 additions & 7 deletions src/widgets/platform/platform_playlist_widget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1344,18 +1344,18 @@ void Platform_PlaylistWidget::togglePopup(bool isShortcut)
QRect view_rect = main_rect.marginsRemoved(QMargins(1, 1, 1, 1));
#endif

QRect fixed;
// y坐标下移5个像素点,避免播放列表上部超出toolbox范围
fixed.setRect(10, (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + TOOLBOX_HEIGHT + 10) + 5),
view_rect.width() - 20, TOOLBOX_SPACE_HEIGHT + 10);

int toolbox_height = TOOLBOX_HEIGHT;
#ifdef DTKWIDGET_CLASS_DSizeMode
if (DGuiApplicationHelper::instance()->sizeMode() == DGuiApplicationHelper::CompactMode) {
fixed.setRect(10, (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + TOOLBOX_DSIZEMODE_HEIGHT + 10) + 5),
view_rect.width() - 20, TOOLBOX_SPACE_HEIGHT + 10);
toolbox_height = TOOLBOX_DSIZEMODE_HEIGHT;
}
#endif

QRect fixed;
// y坐标下移5个像素点,避免播放列表上部超出toolbox范围
fixed.setRect(10, (view_rect.height() - (TOOLBOX_SPACE_HEIGHT + toolbox_height + 10) + 5),
view_rect.width() - 20, TOOLBOX_SPACE_HEIGHT + 10);

QRect shrunk = fixed;
shrunk.setHeight(0);
shrunk.moveBottom(fixed.bottom());
Expand Down
44 changes: 19 additions & 25 deletions src/widgets/platform/platform_toolbox_proxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1383,7 +1383,6 @@ void Platform_ToolboxProxy::initMember()
m_bAnimationFinash = true;
m_bCanPlay = false;
m_bSetListBtnFocus = false;
m_bDsizeModeChanged = false;
}

/**
Expand Down Expand Up @@ -1763,37 +1762,32 @@ void Platform_ToolboxProxy::slotPlayListStateChange(bool isShortcut)
}

closeAnyPopup();

QRect rc_view=m_pMainWindow->rect();
QRect rc_opened;
rc_opened = QRect(5, rc_view.height() - (TOOLBOX_SPACE_HEIGHT + TOOLBOX_HEIGHT) - rc_view.top() - 5,
rc_view.width() - 10, (TOOLBOX_SPACE_HEIGHT + TOOLBOX_HEIGHT + 7));
QRect rc_closed = QRect(5, rc_view.height() - TOOLBOX_HEIGHT - rc_view.top() - 5,
rc_view.width() - 10, TOOLBOX_HEIGHT);

#ifdef DTKWIDGET_CLASS_DSizeMode
if (DGuiApplicationHelper::instance()->sizeMode() == DGuiApplicationHelper::CompactMode) {
rc_opened = QRect(5, rc_view.height() - (TOOLBOX_SPACE_HEIGHT + TOOLBOX_DSIZEMODE_HEIGHT) - rc_view.top() - 5,
rc_view.width() - 10, (TOOLBOX_SPACE_HEIGHT + TOOLBOX_DSIZEMODE_HEIGHT + 7));
rc_closed = QRect(5, rc_view.height() - TOOLBOX_DSIZEMODE_HEIGHT - rc_view.top() - 5,
rc_view.width() - 10, TOOLBOX_DSIZEMODE_HEIGHT);
}
#endif

if (m_pPlaylist->state() == Platform_PlaylistWidget::State::Opened) {
m_bDsizeModeChanged = false;
//窗口绑定渲染不展示动画,故按键状态不做限制
Q_UNUSED(isShortcut);
QRect rcBegin = this->geometry();
QRect rcEnd = rcBegin;
rcEnd.setY(rcBegin.y() - TOOLBOX_SPACE_HEIGHT - 7);
#ifdef DTKWIDGET_CLASS_DSizeMode
if (DGuiApplicationHelper::instance()->sizeMode() == DGuiApplicationHelper::CompactMode)
rcEnd.setY(rcBegin.y() - TOOLBOX_SPACE_HEIGHT - 37);
#endif
setGeometry(rcEnd);
setGeometry(rc_opened);
m_pListBtn->setChecked(true);
} else {
Q_UNUSED(isShortcut);
QRect rcBegin = this->geometry();
QRect rcEnd = rcBegin;
rcEnd.setY(rcBegin.y() + TOOLBOX_SPACE_HEIGHT + 7);
#ifdef DTKWIDGET_CLASS_DSizeMode
constexpr int8_t height_diff = static_cast<int8_t>(TOOLBOX_HEIGHT - TOOLBOX_DSIZEMODE_HEIGHT);
int y = 0;
if (DGuiApplicationHelper::instance()->sizeMode() == DGuiApplicationHelper::CompactMode){
y= m_bDsizeModeChanged ? (rcBegin.y() + TOOLBOX_SPACE_HEIGHT + 7 + height_diff) : (rcBegin.y() + TOOLBOX_SPACE_HEIGHT + 37);
} else {
y= m_bDsizeModeChanged ? (rcBegin.y() + TOOLBOX_SPACE_HEIGHT + 37 - height_diff) : (rcBegin.y() + TOOLBOX_SPACE_HEIGHT + 7);
}
rcEnd.setY(y);
#endif
setGeometry(rcEnd);
setGeometry(rc_closed);
m_pListBtn->setChecked(false);
m_bDsizeModeChanged = false;
}
}

Expand Down
7 changes: 0 additions & 7 deletions src/widgets/platform/platform_toolbox_proxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -395,12 +395,6 @@ class Platform_ToolboxProxy: public DFloatingWidget
ToolButton *fsBtn() {return m_pFullScreenBtn;}
VolumeButton *volBtn() {return m_pVolBtn;}
void setThumbnailmode(bool is_thumbnailmode) {m_bThumbnailmode = is_thumbnailmode;}
/**
* @brief 在紧凑模式正常模式之间切换的时候调用
*/
inline void dSizeModeChanged() noexcept {
m_bDsizeModeChanged = !m_bDsizeModeChanged;
}

public slots:
/**
Expand Down Expand Up @@ -664,7 +658,6 @@ private slots:
bool m_bAnimationFinash; ///动画是否完成
bool m_bCanPlay; ///判断是否能进行曲目切换的标志位
bool m_bSetListBtnFocus; ///设置播放列表按钮焦点标志位
bool m_bDsizeModeChanged; ///是否在正常模式和紧凑模式之间切换,主要用于播放列表的升降

float m_processAdd;
};
Expand Down
2 changes: 1 addition & 1 deletion src/widgets/playlist_widget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1344,7 +1344,7 @@ void PlaylistWidget::togglePopup(bool isShortcut)
QRect view_rect = main_rect.marginsRemoved(QMargins(1, 1, 1, 1));
#endif

int toolbox_height=TOOLBOX_HEIGHT;
int toolbox_height = TOOLBOX_HEIGHT;
#ifdef DTKWIDGET_CLASS_DSizeMode
if (DGuiApplicationHelper::instance()->sizeMode() == DGuiApplicationHelper::CompactMode) {
toolbox_height = TOOLBOX_DSIZEMODE_HEIGHT;
Expand Down
75 changes: 29 additions & 46 deletions src/widgets/toolbox_proxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1499,7 +1499,6 @@ void ToolboxProxy::initMember()
m_bAnimationFinash = true;
m_bCanPlay = false;
m_bSetListBtnFocus = false;
m_bDsizeModeChanged = false;
}

/**
Expand Down Expand Up @@ -1877,12 +1876,32 @@ void ToolboxProxy::slotApplicationStateChanged(Qt::ApplicationState e)
void ToolboxProxy::slotPlayListStateChange(bool isShortcut)
{
if (m_bAnimationFinash == false) {
return ;
return;
}

closeAnyPopup();

/**
* 此处在动画执行前设定好ToolboxProxy的起始位置和终止位置
* 基于 MainWindow::updateProxyGeometry所设置的初始状态 以及 是否是紧凑模式 定位ToolboxProxy的起始位置和终止位置
*/
QRect rc_view=m_pMainWindow->rect();
QRect rc_opened;
rc_opened = QRect(5, rc_view.height() - (TOOLBOX_SPACE_HEIGHT + TOOLBOX_HEIGHT) - rc_view.top() - 5,
rc_view.width() - 10, (TOOLBOX_SPACE_HEIGHT + TOOLBOX_HEIGHT + 7));
QRect rc_closed = QRect(5, rc_view.height() - TOOLBOX_HEIGHT - rc_view.top() - 5,
rc_view.width() - 10, TOOLBOX_HEIGHT);

#ifdef DTKWIDGET_CLASS_DSizeMode
if (DGuiApplicationHelper::instance()->sizeMode() == DGuiApplicationHelper::CompactMode) {
rc_opened = QRect(5, rc_view.height() - (TOOLBOX_SPACE_HEIGHT + TOOLBOX_DSIZEMODE_HEIGHT) - rc_view.top() - 5,
rc_view.width() - 10, (TOOLBOX_SPACE_HEIGHT + TOOLBOX_DSIZEMODE_HEIGHT + 7));
rc_closed = QRect(5, rc_view.height() - TOOLBOX_DSIZEMODE_HEIGHT - rc_view.top() - 5,
rc_view.width() - 10, TOOLBOX_DSIZEMODE_HEIGHT);
}
#endif

if (m_pPlaylist->state() == PlaylistWidget::State::Opened) {
m_bDsizeModeChanged = false;
//非x86平台播放列表切换不展示动画,故按键状态不做限制
if(CompositingManager::get().platform() == Platform::X86) {
if (isShortcut && m_pListBtn->isChecked()) {
Expand All @@ -1891,23 +1910,18 @@ void ToolboxProxy::slotPlayListStateChange(bool isShortcut)
m_pListBtn->setChecked(true);
m_pListBtn->setIcon(QIcon(":/icons/deepin/builtin/light/checked/episodes_checked.svg"));
}
QRect rcBegin = this->geometry();
QRect rcEnd = rcBegin;
rcEnd.setY(rcBegin.y() - TOOLBOX_SPACE_HEIGHT - 7);

m_bAnimationFinash = false;
m_pPaOpen = new QPropertyAnimation(this, "geometry");
m_pPaOpen->setEasingCurve(QEasingCurve::Linear);
m_pPaOpen->setDuration(POPUP_DURATION) ;
m_pPaOpen->setStartValue(rcBegin);
m_pPaOpen->setEndValue(rcEnd);
m_pPaOpen->setStartValue(rc_closed);
m_pPaOpen->setEndValue(rc_opened);
m_pPaOpen->start();
connect(m_pPaOpen, &QPropertyAnimation::finished, this, &ToolboxProxy::slotProAnimationFinished);
} else {
Q_UNUSED(isShortcut);
QRect rcBegin = this->geometry();
QRect rcEnd = rcBegin;
rcEnd.setY(rcBegin.y() - TOOLBOX_SPACE_HEIGHT - 7);
setGeometry(rcEnd);
setGeometry(rc_opened);
m_pListBtn->setChecked(true);
}
} else {
Expand All @@ -1920,49 +1934,18 @@ void ToolboxProxy::slotPlayListStateChange(bool isShortcut)
m_pListBtn->setChecked(false);
m_pListBtn->setIcon(QIcon::fromTheme("dcc_episodes"));
}

QRect rcBegin = this->geometry();
QRect rcEnd = rcBegin;
if(m_bDsizeModeChanged){
constexpr int8_t height_diff = static_cast<int8_t>(TOOLBOX_HEIGHT - TOOLBOX_DSIZEMODE_HEIGHT);
int y = rcBegin.y() + TOOLBOX_SPACE_HEIGHT + 7;
#ifdef DTKWIDGET_CLASS_DSizeMode
if (DGuiApplicationHelper::instance()->sizeMode() == DGuiApplicationHelper::CompactMode) {
y = rcBegin.y() + TOOLBOX_SPACE_HEIGHT + 7 + height_diff;
} else {
y = rcBegin.y() + TOOLBOX_SPACE_HEIGHT + 7 - height_diff;
}
#endif
rcEnd.setY(y);
} else {
rcEnd.setY(rcBegin.y() + TOOLBOX_SPACE_HEIGHT + 7);
}
m_pPaClose = new QPropertyAnimation(this, "geometry");
m_pPaClose->setEasingCurve(QEasingCurve::Linear);
m_pPaClose->setDuration(POPUP_DURATION);
m_pPaClose->setStartValue(rcBegin);
m_pPaClose->setEndValue(rcEnd);
m_pPaClose->setStartValue(rc_opened);
m_pPaClose->setEndValue(rc_closed);
m_pPaClose->start();
connect(m_pPaClose, &QPropertyAnimation::finished, this, &ToolboxProxy::slotProAnimationFinished);
} else {
Q_UNUSED(isShortcut);
QRect rcBegin = this->geometry();
QRect rcEnd = rcBegin;
if(m_bDsizeModeChanged){
int8_t height_diff = static_cast<int>(TOOLBOX_HEIGHT - TOOLBOX_DSIZEMODE_HEIGHT);
#ifdef DTKWIDGET_CLASS_DSizeMode
if (DGuiApplicationHelper::instance()->sizeMode() != DGuiApplicationHelper::CompactMode) {
height_diff = -height_diff;
}
#endif
rcEnd.setY(rcBegin.y() + TOOLBOX_SPACE_HEIGHT + 7 + height_diff);
} else {
rcEnd.setY(rcBegin.y() + TOOLBOX_SPACE_HEIGHT + 7);
}
setGeometry(rcEnd);
setGeometry(rc_closed);
m_pListBtn->setChecked(false);
}
m_bDsizeModeChanged = false;
}
}

Expand Down
Loading

0 comments on commit 3f62711

Please sign in to comment.