228 lines
6.3 KiB
C++
228 lines
6.3 KiB
C++
#include "dialog_fullscreen.h"
|
|
#include "ui_dialog_fullscreen.h"
|
|
#include "mainwindow.h"
|
|
#include "imgfmt/HGPdf.h"
|
|
#include "imgfmt/HGImgFmt.h"
|
|
#include "HGUIGlobal.h"
|
|
#include <assert.h>
|
|
|
|
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);
|
|
|
|
QFont font;
|
|
font.setFamily("微软雅黑");
|
|
font.setPointSize(35);//文字大小
|
|
font.setBold(true);//粗体
|
|
ui->btn_exit->setFont(font);
|
|
ui->btn_exit->setText(tr("Exit fullscreen"));
|
|
ui->btn_exit->setStyleSheet("color: rgb(255, 255, 255); background-color: rgb(0, 0, 0);");
|
|
|
|
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)
|
|
{
|
|
float scale = 200.0f / 72.0f;
|
|
HGImgFmt_LoadImageFromPdfReader(pdfReader, (HGUInt)m_multiIndex, scale, scale, 0, HGBASE_IMGORIGIN_TOP, &img);
|
|
HGBase_SetImageDpi(img, 200, 200);
|
|
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);
|
|
}
|