diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 8287b07d0..4f5ca956a 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -16,12 +16,15 @@ set(OLIVE_SOURCES ${OLIVE_SOURCES} + core.h + core.cpp main.cpp ) add_subdirectory(panel) add_subdirectory(project) add_subdirectory(render) +add_subdirectory(ui) add_subdirectory(widget) add_subdirectory(window) @@ -30,6 +33,11 @@ if(APPLE) set(OLIVE_TARGET "Olive") endif() +set(OLIVE_RESOURCES + ${OLIVE_RESOURCES} + #effects/internal/internalshaders.qrc +) + add_executable(${OLIVE_TARGET} ${OLIVE_SOURCES} ${OLIVE_RESOURCES} @@ -39,7 +47,7 @@ add_executable(${OLIVE_TARGET} target_compile_definitions(${OLIVE_TARGET} PRIVATE ${OLIVE_DEFINITIONS}) -target_compile_options(${OLIVE_TARGET} PRIVATE $<$:-Wno-reorder>) +target_compile_options(${OLIVE_TARGET} PRIVATE $<$:-Werror -pedantic-errors -Wall -Wextra -Wconversion -Wsign-conversion>) target_link_libraries(${OLIVE_TARGET} PRIVATE @@ -59,12 +67,6 @@ target_link_libraries(${OLIVE_TARGET} OpenColorIO ) -set(OLIVE_RESOURCES - cursors/cursors.qrc - effects/internal/internalshaders.qrc - icons/icons.qrc -) - set(OLIVE_EFFECTS effects/internal/cornerpin.frag effects/internal/dropshadow.frag diff --git a/app/core.cpp b/app/core.cpp new file mode 100644 index 000000000..898a91aad --- /dev/null +++ b/app/core.cpp @@ -0,0 +1,74 @@ +#include "core.h" + +#include +#include +#include + +#include "ui/icons/icons.h" +#include "ui/style/style.h" + +Core olive::core; + +Core::Core() : + main_window_(nullptr) +{ +} + +void Core::Start() +{ + // + // Parse command line arguments + // + + QCommandLineParser parser; + parser.addHelpOption(); + parser.addVersionOption(); + + // Project from command line option + // FIXME: What's the correct way to make an "optional" positional argument? + parser.addPositionalArgument("[project]", tr("Project to open on startup")); + + // Create fullscreen option + QCommandLineOption fullscreen_option({"f", "fullscreen"}, tr("Start in full screen mode")); + parser.addOption(fullscreen_option); + + // Parse options + parser.process(*QApplication::instance()); + + QStringList args = parser.positionalArguments(); + + // Detect project to load on startup + if (!args.isEmpty()) { + startup_project_ = args.first(); + } + + + + // + // Start GUI + // + + // Load all icons + olive::icon::LoadAll(); + + // Set UI style + olive::style::SetDefault(); + + // Create main window and open it + main_window_ = new olive::MainWindow(); + if (parser.isSet(fullscreen_option)) { + main_window_->showFullScreen(); + } else { + main_window_->showMaximized(); + } +} + +void Core::Stop() +{ + delete main_window_; +} + +olive::MainWindow *Core::main_window() +{ + return main_window_; +} diff --git a/app/core.h b/app/core.h new file mode 100644 index 000000000..1e1cd6bd0 --- /dev/null +++ b/app/core.h @@ -0,0 +1,27 @@ +#ifndef CORE_H +#define CORE_H + +#include "window/mainwindow/mainwindow.h" + +class Core : public QObject +{ + Q_OBJECT +public: + Core(); + + void Start(); + void StartGUI(); + void Stop(); + + olive::MainWindow* main_window(); +private: + olive::MainWindow* main_window_; + + QString startup_project_; +}; + +namespace olive { +extern Core core; +} + +#endif // CORE_H diff --git a/app/main.cpp b/app/main.cpp index 5232a3dae..21d275c1c 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -21,7 +21,7 @@ #include #include -#include "window/mainwindow/mainwindow.h" +#include "core.h" int main(int argc, char *argv[]) { // Create application instance @@ -43,11 +43,11 @@ int main(int argc, char *argv[]) { format.setProfile(QSurfaceFormat::CoreProfile); QSurfaceFormat::setDefaultFormat(format); - // Create main window instance - olive::MainWindow w; + olive::core.Start(); - // Show main window - w.showMaximized(); + int exit_code = a.exec(); - return a.exec(); + olive::core.Stop(); + + return exit_code; } diff --git a/app/panel/CMakeLists.txt b/app/panel/CMakeLists.txt index 1af491378..f07698e31 100644 --- a/app/panel/CMakeLists.txt +++ b/app/panel/CMakeLists.txt @@ -14,6 +14,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +add_subdirectory(project) +add_subdirectory(timeline) add_subdirectory(viewer) set(OLIVE_SOURCES diff --git a/app/panel/project/CMakeLists.txt b/app/panel/project/CMakeLists.txt new file mode 100644 index 000000000..fcb7ad98a --- /dev/null +++ b/app/panel/project/CMakeLists.txt @@ -0,0 +1,22 @@ +# 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 . + +set(OLIVE_SOURCES + ${OLIVE_SOURCES} + panel/project/project.h + panel/project/project.cpp + PARENT_SCOPE +) diff --git a/app/panel/project/project.cpp b/app/panel/project/project.cpp new file mode 100644 index 000000000..a423485d8 --- /dev/null +++ b/app/panel/project/project.cpp @@ -0,0 +1,41 @@ +#include "project.h" + +#include + +#include "widget/projecttoolbar/projecttoolbar.h" + +ProjectPanel::ProjectPanel(QWidget *parent) : + PanelWidget(parent) +{ + // Create main widget and its layout + QWidget* central_widget = new QWidget(this); + QVBoxLayout* layout = new QVBoxLayout(central_widget); + layout->setMargin(0); + layout->setSpacing(0); + setWidget(central_widget); + + // Set up project toolbar + ProjectToolbar* toolbar = new ProjectToolbar(this); + layout->addWidget(toolbar); + + // Set up main explorer object + ProjectExplorer* explorer = new ProjectExplorer(this); + layout->addWidget(explorer); + + // Set strings + Retranslate(); +} + +void ProjectPanel::changeEvent(QEvent *e) +{ + if (e->type() == QEvent::LanguageChange) { + Retranslate(); + } + QDockWidget::changeEvent(e); +} + +void ProjectPanel::Retranslate() +{ + SetTitle(tr("Project")); + SetSubtitle(tr("(untitled)")); +} diff --git a/app/panel/project/project.h b/app/panel/project/project.h new file mode 100644 index 000000000..3bea6f785 --- /dev/null +++ b/app/panel/project/project.h @@ -0,0 +1,20 @@ +#ifndef PROJECT_H +#define PROJECT_H + +#include "widget/panel/panel.h" +#include "widget/projectexplorer/projectexplorer.h" + +class ProjectPanel : public PanelWidget +{ + Q_OBJECT +public: + ProjectPanel(QWidget* parent); + +protected: + virtual void changeEvent(QEvent* e) override; + +private: + void Retranslate(); +}; + +#endif // PROJECT_H diff --git a/app/panel/timeline/CMakeLists.txt b/app/panel/timeline/CMakeLists.txt new file mode 100644 index 000000000..bb7eefaf7 --- /dev/null +++ b/app/panel/timeline/CMakeLists.txt @@ -0,0 +1,22 @@ +# 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 . + +set(OLIVE_SOURCES + ${OLIVE_SOURCES} + panel/timeline/timeline.h + panel/timeline/timeline.cpp + PARENT_SCOPE +) diff --git a/app/panel/timeline/timeline.cpp b/app/panel/timeline/timeline.cpp new file mode 100644 index 000000000..c2f8083a9 --- /dev/null +++ b/app/panel/timeline/timeline.cpp @@ -0,0 +1,21 @@ +#include "timeline.h" + +TimelinePanel::TimelinePanel(QWidget *parent) : + PanelWidget(parent) +{ + Retranslate(); +} + +void TimelinePanel::changeEvent(QEvent *e) +{ + if (e->type() == QEvent::LanguageChange) { + Retranslate(); + } + QDockWidget::changeEvent(e); +} + +void TimelinePanel::Retranslate() +{ + SetTitle(tr("Timeline")); + SetSubtitle(tr("(none)")); +} diff --git a/app/panel/timeline/timeline.h b/app/panel/timeline/timeline.h new file mode 100644 index 000000000..58ce03afe --- /dev/null +++ b/app/panel/timeline/timeline.h @@ -0,0 +1,19 @@ +#ifndef TIMELINE_H +#define TIMELINE_H + +#include "widget/panel/panel.h" + +class TimelinePanel : public PanelWidget +{ + Q_OBJECT +public: + TimelinePanel(QWidget* parent); + +protected: + virtual void changeEvent(QEvent* e) override; + +private: + void Retranslate(); +}; + +#endif // TIMELINE_H diff --git a/app/panel/viewer/viewer.cpp b/app/panel/viewer/viewer.cpp index 6e367b9cf..87b7ed4e2 100644 --- a/app/panel/viewer/viewer.cpp +++ b/app/panel/viewer/viewer.cpp @@ -13,4 +13,21 @@ ViewerPanel::ViewerPanel(QWidget *parent) : // Set ViewerWidget as the central widget setWidget(viewer); + + // Set strings + Retranslate(); +} + +void ViewerPanel::changeEvent(QEvent *e) +{ + if (e->type() == QEvent::LanguageChange) { + Retranslate(); + } + QDockWidget::changeEvent(e); +} + +void ViewerPanel::Retranslate() +{ + SetTitle(tr("Viewer")); + SetSubtitle(tr("(none)")); } diff --git a/app/panel/viewer/viewer.h b/app/panel/viewer/viewer.h index 5a0a9c946..61a53d9a0 100644 --- a/app/panel/viewer/viewer.h +++ b/app/panel/viewer/viewer.h @@ -12,7 +12,12 @@ class ViewerPanel : public PanelWidget { Q_OBJECT public: ViewerPanel(QWidget* parent); + +protected: + virtual void changeEvent(QEvent* e) override; + private: + void Retranslate(); }; #endif // VIEWER_PANEL_H diff --git a/app/render/CMakeLists.txt b/app/render/CMakeLists.txt index 4c826af41..d782b3964 100644 --- a/app/render/CMakeLists.txt +++ b/app/render/CMakeLists.txt @@ -14,10 +14,9 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +add_subdirectory(gl) + set(OLIVE_SOURCES ${OLIVE_SOURCES} - render/glfunc.h - render/glfunc.cpp - render/qopenglshaderprogramptr.h PARENT_SCOPE ) diff --git a/app/render/gl/CMakeLists.txt b/app/render/gl/CMakeLists.txt new file mode 100644 index 000000000..743401cdf --- /dev/null +++ b/app/render/gl/CMakeLists.txt @@ -0,0 +1,25 @@ +# 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 . + +set(OLIVE_SOURCES + ${OLIVE_SOURCES} + render/gl/glfunc.h + render/gl/glfunc.cpp + render/gl/shadergenerators.h + render/gl/shadergenerators.cpp + render/gl/shaderptr.h + PARENT_SCOPE +) diff --git a/app/render/glfunc.cpp b/app/render/gl/glfunc.cpp similarity index 75% rename from app/render/glfunc.cpp rename to app/render/gl/glfunc.cpp index 6f4e2f05d..a600ecd42 100644 --- a/app/render/glfunc.cpp +++ b/app/render/gl/glfunc.cpp @@ -35,8 +35,13 @@ const GLfloat flipped_blit_texcoords[] = { }; /** - * @brief Set up texture mipmaps + * @brief Set up texture parameters and mipmap for drawing + * + * Internal function used just before drawing to allow mipmapped bilinear filtering when drawing textures small. + * * @param f + * + * Currently active QOpenGLFunctions object (use context()->functions() if unsure). */ void PrepareToDraw(QOpenGLFunctions* f) { f->glGenerateMipmap(GL_TEXTURE_2D); @@ -46,9 +51,10 @@ void PrepareToDraw(QOpenGLFunctions* f) { f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); } -void olive::gl::Blit(QOpenGLShaderProgram* pipeline, bool flipped, QMatrix4x4 matrix) { - +void olive::gl::Blit(ShaderPtr pipeline, bool flipped, QMatrix4x4 matrix) { + // FIXME: is currentContext() reliable here? QOpenGLFunctions* func = QOpenGLContext::currentContext()->functions(); + PrepareToDraw(func); QOpenGLVertexArrayObject m_vao; @@ -72,16 +78,16 @@ void olive::gl::Blit(QOpenGLShaderProgram* pipeline, bool flipped, QMatrix4x4 ma pipeline->setUniformValue("mvp_matrix", matrix); pipeline->setUniformValue("texture", 0); - GLuint vertex_location = pipeline->attributeLocation("a_position"); + GLuint vertex_location = static_cast(pipeline->attributeLocation("a_position")); m_vbo.bind(); func->glEnableVertexAttribArray(vertex_location); - func->glVertexAttribPointer(vertex_location, 3, GL_FLOAT, GL_FALSE, 0, 0); + func->glVertexAttribPointer(vertex_location, 3, GL_FLOAT, GL_FALSE, 0, nullptr); m_vbo.release(); - GLuint tex_location = pipeline->attributeLocation("a_texcoord"); + GLuint tex_location = static_cast(pipeline->attributeLocation("a_texcoord")); m_vbo2.bind(); func->glEnableVertexAttribArray(tex_location); - func->glVertexAttribPointer(tex_location, 2, GL_FLOAT, GL_FALSE, 0, 0); + func->glVertexAttribPointer(tex_location, 2, GL_FLOAT, GL_FALSE, 0, nullptr); m_vbo2.release(); func->glDrawArrays(GL_TRIANGLES, 0, 6); diff --git a/app/render/glfunc.h b/app/render/gl/glfunc.h similarity index 75% rename from app/render/glfunc.h rename to app/render/gl/glfunc.h index 4e607ed64..6e516339d 100644 --- a/app/render/glfunc.h +++ b/app/render/gl/glfunc.h @@ -1,9 +1,10 @@ #ifndef GLFUNC_H #define GLFUNC_H -#include #include +#include "shaderptr.h" + namespace olive { namespace gl { @@ -22,7 +23,7 @@ namespace gl { * * Transformation matrix to use when drawing (defaults to no transform) */ -void Blit(QOpenGLShaderProgram* pipeline, bool flipped = false, QMatrix4x4 matrix = QMatrix4x4()); +void Blit(ShaderPtr pipeline, bool flipped = false, QMatrix4x4 matrix = QMatrix4x4()); } } diff --git a/app/render/gl/shadergenerators.cpp b/app/render/gl/shadergenerators.cpp new file mode 100644 index 000000000..b86f2f780 --- /dev/null +++ b/app/render/gl/shadergenerators.cpp @@ -0,0 +1,230 @@ +#include "shadergenerators.h" + +#include + +ShaderPtr olive::gl::GetDefaultPipeline(const QString& function_name, const QString& shader_code) +{ + ShaderPtr program = std::make_shared(); + + // Generate vertex shader + QString vert_shader = "#version 110\n" + "\n" + "#ifdef GL_ES\n" + "precision mediump int;\n" + "precision mediump float;\n" + "#endif\n" + "\n" + "uniform mat4 mvp_matrix;\n" + "\n" + "attribute vec4 a_position;\n" + "attribute vec2 a_texcoord;\n" + "\n" + "varying vec2 v_texcoord;\n" + "\n" + "void main() {\n" + " gl_Position = mvp_matrix * a_position;\n" + " v_texcoord = a_texcoord;\n" + "}\n"; + + // Generate fragment shader + QString frag_shader = "#version 110\n" + "\n" + "#ifdef GL_ES\n" + "precision mediump int;\n" + "precision mediump float;\n" + "#endif\n" + "\n" + "uniform sampler2D texture;\n" + "uniform float opacity;\n" + "uniform bool color_only;\n" + "uniform vec4 color_only_color;\n" + "varying vec2 v_texcoord;\n" + "\n"; + + // Finish the function with the main function + + // Check if additional code was passed to this function, add it here + if (shader_code.isEmpty()) { + + // If not, just add a pure main() function + + frag_shader.append("\n" + "void main() {\n" + " if (color_only) {\n" + " gl_FragColor = color_only_color;" + " } else {\n" + " vec4 color = texture2D(texture, v_texcoord)*opacity;\n" + " gl_FragColor = color;\n" + " }\n" + "}\n"); + + } else { + + // If additional code was passed, add it and reference it in main(). + // + // The function in the additional code is expected to be `vec4 function_name(vec4 color)`. The texture coordinate can be + // acquired through `v_texcoord`. + + frag_shader.append(shader_code); + + frag_shader.append(QString("\n" + "void main() {\n" + " vec4 color = %1(texture2D(texture, v_texcoord))*opacity;\n" + " gl_FragColor = color;\n" + "}\n").arg(function_name)); + + } + + + + + // Add shaders to program + program->addShaderFromSourceCode(QOpenGLShader::Vertex, vert_shader); + program->addShaderFromSourceCode(QOpenGLShader::Fragment, frag_shader); + program->link(); + + // Set opacity default to 100% + program->bind(); + program->setUniformValue("opacity", 1.0f); + program->release(); + + return program; +} + +QString olive::gl::GetAlphaDisassociateFunction(const QString &function_name) +{ + return QString("vec4 %1(vec4 col) {\n" + " if (col.a > 0.0) {\n" + " return vec4(col.rgb / col.a, col.a);" + " }\n" + " return col;\n" + "}\n").arg(function_name); +} + +QString olive::gl::GetAlphaReassociateFunction(const QString &function_name) +{ + return QString("vec4 %1(vec4 col) {\n" + " if (col.a > 0.0) {\n" + " return vec4(col.rgb * col.a, col.a);" + " }\n" + " return col;\n" + "}\n").arg(function_name); +} + +QString olive::gl::GetAlphaAssociateFunction(const QString &function_name) +{ + return QString("vec4 %1(vec4 col) {\n" + " return vec4(col.rgb * col.a, col.a);\n" + "}\n").arg(function_name); +} + +// copied from source code to OCIODisplay +const int OCIO_LUT3D_EDGE_SIZE = 32; + +// copied from source code to OCIODisplay, expanded from 3*LUT3D_EDGE_SIZE*LUT3D_EDGE_SIZE*LUT3D_EDGE_SIZE +const int OCIO_NUM_3D_ENTRIES = 98304; + +ShaderPtr olive::gl::GetOCIOPipeline(QOpenGLContext* ctx, + GLuint& lut_texture, + OCIO::ConstProcessorRcPtr processor, + bool alpha_is_associated) +{ + + QOpenGLExtraFunctions* xf = ctx->extraFunctions(); + + // Create LUT texture + xf->glGenTextures(1, &lut_texture); + + // Bind LUT + xf->glBindTexture(GL_TEXTURE_3D, lut_texture); + + // Set texture parameters + xf->glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + xf->glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + xf->glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + xf->glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + xf->glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); + + // Allocate storage for texture + xf->glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB16F_ARB, + OCIO_LUT3D_EDGE_SIZE, OCIO_LUT3D_EDGE_SIZE, OCIO_LUT3D_EDGE_SIZE, + 0, GL_RGB,GL_FLOAT, nullptr); + + // + // SET UP GLSL SHADER + // + + OCIO::GpuShaderDesc shaderDesc; + const char* ocio_func_name = "OCIODisplay"; + shaderDesc.setLanguage(OCIO::GPU_LANGUAGE_GLSL_1_0); + shaderDesc.setFunctionName(ocio_func_name); + shaderDesc.setLut3DEdgeLen(OCIO_LUT3D_EDGE_SIZE); + + // + // COMPUTE 3D LUT + // + + GLfloat* ocio_lut_data = new GLfloat[OCIO_NUM_3D_ENTRIES]; + processor->getGpuLut3D(ocio_lut_data, shaderDesc); + + // Upload LUT data to texture + xf->glTexSubImage3D(GL_TEXTURE_3D, 0, + 0, 0, 0, + OCIO_LUT3D_EDGE_SIZE, OCIO_LUT3D_EDGE_SIZE, OCIO_LUT3D_EDGE_SIZE, + GL_RGB, GL_FLOAT, ocio_lut_data); + + delete [] ocio_lut_data; + + // Create OCIO shader code + QString shader_text(processor->getGpuShaderText(shaderDesc)); + + QString shader_call; + + // Enforce alpha association + if (alpha_is_associated) { + + // If alpha is already associated, we'll need to disassociate and reassociate + shader_text.append("\n"); + + QString disassociate_func_name = "disassoc"; + shader_text.append(GetAlphaDisassociateFunction(disassociate_func_name)); + + QString reassociate_func_name = "reassoc"; + shader_text.append(GetAlphaReassociateFunction(reassociate_func_name)); + + // Make OCIO call pass through disassociate and reassociate function + shader_call = QString("%3(%1(%2(col), tex2));").arg(ocio_func_name, + disassociate_func_name, + reassociate_func_name); + + } else { + + // If alpha is not already associated, we can just associate after OCIO + + // Add associate function + QString associate_func_name = "assoc"; + shader_text.append(GetAlphaAssociateFunction(associate_func_name)); + + // Make OCIO call pass through associate function + shader_call = QString("%2(%1(col, tex2));").arg(ocio_func_name, associate_func_name); + + } + + // Add process() function, which GetPipeline() will call if specified + QString process_function_name = "process"; + shader_text.append(QString("\n" + "uniform sampler3D tex2;\n" + "\n" + "vec4 %2(vec4 col) {\n" + " return %1\n" + "}\n").arg(shader_call, process_function_name)); + + + // Get pipeline-based shader to inject OCIO shader into + ShaderPtr shader = olive::gl::GetDefaultPipeline(process_function_name, shader_text); + + // Release LUT + xf->glBindTexture(GL_TEXTURE_3D, 0); + + return shader; +} diff --git a/app/render/gl/shadergenerators.h b/app/render/gl/shadergenerators.h new file mode 100644 index 000000000..3849af85a --- /dev/null +++ b/app/render/gl/shadergenerators.h @@ -0,0 +1,34 @@ +#ifndef SHADERGENERATORS_H +#define SHADERGENERATORS_H + +#include +namespace OCIO = OCIO_NAMESPACE::v1; + +#include "shaderptr.h" + +/** + * + * Olive standardizes on OpenGL 3.2 Core which has no fixed pipeline. Instead, the pipeline is provided by the + * programmer in the form of a shader. This is a collection of OpenGL shader pipeline generators for use throughout + * Olive. + * + */ + +namespace olive { +namespace gl { + +ShaderPtr GetDefaultPipeline(const QString &function_name = QString(), const QString &shader_code = QString()); + +ShaderPtr GetOCIOPipeline(QOpenGLContext *ctx, + GLuint &lut_texture, + OCIO::ConstProcessorRcPtr processor, + bool alpha_is_associated); + +QString GetAlphaDisassociateFunction(const QString& function_name); +QString GetAlphaReassociateFunction(const QString& function_name); +QString GetAlphaAssociateFunction(const QString& function_name); + +} +} + +#endif // SHADERGENERATORS_H diff --git a/app/render/qopenglshaderprogramptr.h b/app/render/gl/shaderptr.h similarity index 92% rename from app/render/qopenglshaderprogramptr.h rename to app/render/gl/shaderptr.h index a89993ffd..c9cddc9d2 100644 --- a/app/render/qopenglshaderprogramptr.h +++ b/app/render/gl/shaderptr.h @@ -24,6 +24,6 @@ #include #include -using QOpenGLShaderProgramPtr = std::shared_ptr; +using ShaderPtr = std::shared_ptr; #endif // QOPENGLSHADERPROGRAMPTR_H diff --git a/app/ui/CMakeLists.txt b/app/ui/CMakeLists.txt new file mode 100644 index 000000000..55ba82947 --- /dev/null +++ b/app/ui/CMakeLists.txt @@ -0,0 +1,30 @@ +# 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 . + +add_subdirectory(cursors) +add_subdirectory(graphics) +add_subdirectory(icons) +add_subdirectory(style) + +set(OLIVE_RESOURCES + ${OLIVE_RESOURCES} + PARENT_SCOPE +) + +set(OLIVE_SOURCES + ${OLIVE_SOURCES} + PARENT_SCOPE +) diff --git a/cursors/1_left.svg b/app/ui/cursors/1_left.svg similarity index 100% rename from cursors/1_left.svg rename to app/ui/cursors/1_left.svg diff --git a/cursors/1_right.svg b/app/ui/cursors/1_right.svg similarity index 100% rename from cursors/1_right.svg rename to app/ui/cursors/1_right.svg diff --git a/cursors/2.svg b/app/ui/cursors/2.svg similarity index 100% rename from cursors/2.svg rename to app/ui/cursors/2.svg diff --git a/cursors/3_left.svg b/app/ui/cursors/3_left.svg similarity index 100% rename from cursors/3_left.svg rename to app/ui/cursors/3_left.svg diff --git a/cursors/3_right.svg b/app/ui/cursors/3_right.svg similarity index 100% rename from cursors/3_right.svg rename to app/ui/cursors/3_right.svg diff --git a/cursors/4.svg b/app/ui/cursors/4.svg similarity index 100% rename from cursors/4.svg rename to app/ui/cursors/4.svg diff --git a/cursors/5.svg b/app/ui/cursors/5.svg similarity index 100% rename from cursors/5.svg rename to app/ui/cursors/5.svg diff --git a/cursors/5b.svg b/app/ui/cursors/5b.svg similarity index 100% rename from cursors/5b.svg rename to app/ui/cursors/5b.svg diff --git a/cursors/5c.svg b/app/ui/cursors/5c.svg similarity index 100% rename from cursors/5c.svg rename to app/ui/cursors/5c.svg diff --git a/app/ui/cursors/CMakeLists.txt b/app/ui/cursors/CMakeLists.txt new file mode 100644 index 000000000..2f77372f9 --- /dev/null +++ b/app/ui/cursors/CMakeLists.txt @@ -0,0 +1,21 @@ +# 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 . + +set(OLIVE_RESOURCES + ${OLIVE_RESOURCES} + ui/cursors/cursors.qrc + PARENT_SCOPE +) diff --git a/cursors/cursors.qrc b/app/ui/cursors/cursors.qrc similarity index 100% rename from cursors/cursors.qrc rename to app/ui/cursors/cursors.qrc diff --git a/app/ui/graphics/CMakeLists.txt b/app/ui/graphics/CMakeLists.txt new file mode 100644 index 000000000..c1cde3598 --- /dev/null +++ b/app/ui/graphics/CMakeLists.txt @@ -0,0 +1,21 @@ +# 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 . + +set(OLIVE_RESOURCES + ${OLIVE_RESOURCES} + ui/graphics/graphics.qrc + PARENT_SCOPE +) diff --git a/app/ui/graphics/graphics.qrc b/app/ui/graphics/graphics.qrc new file mode 100644 index 000000000..893c0a9d9 --- /dev/null +++ b/app/ui/graphics/graphics.qrc @@ -0,0 +1,6 @@ + + + throbber.png + olive-splash.png + + diff --git a/icons/olive-splash.png b/app/ui/graphics/olive-splash.png similarity index 100% rename from icons/olive-splash.png rename to app/ui/graphics/olive-splash.png diff --git a/icons/throbber.png b/app/ui/graphics/throbber.png similarity index 100% rename from icons/throbber.png rename to app/ui/graphics/throbber.png diff --git a/app/ui/icons/CMakeLists.txt b/app/ui/icons/CMakeLists.txt new file mode 100644 index 000000000..dd87ffcba --- /dev/null +++ b/app/ui/icons/CMakeLists.txt @@ -0,0 +1,28 @@ +# 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 . + +set(OLIVE_SOURCES + ${OLIVE_SOURCES} + ui/icons/icons.h + ui/icons/icons.cpp + PARENT_SCOPE +) + +set(OLIVE_RESOURCES + ${OLIVE_RESOURCES} + ui/icons/icons.qrc + PARENT_SCOPE +) diff --git a/app/ui/icons/add-button.128.png b/app/ui/icons/add-button.128.png new file mode 100644 index 000000000..8800e8186 Binary files /dev/null and b/app/ui/icons/add-button.128.png differ diff --git a/app/ui/icons/add-button.16.png b/app/ui/icons/add-button.16.png new file mode 100644 index 000000000..bcf4d7aac Binary files /dev/null and b/app/ui/icons/add-button.16.png differ diff --git a/app/ui/icons/add-button.32.png b/app/ui/icons/add-button.32.png new file mode 100644 index 000000000..a0c704913 Binary files /dev/null and b/app/ui/icons/add-button.32.png differ diff --git a/app/ui/icons/add-button.64.png b/app/ui/icons/add-button.64.png new file mode 100644 index 000000000..a2f82c462 Binary files /dev/null and b/app/ui/icons/add-button.64.png differ diff --git a/app/ui/icons/add-effect.128.png b/app/ui/icons/add-effect.128.png new file mode 100644 index 000000000..88c0b58b5 Binary files /dev/null and b/app/ui/icons/add-effect.128.png differ diff --git a/app/ui/icons/add-effect.16.png b/app/ui/icons/add-effect.16.png new file mode 100644 index 000000000..fbf7994cb Binary files /dev/null and b/app/ui/icons/add-effect.16.png differ diff --git a/app/ui/icons/add-effect.32.png b/app/ui/icons/add-effect.32.png new file mode 100644 index 000000000..ea10f402d Binary files /dev/null and b/app/ui/icons/add-effect.32.png differ diff --git a/app/ui/icons/add-effect.64.png b/app/ui/icons/add-effect.64.png new file mode 100644 index 000000000..7b16cb66f Binary files /dev/null and b/app/ui/icons/add-effect.64.png differ diff --git a/app/ui/icons/add-transition.128.png b/app/ui/icons/add-transition.128.png new file mode 100644 index 000000000..ae2933b1d Binary files /dev/null and b/app/ui/icons/add-transition.128.png differ diff --git a/app/ui/icons/add-transition.16.png b/app/ui/icons/add-transition.16.png new file mode 100644 index 000000000..38a281f51 Binary files /dev/null and b/app/ui/icons/add-transition.16.png differ diff --git a/app/ui/icons/add-transition.32.png b/app/ui/icons/add-transition.32.png new file mode 100644 index 000000000..bc4cbf031 Binary files /dev/null and b/app/ui/icons/add-transition.32.png differ diff --git a/app/ui/icons/add-transition.64.png b/app/ui/icons/add-transition.64.png new file mode 100644 index 000000000..0f2b1ba3d Binary files /dev/null and b/app/ui/icons/add-transition.64.png differ diff --git a/app/ui/icons/align-center.128.png b/app/ui/icons/align-center.128.png new file mode 100644 index 000000000..2ff9d691f Binary files /dev/null and b/app/ui/icons/align-center.128.png differ diff --git a/app/ui/icons/align-center.16.png b/app/ui/icons/align-center.16.png new file mode 100644 index 000000000..87bcdc7ee Binary files /dev/null and b/app/ui/icons/align-center.16.png differ diff --git a/app/ui/icons/align-center.32.png b/app/ui/icons/align-center.32.png new file mode 100644 index 000000000..c9d4a75f0 Binary files /dev/null and b/app/ui/icons/align-center.32.png differ diff --git a/app/ui/icons/align-center.64.png b/app/ui/icons/align-center.64.png new file mode 100644 index 000000000..c73ac422f Binary files /dev/null and b/app/ui/icons/align-center.64.png differ diff --git a/app/ui/icons/align-left.128.png b/app/ui/icons/align-left.128.png new file mode 100644 index 000000000..9e1a0d2ad Binary files /dev/null and b/app/ui/icons/align-left.128.png differ diff --git a/app/ui/icons/align-left.16.png b/app/ui/icons/align-left.16.png new file mode 100644 index 000000000..e3e67ed53 Binary files /dev/null and b/app/ui/icons/align-left.16.png differ diff --git a/app/ui/icons/align-left.32.png b/app/ui/icons/align-left.32.png new file mode 100644 index 000000000..72e438c8d Binary files /dev/null and b/app/ui/icons/align-left.32.png differ diff --git a/app/ui/icons/align-left.64.png b/app/ui/icons/align-left.64.png new file mode 100644 index 000000000..57382910a Binary files /dev/null and b/app/ui/icons/align-left.64.png differ diff --git a/app/ui/icons/align-right.128.png b/app/ui/icons/align-right.128.png new file mode 100644 index 000000000..0bf940ad5 Binary files /dev/null and b/app/ui/icons/align-right.128.png differ diff --git a/app/ui/icons/align-right.16.png b/app/ui/icons/align-right.16.png new file mode 100644 index 000000000..14ae24b41 Binary files /dev/null and b/app/ui/icons/align-right.16.png differ diff --git a/app/ui/icons/align-right.32.png b/app/ui/icons/align-right.32.png new file mode 100644 index 000000000..a7f1bbe0d Binary files /dev/null and b/app/ui/icons/align-right.32.png differ diff --git a/app/ui/icons/align-right.64.png b/app/ui/icons/align-right.64.png new file mode 100644 index 000000000..c9c0b0e02 Binary files /dev/null and b/app/ui/icons/align-right.64.png differ diff --git a/app/ui/icons/arrow.128.png b/app/ui/icons/arrow.128.png new file mode 100644 index 000000000..40bb07fee Binary files /dev/null and b/app/ui/icons/arrow.128.png differ diff --git a/app/ui/icons/arrow.16.png b/app/ui/icons/arrow.16.png new file mode 100644 index 000000000..e178d430c Binary files /dev/null and b/app/ui/icons/arrow.16.png differ diff --git a/app/ui/icons/arrow.32.png b/app/ui/icons/arrow.32.png new file mode 100644 index 000000000..625782fe7 Binary files /dev/null and b/app/ui/icons/arrow.32.png differ diff --git a/app/ui/icons/arrow.64.png b/app/ui/icons/arrow.64.png new file mode 100644 index 000000000..3d352903c Binary files /dev/null and b/app/ui/icons/arrow.64.png differ diff --git a/app/ui/icons/audiosource.128.png b/app/ui/icons/audiosource.128.png new file mode 100644 index 000000000..0c9f4b9b8 Binary files /dev/null and b/app/ui/icons/audiosource.128.png differ diff --git a/app/ui/icons/audiosource.16.png b/app/ui/icons/audiosource.16.png new file mode 100644 index 000000000..b878700a8 Binary files /dev/null and b/app/ui/icons/audiosource.16.png differ diff --git a/app/ui/icons/audiosource.32.png b/app/ui/icons/audiosource.32.png new file mode 100644 index 000000000..f83843565 Binary files /dev/null and b/app/ui/icons/audiosource.32.png differ diff --git a/app/ui/icons/audiosource.64.png b/app/ui/icons/audiosource.64.png new file mode 100644 index 000000000..5a778967a Binary files /dev/null and b/app/ui/icons/audiosource.64.png differ diff --git a/app/ui/icons/beam.128.png b/app/ui/icons/beam.128.png new file mode 100644 index 000000000..296e43343 Binary files /dev/null and b/app/ui/icons/beam.128.png differ diff --git a/app/ui/icons/beam.16.png b/app/ui/icons/beam.16.png new file mode 100644 index 000000000..2ddebafa9 Binary files /dev/null and b/app/ui/icons/beam.16.png differ diff --git a/app/ui/icons/beam.32.png b/app/ui/icons/beam.32.png new file mode 100644 index 000000000..3a98813c6 Binary files /dev/null and b/app/ui/icons/beam.32.png differ diff --git a/app/ui/icons/beam.64.png b/app/ui/icons/beam.64.png new file mode 100644 index 000000000..a1563674f Binary files /dev/null and b/app/ui/icons/beam.64.png differ diff --git a/app/ui/icons/bold.128.png b/app/ui/icons/bold.128.png new file mode 100644 index 000000000..80d9818cc Binary files /dev/null and b/app/ui/icons/bold.128.png differ diff --git a/app/ui/icons/bold.16.png b/app/ui/icons/bold.16.png new file mode 100644 index 000000000..44b56b829 Binary files /dev/null and b/app/ui/icons/bold.16.png differ diff --git a/app/ui/icons/bold.32.png b/app/ui/icons/bold.32.png new file mode 100644 index 000000000..06fa0bb1d Binary files /dev/null and b/app/ui/icons/bold.32.png differ diff --git a/app/ui/icons/bold.64.png b/app/ui/icons/bold.64.png new file mode 100644 index 000000000..facdc4ad2 Binary files /dev/null and b/app/ui/icons/bold.64.png differ diff --git a/app/ui/icons/clock.128.png b/app/ui/icons/clock.128.png new file mode 100644 index 000000000..2cd73d9f7 Binary files /dev/null and b/app/ui/icons/clock.128.png differ diff --git a/app/ui/icons/clock.16.png b/app/ui/icons/clock.16.png new file mode 100644 index 000000000..b04ecac3d Binary files /dev/null and b/app/ui/icons/clock.16.png differ diff --git a/app/ui/icons/clock.32.png b/app/ui/icons/clock.32.png new file mode 100644 index 000000000..361e1031a Binary files /dev/null and b/app/ui/icons/clock.32.png differ diff --git a/app/ui/icons/clock.64.png b/app/ui/icons/clock.64.png new file mode 100644 index 000000000..2b8749118 Binary files /dev/null and b/app/ui/icons/clock.64.png differ diff --git a/app/ui/icons/diamond.128.png b/app/ui/icons/diamond.128.png new file mode 100644 index 000000000..ef74178f1 Binary files /dev/null and b/app/ui/icons/diamond.128.png differ diff --git a/app/ui/icons/diamond.16.png b/app/ui/icons/diamond.16.png new file mode 100644 index 000000000..26cf33d5d Binary files /dev/null and b/app/ui/icons/diamond.16.png differ diff --git a/app/ui/icons/diamond.32.png b/app/ui/icons/diamond.32.png new file mode 100644 index 000000000..d831b10bd Binary files /dev/null and b/app/ui/icons/diamond.32.png differ diff --git a/app/ui/icons/diamond.64.png b/app/ui/icons/diamond.64.png new file mode 100644 index 000000000..ea6c47136 Binary files /dev/null and b/app/ui/icons/diamond.64.png differ diff --git a/app/ui/icons/dirup.128.png b/app/ui/icons/dirup.128.png new file mode 100644 index 000000000..d0f3f6acb Binary files /dev/null and b/app/ui/icons/dirup.128.png differ diff --git a/app/ui/icons/dirup.16.png b/app/ui/icons/dirup.16.png new file mode 100644 index 000000000..9929522d1 Binary files /dev/null and b/app/ui/icons/dirup.16.png differ diff --git a/app/ui/icons/dirup.32.png b/app/ui/icons/dirup.32.png new file mode 100644 index 000000000..37f658fd1 Binary files /dev/null and b/app/ui/icons/dirup.32.png differ diff --git a/app/ui/icons/dirup.64.png b/app/ui/icons/dirup.64.png new file mode 100644 index 000000000..e7939f95c Binary files /dev/null and b/app/ui/icons/dirup.64.png differ diff --git a/app/ui/icons/error.128.png b/app/ui/icons/error.128.png new file mode 100644 index 000000000..0b3ff459b Binary files /dev/null and b/app/ui/icons/error.128.png differ diff --git a/app/ui/icons/error.16.png b/app/ui/icons/error.16.png new file mode 100644 index 000000000..30b9aea36 Binary files /dev/null and b/app/ui/icons/error.16.png differ diff --git a/app/ui/icons/error.32.png b/app/ui/icons/error.32.png new file mode 100644 index 000000000..f4d955484 Binary files /dev/null and b/app/ui/icons/error.32.png differ diff --git a/app/ui/icons/error.64.png b/app/ui/icons/error.64.png new file mode 100644 index 000000000..31d167335 Binary files /dev/null and b/app/ui/icons/error.64.png differ diff --git a/app/ui/icons/ff.128.png b/app/ui/icons/ff.128.png new file mode 100644 index 000000000..2e897e0db Binary files /dev/null and b/app/ui/icons/ff.128.png differ diff --git a/app/ui/icons/ff.16.png b/app/ui/icons/ff.16.png new file mode 100644 index 000000000..f12b6345c Binary files /dev/null and b/app/ui/icons/ff.16.png differ diff --git a/app/ui/icons/ff.32.png b/app/ui/icons/ff.32.png new file mode 100644 index 000000000..17d5ef014 Binary files /dev/null and b/app/ui/icons/ff.32.png differ diff --git a/app/ui/icons/ff.64.png b/app/ui/icons/ff.64.png new file mode 100644 index 000000000..965d06b4e Binary files /dev/null and b/app/ui/icons/ff.64.png differ diff --git a/app/ui/icons/folder.128.png b/app/ui/icons/folder.128.png new file mode 100644 index 000000000..ace4b1bcd Binary files /dev/null and b/app/ui/icons/folder.128.png differ diff --git a/app/ui/icons/folder.16.png b/app/ui/icons/folder.16.png new file mode 100644 index 000000000..80933c6de Binary files /dev/null and b/app/ui/icons/folder.16.png differ diff --git a/app/ui/icons/folder.32.png b/app/ui/icons/folder.32.png new file mode 100644 index 000000000..f0f819ded Binary files /dev/null and b/app/ui/icons/folder.32.png differ diff --git a/app/ui/icons/folder.64.png b/app/ui/icons/folder.64.png new file mode 100644 index 000000000..a6dcda3a0 Binary files /dev/null and b/app/ui/icons/folder.64.png differ diff --git a/app/ui/icons/genicons.sh b/app/ui/icons/genicons.sh new file mode 100755 index 000000000..66b6008e9 --- /dev/null +++ b/app/ui/icons/genicons.sh @@ -0,0 +1,63 @@ +# 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 . + +# genicons.sh +# +# A simple script that uses Inkscape to generate multiple PNG sizes from SVGs. +# It also generates a Qt resource file including all of them for usage in +# Olive. +# +# While Qt (and therefore Olive) can load SVG files into icons during runtime, +# this is slow and lags startup. This script is intended to mitigate that, and +# while it adds an extra step if an SVG is modified, it immensely benefits +# the end user. + +OUTPUT_SIZES=( 16 32 64 128 ) + +if [ $# -ne 2 ] +then + echo Usage: $0 path-to-svgs qrc-file + echo + echo Example: $0 svg icons.qrc + exit 1 +fi + +SVGDIR=$1 +QRCFILE=$2 + +truncate -s 0 $QRCFILE + +echo "" >> $QRCFILE +echo " " >> $QRCFILE + +for f in $1/*.svg +do + FNBASE=$(basename -s .svg $f) + + for s in "${OUTPUT_SIZES[@]}" + do + OUTPUTFN=$FNBASE.$s.png + + echo Creating $OUTPUTFN... + + echo " $OUTPUTFN" >> $QRCFILE + + inkscape -z -e $(pwd)/$OUTPUTFN -w $s -h $s $f + done +done + +echo " " >> $QRCFILE +echo "" >> $QRCFILE diff --git a/app/ui/icons/hand.128.png b/app/ui/icons/hand.128.png new file mode 100644 index 000000000..b06108fd3 Binary files /dev/null and b/app/ui/icons/hand.128.png differ diff --git a/app/ui/icons/hand.16.png b/app/ui/icons/hand.16.png new file mode 100644 index 000000000..6ebfd1c15 Binary files /dev/null and b/app/ui/icons/hand.16.png differ diff --git a/app/ui/icons/hand.32.png b/app/ui/icons/hand.32.png new file mode 100644 index 000000000..b63c4f0a4 Binary files /dev/null and b/app/ui/icons/hand.32.png differ diff --git a/app/ui/icons/hand.64.png b/app/ui/icons/hand.64.png new file mode 100644 index 000000000..42134e130 Binary files /dev/null and b/app/ui/icons/hand.64.png differ diff --git a/app/ui/icons/icons.cpp b/app/ui/icons/icons.cpp new file mode 100644 index 000000000..df8be7e26 --- /dev/null +++ b/app/ui/icons/icons.cpp @@ -0,0 +1,59 @@ +#include "icons.h" + +#include + +/// Works in conjunction with `genicons.sh` to generate and utilize icons of specific sizes +const int ICON_SIZE_COUNT = 4; +const int ICON_SIZES[] = { + 16, + 32, + 64, + 128 +}; + +/// Internal icon library for use throughout Olive without having to regenerate constantly +QIcon olive::icon::GoToStart; +QIcon olive::icon::PrevFrame; +QIcon olive::icon::Play; +QIcon olive::icon::Pause; +QIcon olive::icon::NextFrame; +QIcon olive::icon::GoToEnd; +QIcon olive::icon::New; +QIcon olive::icon::Open; +QIcon olive::icon::Save; +QIcon olive::icon::Undo; +QIcon olive::icon::Redo; +QIcon olive::icon::TreeView; +QIcon olive::icon::ListView; +QIcon olive::icon::IconView; + +void olive::icon::LoadAll() +{ + GoToStart = Create("prev"); + PrevFrame = Create("rew"); + Play = Create("play"); + Pause = Create("pause"); + NextFrame = Create("ff"); + GoToEnd = Create("next"); + + New = Create("new"); + Open = Create("open"); + Save = Create("save"); + Undo = Create("undo"); + Redo = Create("redo"); + TreeView = Create("treeview"); + ListView = Create("listview"); + IconView = Create("iconview"); +} + +QIcon olive::icon::Create(const QString &name) +{ + QIcon icon; + + for (int i=0;i + +namespace olive { +namespace icon { + +// Playback Icons +extern QIcon GoToStart; +extern QIcon PrevFrame; +extern QIcon Play; +extern QIcon Pause; +extern QIcon NextFrame; +extern QIcon GoToEnd; + +// Project Management Toolbar Icons +extern QIcon New; +extern QIcon Open; +extern QIcon Save; +extern QIcon Undo; +extern QIcon Redo; +extern QIcon TreeView; +extern QIcon ListView; +extern QIcon IconView; + +QIcon Create(const QString& name); +void LoadAll(); + +} +} + +#endif // ICONS_H diff --git a/app/ui/icons/icons.qrc b/app/ui/icons/icons.qrc new file mode 100644 index 000000000..b4dc04827 --- /dev/null +++ b/app/ui/icons/icons.qrc @@ -0,0 +1,204 @@ + + + add-button.16.png + add-button.32.png + add-button.64.png + add-button.128.png + add-effect.16.png + add-effect.32.png + add-effect.64.png + add-effect.128.png + add-transition.16.png + add-transition.32.png + add-transition.64.png + add-transition.128.png + align-center.16.png + align-center.32.png + align-center.64.png + align-center.128.png + align-left.16.png + align-left.32.png + align-left.64.png + align-left.128.png + align-right.16.png + align-right.32.png + align-right.64.png + align-right.128.png + arrow.16.png + arrow.32.png + arrow.64.png + arrow.128.png + audiosource.16.png + audiosource.32.png + audiosource.64.png + audiosource.128.png + beam.16.png + beam.32.png + beam.64.png + beam.128.png + bold.16.png + bold.32.png + bold.64.png + bold.128.png + clock.16.png + clock.32.png + clock.64.png + clock.128.png + diamond.16.png + diamond.32.png + diamond.64.png + diamond.128.png + dirup.16.png + dirup.32.png + dirup.64.png + dirup.128.png + error.16.png + error.32.png + error.64.png + error.128.png + ff.16.png + ff.32.png + ff.64.png + ff.128.png + folder.16.png + folder.32.png + folder.64.png + folder.128.png + hand.16.png + hand.32.png + hand.64.png + hand.128.png + iconview.16.png + iconview.32.png + iconview.64.png + iconview.128.png + imagesource.16.png + imagesource.32.png + imagesource.64.png + imagesource.128.png + italic.16.png + italic.32.png + italic.64.png + italic.128.png + justify-center.16.png + justify-center.32.png + justify-center.64.png + justify-center.128.png + listview.16.png + listview.32.png + listview.64.png + listview.128.png + magnet.16.png + magnet.32.png + magnet.64.png + magnet.128.png + new.16.png + new.32.png + new.64.png + new.128.png + next.16.png + next.32.png + next.64.png + next.128.png + open.16.png + open.32.png + open.64.png + open.128.png + pause.16.png + pause.32.png + pause.64.png + pause.128.png + play.16.png + play.32.png + play.64.png + play.128.png + prev.16.png + prev.32.png + prev.64.png + prev.128.png + razor.16.png + razor.32.png + razor.64.png + razor.128.png + record.16.png + record.32.png + record.64.png + record.128.png + redo.16.png + redo.32.png + redo.64.png + redo.128.png + rew.16.png + rew.32.png + rew.64.png + rew.128.png + ripple.16.png + ripple.32.png + ripple.64.png + ripple.128.png + rolling.16.png + rolling.32.png + rolling.64.png + rolling.128.png + save.16.png + save.32.png + save.64.png + save.128.png + sequence.16.png + sequence.32.png + sequence.64.png + sequence.128.png + slide.16.png + slide.32.png + slide.64.png + slide.128.png + slip.16.png + slip.32.png + slip.64.png + slip.128.png + transition-tool.16.png + transition-tool.32.png + transition-tool.64.png + transition-tool.128.png + treeview.16.png + treeview.32.png + treeview.64.png + treeview.128.png + tri-down.16.png + tri-down.32.png + tri-down.64.png + tri-down.128.png + tri-left.16.png + tri-left.32.png + tri-left.64.png + tri-left.128.png + tri-right.16.png + tri-right.32.png + tri-right.64.png + tri-right.128.png + tri-up.16.png + tri-up.32.png + tri-up.64.png + tri-up.128.png + underline.16.png + underline.32.png + underline.64.png + underline.128.png + undo.16.png + undo.32.png + undo.64.png + undo.128.png + videosource.16.png + videosource.32.png + videosource.64.png + videosource.128.png + zoomin.16.png + zoomin.32.png + zoomin.64.png + zoomin.128.png + zoomout.16.png + zoomout.32.png + zoomout.64.png + zoomout.128.png + + diff --git a/app/ui/icons/iconview.128.png b/app/ui/icons/iconview.128.png new file mode 100644 index 000000000..086a769ce Binary files /dev/null and b/app/ui/icons/iconview.128.png differ diff --git a/app/ui/icons/iconview.16.png b/app/ui/icons/iconview.16.png new file mode 100644 index 000000000..a73ee1d9e Binary files /dev/null and b/app/ui/icons/iconview.16.png differ diff --git a/app/ui/icons/iconview.32.png b/app/ui/icons/iconview.32.png new file mode 100644 index 000000000..0082db550 Binary files /dev/null and b/app/ui/icons/iconview.32.png differ diff --git a/app/ui/icons/iconview.64.png b/app/ui/icons/iconview.64.png new file mode 100644 index 000000000..9a81cf3eb Binary files /dev/null and b/app/ui/icons/iconview.64.png differ diff --git a/app/ui/icons/imagesource.128.png b/app/ui/icons/imagesource.128.png new file mode 100644 index 000000000..77d2344b5 Binary files /dev/null and b/app/ui/icons/imagesource.128.png differ diff --git a/app/ui/icons/imagesource.16.png b/app/ui/icons/imagesource.16.png new file mode 100644 index 000000000..716aa7a18 Binary files /dev/null and b/app/ui/icons/imagesource.16.png differ diff --git a/app/ui/icons/imagesource.32.png b/app/ui/icons/imagesource.32.png new file mode 100644 index 000000000..f0506c325 Binary files /dev/null and b/app/ui/icons/imagesource.32.png differ diff --git a/app/ui/icons/imagesource.64.png b/app/ui/icons/imagesource.64.png new file mode 100644 index 000000000..794e91b69 Binary files /dev/null and b/app/ui/icons/imagesource.64.png differ diff --git a/app/ui/icons/italic.128.png b/app/ui/icons/italic.128.png new file mode 100644 index 000000000..20a054141 Binary files /dev/null and b/app/ui/icons/italic.128.png differ diff --git a/app/ui/icons/italic.16.png b/app/ui/icons/italic.16.png new file mode 100644 index 000000000..2e2418c26 Binary files /dev/null and b/app/ui/icons/italic.16.png differ diff --git a/app/ui/icons/italic.32.png b/app/ui/icons/italic.32.png new file mode 100644 index 000000000..6a379f908 Binary files /dev/null and b/app/ui/icons/italic.32.png differ diff --git a/app/ui/icons/italic.64.png b/app/ui/icons/italic.64.png new file mode 100644 index 000000000..576fb67db Binary files /dev/null and b/app/ui/icons/italic.64.png differ diff --git a/app/ui/icons/justify-center.128.png b/app/ui/icons/justify-center.128.png new file mode 100644 index 000000000..f623a2afe Binary files /dev/null and b/app/ui/icons/justify-center.128.png differ diff --git a/app/ui/icons/justify-center.16.png b/app/ui/icons/justify-center.16.png new file mode 100644 index 000000000..1efbc1455 Binary files /dev/null and b/app/ui/icons/justify-center.16.png differ diff --git a/app/ui/icons/justify-center.32.png b/app/ui/icons/justify-center.32.png new file mode 100644 index 000000000..e43089405 Binary files /dev/null and b/app/ui/icons/justify-center.32.png differ diff --git a/app/ui/icons/justify-center.64.png b/app/ui/icons/justify-center.64.png new file mode 100644 index 000000000..359eabef2 Binary files /dev/null and b/app/ui/icons/justify-center.64.png differ diff --git a/app/ui/icons/listview.128.png b/app/ui/icons/listview.128.png new file mode 100644 index 000000000..fb5f25477 Binary files /dev/null and b/app/ui/icons/listview.128.png differ diff --git a/app/ui/icons/listview.16.png b/app/ui/icons/listview.16.png new file mode 100644 index 000000000..e8d4a930e Binary files /dev/null and b/app/ui/icons/listview.16.png differ diff --git a/app/ui/icons/listview.32.png b/app/ui/icons/listview.32.png new file mode 100644 index 000000000..26c84123a Binary files /dev/null and b/app/ui/icons/listview.32.png differ diff --git a/app/ui/icons/listview.64.png b/app/ui/icons/listview.64.png new file mode 100644 index 000000000..13bca5463 Binary files /dev/null and b/app/ui/icons/listview.64.png differ diff --git a/app/ui/icons/magnet.128.png b/app/ui/icons/magnet.128.png new file mode 100644 index 000000000..884744250 Binary files /dev/null and b/app/ui/icons/magnet.128.png differ diff --git a/app/ui/icons/magnet.16.png b/app/ui/icons/magnet.16.png new file mode 100644 index 000000000..0994379ea Binary files /dev/null and b/app/ui/icons/magnet.16.png differ diff --git a/app/ui/icons/magnet.32.png b/app/ui/icons/magnet.32.png new file mode 100644 index 000000000..d5379f4d5 Binary files /dev/null and b/app/ui/icons/magnet.32.png differ diff --git a/app/ui/icons/magnet.64.png b/app/ui/icons/magnet.64.png new file mode 100644 index 000000000..d4760acea Binary files /dev/null and b/app/ui/icons/magnet.64.png differ diff --git a/app/ui/icons/new.128.png b/app/ui/icons/new.128.png new file mode 100644 index 000000000..68cf53297 Binary files /dev/null and b/app/ui/icons/new.128.png differ diff --git a/app/ui/icons/new.16.png b/app/ui/icons/new.16.png new file mode 100644 index 000000000..08465e682 Binary files /dev/null and b/app/ui/icons/new.16.png differ diff --git a/app/ui/icons/new.32.png b/app/ui/icons/new.32.png new file mode 100644 index 000000000..da2c2927d Binary files /dev/null and b/app/ui/icons/new.32.png differ diff --git a/app/ui/icons/new.64.png b/app/ui/icons/new.64.png new file mode 100644 index 000000000..ddb69f86f Binary files /dev/null and b/app/ui/icons/new.64.png differ diff --git a/app/ui/icons/next.128.png b/app/ui/icons/next.128.png new file mode 100644 index 000000000..54addef32 Binary files /dev/null and b/app/ui/icons/next.128.png differ diff --git a/app/ui/icons/next.16.png b/app/ui/icons/next.16.png new file mode 100644 index 000000000..7cc043341 Binary files /dev/null and b/app/ui/icons/next.16.png differ diff --git a/app/ui/icons/next.32.png b/app/ui/icons/next.32.png new file mode 100644 index 000000000..c7e65548b Binary files /dev/null and b/app/ui/icons/next.32.png differ diff --git a/app/ui/icons/next.64.png b/app/ui/icons/next.64.png new file mode 100644 index 000000000..160542719 Binary files /dev/null and b/app/ui/icons/next.64.png differ diff --git a/app/ui/icons/open.128.png b/app/ui/icons/open.128.png new file mode 100644 index 000000000..04927db6b Binary files /dev/null and b/app/ui/icons/open.128.png differ diff --git a/app/ui/icons/open.16.png b/app/ui/icons/open.16.png new file mode 100644 index 000000000..9b86b59b4 Binary files /dev/null and b/app/ui/icons/open.16.png differ diff --git a/app/ui/icons/open.32.png b/app/ui/icons/open.32.png new file mode 100644 index 000000000..f43ca7656 Binary files /dev/null and b/app/ui/icons/open.32.png differ diff --git a/app/ui/icons/open.64.png b/app/ui/icons/open.64.png new file mode 100644 index 000000000..e68a7ad8b Binary files /dev/null and b/app/ui/icons/open.64.png differ diff --git a/app/ui/icons/pause.128.png b/app/ui/icons/pause.128.png new file mode 100644 index 000000000..cb511437b Binary files /dev/null and b/app/ui/icons/pause.128.png differ diff --git a/app/ui/icons/pause.16.png b/app/ui/icons/pause.16.png new file mode 100644 index 000000000..8308a3144 Binary files /dev/null and b/app/ui/icons/pause.16.png differ diff --git a/app/ui/icons/pause.32.png b/app/ui/icons/pause.32.png new file mode 100644 index 000000000..99d440502 Binary files /dev/null and b/app/ui/icons/pause.32.png differ diff --git a/app/ui/icons/pause.64.png b/app/ui/icons/pause.64.png new file mode 100644 index 000000000..b055c92e9 Binary files /dev/null and b/app/ui/icons/pause.64.png differ diff --git a/app/ui/icons/play.128.png b/app/ui/icons/play.128.png new file mode 100644 index 000000000..514c41d07 Binary files /dev/null and b/app/ui/icons/play.128.png differ diff --git a/app/ui/icons/play.16.png b/app/ui/icons/play.16.png new file mode 100644 index 000000000..045e06337 Binary files /dev/null and b/app/ui/icons/play.16.png differ diff --git a/app/ui/icons/play.32.png b/app/ui/icons/play.32.png new file mode 100644 index 000000000..b581e17e8 Binary files /dev/null and b/app/ui/icons/play.32.png differ diff --git a/app/ui/icons/play.64.png b/app/ui/icons/play.64.png new file mode 100644 index 000000000..cd069a796 Binary files /dev/null and b/app/ui/icons/play.64.png differ diff --git a/app/ui/icons/prev.128.png b/app/ui/icons/prev.128.png new file mode 100644 index 000000000..64d4ec40a Binary files /dev/null and b/app/ui/icons/prev.128.png differ diff --git a/app/ui/icons/prev.16.png b/app/ui/icons/prev.16.png new file mode 100644 index 000000000..5f56db5af Binary files /dev/null and b/app/ui/icons/prev.16.png differ diff --git a/app/ui/icons/prev.32.png b/app/ui/icons/prev.32.png new file mode 100644 index 000000000..090ff97c9 Binary files /dev/null and b/app/ui/icons/prev.32.png differ diff --git a/app/ui/icons/prev.64.png b/app/ui/icons/prev.64.png new file mode 100644 index 000000000..c56efc0cf Binary files /dev/null and b/app/ui/icons/prev.64.png differ diff --git a/app/ui/icons/razor.128.png b/app/ui/icons/razor.128.png new file mode 100644 index 000000000..9b0731538 Binary files /dev/null and b/app/ui/icons/razor.128.png differ diff --git a/app/ui/icons/razor.16.png b/app/ui/icons/razor.16.png new file mode 100644 index 000000000..e9c021a6a Binary files /dev/null and b/app/ui/icons/razor.16.png differ diff --git a/app/ui/icons/razor.32.png b/app/ui/icons/razor.32.png new file mode 100644 index 000000000..8fb76172d Binary files /dev/null and b/app/ui/icons/razor.32.png differ diff --git a/app/ui/icons/razor.64.png b/app/ui/icons/razor.64.png new file mode 100644 index 000000000..7234af9e1 Binary files /dev/null and b/app/ui/icons/razor.64.png differ diff --git a/app/ui/icons/record.128.png b/app/ui/icons/record.128.png new file mode 100644 index 000000000..5dba7468a Binary files /dev/null and b/app/ui/icons/record.128.png differ diff --git a/app/ui/icons/record.16.png b/app/ui/icons/record.16.png new file mode 100644 index 000000000..112d842d3 Binary files /dev/null and b/app/ui/icons/record.16.png differ diff --git a/app/ui/icons/record.32.png b/app/ui/icons/record.32.png new file mode 100644 index 000000000..bf749e5b4 Binary files /dev/null and b/app/ui/icons/record.32.png differ diff --git a/app/ui/icons/record.64.png b/app/ui/icons/record.64.png new file mode 100644 index 000000000..4ea654c0d Binary files /dev/null and b/app/ui/icons/record.64.png differ diff --git a/app/ui/icons/redo.128.png b/app/ui/icons/redo.128.png new file mode 100644 index 000000000..77f6007ca Binary files /dev/null and b/app/ui/icons/redo.128.png differ diff --git a/app/ui/icons/redo.16.png b/app/ui/icons/redo.16.png new file mode 100644 index 000000000..51c8e4cd8 Binary files /dev/null and b/app/ui/icons/redo.16.png differ diff --git a/app/ui/icons/redo.32.png b/app/ui/icons/redo.32.png new file mode 100644 index 000000000..5f2b78dd6 Binary files /dev/null and b/app/ui/icons/redo.32.png differ diff --git a/app/ui/icons/redo.64.png b/app/ui/icons/redo.64.png new file mode 100644 index 000000000..5ca9146d2 Binary files /dev/null and b/app/ui/icons/redo.64.png differ diff --git a/app/ui/icons/rew.128.png b/app/ui/icons/rew.128.png new file mode 100644 index 000000000..73fffbb17 Binary files /dev/null and b/app/ui/icons/rew.128.png differ diff --git a/app/ui/icons/rew.16.png b/app/ui/icons/rew.16.png new file mode 100644 index 000000000..44075c5a0 Binary files /dev/null and b/app/ui/icons/rew.16.png differ diff --git a/app/ui/icons/rew.32.png b/app/ui/icons/rew.32.png new file mode 100644 index 000000000..baa89324e Binary files /dev/null and b/app/ui/icons/rew.32.png differ diff --git a/app/ui/icons/rew.64.png b/app/ui/icons/rew.64.png new file mode 100644 index 000000000..e8c065175 Binary files /dev/null and b/app/ui/icons/rew.64.png differ diff --git a/app/ui/icons/ripple.128.png b/app/ui/icons/ripple.128.png new file mode 100644 index 000000000..9ad2b7b08 Binary files /dev/null and b/app/ui/icons/ripple.128.png differ diff --git a/app/ui/icons/ripple.16.png b/app/ui/icons/ripple.16.png new file mode 100644 index 000000000..1222fd0a5 Binary files /dev/null and b/app/ui/icons/ripple.16.png differ diff --git a/app/ui/icons/ripple.32.png b/app/ui/icons/ripple.32.png new file mode 100644 index 000000000..fca0ec1d5 Binary files /dev/null and b/app/ui/icons/ripple.32.png differ diff --git a/app/ui/icons/ripple.64.png b/app/ui/icons/ripple.64.png new file mode 100644 index 000000000..f41c08c58 Binary files /dev/null and b/app/ui/icons/ripple.64.png differ diff --git a/app/ui/icons/rolling.128.png b/app/ui/icons/rolling.128.png new file mode 100644 index 000000000..a9c8d36a6 Binary files /dev/null and b/app/ui/icons/rolling.128.png differ diff --git a/app/ui/icons/rolling.16.png b/app/ui/icons/rolling.16.png new file mode 100644 index 000000000..1a3784a81 Binary files /dev/null and b/app/ui/icons/rolling.16.png differ diff --git a/app/ui/icons/rolling.32.png b/app/ui/icons/rolling.32.png new file mode 100644 index 000000000..2e91f35ac Binary files /dev/null and b/app/ui/icons/rolling.32.png differ diff --git a/app/ui/icons/rolling.64.png b/app/ui/icons/rolling.64.png new file mode 100644 index 000000000..ffc6f5109 Binary files /dev/null and b/app/ui/icons/rolling.64.png differ diff --git a/app/ui/icons/save.128.png b/app/ui/icons/save.128.png new file mode 100644 index 000000000..e47ef5ff9 Binary files /dev/null and b/app/ui/icons/save.128.png differ diff --git a/app/ui/icons/save.16.png b/app/ui/icons/save.16.png new file mode 100644 index 000000000..ad801619a Binary files /dev/null and b/app/ui/icons/save.16.png differ diff --git a/app/ui/icons/save.32.png b/app/ui/icons/save.32.png new file mode 100644 index 000000000..25305bc46 Binary files /dev/null and b/app/ui/icons/save.32.png differ diff --git a/app/ui/icons/save.64.png b/app/ui/icons/save.64.png new file mode 100644 index 000000000..ab4b3f22a Binary files /dev/null and b/app/ui/icons/save.64.png differ diff --git a/app/ui/icons/sequence.128.png b/app/ui/icons/sequence.128.png new file mode 100644 index 000000000..f62d50253 Binary files /dev/null and b/app/ui/icons/sequence.128.png differ diff --git a/app/ui/icons/sequence.16.png b/app/ui/icons/sequence.16.png new file mode 100644 index 000000000..fc8d3b0f3 Binary files /dev/null and b/app/ui/icons/sequence.16.png differ diff --git a/app/ui/icons/sequence.32.png b/app/ui/icons/sequence.32.png new file mode 100644 index 000000000..41731b550 Binary files /dev/null and b/app/ui/icons/sequence.32.png differ diff --git a/app/ui/icons/sequence.64.png b/app/ui/icons/sequence.64.png new file mode 100644 index 000000000..6585a6762 Binary files /dev/null and b/app/ui/icons/sequence.64.png differ diff --git a/app/ui/icons/slide.128.png b/app/ui/icons/slide.128.png new file mode 100644 index 000000000..7f6882bde Binary files /dev/null and b/app/ui/icons/slide.128.png differ diff --git a/app/ui/icons/slide.16.png b/app/ui/icons/slide.16.png new file mode 100644 index 000000000..d3f9ee239 Binary files /dev/null and b/app/ui/icons/slide.16.png differ diff --git a/app/ui/icons/slide.32.png b/app/ui/icons/slide.32.png new file mode 100644 index 000000000..3c16de54a Binary files /dev/null and b/app/ui/icons/slide.32.png differ diff --git a/app/ui/icons/slide.64.png b/app/ui/icons/slide.64.png new file mode 100644 index 000000000..2c5425ae7 Binary files /dev/null and b/app/ui/icons/slide.64.png differ diff --git a/app/ui/icons/slip.128.png b/app/ui/icons/slip.128.png new file mode 100644 index 000000000..39dbdba09 Binary files /dev/null and b/app/ui/icons/slip.128.png differ diff --git a/app/ui/icons/slip.16.png b/app/ui/icons/slip.16.png new file mode 100644 index 000000000..2fcaac045 Binary files /dev/null and b/app/ui/icons/slip.16.png differ diff --git a/app/ui/icons/slip.32.png b/app/ui/icons/slip.32.png new file mode 100644 index 000000000..2e20cf5e2 Binary files /dev/null and b/app/ui/icons/slip.32.png differ diff --git a/app/ui/icons/slip.64.png b/app/ui/icons/slip.64.png new file mode 100644 index 000000000..044de026a Binary files /dev/null and b/app/ui/icons/slip.64.png differ diff --git a/icons/add-button.svg b/app/ui/icons/svg/add-button.svg similarity index 100% rename from icons/add-button.svg rename to app/ui/icons/svg/add-button.svg diff --git a/icons/add-effect.svg b/app/ui/icons/svg/add-effect.svg similarity index 100% rename from icons/add-effect.svg rename to app/ui/icons/svg/add-effect.svg diff --git a/icons/add-transition.svg b/app/ui/icons/svg/add-transition.svg similarity index 100% rename from icons/add-transition.svg rename to app/ui/icons/svg/add-transition.svg diff --git a/icons/align-center.svg b/app/ui/icons/svg/align-center.svg similarity index 100% rename from icons/align-center.svg rename to app/ui/icons/svg/align-center.svg diff --git a/icons/align-left.svg b/app/ui/icons/svg/align-left.svg similarity index 100% rename from icons/align-left.svg rename to app/ui/icons/svg/align-left.svg diff --git a/icons/align-right.svg b/app/ui/icons/svg/align-right.svg similarity index 100% rename from icons/align-right.svg rename to app/ui/icons/svg/align-right.svg diff --git a/icons/arrow.svg b/app/ui/icons/svg/arrow.svg similarity index 100% rename from icons/arrow.svg rename to app/ui/icons/svg/arrow.svg diff --git a/icons/audiosource.svg b/app/ui/icons/svg/audiosource.svg similarity index 100% rename from icons/audiosource.svg rename to app/ui/icons/svg/audiosource.svg diff --git a/icons/beam.svg b/app/ui/icons/svg/beam.svg similarity index 100% rename from icons/beam.svg rename to app/ui/icons/svg/beam.svg diff --git a/icons/bold.svg b/app/ui/icons/svg/bold.svg similarity index 100% rename from icons/bold.svg rename to app/ui/icons/svg/bold.svg diff --git a/icons/clock.svg b/app/ui/icons/svg/clock.svg similarity index 100% rename from icons/clock.svg rename to app/ui/icons/svg/clock.svg diff --git a/icons/diamond.svg b/app/ui/icons/svg/diamond.svg similarity index 100% rename from icons/diamond.svg rename to app/ui/icons/svg/diamond.svg diff --git a/icons/dirup.svg b/app/ui/icons/svg/dirup.svg similarity index 100% rename from icons/dirup.svg rename to app/ui/icons/svg/dirup.svg diff --git a/icons/error.svg b/app/ui/icons/svg/error.svg similarity index 100% rename from icons/error.svg rename to app/ui/icons/svg/error.svg diff --git a/icons/ff.svg b/app/ui/icons/svg/ff.svg similarity index 100% rename from icons/ff.svg rename to app/ui/icons/svg/ff.svg diff --git a/icons/folder.svg b/app/ui/icons/svg/folder.svg similarity index 100% rename from icons/folder.svg rename to app/ui/icons/svg/folder.svg diff --git a/icons/hand.svg b/app/ui/icons/svg/hand.svg similarity index 100% rename from icons/hand.svg rename to app/ui/icons/svg/hand.svg diff --git a/icons/iconview.svg b/app/ui/icons/svg/iconview.svg similarity index 100% rename from icons/iconview.svg rename to app/ui/icons/svg/iconview.svg diff --git a/icons/imagesource.svg b/app/ui/icons/svg/imagesource.svg similarity index 100% rename from icons/imagesource.svg rename to app/ui/icons/svg/imagesource.svg diff --git a/icons/italic.svg b/app/ui/icons/svg/italic.svg similarity index 100% rename from icons/italic.svg rename to app/ui/icons/svg/italic.svg diff --git a/icons/justify-center.svg b/app/ui/icons/svg/justify-center.svg similarity index 100% rename from icons/justify-center.svg rename to app/ui/icons/svg/justify-center.svg diff --git a/icons/listview.svg b/app/ui/icons/svg/listview.svg similarity index 100% rename from icons/listview.svg rename to app/ui/icons/svg/listview.svg diff --git a/icons/magnet.svg b/app/ui/icons/svg/magnet.svg similarity index 100% rename from icons/magnet.svg rename to app/ui/icons/svg/magnet.svg diff --git a/icons/new.svg b/app/ui/icons/svg/new.svg similarity index 100% rename from icons/new.svg rename to app/ui/icons/svg/new.svg diff --git a/icons/next.svg b/app/ui/icons/svg/next.svg similarity index 100% rename from icons/next.svg rename to app/ui/icons/svg/next.svg diff --git a/icons/open.svg b/app/ui/icons/svg/open.svg similarity index 100% rename from icons/open.svg rename to app/ui/icons/svg/open.svg diff --git a/icons/pause.svg b/app/ui/icons/svg/pause.svg similarity index 100% rename from icons/pause.svg rename to app/ui/icons/svg/pause.svg diff --git a/icons/play.svg b/app/ui/icons/svg/play.svg similarity index 100% rename from icons/play.svg rename to app/ui/icons/svg/play.svg diff --git a/icons/prev.svg b/app/ui/icons/svg/prev.svg similarity index 100% rename from icons/prev.svg rename to app/ui/icons/svg/prev.svg diff --git a/icons/razor.svg b/app/ui/icons/svg/razor.svg similarity index 100% rename from icons/razor.svg rename to app/ui/icons/svg/razor.svg diff --git a/icons/record.svg b/app/ui/icons/svg/record.svg similarity index 100% rename from icons/record.svg rename to app/ui/icons/svg/record.svg diff --git a/icons/redo.svg b/app/ui/icons/svg/redo.svg similarity index 100% rename from icons/redo.svg rename to app/ui/icons/svg/redo.svg diff --git a/icons/rew.svg b/app/ui/icons/svg/rew.svg similarity index 100% rename from icons/rew.svg rename to app/ui/icons/svg/rew.svg diff --git a/icons/ripple.svg b/app/ui/icons/svg/ripple.svg similarity index 100% rename from icons/ripple.svg rename to app/ui/icons/svg/ripple.svg diff --git a/icons/rolling.svg b/app/ui/icons/svg/rolling.svg similarity index 100% rename from icons/rolling.svg rename to app/ui/icons/svg/rolling.svg diff --git a/icons/save.svg b/app/ui/icons/svg/save.svg similarity index 100% rename from icons/save.svg rename to app/ui/icons/svg/save.svg diff --git a/icons/sequence.svg b/app/ui/icons/svg/sequence.svg similarity index 100% rename from icons/sequence.svg rename to app/ui/icons/svg/sequence.svg diff --git a/icons/slide.svg b/app/ui/icons/svg/slide.svg similarity index 100% rename from icons/slide.svg rename to app/ui/icons/svg/slide.svg diff --git a/icons/slip.svg b/app/ui/icons/svg/slip.svg similarity index 100% rename from icons/slip.svg rename to app/ui/icons/svg/slip.svg diff --git a/icons/transition-tool.svg b/app/ui/icons/svg/transition-tool.svg similarity index 100% rename from icons/transition-tool.svg rename to app/ui/icons/svg/transition-tool.svg diff --git a/icons/treeview.svg b/app/ui/icons/svg/treeview.svg similarity index 100% rename from icons/treeview.svg rename to app/ui/icons/svg/treeview.svg diff --git a/icons/tri-down.svg b/app/ui/icons/svg/tri-down.svg similarity index 100% rename from icons/tri-down.svg rename to app/ui/icons/svg/tri-down.svg diff --git a/icons/tri-left.svg b/app/ui/icons/svg/tri-left.svg similarity index 100% rename from icons/tri-left.svg rename to app/ui/icons/svg/tri-left.svg diff --git a/icons/tri-right.svg b/app/ui/icons/svg/tri-right.svg similarity index 100% rename from icons/tri-right.svg rename to app/ui/icons/svg/tri-right.svg diff --git a/icons/tri-up.svg b/app/ui/icons/svg/tri-up.svg similarity index 100% rename from icons/tri-up.svg rename to app/ui/icons/svg/tri-up.svg diff --git a/icons/underline.svg b/app/ui/icons/svg/underline.svg similarity index 100% rename from icons/underline.svg rename to app/ui/icons/svg/underline.svg diff --git a/icons/undo.svg b/app/ui/icons/svg/undo.svg similarity index 100% rename from icons/undo.svg rename to app/ui/icons/svg/undo.svg diff --git a/icons/videosource.svg b/app/ui/icons/svg/videosource.svg similarity index 100% rename from icons/videosource.svg rename to app/ui/icons/svg/videosource.svg diff --git a/icons/zoomin.svg b/app/ui/icons/svg/zoomin.svg similarity index 100% rename from icons/zoomin.svg rename to app/ui/icons/svg/zoomin.svg diff --git a/icons/zoomout.svg b/app/ui/icons/svg/zoomout.svg similarity index 100% rename from icons/zoomout.svg rename to app/ui/icons/svg/zoomout.svg diff --git a/app/ui/icons/transition-tool.128.png b/app/ui/icons/transition-tool.128.png new file mode 100644 index 000000000..a5c08f0f3 Binary files /dev/null and b/app/ui/icons/transition-tool.128.png differ diff --git a/app/ui/icons/transition-tool.16.png b/app/ui/icons/transition-tool.16.png new file mode 100644 index 000000000..75b4e04f1 Binary files /dev/null and b/app/ui/icons/transition-tool.16.png differ diff --git a/app/ui/icons/transition-tool.32.png b/app/ui/icons/transition-tool.32.png new file mode 100644 index 000000000..793cc0142 Binary files /dev/null and b/app/ui/icons/transition-tool.32.png differ diff --git a/app/ui/icons/transition-tool.64.png b/app/ui/icons/transition-tool.64.png new file mode 100644 index 000000000..81b6efe82 Binary files /dev/null and b/app/ui/icons/transition-tool.64.png differ diff --git a/app/ui/icons/treeview.128.png b/app/ui/icons/treeview.128.png new file mode 100644 index 000000000..da0ee7937 Binary files /dev/null and b/app/ui/icons/treeview.128.png differ diff --git a/app/ui/icons/treeview.16.png b/app/ui/icons/treeview.16.png new file mode 100644 index 000000000..f1510308c Binary files /dev/null and b/app/ui/icons/treeview.16.png differ diff --git a/app/ui/icons/treeview.32.png b/app/ui/icons/treeview.32.png new file mode 100644 index 000000000..bb3e1b9fc Binary files /dev/null and b/app/ui/icons/treeview.32.png differ diff --git a/app/ui/icons/treeview.64.png b/app/ui/icons/treeview.64.png new file mode 100644 index 000000000..24e16bd2c Binary files /dev/null and b/app/ui/icons/treeview.64.png differ diff --git a/app/ui/icons/tri-down.128.png b/app/ui/icons/tri-down.128.png new file mode 100644 index 000000000..34afa6bbf Binary files /dev/null and b/app/ui/icons/tri-down.128.png differ diff --git a/app/ui/icons/tri-down.16.png b/app/ui/icons/tri-down.16.png new file mode 100644 index 000000000..231eabdca Binary files /dev/null and b/app/ui/icons/tri-down.16.png differ diff --git a/app/ui/icons/tri-down.32.png b/app/ui/icons/tri-down.32.png new file mode 100644 index 000000000..4a708fcb4 Binary files /dev/null and b/app/ui/icons/tri-down.32.png differ diff --git a/app/ui/icons/tri-down.64.png b/app/ui/icons/tri-down.64.png new file mode 100644 index 000000000..d088299a6 Binary files /dev/null and b/app/ui/icons/tri-down.64.png differ diff --git a/app/ui/icons/tri-left.128.png b/app/ui/icons/tri-left.128.png new file mode 100644 index 000000000..41a1c0ab4 Binary files /dev/null and b/app/ui/icons/tri-left.128.png differ diff --git a/app/ui/icons/tri-left.16.png b/app/ui/icons/tri-left.16.png new file mode 100644 index 000000000..14af417c1 Binary files /dev/null and b/app/ui/icons/tri-left.16.png differ diff --git a/app/ui/icons/tri-left.32.png b/app/ui/icons/tri-left.32.png new file mode 100644 index 000000000..db2842478 Binary files /dev/null and b/app/ui/icons/tri-left.32.png differ diff --git a/app/ui/icons/tri-left.64.png b/app/ui/icons/tri-left.64.png new file mode 100644 index 000000000..59a484229 Binary files /dev/null and b/app/ui/icons/tri-left.64.png differ diff --git a/app/ui/icons/tri-right.128.png b/app/ui/icons/tri-right.128.png new file mode 100644 index 000000000..410600582 Binary files /dev/null and b/app/ui/icons/tri-right.128.png differ diff --git a/app/ui/icons/tri-right.16.png b/app/ui/icons/tri-right.16.png new file mode 100644 index 000000000..733d49734 Binary files /dev/null and b/app/ui/icons/tri-right.16.png differ diff --git a/app/ui/icons/tri-right.32.png b/app/ui/icons/tri-right.32.png new file mode 100644 index 000000000..16646f1c9 Binary files /dev/null and b/app/ui/icons/tri-right.32.png differ diff --git a/app/ui/icons/tri-right.64.png b/app/ui/icons/tri-right.64.png new file mode 100644 index 000000000..789a7cca3 Binary files /dev/null and b/app/ui/icons/tri-right.64.png differ diff --git a/app/ui/icons/tri-up.128.png b/app/ui/icons/tri-up.128.png new file mode 100644 index 000000000..408c6b759 Binary files /dev/null and b/app/ui/icons/tri-up.128.png differ diff --git a/app/ui/icons/tri-up.16.png b/app/ui/icons/tri-up.16.png new file mode 100644 index 000000000..a030e28be Binary files /dev/null and b/app/ui/icons/tri-up.16.png differ diff --git a/app/ui/icons/tri-up.32.png b/app/ui/icons/tri-up.32.png new file mode 100644 index 000000000..f61984c9d Binary files /dev/null and b/app/ui/icons/tri-up.32.png differ diff --git a/app/ui/icons/tri-up.64.png b/app/ui/icons/tri-up.64.png new file mode 100644 index 000000000..06de48079 Binary files /dev/null and b/app/ui/icons/tri-up.64.png differ diff --git a/app/ui/icons/underline.128.png b/app/ui/icons/underline.128.png new file mode 100644 index 000000000..67ad4981b Binary files /dev/null and b/app/ui/icons/underline.128.png differ diff --git a/app/ui/icons/underline.16.png b/app/ui/icons/underline.16.png new file mode 100644 index 000000000..ba4b850a4 Binary files /dev/null and b/app/ui/icons/underline.16.png differ diff --git a/app/ui/icons/underline.32.png b/app/ui/icons/underline.32.png new file mode 100644 index 000000000..1c5e4cdef Binary files /dev/null and b/app/ui/icons/underline.32.png differ diff --git a/app/ui/icons/underline.64.png b/app/ui/icons/underline.64.png new file mode 100644 index 000000000..2c0bfb5e5 Binary files /dev/null and b/app/ui/icons/underline.64.png differ diff --git a/app/ui/icons/undo.128.png b/app/ui/icons/undo.128.png new file mode 100644 index 000000000..8fbe34362 Binary files /dev/null and b/app/ui/icons/undo.128.png differ diff --git a/app/ui/icons/undo.16.png b/app/ui/icons/undo.16.png new file mode 100644 index 000000000..8933a8c69 Binary files /dev/null and b/app/ui/icons/undo.16.png differ diff --git a/app/ui/icons/undo.32.png b/app/ui/icons/undo.32.png new file mode 100644 index 000000000..3c5cd74f8 Binary files /dev/null and b/app/ui/icons/undo.32.png differ diff --git a/app/ui/icons/undo.64.png b/app/ui/icons/undo.64.png new file mode 100644 index 000000000..e043e73c7 Binary files /dev/null and b/app/ui/icons/undo.64.png differ diff --git a/app/ui/icons/videosource.128.png b/app/ui/icons/videosource.128.png new file mode 100644 index 000000000..b0747ba1a Binary files /dev/null and b/app/ui/icons/videosource.128.png differ diff --git a/app/ui/icons/videosource.16.png b/app/ui/icons/videosource.16.png new file mode 100644 index 000000000..030ff60a7 Binary files /dev/null and b/app/ui/icons/videosource.16.png differ diff --git a/app/ui/icons/videosource.32.png b/app/ui/icons/videosource.32.png new file mode 100644 index 000000000..64fd4ee17 Binary files /dev/null and b/app/ui/icons/videosource.32.png differ diff --git a/app/ui/icons/videosource.64.png b/app/ui/icons/videosource.64.png new file mode 100644 index 000000000..d96e9eee2 Binary files /dev/null and b/app/ui/icons/videosource.64.png differ diff --git a/app/ui/icons/zoomin.128.png b/app/ui/icons/zoomin.128.png new file mode 100644 index 000000000..d9df8ee67 Binary files /dev/null and b/app/ui/icons/zoomin.128.png differ diff --git a/app/ui/icons/zoomin.16.png b/app/ui/icons/zoomin.16.png new file mode 100644 index 000000000..da94f7761 Binary files /dev/null and b/app/ui/icons/zoomin.16.png differ diff --git a/app/ui/icons/zoomin.32.png b/app/ui/icons/zoomin.32.png new file mode 100644 index 000000000..5172c25fa Binary files /dev/null and b/app/ui/icons/zoomin.32.png differ diff --git a/app/ui/icons/zoomin.64.png b/app/ui/icons/zoomin.64.png new file mode 100644 index 000000000..f0a5f979c Binary files /dev/null and b/app/ui/icons/zoomin.64.png differ diff --git a/app/ui/icons/zoomout.128.png b/app/ui/icons/zoomout.128.png new file mode 100644 index 000000000..a2526d460 Binary files /dev/null and b/app/ui/icons/zoomout.128.png differ diff --git a/app/ui/icons/zoomout.16.png b/app/ui/icons/zoomout.16.png new file mode 100644 index 000000000..1db06cc50 Binary files /dev/null and b/app/ui/icons/zoomout.16.png differ diff --git a/app/ui/icons/zoomout.32.png b/app/ui/icons/zoomout.32.png new file mode 100644 index 000000000..cbc6bc4d6 Binary files /dev/null and b/app/ui/icons/zoomout.32.png differ diff --git a/app/ui/icons/zoomout.64.png b/app/ui/icons/zoomout.64.png new file mode 100644 index 000000000..ba1f1b3e6 Binary files /dev/null and b/app/ui/icons/zoomout.64.png differ diff --git a/app/ui/style/CMakeLists.txt b/app/ui/style/CMakeLists.txt new file mode 100644 index 000000000..aa4492f82 --- /dev/null +++ b/app/ui/style/CMakeLists.txt @@ -0,0 +1,22 @@ +# 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 . + +set(OLIVE_SOURCES + ${OLIVE_SOURCES} + ui/style/style.h + ui/style/style.cpp + PARENT_SCOPE +) diff --git a/app/ui/style/style.cpp b/app/ui/style/style.cpp new file mode 100644 index 000000000..777a8c8ca --- /dev/null +++ b/app/ui/style/style.cpp @@ -0,0 +1,44 @@ +#include "style.h" + +#include +#include +#include + +void olive::style::SetDefault() +{ + qApp->setStyle(QStyleFactory::create("Fusion")); + + // Set palette for Fusion + QPalette palette; + + palette.setColor(QPalette::Window, QColor(53,53,53)); + palette.setColor(QPalette::WindowText, Qt::white); + palette.setColor(QPalette::Base, QColor(25,25,25)); + palette.setColor(QPalette::AlternateBase, QColor(53,53,53)); + palette.setColor(QPalette::ToolTipBase, QColor(25,25,25)); + palette.setColor(QPalette::ToolTipText, Qt::white); + palette.setColor(QPalette::Text, Qt::white); + palette.setColor(QPalette::Button, QColor(53,53,53)); + palette.setColor(QPalette::ButtonText, Qt::white); + palette.setColor(QPalette::BrightText, Qt::red); + palette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(128, 128, 128)); + palette.setColor(QPalette::Link, QColor(42, 130, 218)); + palette.setColor(QPalette::Highlight, QColor(42, 130, 218)); + palette.setColor(QPalette::HighlightedText, Qt::white); + + qApp->setPalette(palette); + + // set default CSS + QString stylesheet = "QPushButton::checked { background: rgb(25, 25, 25); }"; + + // Windows menus have the option of being native, so we may not need this CSS + bool set_separator_color = false; +#ifndef Q_OS_WIN + //set_separator_color = !olive::config.use_native_menu_styling; +#endif + if (set_separator_color) { + stylesheet.append("QMenu::separator { background: #404040; }"); + } + + qApp->setStyleSheet(stylesheet); +} diff --git a/app/ui/style/style.h b/app/ui/style/style.h new file mode 100644 index 000000000..8d5ad6c7c --- /dev/null +++ b/app/ui/style/style.h @@ -0,0 +1,12 @@ +#ifndef STYLEMANAGER_H +#define STYLEMANAGER_H + +namespace olive { +namespace style { + +void SetDefault(); + +} +} + +#endif // STYLEMANAGER_H diff --git a/app/widget/CMakeLists.txt b/app/widget/CMakeLists.txt index 6d5ad3314..51ff1d46e 100644 --- a/app/widget/CMakeLists.txt +++ b/app/widget/CMakeLists.txt @@ -16,7 +16,9 @@ add_subdirectory(viewer) add_subdirectory(panel) +add_subdirectory(playbackcontrols) add_subdirectory(projectexplorer) +add_subdirectory(projecttoolbar) set(OLIVE_SOURCES ${OLIVE_SOURCES} diff --git a/app/widget/panel/panel.cpp b/app/widget/panel/panel.cpp index 89849394b..ad8250f2c 100644 --- a/app/widget/panel/panel.cpp +++ b/app/widget/panel/panel.cpp @@ -1,6 +1,8 @@ #include "panel.h" -PanelWidget::PanelWidget(QWidget *parent) { +PanelWidget::PanelWidget(QWidget *parent) : + QDockWidget(parent) +{ } void PanelWidget::SetTitle(const QString &t) diff --git a/app/widget/panel/panel.h b/app/widget/panel/panel.h index db1d76b71..6a6472955 100644 --- a/app/widget/panel/panel.h +++ b/app/widget/panel/panel.h @@ -2,6 +2,7 @@ #define PANEL_WIDGET_H #include +#include /** * @brief The PanelWidget class diff --git a/app/widget/playbackcontrols/CMakeLists.txt b/app/widget/playbackcontrols/CMakeLists.txt new file mode 100644 index 000000000..3506c7f6d --- /dev/null +++ b/app/widget/playbackcontrols/CMakeLists.txt @@ -0,0 +1,22 @@ +# 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 . + +set(OLIVE_SOURCES + ${OLIVE_SOURCES} + widget/playbackcontrols/playbackcontrols.h + widget/playbackcontrols/playbackcontrols.cpp + PARENT_SCOPE +) diff --git a/app/widget/playbackcontrols/playbackcontrols.cpp b/app/widget/playbackcontrols/playbackcontrols.cpp new file mode 100644 index 000000000..3ebd7e160 --- /dev/null +++ b/app/widget/playbackcontrols/playbackcontrols.cpp @@ -0,0 +1,89 @@ +#include "playbackcontrols.h" + +#include +#include + +#include "ui/icons/icons.h" + +PlaybackControls::PlaybackControls(QWidget *parent) : + QWidget(parent) +{ + // Create lower controls + QHBoxLayout* lower_control_layout = new QHBoxLayout(this); + lower_control_layout->setSpacing(0); + lower_control_layout->setMargin(0); + + QSizePolicy lower_container_size_policy = QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); + + // In the lower-left, we create a current timecode label wrapped in a QWidget for fixed sizing + lower_left_container_ = new QWidget(); + lower_left_container_->setVisible(false); + lower_left_container_->setSizePolicy(lower_container_size_policy); + lower_control_layout->addWidget(lower_left_container_); + + QHBoxLayout* lower_left_layout = new QHBoxLayout(lower_left_container_); + lower_left_layout->setSpacing(0); + lower_left_layout->setMargin(0); + + cur_tc_lbl_ = new QLabel("00:00:00;00"); + lower_left_layout->addWidget(cur_tc_lbl_); + lower_left_layout->addStretch(); + + // In the lower-middle, we create playback control buttons + QWidget* lower_middle_container = new QWidget(); + lower_middle_container->setSizePolicy(lower_container_size_policy); + lower_control_layout->addWidget(lower_middle_container); + + QHBoxLayout* lower_middle_layout = new QHBoxLayout(lower_middle_container); + lower_middle_layout->setSpacing(0); + lower_middle_layout->setMargin(0); + + lower_middle_layout->addStretch(); + + // Go To Start Button + QPushButton* go_to_start_btn = new QPushButton(); + go_to_start_btn->setIcon(olive::icon::GoToStart); + lower_middle_layout->addWidget(go_to_start_btn); + + // Prev Frame Button + QPushButton* prev_frame_btn = new QPushButton(); + prev_frame_btn->setIcon(olive::icon::PrevFrame); + lower_middle_layout->addWidget(prev_frame_btn); + + // Play/Pause Button + QPushButton* play_btn = new QPushButton(); + play_btn->setIcon(olive::icon::Play); + lower_middle_layout->addWidget(play_btn); + + // Next Frame Button + QPushButton* next_frame_btn = new QPushButton(); + next_frame_btn->setIcon(olive::icon::NextFrame); + lower_middle_layout->addWidget(next_frame_btn); + + // Go To End Button + QPushButton* go_to_end_btn = new QPushButton(); + go_to_end_btn->setIcon(olive::icon::GoToEnd); + lower_middle_layout->addWidget(go_to_end_btn); + + lower_middle_layout->addStretch(); + + // The lower-right, we create another timecode label, this time to show the end timecode + lower_right_container_ = new QWidget(); + lower_right_container_->setVisible(false); + lower_right_container_->setSizePolicy(lower_container_size_policy); + lower_control_layout->addWidget(lower_right_container_); + + QHBoxLayout* lower_right_layout = new QHBoxLayout(lower_right_container_); + lower_right_layout->setSpacing(0); + lower_right_layout->setMargin(0); + + lower_right_layout->addStretch(); + end_tc_lbl_ = new QLabel("00:00:00;00"); + lower_right_layout->addWidget(end_tc_lbl_); +} + +void PlaybackControls::SetTimecodeEnabled(bool enabled) +{ + lower_left_container_->setVisible(enabled); + lower_right_container_->setVisible(enabled); +} diff --git a/app/widget/playbackcontrols/playbackcontrols.h b/app/widget/playbackcontrols/playbackcontrols.h new file mode 100644 index 000000000..9a3feb051 --- /dev/null +++ b/app/widget/playbackcontrols/playbackcontrols.h @@ -0,0 +1,29 @@ +#ifndef PLAYBACKCONTROLS_H +#define PLAYBACKCONTROLS_H + +#include +#include + +class PlaybackControls : public QWidget +{ +public: + PlaybackControls(QWidget* parent); + + void SetTimecodeEnabled(bool enabled); + +signals: + void BeginClicked(); + void PrevFrameClicked(); + void PlayClicked(); + void NextFrameClicked(); + void EndClicked(); + +private: + QWidget* lower_left_container_; + QWidget* lower_right_container_; + + QLabel* cur_tc_lbl_; + QLabel* end_tc_lbl_; +}; + +#endif // PLAYBACKCONTROLS_H diff --git a/app/widget/projectexplorer/projectexplorer.cpp b/app/widget/projectexplorer/projectexplorer.cpp index 7436ea75c..2db91fdc2 100644 --- a/app/widget/projectexplorer/projectexplorer.cpp +++ b/app/widget/projectexplorer/projectexplorer.cpp @@ -1,9 +1,11 @@ #include "projectexplorer.h" ProjectExplorer::ProjectExplorer(QWidget *parent) : - QWidget(parent), + QStackedWidget(parent), view_type_(TreeView) { + tree_view_ = new QTreeView(this); + addWidget(tree_view_); } const ProjectExplorer::ViewType &ProjectExplorer::view_type() diff --git a/app/widget/projectexplorer/projectexplorer.h b/app/widget/projectexplorer/projectexplorer.h index 5a5d5cefb..ef1f7f5ac 100644 --- a/app/widget/projectexplorer/projectexplorer.h +++ b/app/widget/projectexplorer/projectexplorer.h @@ -1,9 +1,10 @@ #ifndef PROJECTEXPLORER_H #define PROJECTEXPLORER_H -#include +#include +#include -class ProjectExplorer : public QWidget +class ProjectExplorer : public QStackedWidget { public: enum ViewType { @@ -20,6 +21,7 @@ public: private: ViewType view_type_; + QTreeView* tree_view_; }; #endif // PROJECTEXPLORER_H diff --git a/app/widget/projecttoolbar/CMakeLists.txt b/app/widget/projecttoolbar/CMakeLists.txt new file mode 100644 index 000000000..79846cee3 --- /dev/null +++ b/app/widget/projecttoolbar/CMakeLists.txt @@ -0,0 +1,22 @@ +# 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 . + +set(OLIVE_SOURCES + ${OLIVE_SOURCES} + widget/projecttoolbar/projecttoolbar.h + widget/projecttoolbar/projecttoolbar.cpp + PARENT_SCOPE +) diff --git a/app/widget/projecttoolbar/projecttoolbar.cpp b/app/widget/projecttoolbar/projecttoolbar.cpp new file mode 100644 index 000000000..6002a727f --- /dev/null +++ b/app/widget/projecttoolbar/projecttoolbar.cpp @@ -0,0 +1,95 @@ +#include "projecttoolbar.h" + +#include +#include +#include + +#include "ui/icons/icons.h" + +ProjectToolbar::ProjectToolbar(QWidget *parent) : + QWidget(parent) +{ + QHBoxLayout* layout = new QHBoxLayout(this); + layout->setSpacing(0); + layout->setMargin(0); + + new_button_ = new QPushButton(); + new_button_->setIcon(olive::icon::New); + connect(new_button_, SIGNAL(clicked(bool)), this, SIGNAL(NewClicked())); + layout->addWidget(new_button_); + + open_button_ = new QPushButton(); + open_button_->setIcon(olive::icon::Open); + connect(open_button_, SIGNAL(clicked(bool)), this, SIGNAL(OpenClicked())); + layout->addWidget(open_button_); + + save_button_ = new QPushButton(); + save_button_->setIcon(olive::icon::Save); + connect(save_button_, SIGNAL(clicked(bool)), this, SIGNAL(SaveClicked())); + layout->addWidget(save_button_); + + undo_button_ = new QPushButton(); + undo_button_->setIcon(olive::icon::Undo); + connect(undo_button_, SIGNAL(clicked(bool)), this, SIGNAL(UndoClicked())); + layout->addWidget(undo_button_); + + redo_button_ = new QPushButton(); + redo_button_->setIcon(olive::icon::Redo); + connect(redo_button_, SIGNAL(clicked(bool)), this, SIGNAL(RedoClicked())); + layout->addWidget(redo_button_); + + search_field_ = new QLineEdit(); + search_field_->setClearButtonEnabled(true); + connect(search_field_, SIGNAL(textChanged(const QString &)), this, SIGNAL(SearchChanged(const QString&))); + layout->addWidget(search_field_); + + tree_button_ = new QPushButton(); + tree_button_->setIcon(olive::icon::TreeView); + tree_button_->setCheckable(true); + connect(tree_button_, SIGNAL(clicked(bool)), this, SIGNAL(TreeViewClicked())); + layout->addWidget(tree_button_); + + list_button_ = new QPushButton(); + list_button_->setIcon(olive::icon::ListView); + list_button_->setCheckable(true); + connect(list_button_, SIGNAL(clicked(bool)), this, SIGNAL(ListViewClicked())); + layout->addWidget(list_button_); + + icon_button_ = new QPushButton(); + icon_button_->setIcon(olive::icon::IconView); + icon_button_->setCheckable(true); + connect(icon_button_, SIGNAL(clicked(bool)), this, SIGNAL(IconViewClicked())); + layout->addWidget(icon_button_); + + // Group Tree/List/Icon view buttons into a button group for easy exclusive-buttons + QButtonGroup* view_button_group = new QButtonGroup(this); + view_button_group->setExclusive(true); + view_button_group->addButton(tree_button_); + view_button_group->addButton(list_button_); + view_button_group->addButton(icon_button_); + + Retranslate(); +} + +void ProjectToolbar::changeEvent(QEvent *e) +{ + if (e->type() == QEvent::LanguageChange) { + Retranslate(); + } + QWidget::changeEvent(e); +} + +void ProjectToolbar::Retranslate() +{ + new_button_->setToolTip(tr("New...")); + open_button_->setToolTip(tr("Open Project")); + save_button_->setToolTip(tr("Save Project")); + undo_button_->setToolTip(tr("Undo")); + redo_button_->setToolTip(tr("Redo")); + + search_field_->setPlaceholderText(tr("Search media, markers, etc.")); + + tree_button_->setToolTip(tr("Switch to Tree View")); + list_button_->setToolTip(tr("Switch to List View")); + icon_button_->setToolTip(tr("Switch to Icon View")); +} diff --git a/app/widget/projecttoolbar/projecttoolbar.h b/app/widget/projecttoolbar/projecttoolbar.h new file mode 100644 index 000000000..f5bd9cdcc --- /dev/null +++ b/app/widget/projecttoolbar/projecttoolbar.h @@ -0,0 +1,44 @@ +#ifndef PROJECTTOOLBAR_H +#define PROJECTTOOLBAR_H + +#include +#include +#include + +class ProjectToolbar : public QWidget +{ + Q_OBJECT +public: + ProjectToolbar(QWidget* parent); +protected: + void changeEvent(QEvent *) override; +signals: + void NewClicked(); + void OpenClicked(); + void SaveClicked(); + + void UndoClicked(); + void RedoClicked(); + + void SearchChanged(const QString&); + + void TreeViewClicked(); + void IconViewClicked(); + void ListViewClicked(); +private: + void Retranslate(); + + QPushButton* new_button_; + QPushButton* open_button_; + QPushButton* save_button_; + QPushButton* undo_button_; + QPushButton* redo_button_; + + QLineEdit* search_field_; + + QPushButton* tree_button_; + QPushButton* list_button_; + QPushButton* icon_button_; +}; + +#endif // PROJECTTOOLBAR_H diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 1d57cc034..9006e67a8 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -12,58 +12,12 @@ ViewerWidget::ViewerWidget(QWidget *parent) : layout->setMargin(0); // Create main OpenGL-based view - gl_widget_ = new ViewerGLWidget(); + gl_widget_ = new ViewerGLWidget(this); layout->addWidget(gl_widget_); // Create lower controls - QWidget* lower_control_container = new QWidget(); - lower_control_container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); - QHBoxLayout* lower_control_layout = new QHBoxLayout(lower_control_container); - lower_control_layout->setSpacing(0); - lower_control_layout->setMargin(0); - layout->addWidget(lower_control_container); - - QSizePolicy lower_container_size_policy = QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); - - // In the lower-left, we create a current timecode label wrapped in a QWidget for fixed sizing - QWidget* lower_left_container = new QWidget(); - lower_left_container->setSizePolicy(lower_container_size_policy); - lower_control_layout->addWidget(lower_left_container); - - QHBoxLayout* lower_left_layout = new QHBoxLayout(lower_left_container); - lower_left_layout->setSpacing(0); - lower_left_layout->setMargin(0); - - cur_tc_lbl_ = new QLabel("00:00:00;00"); - lower_left_layout->addWidget(cur_tc_lbl_); - lower_left_layout->addStretch(); - - // In the lower-middle, we create playback control buttons - QWidget* lower_middle_container = new QWidget(); - lower_left_container->setSizePolicy(lower_container_size_policy); - lower_control_layout->addWidget(lower_middle_container); - - QHBoxLayout* lower_middle_layout = new QHBoxLayout(lower_middle_container); - lower_middle_layout->setSpacing(0); - lower_middle_layout->setMargin(0); - - lower_middle_layout->addStretch(); - - QPushButton* play_button = new QPushButton("Play"); - lower_middle_layout->addWidget(play_button); - - lower_middle_layout->addStretch(); - - // The lower-right, we create another timecode label, this time to show the end timecode - QWidget* lower_right_container = new QWidget(); - lower_left_container->setSizePolicy(lower_container_size_policy); - lower_control_layout->addWidget(lower_right_container); - - QHBoxLayout* lower_right_layout = new QHBoxLayout(lower_right_container); - lower_right_layout->setSpacing(0); - lower_right_layout->setMargin(0); - - lower_right_layout->addStretch(); - end_tc_lbl_ = new QLabel("00:00:00;00"); - lower_right_layout->addWidget(end_tc_lbl_); + controls_ = new PlaybackControls(this); + controls_->SetTimecodeEnabled(true); + controls_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); + layout->addWidget(controls_); } diff --git a/app/widget/viewer/viewer.h b/app/widget/viewer/viewer.h index 82cd007bd..28e129180 100644 --- a/app/widget/viewer/viewer.h +++ b/app/widget/viewer/viewer.h @@ -6,6 +6,7 @@ #include #include "viewerglwidget.h" +#include "widget/playbackcontrols/playbackcontrols.h" /** * @brief The ViewerWidget class @@ -18,11 +19,12 @@ class ViewerWidget : public QWidget public: ViewerWidget(QWidget* parent); + void SetPlaybackControlsEnabled(bool enabled); + private: ViewerGLWidget* gl_widget_; + PlaybackControls* controls_; - QLabel* cur_tc_lbl_; - QLabel* end_tc_lbl_; }; #endif // VIEWER_WIDGET_H diff --git a/app/widget/viewer/viewerglwidget.cpp b/app/widget/viewer/viewerglwidget.cpp index 5b6936b0c..be1b52315 100644 --- a/app/widget/viewer/viewerglwidget.cpp +++ b/app/widget/viewer/viewerglwidget.cpp @@ -2,10 +2,17 @@ #include #include +#include -ViewerGLWidget::ViewerGLWidget() +#include "render/gl/glfunc.h" +#include "render/gl/shadergenerators.h" + +QImage img; + +ViewerGLWidget::ViewerGLWidget(QWidget *parent) : + QOpenGLWidget(parent) { - + img.load("/home/matt/Pictures/heck.png"); } void ViewerGLWidget::paintGL() @@ -14,4 +21,16 @@ void ViewerGLWidget::paintGL() f->glClearColor(1.0f, 0.0f, 0.0f, 1.0f); f->glClear(GL_COLOR_BUFFER_BIT); + + QOpenGLTexture* tex = new QOpenGLTexture(img); + + ShaderPtr pipeline = olive::gl::GetDefaultPipeline(); + + tex->bind(); + + olive::gl::Blit(pipeline, true); + + tex->release(); + + delete tex; } diff --git a/app/widget/viewer/viewerglwidget.h b/app/widget/viewer/viewerglwidget.h index 9349d5307..ae84cc68b 100644 --- a/app/widget/viewer/viewerglwidget.h +++ b/app/widget/viewer/viewerglwidget.h @@ -6,7 +6,7 @@ class ViewerGLWidget : public QOpenGLWidget { public: - ViewerGLWidget(); + ViewerGLWidget(QWidget* parent); void SetTexture(GLuint tex); protected: diff --git a/app/window/mainwindow/mainmenu.cpp b/app/window/mainwindow/mainmenu.cpp new file mode 100644 index 000000000..efc25829c --- /dev/null +++ b/app/window/mainwindow/mainmenu.cpp @@ -0,0 +1,6 @@ +#include "mainmenu.h" + +MainMenu::MainMenu() +{ + +} diff --git a/app/window/mainwindow/mainmenu.h b/app/window/mainwindow/mainmenu.h new file mode 100644 index 000000000..dbf9ea9fa --- /dev/null +++ b/app/window/mainwindow/mainmenu.h @@ -0,0 +1,11 @@ +#ifndef MAINMENU_H +#define MAINMENU_H + + +class MainMenu +{ +public: + MainMenu(); +}; + +#endif // MAINMENU_H diff --git a/app/window/mainwindow/mainwindow.cpp b/app/window/mainwindow/mainwindow.cpp index f5ae11b18..4f7eb2d30 100644 --- a/app/window/mainwindow/mainwindow.cpp +++ b/app/window/mainwindow/mainwindow.cpp @@ -1,7 +1,9 @@ #include "mainwindow.h" // Panel objects +#include "panel/project/project.h" #include "panel/viewer/viewer.h" +#include "panel/timeline/timeline.h" olive::MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) @@ -19,12 +21,12 @@ olive::MainWindow::MainWindow(QWidget *parent) : setDockNestingEnabled(true); // TODO Use settings data to create panels and restore state if they exist - ViewerPanel* viewer_panel = new ViewerPanel(this); + ProjectPanel* viewer_panel = new ProjectPanel(this); addDockWidget(Qt::TopDockWidgetArea, viewer_panel); ViewerPanel* viewer_panel2 = new ViewerPanel(this); addDockWidget(Qt::TopDockWidgetArea, viewer_panel2); - ViewerPanel* viewer_panel3 = new ViewerPanel(this); - addDockWidget(Qt::BottomDockWidgetArea, viewer_panel3); ViewerPanel* viewer_panel4 = new ViewerPanel(this); - addDockWidget(Qt::BottomDockWidgetArea, viewer_panel4); + addDockWidget(Qt::TopDockWidgetArea, viewer_panel4); + TimelinePanel* viewer_panel3 = new TimelinePanel(this); + addDockWidget(Qt::BottomDockWidgetArea, viewer_panel3); } diff --git a/icons/icons.qrc b/icons/icons.qrc deleted file mode 100644 index 341bbf1b1..000000000 --- a/icons/icons.qrc +++ /dev/null @@ -1,57 +0,0 @@ - - - throbber.png - olive-splash.png - olive64.png - add-button.svg - add-effect.svg - add-transition.svg - arrow.svg - audiosource.svg - beam.svg - clock.svg - diamond.svg - dirup.svg - error.svg - ff.svg - folder.svg - hand.svg - iconview.svg - imagesource.svg - magnet.svg - new.svg - next.svg - open.svg - pause.svg - play.svg - prev.svg - razor.svg - record.svg - redo.svg - rew.svg - ripple.svg - rolling.svg - save.svg - sequence.svg - slide.svg - slip.svg - transition-tool.svg - treeview.svg - tri-down.svg - tri-left.svg - tri-right.svg - tri-up.svg - undo.svg - videosource.svg - zoomin.svg - zoomout.svg - italic.svg - underline.svg - align-center.svg - align-left.svg - align-right.svg - justify-center.svg - bold.svg - listview.svg - - diff --git a/icons/olive64.png b/icons/olive64.png deleted file mode 100644 index d5e31af4e..000000000 Binary files a/icons/olive64.png and /dev/null differ