File indexing completed on 2024-04-28 15:40:27
0001 /* SPDX-FileCopyrightText: 2021 The KPhotoAlbum Development Team 0002 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "QtAVVideoToolBar.h" 0007 0008 #include <QtAV/AVPlayer.h> 0009 #include <QtAVWidgets/VideoPreviewWidget.h> 0010 0011 namespace Viewer 0012 { 0013 0014 QtAVVideoToolBar::QtAVVideoToolBar(QtAV::AVPlayer *player, QWidget *parent) 0015 : VideoToolBar(parent) 0016 , m_player(player) 0017 { 0018 connect(m_player, &QtAV::AVPlayer::started, this, &QtAVVideoToolBar::slotVideoStarted); 0019 } 0020 0021 void QtAVVideoToolBar::onTimeSliderHover(const QPoint &pos, int value) 0022 { 0023 VideoToolBar::onTimeSliderHover(pos, value); 0024 0025 if (!m_preview) 0026 m_preview = new QtAV::VideoPreviewWidget(); 0027 m_preview->setFile(m_player->file()); 0028 m_preview->setTimestamp(value); 0029 m_preview->preview(); 0030 0031 const int width = 150; 0032 const int height = [&] { 0033 const int w = m_player->statistics().video_only.coded_width; 0034 const int h = m_player->statistics().video_only.coded_height; 0035 if (w != 0 && h != 0) 0036 return static_cast<int>(1.0 * width * h / w); 0037 else 0038 return width; 0039 }(); 0040 0041 m_preview->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); 0042 m_preview->resize(width, height); 0043 m_preview->move(pos - QPoint(width / 2, height)); 0044 m_preview->show(); 0045 } 0046 0047 void QtAVVideoToolBar::closePreview() 0048 { 0049 if (!m_preview) 0050 return; 0051 0052 if (m_preview->isVisible()) 0053 m_preview->close(); 0054 0055 delete m_preview; 0056 m_preview = nullptr; 0057 } 0058 0059 void QtAVVideoToolBar::slotVideoStarted() 0060 { 0061 setRange(m_player->mediaStartPosition(), m_player->mediaStopPosition()); 0062 setPosition(m_player->mediaStopPosition()); 0063 setSeekSliderEnabled(m_player->isSeekable()); 0064 } 0065 0066 } // namespace Viewer 0067 0068 #include "moc_QtAVVideoToolBar.cpp"