界面与品牌 - 默认 UI 语言固定为英文,不再跟随系统区域设置自动切换(frontend/OBSApp.cpp),用户仍可在设置中手动切换 - 程序图标更换为 CAIIC logo:exe 图标 obs-studio.ico 及界面/托盘/About 图标 obs.png - About 窗口精简为 logo + 名称 + 版本号,移除项目介绍、赞助名单、Authors/License 标签页 - 版本号定为 1.0.0(构建参数 OBS_VERSION_OVERRIDE=1.0.0) 分辨率支持 - 移除首次启动将画布强制限制为 1920x1080 的逻辑,默认使用显示器原生分辨率 - 设置-视频 与自动配置向导新增 3840x2160 / 2560x1440 预设 - 自动配置向导性能测试上限放宽至 4K60(软硬件编码数据率上限及起始分辨率钳制) 插件 - 集成 obs-shaderfilter 2.6.0(绿幕抠图/自定义着色器滤镜),并适配新版 libobs 的 gs_image_file_ex API - 补齐缺失的源码:obs-browser、obs-websocket、libdshowcapture(含 external/capture-device-support) 工程 - 新增 .gitignore,排除 deploy/ 发布目录与构建日志
123 lines
3.0 KiB
C++
123 lines
3.0 KiB
C++
#pragma once
|
|
|
|
#include <obs-module.h>
|
|
#include <util/platform.h>
|
|
#include <util/util.hpp>
|
|
#include <QWidget>
|
|
|
|
#include <functional>
|
|
#include <string>
|
|
|
|
#if defined(__APPLE__)
|
|
#include <dlfcn.h>
|
|
#endif
|
|
|
|
#ifdef ENABLE_WAYLAND
|
|
#include <obs-nix-platform.h>
|
|
#endif
|
|
|
|
struct QCefCookieManager {
|
|
virtual ~QCefCookieManager() {}
|
|
|
|
virtual bool DeleteCookies(const std::string &url, const std::string &name) = 0;
|
|
virtual bool SetStoragePath(const std::string &storage_path, bool persist_session_cookies = false) = 0;
|
|
virtual bool FlushStore() = 0;
|
|
|
|
typedef std::function<void(bool)> cookie_exists_cb;
|
|
|
|
virtual void CheckForCookie(const std::string &site, const std::string &cookie, cookie_exists_cb callback) = 0;
|
|
};
|
|
|
|
/* ------------------------------------------------------------------------- */
|
|
|
|
class QCefWidget : public QWidget {
|
|
Q_OBJECT
|
|
|
|
protected:
|
|
inline QCefWidget(QWidget *parent) : QWidget(parent) {}
|
|
|
|
public:
|
|
virtual void setURL(const std::string &url) = 0;
|
|
virtual void setStartupScript(const std::string &script) = 0;
|
|
virtual void allowAllPopups(bool allow) = 0;
|
|
virtual void closeBrowser() = 0;
|
|
virtual void reloadPage() = 0;
|
|
virtual bool zoomPage(int direction) = 0;
|
|
virtual void executeJavaScript(const std::string &script) = 0;
|
|
|
|
signals:
|
|
void titleChanged(const QString &title);
|
|
void urlChanged(const QString &url);
|
|
};
|
|
|
|
/* ------------------------------------------------------------------------- */
|
|
|
|
struct QCef {
|
|
virtual ~QCef() {}
|
|
|
|
virtual bool init_browser(void) = 0;
|
|
virtual bool initialized(void) = 0;
|
|
virtual bool wait_for_browser_init(void) = 0;
|
|
|
|
virtual QCefWidget *create_widget(QWidget *parent, const std::string &url,
|
|
QCefCookieManager *cookie_manager = nullptr) = 0;
|
|
|
|
virtual QCefCookieManager *create_cookie_manager(const std::string &storage_path,
|
|
bool persist_session_cookies = false) = 0;
|
|
|
|
virtual BPtr<char> get_cookie_path(const std::string &storage_path) = 0;
|
|
|
|
virtual void add_popup_whitelist_url(const std::string &url, QObject *obj) = 0;
|
|
virtual void add_force_popup_url(const std::string &url, QObject *obj) = 0;
|
|
};
|
|
|
|
static inline void *get_browser_lib()
|
|
{
|
|
// Disable panels on Wayland for now
|
|
bool isWayland = false;
|
|
#ifdef ENABLE_WAYLAND
|
|
isWayland = obs_get_nix_platform() == OBS_NIX_PLATFORM_WAYLAND;
|
|
#endif
|
|
if (isWayland)
|
|
return nullptr;
|
|
|
|
obs_module_t *browserModule = obs_get_module("obs-browser");
|
|
|
|
if (!browserModule)
|
|
return nullptr;
|
|
|
|
return obs_get_module_lib(browserModule);
|
|
}
|
|
|
|
static inline QCef *obs_browser_init_panel(void)
|
|
{
|
|
void *lib = get_browser_lib();
|
|
QCef *(*create_qcef)(void) = nullptr;
|
|
|
|
if (!lib)
|
|
return nullptr;
|
|
|
|
create_qcef = (decltype(create_qcef))os_dlsym(lib, "obs_browser_create_qcef");
|
|
|
|
if (!create_qcef)
|
|
return nullptr;
|
|
|
|
return create_qcef();
|
|
}
|
|
|
|
static inline int obs_browser_qcef_version(void)
|
|
{
|
|
void *lib = get_browser_lib();
|
|
int (*qcef_version)(void) = nullptr;
|
|
|
|
if (!lib)
|
|
return 0;
|
|
|
|
qcef_version = (decltype(qcef_version))os_dlsym(lib, "obs_browser_qcef_version_export");
|
|
|
|
if (!qcef_version)
|
|
return 0;
|
|
|
|
return qcef_version();
|
|
}
|