File indexing completed on 2025-03-09 03:52:05

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2007-02-11
0007  * Description : a tool to show image using an OpenGL interface.
0008  *
0009  * SPDX-FileCopyrightText: 2007-2008 by Markus Leuthold <kusi at forum dot titlis dot org>
0010  * SPDX-FileCopyrightText: 2008-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0011  *
0012  * SPDX-License-Identifier: GPL-2.0-or-later
0013  *
0014  * ============================================================ */
0015 
0016 #ifndef DIGIKAM_GLVIEWER_PLUGIN_GLVIEWER_WIDGET_H
0017 #define DIGIKAM_GLVIEWER_PLUGIN_GLVIEWER_WIDGET_H
0018 
0019 // Qt includes
0020 
0021 #include <QCursor>
0022 #include <QDir>
0023 #include <QKeyEvent>
0024 #include <QMouseEvent>
0025 #include <QTimer>
0026 #include <QWheelEvent>
0027 #include <QUrl>
0028 #include <QList>
0029 
0030 // Local includes
0031 
0032 #include "glviewertexture.h"
0033 #include "glviewerglobal.h"
0034 #include "dplugin.h"
0035 #include "dinfointerface.h"
0036 
0037 using namespace Digikam;
0038 
0039 namespace DigikamGenericGLViewerPlugin
0040 {
0041 
0042 class GLViewerWidget : public QOpenGLWidget
0043 {
0044     Q_OBJECT
0045 
0046 public:
0047 
0048     explicit GLViewerWidget(DPlugin* const plugin,
0049                             DInfoInterface* const iface,
0050                             const QList<QUrl>& myfiles,
0051                             const QString& selectedImage);
0052     ~GLViewerWidget() override;
0053 
0054     void prevImage();
0055     void nextImage();
0056 
0057     OGLstate getOGLstate()                     const;
0058 
0059 private:
0060 
0061     void initializeGL()                              override;
0062     void resizeGL(int w, int h)                      override;
0063     void paintGL()                                   override;
0064 
0065     bool isReallyFullScreen()                  const;
0066 
0067     void keyPressEvent(QKeyEvent* e)                 override;
0068     void keyReleaseEvent(QKeyEvent* e)               override;
0069     void wheelEvent(QWheelEvent* e)                  override;
0070     void mouseMoveEvent(QMouseEvent* e)              override;
0071     void mousePressEvent(QMouseEvent* e)             override;
0072     void mouseDoubleClickEvent(QMouseEvent* e)       override;
0073     void mouseReleaseEvent(QMouseEvent* e)           override;
0074 
0075     GLViewerTexture* loadImage(int file_index) const;
0076     void drawImage(GLViewerTexture* const tex);
0077     void downloadTexture(GLViewerTexture* const tex);
0078 
0079     void zoom(int mdelta,
0080               const QPoint& pos,
0081               float factor);
0082 
0083 private Q_SLOTS:
0084 
0085     void slotTimeoutMouseMove();
0086 
0087 private:
0088 
0089     // Disable
0090     explicit GLViewerWidget(QWidget*) = delete;
0091 
0092 private:
0093 
0094     class Private;
0095     Private* const d;
0096 };
0097 
0098 } // namespace DigikamGenericGLViewerPlugin
0099 
0100 #endif // DIGIKAM_GLVIEWER_PLUGIN_GLVIEWER_WIDGET_H