#include "dialog_fullscreen.h" #include "ui_dialog_fullscreen.h" #include "mainwindow.h" #include "imgfmt/HGPdf.h" #include "imgfmt/HGImgFmt.h" #include "HGUIGlobal.h" #include Dialog_FullScreen::Dialog_FullScreen(class MainWindow *mainWidget, const QStringList &fileNames, int currIndex, int multiIndex) : QDialog(nullptr) , ui(new Ui::Dialog_FullScreen) , m_mainWidget(mainWidget) , m_fileNames(fileNames) , m_currFilePath("") , m_currIndex(currIndex) , m_multiPageCount(0) , m_multiIndex(multiIndex) , m_pa_contrlWidget(new QPropertyAnimation(&m_effect_contrlWidget, "opacity", this)) , m_pa_text(new QPropertyAnimation(&m_effect_exit, "opacity", this)) { ui->setupUi(this); connect(&m_timer_hide, SIGNAL(timeout()), this, SLOT(on_hide())); connect(ui->view, SIGNAL(escape()), this, SLOT(on_escape())); connect(ui->view, SIGNAL(mousePos(int, int)), this, SLOT(on_mousePos(int, int))); this->setWindowFlags(Qt::FramelessWindowHint); this->setWindowState(Qt::WindowFullScreen); this->showFullScreen(); ui->view->setFocus(); m_pa_contrlWidget->setStartValue(0.7); m_pa_contrlWidget->setEndValue(0.0); m_pa_contrlWidget->setDuration(4000); m_pa_text->setStartValue(0.7); m_pa_text->setEndValue(0.0); m_pa_text->setDuration(4000); if (m_fileNames.count() > 0) { if (-1 != m_currIndex) { assert(-1 != m_multiIndex); m_currFilePath = m_fileNames.at(m_currIndex); m_multiPageCount = getMultiPageCount(); } else { assert(-1 == m_multiIndex); } } else { assert(-1 == m_currIndex && -1 == m_multiIndex); } showImage(); } Dialog_FullScreen::~Dialog_FullScreen() { delete ui; } void Dialog_FullScreen::showImage() { if (-1 != m_currIndex && -1 != m_multiIndex) { assert(!m_currFilePath.isEmpty()); HGImage img = nullptr; HGPdfReader pdfReader = nullptr; HGImgFmt_OpenPdfReader(getStdString(m_currFilePath).c_str(), &pdfReader); if (nullptr != pdfReader) { HGPdfPageInfo pageInfo = {0, 0}; if (HGBASE_ERR_OK == HGImgFmt_GetPdfPageInfo(pdfReader, (HGUInt)m_multiIndex, &pageInfo)) { float scale = 1.0f; if (pageInfo.width < 1600) scale = 1600.0f / pageInfo.width; HGImgFmt_LoadImageFromPdfReader(pdfReader, (HGUInt)m_multiIndex, scale, scale, 0, HGBASE_IMGORIGIN_TOP, &img); } HGImgFmt_ClosePdfReader(pdfReader); } else { HGImgFmtReader imgFmtReader = nullptr; HGImgFmt_OpenImageReader(getStdString(m_currFilePath).c_str(), 0, &imgFmtReader); if (nullptr != imgFmtReader) { HGImgFmt_LoadImageFromReader(imgFmtReader, (HGUInt)m_multiIndex, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img); HGImgFmt_CloseImageReader(imgFmtReader); } } if (nullptr != img) { ui->view->addImage(img); HGBase_DestroyImage(img); } else { ui->view->clearImage(); } } setBtnOpacity(0.7); setBtnEnable(); } int Dialog_FullScreen::getMultiPageCount() { assert(-1 != m_currIndex); assert(!m_currFilePath.isEmpty()); int count = 0; HGImgFmtReader imgFmtReader = nullptr; HGImgFmt_OpenImageReader(getStdString(m_currFilePath).c_str(), 0, &imgFmtReader); if (nullptr != imgFmtReader) { HGImgFmt_GetImagePageCount(imgFmtReader, (HGUInt *)&count); HGImgFmt_CloseImageReader(imgFmtReader); } return count; } void Dialog_FullScreen::on_btn_exit_clicked() { m_mainWidget->exitFullScreen(); } void Dialog_FullScreen::on_btn_prePage_clicked() { if (m_fileNames.size() > 0 && (-1 == m_currIndex || m_currIndex > 0)) { if (-1 == m_currIndex) m_currIndex = 0; else if (m_currIndex > 0) --m_currIndex; m_currFilePath = m_fileNames.at(m_currIndex); m_multiPageCount = getMultiPageCount(); m_multiIndex = 0; showImage(); } } void Dialog_FullScreen::on_btn_nextPage_clicked() { if (m_fileNames.size() > 0 && (-1 == m_currIndex || m_currIndex < m_fileNames.size() - 1)) { if (-1 == m_currIndex) m_currIndex = 0; else if (m_currIndex < m_fileNames.size() - 1) ++m_currIndex; m_currFilePath = m_fileNames.at(m_currIndex); m_multiPageCount = getMultiPageCount(); m_multiIndex = 0; showImage(); } } void Dialog_FullScreen::on_btn_pre_clicked() { if (-1 != m_currIndex && m_multiPageCount > 0 && m_multiIndex > 0) { --m_multiIndex; showImage(); } } void Dialog_FullScreen::on_btn_next_clicked() { if (-1 != m_currIndex && m_multiPageCount > 0 && m_multiIndex != -1 && m_multiIndex < m_multiPageCount - 1) { ++m_multiIndex; showImage(); } } void Dialog_FullScreen::on_hide() { m_pa_contrlWidget->start(); m_pa_text->start(); } void Dialog_FullScreen::on_escape() { m_mainWidget->exitFullScreen(); } void Dialog_FullScreen::on_mousePos(int x, int y) { (void)x; (void)y; setBtnOpacity(0.7); } void Dialog_FullScreen::setBtnOpacity(qreal opacity) { m_effect_contrlWidget.setOpacity(opacity); ui->contrlWidget->setGraphicsEffect(&m_effect_contrlWidget); m_effect_exit.setOpacity(opacity); ui->btn_exit->setGraphicsEffect(&m_effect_exit); m_pa_contrlWidget->stop(); m_pa_text->stop(); m_timer_hide.setSingleShot(true); //设置按钮显示计时为单次触发模式 m_timer_hide.start(1000); //设置按钮1秒后开始淡化 } void Dialog_FullScreen::setBtnEnable() { ui->btn_prePage->setEnabled(m_fileNames.size() > 0 && (-1 == m_currIndex || m_currIndex > 0)); ui->btn_nextPage->setEnabled(m_fileNames.size() > 0 && (-1 == m_currIndex || m_currIndex < m_fileNames.size() - 1)); ui->btn_pre->setEnabled(-1 != m_currIndex && m_multiPageCount > 0 && m_multiIndex > 0); ui->btn_next->setEnabled(-1 != m_currIndex && m_multiPageCount > 0 && m_multiIndex != -1 && m_multiIndex < m_multiPageCount - 1); ui->btn_exit->setEnabled(true); }