diff --git a/obs/forms/OBSBasic.ui b/obs/forms/OBSBasic.ui index 20227cc6d..814a01787 100644 --- a/obs/forms/OBSBasic.ui +++ b/obs/forms/OBSBasic.ui @@ -110,6 +110,12 @@ + + + 0 + 0 + + QFrame::StyledPanel @@ -186,6 +192,12 @@ + + + 0 + 0 + + QFrame::StyledPanel @@ -311,6 +323,9 @@ + + 4 + 0 diff --git a/obs/obs-app.cpp b/obs/obs-app.cpp index 8a5c9bb83..af0d4e4d4 100644 --- a/obs/obs-app.cpp +++ b/obs/obs-app.cpp @@ -165,20 +165,6 @@ bool OBSApp::InitLocale() return true; } -bool OBSApp::InitOBSBasic() -{ - try { - mainWindow = move(unique_ptr(new OBSBasic())); - mainWindow->show(); - return true; - - } catch (const char *error) { - blog(LOG_ERROR, "%s", error); - } - - return false; -} - OBSApp::OBSApp(int &argc, char **argv) : QApplication(argc, argv) { @@ -190,8 +176,8 @@ OBSApp::OBSApp(int &argc, char **argv) throw "Failed to initialize global config"; if (!InitLocale()) throw "Failed to load locale"; - if (!InitOBSBasic()) - throw "Failed to create main window"; + + mainWindow = move(unique_ptr(new OBSBasic())); } void OBSApp::GetFPSCommon(uint32_t &num, uint32_t &den) const @@ -268,6 +254,11 @@ const char *OBSApp::GetRenderModule() const return "libobs-opengl"; } +void OBSApp::OBSInit() +{ + mainWindow->OBSInit(); +} + int main(int argc, char *argv[]) { int ret = -1; @@ -276,6 +267,7 @@ int main(int argc, char *argv[]) try { OBSApp program(argc, argv); + program.OBSInit(); ret = program.exec(); } catch (const char *error) { diff --git a/obs/obs-app.hpp b/obs/obs-app.hpp index 8cd5d9d57..e0f74e4af 100644 --- a/obs/obs-app.hpp +++ b/obs/obs-app.hpp @@ -18,25 +18,25 @@ #pragma once #include -#include #include #include #include +#include "window-main.hpp" + class OBSApp : public QApplication { Q_OBJECT private: - std::string locale; - ConfigFile globalConfig; - TextLookup textLookup; - std::unique_ptr mainWindow; + std::string locale; + ConfigFile globalConfig; + TextLookup textLookup; + std::unique_ptr mainWindow; bool InitGlobalConfig(); bool InitGlobalConfigDefaults(); bool InitConfigDefaults(); bool InitLocale(); - bool InitOBSBasic(); void GetFPSCommon(uint32_t &num, uint32_t &den) const; void GetFPSInteger(uint32_t &num, uint32_t &den) const; @@ -46,6 +46,8 @@ private: public: OBSApp(int &argc, char **argv); + void OBSInit(); + inline QMainWindow *GetMainWindow() const {return mainWindow.get();} inline config_t GlobalConfig() const {return globalConfig;} diff --git a/obs/settings-basic.cpp b/obs/settings-basic.cpp deleted file mode 100644 index d33ceff91..000000000 --- a/obs/settings-basic.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/****************************************************************************** - Copyright (C) 2013 by Hugh Bailey - - 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 2 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 . -******************************************************************************/ - -#include "settings-basic.hpp" -#include "window-basic-settings.hpp" - -void BasicSettingsData::SetChanged() -{ - dataChanged = true; - window->applyButton->Enable(); -} - -void BasicSettingsData::SetSaved() -{ - dataChanged = false; - window->applyButton->Disable(); -} diff --git a/obs/settings-basic.hpp b/obs/settings-basic.hpp deleted file mode 100644 index 39a649599..000000000 --- a/obs/settings-basic.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/****************************************************************************** - Copyright (C) 2013 by Hugh Bailey - - 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 2 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 . -******************************************************************************/ - -#pragma once - -#include "settings.hpp" - -class OBSBasicSettings; - -class BasicSettingsData : public SettingsData { -protected: - OBSBasicSettings *window; - -public: - inline BasicSettingsData(OBSBasicSettings *window) : window(window) {} - - virtual void SetChanged(); - virtual void SetSaved(); -}; - -BasicSettingsData *CreateBasicGeneralSettings(OBSBasicSettings *window); -BasicSettingsData *CreateBasicVideoSettings(OBSBasicSettings *window); diff --git a/obs/settings.hpp b/obs/settings.hpp deleted file mode 100644 index 3a1e42005..000000000 --- a/obs/settings.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/****************************************************************************** - Copyright (C) 2013 by Hugh Bailey - - 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 2 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 . -******************************************************************************/ - -#pragma once - -#include - -class SettingsData : public wxEvtHandler { -protected: - bool dataChanged; - -public: - inline SettingsData() : dataChanged(false) {} - virtual void Apply()=0; - - virtual void SetChanged()=0; - virtual void SetSaved()=0; - - inline bool DataChanged() const {return dataChanged;} -}; diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp index 759610a34..76f99e0ff 100644 --- a/obs/window-basic-main.cpp +++ b/obs/window-basic-main.cpp @@ -18,6 +18,7 @@ #include #include +#include #include "obs-app.hpp" #include "window-basic-settings.hpp" @@ -202,10 +203,17 @@ void OBSBasic::ChannelChanged(void *data, calldata_t params) /* Main class functions */ OBSBasic::OBSBasic(QWidget *parent) - : QMainWindow (parent), - ui (new Ui::OBSBasic) + : OBSMainWindow (parent), + ui (new Ui::OBSBasic) { ui->setupUi(this); +} + +void OBSBasic::OBSInit() +{ + /* make sure it's fully displayed before doing any initialization */ + show(); + App()->processEvents(); if (!obs_startup()) throw "Failed to initialize libobs"; @@ -223,6 +231,12 @@ OBSBasic::OBSBasic(QWidget *parent) /* TODO: this is a test */ obs_load_module("test-input"); + +#ifdef _WIN32 + /* HACK: fixes a windows qt bug with native widgets with native + * repaint */ + ui->previewContainer->repaint(); +#endif } OBSBasic::~OBSBasic() diff --git a/obs/window-basic-main.hpp b/obs/window-basic-main.hpp index 8200c1ffa..7c98ff293 100644 --- a/obs/window-basic-main.hpp +++ b/obs/window-basic-main.hpp @@ -20,13 +20,13 @@ #include #include #include -#include +#include "window-main.hpp" class QListWidgetItem; #include "ui_OBSBasic.h" -class OBSBasic : public QMainWindow { +class OBSBasic : public OBSMainWindow { Q_OBJECT private: @@ -60,9 +60,9 @@ private: void LoadProject(); protected: - virtual void closeEvent(QCloseEvent *event); - virtual void changeEvent(QEvent *event); - virtual void resizeEvent(QResizeEvent *event); + virtual void closeEvent(QCloseEvent *event) override; + virtual void changeEvent(QEvent *event) override; + virtual void resizeEvent(QResizeEvent *event) override; private slots: void on_action_New_triggered(); @@ -88,6 +88,8 @@ public: explicit OBSBasic(QWidget *parent = 0); ~OBSBasic(); + virtual void OBSInit() override; + private: std::unique_ptr ui; }; diff --git a/obs/window-basic-settings.cpp b/obs/window-basic-settings.cpp index 411a294d3..987d8cec2 100644 --- a/obs/window-basic-settings.cpp +++ b/obs/window-basic-settings.cpp @@ -15,6 +15,7 @@ along with this program. If not, see . ******************************************************************************/ +#include "obs-app.hpp" #include "window-basic-settings.hpp" OBSBasicSettings::OBSBasicSettings(QWidget *parent) @@ -22,6 +23,9 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) ui (new Ui::OBSBasicSettings) { ui->setupUi(this); + + /*ui->language = config_get_string(GetGlobalConfig(), "General", + "Language");*/ } void OBSBasicSettings::closeEvent(QCloseEvent *event) diff --git a/obs/window-main.hpp b/obs/window-main.hpp new file mode 100644 index 000000000..2f5cfbc71 --- /dev/null +++ b/obs/window-main.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include + +class OBSMainWindow : public QMainWindow { + Q_OBJECT + +public: + inline OBSMainWindow(QWidget *parent) : QMainWindow(parent) {} + + virtual void OBSInit()=0; +};