1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
|
/***
Olive - Non-Linear Video Editor
Copyright (C) 2019 Olive Team
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
***/
#ifndef MANAGEDDISPLAYOBJECT_H
#define MANAGEDDISPLAYOBJECT_H
#include <QOpenGLWidget>
#include "render/backend/opengl/openglcolorprocessor.h"
#include "render/colormanager.h"
#include "widget/menu/menu.h"
OLIVE_NAMESPACE_ENTER
class ManagedDisplayWidget : public QOpenGLWidget
{
Q_OBJECT
public:
ManagedDisplayWidget(QWidget* parent = nullptr);
virtual ~ManagedDisplayWidget() override;
/**
* @brief Disconnect a ColorManager (equivalent to ConnectColorManager(nullptr))
*/
void DisconnectColorManager();
/**
* @brief Access currently connected ColorManager (nullptr if none)
*/
ColorManager* color_manager() const;
/**
* @brief Get current color transform
*/
const ColorTransform& GetColorTransform() const;
/**
* @brief Get menu that can be used to select the colorspace
*/
Menu* GetColorSpaceMenu(QMenu* parent, bool auto_connect = true);
/**
* @brief Get menu that can be used to select the display transform
*/
Menu* GetDisplayMenu(QMenu* parent, bool auto_connect = true);
/**
* @brief Get menu that can be used to select the view transform
*/
Menu* GetViewMenu(QMenu* parent, bool auto_connect = true);
/**
* @brief Get menu that can be used to select the look transform
*/
Menu* GetLookMenu(QMenu* parent, bool auto_connect = true);
public slots:
/**
* @brief Replaces the color transform with a new one
*/
void SetColorTransform(const ColorTransform& transform);
/**
* @brief Connect a ColorManager (ColorManagers usually belong to the Project)
*/
void ConnectColorManager(ColorManager* color_manager);
signals:
/**
* @brief Emitted when the color processor changes
*/
void ColorProcessorChanged(ColorProcessorPtr processor);
/**
* @brief Emitted when a new color manager is connected
*/
void ColorManagerChanged(ColorManager* color_manager);
protected:
/**
* @brief Provides access to the color processor (nullptr if none is set)
*/
OpenGLColorProcessorPtr color_service();
/**
* @brief Override when setting up OpenGL context
*/
virtual void initializeGL() override;
/**
* @brief Enables a context menu that allows simple access to the DVL pipeline
*/
void EnableDefaultContextMenu();
/**
* @brief Function called whenever the processor changes
*
* Default functionality is just to call update()
*/
virtual void ColorProcessorChangedEvent();
private:
/**
* @brief Call this if this user has selected a different display/view/look to recreate the processor
*/
void SetupColorProcessor();
/**
* @brief Cleanup function
*/
void ClearOCIOLutTexture();
/**
* @brief Connected color manager
*/
ColorManager* color_manager_;
/**
* @brief Color management service
*/
OpenGLColorProcessorPtr color_service_;
/**
* @brief Internal color transform storage
*/
ColorTransform color_transform_;
private slots:
/**
* @brief Sets all color settings to the defaults pertaining to this configuration
*/
void ColorConfigChanged();
/**
* @brief Cleans up resources if context is about to be destroyed
*/
void ContextCleanup();
/**
* @brief The default context menu shown
*/
void ShowDefaultContextMenu();
/**
* @brief If GetDisplayMenu() is called with `auto_connect` set to true, it will be connected to this
*/
void MenuDisplaySelect(QAction* action);
/**
* @brief If GetViewMenu() is called with `auto_connect` set to true, it will be connected to this
*/
void MenuViewSelect(QAction* action);
/**
* @brief If GetLookMenu() is called with `auto_connect` set to true, it will be connected to this
*/
void MenuLookSelect(QAction* action);
/**
* @brief If GetColorSpaceMenu() is called with `auto_connect` set to true, it will be connected to this
*/
void MenuColorspaceSelect(QAction* action);
};
OLIVE_NAMESPACE_EXIT
#endif // MANAGEDDISPLAYOBJECT_H
|