Browse Source

set Image view as dock widget, keep image aspect ratio

Sonnix 6 years ago
parent
commit
ec8e3d17ec
4 changed files with 63 additions and 20 deletions
  1. 13 3
      mainwindow.cpp
  2. 1 0
      mainwindow.h
  3. 43 13
      qspimgcanvas.cpp
  4. 6 4
      qspimgcanvas.h

+ 13 - 3
mainwindow.cpp

@@ -99,9 +99,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
 
     m_volume = 1.0f;
 
-    m_imgView = new QspImgCanvas(this);
-    m_imgView->setObjectName(QStringLiteral("m_imgView"));
-
     disableVideo = false;
     m_videoFix = true;
 
@@ -373,6 +370,7 @@ bool MainWindow::ApplyBackColor(const QColor &color)
     _descTextBox->SetBackgroundColor(color);
     _objectsListBox->SetBackgroundColor(color);
     _actionsListBox->SetBackgroundColor(color);
+    m_imgView->SetBackgroundColor(color);
     return false;
 }
 
@@ -599,6 +597,11 @@ void MainWindow::CreateMenuBar()
     action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_5));
     _showHideMenu->addAction(action);
 
+    // Image item
+    action = _imgViewWidget->toggleViewAction();
+    action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_6));
+    _showHideMenu->addAction(action);
+
     _showHideMenu->addSeparator();
 
     // Captions item
@@ -754,6 +757,13 @@ void MainWindow::CreateDockWindows()
     connect(_inputTextBox, SIGNAL(textChanged()), this, SLOT(OnInputTextChange()));
     connect(_inputTextBox, SIGNAL(InputTextEnter()), this, SLOT(OnInputTextEnter()));
 
+    m_imgView = new QspImgCanvas(this);
+    m_imgView->setObjectName(QStringLiteral("m_imgView"));
+    _imgViewWidget = new QDockWidget(tr("Image"), this);
+    _imgViewWidget->setObjectName(QStringLiteral("_imgViewWidget"));
+    _imgViewWidget->setWidget(m_imgView);
+    addDockWidget(Qt::BottomDockWidgetArea, _imgViewWidget, Qt::Vertical);
+
     splitDockWidget(_actionsWidget, _inputWidget, Qt::Vertical);
     splitDockWidget(_mainDescWidget, _objectsWidget, Qt::Horizontal);
 }

+ 1 - 0
mainwindow.h

@@ -178,6 +178,7 @@ private:
     QString m_path;
     QTimer *m_timer;
     QspImgCanvas *m_imgView;
+    QDockWidget*    _imgViewWidget;
     int m_menuItemId;
     QMenu *m_menu; //qsp callback menu
     QColor m_backColor;

+ 43 - 13
qspimgcanvas.cpp

@@ -2,7 +2,7 @@
 
 #include <QFileInfo>
 
-QspImgCanvas::QspImgCanvas(QWidget *parent) : QDialog(parent)
+QspImgCanvas::QspImgCanvas(QWidget *parent) : QWidget(parent)
 {
     m_posX = m_posY = 0;
     m_isAnim = false;
@@ -16,11 +16,14 @@ QspImgCanvas::QspImgCanvas(QWidget *parent) : QDialog(parent)
     sizePolicy().setVerticalPolicy(QSizePolicy::Expanding);
     label_image.sizePolicy().setHorizontalPolicy(QSizePolicy::Expanding);
     label_image.sizePolicy().setVerticalPolicy(QSizePolicy::Expanding);
-    label_image.setScaledContents(true);
+    //label_image.setScaledContents(true);
     layout.addWidget(&label_image);
     setLayout(&layout);
-    setVisible(false);
-    setModal(false);
+    label_image.setMinimumSize(50, 50);
+    setMinimumSize(50, 50);
+    //setVisible(false);
+    //setModal(false);
+    connect(&m_movie, SIGNAL(frameChanged(int)), this, SLOT(OnNewFrame(int)) );
 }
 
 QspImgCanvas::~QspImgCanvas()
@@ -49,7 +52,7 @@ bool QspImgCanvas::OpenFile(const QString &fileName)
             }
             if (m_isAnim)
             {
-                label_image.setMovie(&m_movie);
+                //label_image.setMovie(&m_movie);
                 ret = true;
             }
             else
@@ -60,7 +63,8 @@ bool QspImgCanvas::OpenFile(const QString &fileName)
             }
             if (ret)
             {
-                setVisible(true);
+                resizeEvent(0);
+                //setVisible(true);
             }
             return ret;
         }
@@ -84,22 +88,48 @@ void QspImgCanvas::SetGamePath(const QString &path)
 
 bool QspImgCanvas::SetBackgroundColor(const QColor &color)
 {
+    QString sheet = QString::fromLatin1("QLabel { background-color : %1 }").arg(color.name());
+    label_image.setStyleSheet(sheet);
     //wxWindow::SetBackgroundColor(color);
     //m_animation->SetBackgroundColor(color);
     return true;
 }
 
-void QspImgCanvas::keyPressEvent(QKeyEvent *event)
+void QspImgCanvas::resizeEvent(QResizeEvent *event)
 {
-    if(event->key() == Qt::Key_Escape)
+    if (m_isAnim)
     {
-        setVisible(false);
-        event->ignore();
+        //label_image.setMovie(&m_movie);
+    }
+    else
+    {
+        if(!m_image.isNull())
+            label_image.setPixmap(m_image.scaled(label_image.size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
     }
 }
 
-void QspImgCanvas::closeEvent(QCloseEvent *event)
+void QspImgCanvas::OnNewFrame(int frameNumber)
 {
-    setVisible(false);
-    event->ignore();
+    if (m_isAnim)
+    {
+        if(m_movie.isValid())
+        {
+            label_image.setPixmap(m_movie.currentPixmap().scaled(label_image.size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
+        }
+    }
 }
+
+//void QspImgCanvas::keyPressEvent(QKeyEvent *event)
+//{
+//    if(event->key() == Qt::Key_Escape)
+//    {
+//        setVisible(false);
+//        event->ignore();
+//    }
+//}
+
+//void QspImgCanvas::closeEvent(QCloseEvent *event)
+//{
+//    setVisible(false);
+//    event->ignore();
+//}

+ 6 - 4
qspimgcanvas.h

@@ -6,7 +6,6 @@
 #include <QString>
 #include <QColor>
 #include <QPixmap>
-#include <QDialog>
 #include <QVBoxLayout>
 #include <QKeyEvent>
 #include <QCloseEvent>
@@ -16,7 +15,7 @@ namespace Ui {
 class QspImgCanvas;
 }
 
-class QspImgCanvas : public QDialog
+class QspImgCanvas : public QWidget
 {
     Q_OBJECT
 
@@ -33,6 +32,7 @@ public:
     virtual bool SetBackgroundColor(const QColor& color);
 
 private:
+    void resizeEvent(QResizeEvent *event);
     // Fields
     bool m_isAnim;
     QPixmap m_image;
@@ -42,8 +42,10 @@ private:
     QString m_path;
     int m_posX;
     int m_posY;
-    void keyPressEvent(QKeyEvent *event);
-    void closeEvent(QCloseEvent *event);
+//    void keyPressEvent(QKeyEvent *event);
+//    void closeEvent(QCloseEvent *event);
+private slots:
+    void OnNewFrame(int frameNumber);
 };
 
 #endif // QSPIMGCANVAS_H