瀏覽代碼

frontend: Migrate CMake files

PatTheMav 10 月之前
父節點
當前提交
08a2eb304b
共有 57 個文件被更改,包括 509 次插入389 次删除
  1. 0 10
      UI/cmake/feature-browserpanels.cmake
  2. 0 10
      UI/cmake/feature-importers.cmake
  3. 0 78
      UI/cmake/ui-elements.cmake
  4. 0 65
      UI/cmake/ui-qt.cmake
  5. 0 63
      UI/cmake/ui-windows.cmake
  6. 0 20
      UI/obs.manifest
  7. 0 26
      UI/obs.rc.in
  8. 36 55
      frontend/CMakeLists.txt
  9. 18 0
      frontend/cmake/feature-browserpanels.cmake
  10. 16 0
      frontend/cmake/feature-importers.cmake
  11. 10 8
      frontend/cmake/feature-macos-update.cmake
  12. 1 1
      frontend/cmake/feature-restream.cmake
  13. 11 2
      frontend/cmake/feature-sparkle.cmake
  14. 1 1
      frontend/cmake/feature-twitch.cmake
  15. 9 7
      frontend/cmake/feature-whatsnew.cmake
  16. 11 8
      frontend/cmake/feature-youtube.cmake
  17. 0 0
      frontend/cmake/linux/com.obsproject.Studio.desktop
  18. 0 0
      frontend/cmake/linux/com.obsproject.Studio.metainfo.xml.in
  19. 0 0
      frontend/cmake/linux/icons/obs-logo-128.png
  20. 0 0
      frontend/cmake/linux/icons/obs-logo-256.png
  21. 0 0
      frontend/cmake/linux/icons/obs-logo-512.png
  22. 0 0
      frontend/cmake/linux/icons/obs-logo-scalable.svg
  23. 0 0
      frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/Contents.json
  24. 0 0
      frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_128x128.png
  25. 0 0
      frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected]
  26. 0 0
      frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_16x16.png
  27. 0 0
      frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected]
  28. 0 0
      frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_256x256.png
  29. 0 0
      frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected]
  30. 0 0
      frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_32x32.png
  31. 0 0
      frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected]
  32. 0 0
      frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_512x512.png
  33. 0 0
      frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected]
  34. 0 0
      frontend/cmake/macos/Assets.xcassets/Contents.json
  35. 0 0
      frontend/cmake/macos/Info.plist.in
  36. 0 0
      frontend/cmake/macos/entitlements-extension.plist
  37. 0 0
      frontend/cmake/macos/entitlements.plist
  38. 0 0
      frontend/cmake/macos/exportOptions-extension.plist.in
  39. 0 0
      frontend/cmake/macos/exportOptions.plist.in
  40. 0 0
      frontend/cmake/macos/qt.conf
  41. 1 3
      frontend/cmake/os-freebsd.cmake
  42. 1 3
      frontend/cmake/os-linux.cmake
  43. 9 3
      frontend/cmake/os-macos.cmake
  44. 32 26
      frontend/cmake/os-windows.cmake
  45. 0 0
      frontend/cmake/templates/ui-config.h.in
  46. 85 0
      frontend/cmake/ui-components.cmake
  47. 40 0
      frontend/cmake/ui-dialogs.cmake
  48. 1 0
      frontend/cmake/ui-docks.cmake
  49. 4 0
      frontend/cmake/ui-oauth.cmake
  50. 58 0
      frontend/cmake/ui-qt.cmake
  51. 15 0
      frontend/cmake/ui-settings.cmake
  52. 69 0
      frontend/cmake/ui-utility.cmake
  53. 66 0
      frontend/cmake/ui-widgets.cmake
  54. 15 0
      frontend/cmake/ui-wizards.cmake
  55. 0 0
      frontend/cmake/windows/obs-studio.ico
  56. 0 0
      frontend/cmake/windows/obs.manifest
  57. 0 0
      frontend/cmake/windows/obs.rc.in

+ 0 - 10
UI/cmake/feature-browserpanels.cmake

@@ -1,10 +0,0 @@
-if(TARGET OBS::browser-panels)
-  target_enable_feature(obs-studio "Browser panels" BROWSER_AVAILABLE)
-
-  target_link_libraries(obs-studio PRIVATE OBS::browser-panels)
-
-  target_sources(
-    obs-studio
-    PRIVATE window-dock-browser.cpp window-dock-browser.hpp window-extra-browsers.cpp window-extra-browsers.hpp
-  )
-endif()

+ 0 - 10
UI/cmake/feature-importers.cmake

@@ -1,10 +0,0 @@
-target_sources(
-  obs-studio
-  PRIVATE
-    importers/classic.cpp
-    importers/importers.cpp
-    importers/importers.hpp
-    importers/sl.cpp
-    importers/studio.cpp
-    importers/xsplit.cpp
-)

+ 0 - 78
UI/cmake/ui-elements.cmake

@@ -1,78 +0,0 @@
-if(NOT TARGET OBS::properties-view)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/properties-view" "${CMAKE_BINARY_DIR}/shared/properties-view")
-endif()
-
-if(NOT TARGET OBS::qt-plain-text-edit)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/plain-text-edit" "${CMAKE_BINARY_DIR}/shared/qt/plain-text-edit")
-endif()
-
-if(NOT TARGET OBS::qt-slider-ignorewheel)
-  add_subdirectory(
-    "${CMAKE_SOURCE_DIR}/shared/qt/slider-ignorewheel"
-    "${CMAKE_BINARY_DIR}/shared/qt/slider-ignorewheel"
-  )
-endif()
-
-if(NOT TARGET OBS::qt-vertical-scroll-area)
-  add_subdirectory(
-    "${CMAKE_SOURCE_DIR}/shared/qt/vertical-scroll-area"
-    "${CMAKE_BINARY_DIR}/shared/qt/vertical-scroll-area"
-  )
-endif()
-
-target_link_libraries(
-  obs-studio
-  PRIVATE OBS::properties-view OBS::qt-plain-text-edit OBS::qt-slider-ignorewheel OBS::qt-vertical-scroll-area
-)
-
-target_sources(
-  obs-studio
-  PRIVATE
-    absolute-slider.cpp
-    absolute-slider.hpp
-    adv-audio-control.cpp
-    adv-audio-control.hpp
-    audio-encoders.cpp
-    audio-encoders.hpp
-    balance-slider.hpp
-    basic-controls.cpp
-    basic-controls.hpp
-    clickable-label.hpp
-    context-bar-controls.cpp
-    context-bar-controls.hpp
-    focus-list.cpp
-    focus-list.hpp
-    horizontal-scroll-area.cpp
-    horizontal-scroll-area.hpp
-    hotkey-edit.cpp
-    hotkey-edit.hpp
-    item-widget-helpers.cpp
-    item-widget-helpers.hpp
-    log-viewer.cpp
-    log-viewer.hpp
-    media-controls.cpp
-    media-controls.hpp
-    menu-button.cpp
-    menu-button.hpp
-    mute-checkbox.hpp
-    noncheckable-button.hpp
-    preview-controls.cpp
-    preview-controls.hpp
-    remote-text.cpp
-    remote-text.hpp
-    scene-tree.cpp
-    scene-tree.hpp
-    screenshot-obj.hpp
-    source-label.cpp
-    source-label.hpp
-    source-tree.cpp
-    source-tree.hpp
-    undo-stack-obs.cpp
-    undo-stack-obs.hpp
-    url-push-button.cpp
-    url-push-button.hpp
-    visibility-item-widget.cpp
-    visibility-item-widget.hpp
-    volume-control.cpp
-    volume-control.hpp
-)

+ 0 - 65
UI/cmake/ui-qt.cmake

@@ -1,65 +0,0 @@
-find_package(Qt6 REQUIRED Widgets Network Svg Xml)
-
-if(OS_LINUX OR OS_FREEBSD OR OS_OPENBSD)
-  find_package(Qt6 REQUIRED Gui DBus)
-endif()
-
-if(NOT TARGET OBS::qt-wrappers)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/wrappers" "${CMAKE_BINARY_DIR}/shared/qt/wrappers")
-endif()
-
-target_link_libraries(
-  obs-studio
-  PRIVATE Qt::Widgets Qt::Svg Qt::Xml Qt::Network OBS::qt-wrappers
-)
-
-set_target_properties(
-  obs-studio
-  PROPERTIES AUTOMOC ON AUTOUIC ON AUTORCC ON
-)
-
-set_property(TARGET obs-studio APPEND PROPERTY AUTOUIC_SEARCH_PATHS forms forms/source-toolbar)
-
-set(
-  _qt_sources
-  forms/AutoConfigFinishPage.ui
-  forms/AutoConfigStartPage.ui
-  forms/AutoConfigStartPage.ui
-  forms/AutoConfigStreamPage.ui
-  forms/AutoConfigTestPage.ui
-  forms/AutoConfigVideoPage.ui
-  forms/ColorSelect.ui
-  forms/obs.qrc
-  forms/OBSAbout.ui
-  forms/OBSAdvAudio.ui
-  forms/OBSBasic.ui
-  forms/OBSBasicControls.ui
-  forms/OBSBasicFilters.ui
-  forms/OBSBasicInteraction.ui
-  forms/OBSBasicProperties.ui
-  forms/OBSBasicSettings.ui
-  forms/OBSBasicSourceSelect.ui
-  forms/OBSBasicTransform.ui
-  forms/OBSBasicVCamConfig.ui
-  forms/OBSExtraBrowsers.ui
-  forms/OBSImporter.ui
-  forms/OBSLogReply.ui
-  forms/OBSLogViewer.ui
-  forms/OBSMissingFiles.ui
-  forms/OBSRemux.ui
-  forms/OBSUpdate.ui
-  forms/OBSYoutubeActions.ui
-  forms/source-toolbar/browser-source-toolbar.ui
-  forms/source-toolbar/color-source-toolbar.ui
-  forms/source-toolbar/device-select-toolbar.ui
-  forms/source-toolbar/game-capture-toolbar.ui
-  forms/source-toolbar/image-source-toolbar.ui
-  forms/source-toolbar/media-controls.ui
-  forms/source-toolbar/text-source-toolbar.ui
-)
-
-target_sources(obs-studio PRIVATE ${_qt_sources})
-
-source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/forms" PREFIX "UI Files" FILES ${_qt_sources})
-
-unset(_qt_sources)

+ 0 - 63
UI/cmake/ui-windows.cmake

@@ -1,63 +0,0 @@
-target_sources(
-  obs-studio
-  PRIVATE
-    window-basic-about.cpp
-    window-basic-about.hpp
-    window-basic-adv-audio.cpp
-    window-basic-adv-audio.hpp
-    window-basic-auto-config-test.cpp
-    window-basic-auto-config.cpp
-    window-basic-auto-config.hpp
-    window-basic-filters.cpp
-    window-basic-filters.hpp
-    window-basic-interaction.cpp
-    window-basic-interaction.hpp
-    window-basic-main-browser.cpp
-    window-basic-main-dropfiles.cpp
-    window-basic-main-icons.cpp
-    window-basic-main-outputs.cpp
-    window-basic-main-outputs.hpp
-    window-basic-main-profiles.cpp
-    window-basic-main-scene-collections.cpp
-    window-basic-main-screenshot.cpp
-    window-basic-main-transitions.cpp
-    window-basic-main.cpp
-    window-basic-main.hpp
-    window-basic-preview.cpp
-    window-basic-preview.hpp
-    window-basic-properties.cpp
-    window-basic-properties.hpp
-    window-basic-settings-a11y.cpp
-    window-basic-settings-appearance.cpp
-    window-basic-settings-stream.cpp
-    window-basic-settings.cpp
-    window-basic-settings.hpp
-    window-basic-source-select.cpp
-    window-basic-source-select.hpp
-    window-basic-stats.cpp
-    window-basic-stats.hpp
-    window-basic-status-bar.cpp
-    window-basic-status-bar.hpp
-    window-basic-transform.cpp
-    window-basic-transform.hpp
-    window-basic-vcam-config.cpp
-    window-basic-vcam-config.hpp
-    window-basic-vcam.hpp
-    window-dock.cpp
-    window-dock.hpp
-    window-importer.cpp
-    window-importer.hpp
-    window-log-reply.cpp
-    window-log-reply.hpp
-    window-main.hpp
-    window-missing-files.cpp
-    window-missing-files.hpp
-    window-namedialog.cpp
-    window-namedialog.hpp
-    window-projector.cpp
-    window-projector.hpp
-    window-remux.cpp
-    window-remux.hpp
-    window-whats-new.cpp
-    window-whats-new.hpp
-)

+ 0 - 20
UI/obs.manifest

@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
-    <description>OBS Studio</description>
-    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
-        <security>
-            <requestedPrivileges>
-                <requestedExecutionLevel
-                    level="asInvoker"
-                    uiAccess="false"
-                />	
-            </requestedPrivileges>
-        </security>
-    </trustInfo>
-    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
-        <application> 
-            <!-- Windows 10 and Windows 11 -->
-            <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
-        </application> 
-    </compatibility>
-</assembly>

+ 0 - 26
UI/obs.rc.in

@@ -1,26 +0,0 @@
-IDI_ICON1 ICON DISCARDABLE "../cmake/bundle/windows/obs-studio.ico"
-
-1 VERSIONINFO
-FILEVERSION ${UI_VERSION_MAJOR},${UI_VERSION_MINOR},${UI_VERSION_PATCH},0
-BEGIN
-  BLOCK "StringFileInfo"
-  BEGIN
-    BLOCK "040904B0"
-    BEGIN
-      VALUE "CompanyName", "OBS"
-      VALUE "FileDescription", "OBS Studio"
-      VALUE "FileVersion", "${UI_VERSION}"
-      VALUE "InternalName", "obs"
-      VALUE "OriginalFilename", "obs"
-      VALUE "ProductName", "OBS Studio"
-      VALUE "ProductVersion", "${UI_VERSION}"
-      VALUE "Comments", "Free and open source software for video recording and live streaming"
-      VALUE "LegalCopyright", "(C) Lain Bailey"
-    END
-  END
-
-  BLOCK "VarFileInfo"
-  BEGIN
-    VALUE "Translation", 0x0409, 0x04B0
-  END
-END

+ 36 - 55
UI/CMakeLists.txt → frontend/CMakeLists.txt

@@ -1,10 +1,10 @@
 cmake_minimum_required(VERSION 3.28...3.30)
 
-add_subdirectory(obs-frontend-api)
+add_subdirectory(api)
 
-option(ENABLE_UI "Enable building with UI (requires Qt)" ON)
+option(ENABLE_FRONTEND "Enable building with UI frontend (requires Qt6)" ON)
 
-if(NOT ENABLE_UI)
+if(NOT ENABLE_FRONTEND)
   target_disable_feature(obs "User Interface")
   return()
 else()
@@ -15,11 +15,15 @@ find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
 find_package(CURL REQUIRED)
 
 if(NOT TARGET OBS::json11)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/deps/json11" "${CMAKE_BINARY_DIR}/deps/json11")
+  add_subdirectory("${CMAKE_SOURCE_DIR}/deps/json11" json11)
+endif()
+
+if(NOT TARGET OBS::libobs)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/libobs" libobs)
 endif()
 
 if(NOT TARGET OBS::bpm)
-  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/bpm" "${CMAKE_BINARY_DIR}/shared/bpm")
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/bpm" bpm)
 endif()
 
 add_executable(obs-studio)
@@ -32,17 +36,23 @@ target_link_libraries(
     FFmpeg::avcodec
     FFmpeg::avutil
     FFmpeg::avformat
-    OBS::bpm
     OBS::libobs
     OBS::frontend-api
     OBS::json11
+    OBS::bpm
 )
 
-include(cmake/ui-qt.cmake)
-include(cmake/ui-elements.cmake)
-include(cmake/ui-windows.cmake)
+include(cmake/ui-components.cmake)
+include(cmake/ui-dialogs.cmake)
+include(cmake/ui-docks.cmake)
 include(cmake/feature-importers.cmake)
+include(cmake/ui-oauth.cmake)
 include(cmake/feature-browserpanels.cmake)
+include(cmake/ui-qt.cmake)
+include(cmake/ui-settings.cmake)
+include(cmake/ui-utility.cmake)
+include(cmake/ui-widgets.cmake)
+include(cmake/ui-wizards.cmake)
 
 if(NOT OAUTH_BASE_URL)
   set(OAUTH_BASE_URL "https://auth.obsproject.com/" CACHE STRING "Default OAuth base URL")
@@ -53,56 +63,13 @@ include(cmake/feature-restream.cmake)
 include(cmake/feature-youtube.cmake)
 include(cmake/feature-whatsnew.cmake)
 
-add_subdirectory(frontend-plugins)
+add_subdirectory(plugins)
 
-configure_file(ui-config.h.in ui-config.h)
+configure_file(cmake/templates/ui-config.h.in ui-config.h)
 
 target_sources(
   obs-studio
-  PRIVATE
-    api-interface.cpp
-    auth-base.cpp
-    auth-base.hpp
-    auth-listener.cpp
-    auth-listener.hpp
-    auth-oauth.cpp
-    auth-oauth.hpp
-    display-helpers.hpp
-    ffmpeg-utils.cpp
-    ffmpeg-utils.hpp
-    multiview.cpp
-    multiview.hpp
-    obf.c
-    obf.h
-    obs-app-theming.cpp
-    obs-app-theming.hpp
-    obs-app.cpp
-    obs-app.hpp
-    obs-proxy-style.cpp
-    obs-proxy-style.hpp
-    platform.hpp
-    qt-display.cpp
-    qt-display.hpp
-    ui-config.h
-    ui-validation.cpp
-    ui-validation.hpp
-)
-
-target_sources(
-  obs-studio
-  PRIVATE
-    goliveapi-censoredjson.cpp
-    goliveapi-censoredjson.hpp
-    goliveapi-network.cpp
-    goliveapi-network.hpp
-    goliveapi-postdata.cpp
-    goliveapi-postdata.hpp
-    models/multitrack-video.hpp
-    multitrack-video-error.cpp
-    multitrack-video-error.hpp
-    multitrack-video-output.cpp
-    multitrack-video-output.hpp
-    system-info.hpp
+  PRIVATE obs-main.cpp OBSStudioAPI.cpp OBSStudioAPI.hpp OBSApp.cpp OBSApp.hpp OBSApp_Themes.cpp ui-config.h
 )
 
 if(OS_WINDOWS)
@@ -132,4 +99,18 @@ get_property(obs_module_list GLOBAL PROPERTY OBS_MODULES_ENABLED)
 list(JOIN obs_module_list "|" SAFE_MODULES)
 target_compile_definitions(obs-studio PRIVATE "SAFE_MODULES=\"${SAFE_MODULES}\"")
 
+get_target_property(target_sources obs-studio SOURCES)
+set(target_cpp_sources ${target_sources})
+set(target_hpp_sources ${target_sources})
+set(target_qt_sources ${target_sources})
+list(FILTER target_cpp_sources INCLUDE REGEX ".+\\.(cpp|mm|c|m)")
+list(SORT target_cpp_sources COMPARE NATURAL CASE SENSITIVE ORDER ASCENDING)
+list(FILTER target_hpp_sources INCLUDE REGEX ".+\\.(hpp|h)")
+list(SORT target_hpp_sources COMPARE NATURAL CASE SENSITIVE ORDER ASCENDING)
+list(FILTER target_qt_sources INCLUDE REGEX ".+\\.(ui|qrc)")
+list(SORT target_qt_sources COMPARE NATURAL CASE SENSITIVE ORDER ASCENDING)
+source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" PREFIX "Source Files" FILES ${target_cpp_sources})
+source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" PREFIX "Header Files" FILES ${target_hpp_sources})
+source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" PREFIX "Qt Files" FILES ${target_qt_sources})
+
 set_target_properties_obs(obs-studio PROPERTIES FOLDER frontend OUTPUT_NAME "$<IF:$<PLATFORM_ID:Windows>,obs64,obs>")

+ 18 - 0
frontend/cmake/feature-browserpanels.cmake

@@ -0,0 +1,18 @@
+if(TARGET OBS::browser-panels)
+  target_enable_feature(obs-studio "Browser panels" BROWSER_AVAILABLE)
+
+  target_link_libraries(obs-studio PRIVATE OBS::browser-panels)
+
+  target_sources(
+    obs-studio
+    PRIVATE
+      dialogs/OBSExtraBrowsers.cpp
+      dialogs/OBSExtraBrowsers.hpp
+      docks/BrowserDock.cpp
+      docks/BrowserDock.hpp
+      utility/ExtraBrowsersDelegate.cpp
+      utility/ExtraBrowsersDelegate.hpp
+      utility/ExtraBrowsersModel.cpp
+      utility/ExtraBrowsersModel.hpp
+  )
+endif()

+ 16 - 0
frontend/cmake/feature-importers.cmake

@@ -0,0 +1,16 @@
+target_sources(
+  obs-studio
+  PRIVATE
+    importer/ImporterEntryPathItemDelegate.cpp
+    importer/ImporterEntryPathItemDelegate.hpp
+    importer/ImporterModel.cpp
+    importer/ImporterModel.hpp
+    importer/OBSImporter.cpp
+    importer/OBSImporter.hpp
+    importers/classic.cpp
+    importers/importers.cpp
+    importers/importers.hpp
+    importers/sl.cpp
+    importers/studio.cpp
+    importers/xsplit.cpp
+)

+ 10 - 8
UI/cmake/feature-macos-update.cmake → frontend/cmake/feature-macos-update.cmake

@@ -9,14 +9,16 @@ endif()
 target_sources(
   obs-studio
   PRIVATE
-    update/crypto-helpers-mac.mm
-    update/crypto-helpers.hpp
-    update/models/branches.hpp
-    update/models/whatsnew.hpp
-    update/shared-update.cpp
-    update/shared-update.hpp
-    update/update-helpers.cpp
-    update/update-helpers.hpp
+    utility/crypto-helpers-mac.mm
+    utility/crypto-helpers.hpp
+    utility/models/branches.hpp
+    utility/models/whatsnew.hpp
+    utility/update-helpers.cpp
+    utility/update-helpers.hpp
+    utility/WhatsNewBrowserInitThread.cpp
+    utility/WhatsNewBrowserInitThread.hpp
+    utility/WhatsNewInfoThread.cpp
+    utility/WhatsNewInfoThread.hpp
 )
 
 target_link_libraries(

+ 1 - 1
UI/cmake/feature-restream.cmake → frontend/cmake/feature-restream.cmake

@@ -1,5 +1,5 @@
 if(RESTREAM_CLIENTID AND RESTREAM_HASH MATCHES "^(0|[a-fA-F0-9]+)$" AND TARGET OBS::browser-panels)
-  target_sources(obs-studio PRIVATE auth-restream.cpp auth-restream.hpp)
+  target_sources(obs-studio PRIVATE oauth/RestreamAuth.cpp oauth/RestreamAuth.hpp)
   target_enable_feature(obs-studio "Restream API connection" RESTREAM_ENABLED)
 else()
   target_disable_feature(obs-studio "Restream API connection")

+ 11 - 2
UI/cmake/feature-sparkle.cmake → frontend/cmake/feature-sparkle.cmake

@@ -1,8 +1,17 @@
 if(SPARKLE_APPCAST_URL AND SPARKLE_PUBLIC_KEY)
   find_library(SPARKLE Sparkle)
   mark_as_advanced(SPARKLE)
-  target_sources(obs-studio PRIVATE update/mac-update.cpp update/mac-update.hpp update/sparkle-updater.mm)
-  set_source_files_properties(update/sparkle-updater.mm PROPERTIES COMPILE_FLAGS -fobjc-arc)
+  target_sources(
+    obs-studio
+    PRIVATE
+      utility/MacUpdateThread.cpp
+      utility/MacUpdateThread.hpp
+      utility/OBSSparkle.hpp
+      utility/OBSSparkle.mm
+      utility/OBSUpdateDelegate.h
+      utility/OBSUpdateDelegate.mm
+  )
+  set_source_files_properties(utility/OBSSparkle.mm PROPERTIES COMPILE_FLAGS -fobjc-arc)
 
   target_link_libraries(obs-studio PRIVATE "$<LINK_LIBRARY:FRAMEWORK,${SPARKLE}>")
 

+ 1 - 1
UI/cmake/feature-twitch.cmake → frontend/cmake/feature-twitch.cmake

@@ -1,5 +1,5 @@
 if(TWITCH_CLIENTID AND TWITCH_HASH MATCHES "^(0|[a-fA-F0-9]+)$" AND TARGET OBS::browser-panels)
-  target_sources(obs-studio PRIVATE auth-twitch.cpp auth-twitch.hpp)
+  target_sources(obs-studio PRIVATE oauth/TwitchAuth.cpp oauth/TwitchAuth.hpp)
   target_enable_feature(obs-studio "Twitch API connection" TWITCH_ENABLED)
 else()
   target_disable_feature(obs-studio "Twitch API connection")

+ 9 - 7
UI/cmake/feature-whatsnew.cmake → frontend/cmake/feature-whatsnew.cmake

@@ -20,13 +20,15 @@ if(ENABLE_WHATSNEW AND TARGET OBS::browser-panels)
     target_sources(
       obs-studio
       PRIVATE
-        update/crypto-helpers-mbedtls.cpp
-        update/crypto-helpers.hpp
-        update/models/whatsnew.hpp
-        update/shared-update.cpp
-        update/shared-update.hpp
-        update/update-helpers.cpp
-        update/update-helpers.hpp
+        utility/crypto-helpers-mbedtls.cpp
+        utility/crypto-helpers.hpp
+        utility/models/whatsnew.hpp
+        utility/update-helpers.cpp
+        utility/update-helpers.hpp
+        utility/WhatsNewBrowserInitThread.cpp
+        utility/WhatsNewBrowserInitThread.hpp
+        utility/WhatsNewInfoThread.cpp
+        utility/WhatsNewInfoThread.hpp
     )
   endif()
 

+ 11 - 8
UI/cmake/feature-youtube.cmake → frontend/cmake/feature-youtube.cmake

@@ -8,14 +8,17 @@ if(
   target_sources(
     obs-studio
     PRIVATE
-      auth-youtube.cpp
-      auth-youtube.hpp
-      window-dock-youtube-app.cpp
-      window-dock-youtube-app.hpp
-      window-youtube-actions.cpp
-      window-youtube-actions.hpp
-      youtube-api-wrappers.cpp
-      youtube-api-wrappers.hpp
+      dialogs/OBSYoutubeActions.cpp
+      dialogs/OBSYoutubeActions.hpp
+      docks/YouTubeAppDock.cpp
+      docks/YouTubeAppDock.hpp
+      docks/YouTubeChatDock.cpp
+      docks/YouTubeChatDock.hpp
+      forms/OBSYoutubeActions.ui
+      oauth/YoutubeAuth.cpp
+      oauth/YoutubeAuth.hpp
+      utility/YoutubeApiWrappers.cpp
+      utility/YoutubeApiWrappers.hpp
   )
 
   target_enable_feature(obs-studio "YouTube API connection" YOUTUBE_ENABLED)

+ 0 - 0
UI/cmake/linux/com.obsproject.Studio.desktop → frontend/cmake/linux/com.obsproject.Studio.desktop


+ 0 - 0
UI/cmake/linux/com.obsproject.Studio.metainfo.xml.in → frontend/cmake/linux/com.obsproject.Studio.metainfo.xml.in


+ 0 - 0
UI/cmake/linux/icons/obs-logo-128.png → frontend/cmake/linux/icons/obs-logo-128.png


+ 0 - 0
UI/cmake/linux/icons/obs-logo-256.png → frontend/cmake/linux/icons/obs-logo-256.png


+ 0 - 0
UI/cmake/linux/icons/obs-logo-512.png → frontend/cmake/linux/icons/obs-logo-512.png


+ 0 - 0
UI/cmake/linux/icons/obs-logo-scalable.svg → frontend/cmake/linux/icons/obs-logo-scalable.svg


+ 0 - 0
UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/Contents.json → frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/Contents.json


+ 0 - 0
UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_128x128.png → frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_128x128.png


+ 0 - 0
UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected] → frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected]


+ 0 - 0
UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_16x16.png → frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_16x16.png


+ 0 - 0
UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected] → frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected]


+ 0 - 0
UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_256x256.png → frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_256x256.png


+ 0 - 0
UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected] → frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected]


+ 0 - 0
UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_32x32.png → frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_32x32.png


+ 0 - 0
UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected] → frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected]


+ 0 - 0
UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_512x512.png → frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_512x512.png


+ 0 - 0
UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected] → frontend/cmake/macos/Assets.xcassets/AppIcon.appiconset/[email protected]


+ 0 - 0
UI/cmake/macos/Assets.xcassets/Contents.json → frontend/cmake/macos/Assets.xcassets/Contents.json


+ 0 - 0
UI/cmake/macos/Info.plist.in → frontend/cmake/macos/Info.plist.in


+ 0 - 0
UI/cmake/macos/entitlements-extension.plist → frontend/cmake/macos/entitlements-extension.plist


+ 0 - 0
UI/cmake/macos/entitlements.plist → frontend/cmake/macos/entitlements.plist


+ 0 - 0
UI/cmake/macos/exportOptions-extension.plist.in → frontend/cmake/macos/exportOptions-extension.plist.in


+ 0 - 0
UI/cmake/macos/exportOptions.plist.in → frontend/cmake/macos/exportOptions.plist.in


+ 0 - 0
UI/cmake/macos/qt.conf → frontend/cmake/macos/qt.conf


+ 1 - 3
UI/cmake/os-freebsd.cmake → frontend/cmake/os-freebsd.cmake

@@ -1,9 +1,7 @@
-target_sources(obs-studio PRIVATE platform-x11.cpp)
+target_sources(obs-studio PRIVATE utility/platform-x11.cpp utility/system-info-posix.cpp)
 target_compile_definitions(obs-studio PRIVATE OBS_INSTALL_PREFIX="${OBS_INSTALL_PREFIX}")
 target_link_libraries(obs-studio PRIVATE Qt::GuiPrivate Qt::DBus procstat)
 
-target_sources(obs-studio PRIVATE system-info-posix.cpp)
-
 if(TARGET OBS::python)
   find_package(Python REQUIRED COMPONENTS Interpreter Development)
   target_link_libraries(obs-studio PRIVATE Python::Python)

+ 1 - 3
UI/cmake/os-linux.cmake → frontend/cmake/os-linux.cmake

@@ -1,12 +1,10 @@
-target_sources(obs-studio PRIVATE platform-x11.cpp)
+target_sources(obs-studio PRIVATE utility/platform-x11.cpp utility/system-info-posix.cpp)
 target_compile_definitions(
   obs-studio
   PRIVATE OBS_INSTALL_PREFIX="${OBS_INSTALL_PREFIX}" $<$<BOOL:${ENABLE_PORTABLE_CONFIG}>:ENABLE_PORTABLE_CONFIG>
 )
 target_link_libraries(obs-studio PRIVATE Qt::GuiPrivate Qt::DBus)
 
-target_sources(obs-studio PRIVATE system-info-posix.cpp)
-
 if(TARGET OBS::python)
   find_package(Python REQUIRED COMPONENTS Interpreter Development)
   target_link_libraries(obs-studio PRIVATE Python::Python)

+ 9 - 3
UI/cmake/os-macos.cmake → frontend/cmake/os-macos.cmake

@@ -1,10 +1,16 @@
 include(cmake/feature-sparkle.cmake)
 
-target_sources(obs-studio PRIVATE platform-osx.mm forms/OBSPermissions.ui window-permissions.cpp window-permissions.hpp)
+target_sources(
+  obs-studio
+  PRIVATE
+    dialogs/OBSPermissions.cpp
+    dialogs/OBSPermissions.hpp
+    forms/OBSPermissions.ui
+    utility/platform-osx.mm
+    utility/system-info-macos.mm
+)
 target_compile_options(obs-studio PRIVATE -Wno-quoted-include-in-framework-header -Wno-comma)
 
-target_sources(obs-studio PRIVATE system-info-macos.mm)
-
 set_source_files_properties(platform-osx.mm PROPERTIES COMPILE_FLAGS -fobjc-arc)
 
 if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 14.0.3)

+ 32 - 26
UI/cmake/os-windows.cmake → frontend/cmake/os-windows.cmake

@@ -18,42 +18,48 @@ target_sources(
   obs-studio
   PRIVATE
     cmake/windows/obs.manifest
+    dialogs/OBSUpdate.cpp
+    dialogs/OBSUpdate.hpp
+    forms/OBSUpdate.ui
     obs.rc
-    platform-windows.cpp
-    update/crypto-helpers-mbedtls.cpp
-    update/crypto-helpers.hpp
-    update/models/branches.hpp
-    update/models/whatsnew.hpp
-    update/shared-update.cpp
-    update/shared-update.hpp
-    update/update-helpers.cpp
-    update/update-helpers.hpp
-    update/update-window.cpp
-    update/update-window.hpp
-    update/win-update.cpp
-    update/win-update.hpp
-    win-dll-blocklist.c
-    win-update/updater/manifest.hpp
+    utility/AutoUpdateThread.cpp
+    utility/AutoUpdateThread.hpp
+    utility/crypto-helpers-mbedtls.cpp
+    utility/crypto-helpers.hpp
+    utility/models/branches.hpp
+    utility/models/whatsnew.hpp
+    utility/platform-windows.cpp
+    utility/system-info-windows.cpp
+    utility/update-helpers.cpp
+    utility/update-helpers.hpp
+    utility/WhatsNewBrowserInitThread.cpp
+    utility/WhatsNewBrowserInitThread.hpp
+    utility/WhatsNewInfoThread.cpp
+    utility/WhatsNewInfoThread.hpp
+    utility/win-dll-blocklist.c
 )
 
-target_sources(obs-studio PRIVATE system-info-windows.cpp)
+add_library(obs-updater-manifest INTERFACE)
+add_library(OBS::updater-manifest ALIAS obs-updater-manifest)
+
+target_sources(obs-updater-manifest INTERFACE updater/manifest.hpp)
 
 target_link_libraries(
   obs-studio
-  PRIVATE crypt32 OBS::blake2 OBS::w32-pthreads MbedTLS::mbedtls nlohmann_json::nlohmann_json Detours::Detours
+  PRIVATE
+    crypt32
+    OBS::blake2
+    OBS::updater-manifest
+    OBS::w32-pthreads
+    MbedTLS::mbedtls
+    nlohmann_json::nlohmann_json
+    Detours::Detours
 )
 
 target_compile_definitions(obs-studio PRIVATE PSAPI_VERSION=2)
 
 target_link_options(obs-studio PRIVATE /IGNORE:4099 $<$<CONFIG:DEBUG>:/NODEFAULTLIB:MSVCRT>)
 
-add_library(obs-update-helpers INTERFACE)
-add_library(OBS::update-helpers ALIAS obs-update-helpers)
-
-target_sources(obs-update-helpers INTERFACE win-update/win-update-helpers.cpp win-update/win-update-helpers.hpp)
-
-target_include_directories(obs-update-helpers INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/win-update")
-
 # Set commit for untagged version comparisons in the Windows updater
 if(OBS_VERSION MATCHES ".+g[a-f0-9]+.*")
   string(REGEX REPLACE ".+g([a-f0-9]+).*$" "\\1" OBS_COMMIT ${OBS_VERSION})
@@ -61,9 +67,9 @@ else()
   set(OBS_COMMIT "")
 endif()
 
-set_source_files_properties(update/win-update.cpp PROPERTIES COMPILE_DEFINITIONS OBS_COMMIT="${OBS_COMMIT}")
+set_source_files_properties(utility/AutoUpdateThread.cpp PROPERTIES COMPILE_DEFINITIONS OBS_COMMIT="${OBS_COMMIT}")
 
-add_subdirectory(win-update/updater)
+add_subdirectory(updater)
 
 set_property(TARGET obs-studio APPEND PROPERTY AUTORCC_OPTIONS --format-version 1)
 

+ 0 - 0
UI/ui-config.h.in → frontend/cmake/templates/ui-config.h.in


+ 85 - 0
frontend/cmake/ui-components.cmake

@@ -0,0 +1,85 @@
+if(NOT TARGET OBS::qt-slider-ignorewheel)
+  add_subdirectory(
+    "${CMAKE_SOURCE_DIR}/shared/qt/slider-ignorewheel"
+    "${CMAKE_BINARY_DIR}/shared/qt/slider-ignorewheel"
+  )
+endif()
+
+target_link_libraries(obs-studio PRIVATE OBS::qt-slider-ignorewheel)
+
+target_sources(
+  obs-studio
+  PRIVATE
+    components/AbsoluteSlider.cpp
+    components/AbsoluteSlider.hpp
+    components/ApplicationAudioCaptureToolbar.cpp
+    components/ApplicationAudioCaptureToolbar.hpp
+    components/AudioCaptureToolbar.cpp
+    components/AudioCaptureToolbar.hpp
+    components/BalanceSlider.hpp
+    components/BrowserToolbar.cpp
+    components/BrowserToolbar.hpp
+    components/ClickableLabel.hpp
+    components/ColorSourceToolbar.cpp
+    components/ColorSourceToolbar.hpp
+    components/ComboSelectToolbar.cpp
+    components/ComboSelectToolbar.hpp
+    components/DelButton.hpp
+    components/DeviceCaptureToolbar.cpp
+    components/DeviceCaptureToolbar.hpp
+    components/DisplayCaptureToolbar.cpp
+    components/DisplayCaptureToolbar.hpp
+    components/EditWidget.hpp
+    components/FocusList.cpp
+    components/FocusList.hpp
+    components/GameCaptureToolbar.cpp
+    components/GameCaptureToolbar.hpp
+    components/HScrollArea.cpp
+    components/HScrollArea.hpp
+    components/ImageSourceToolbar.cpp
+    components/ImageSourceToolbar.hpp
+    components/MediaControls.cpp
+    components/MediaControls.hpp
+    components/MenuButton.cpp
+    components/MenuButton.hpp
+    components/Multiview.cpp
+    components/Multiview.hpp
+    components/MuteCheckBox.hpp
+    components/NonCheckableButton.hpp
+    components/OBSAdvAudioCtrl.cpp
+    components/OBSAdvAudioCtrl.hpp
+    components/OBSPreviewScalingComboBox.cpp
+    components/OBSPreviewScalingComboBox.hpp
+    components/OBSPreviewScalingLabel.cpp
+    components/OBSPreviewScalingLabel.hpp
+    components/OBSSourceLabel.cpp
+    components/OBSSourceLabel.hpp
+    components/SceneTree.cpp
+    components/SceneTree.hpp
+    components/SilentUpdateCheckBox.hpp
+    components/SilentUpdateSpinBox.hpp
+    components/SourceToolbar.cpp
+    components/SourceToolbar.hpp
+    components/SourceTree.cpp
+    components/SourceTree.hpp
+    components/SourceTreeDelegate.cpp
+    components/SourceTreeDelegate.hpp
+    components/SourceTreeItem.cpp
+    components/SourceTreeItem.hpp
+    components/SourceTreeModel.cpp
+    components/SourceTreeModel.hpp
+    components/TextSourceToolbar.cpp
+    components/TextSourceToolbar.hpp
+    components/UIValidation.cpp
+    components/UIValidation.hpp
+    components/UrlPushButton.cpp
+    components/UrlPushButton.hpp
+    components/VisibilityItemDelegate.cpp
+    components/VisibilityItemDelegate.hpp
+    components/VisibilityItemWidget.cpp
+    components/VisibilityItemWidget.hpp
+    components/VolumeSlider.cpp
+    components/VolumeSlider.hpp
+    components/WindowCaptureToolbar.cpp
+    components/WindowCaptureToolbar.hpp
+)

+ 40 - 0
frontend/cmake/ui-dialogs.cmake

@@ -0,0 +1,40 @@
+if(NOT TARGET OBS::properties-view)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/properties-view" "${CMAKE_BINARY_DIR}/shared/properties-view")
+endif()
+
+target_link_libraries(obs-studio PRIVATE OBS::properties-view)
+
+target_sources(
+  obs-studio
+  PRIVATE
+    dialogs/NameDialog.cpp
+    dialogs/NameDialog.hpp
+    dialogs/OAuthLogin.cpp
+    dialogs/OAuthLogin.hpp
+    dialogs/OBSAbout.cpp
+    dialogs/OBSAbout.hpp
+    dialogs/OBSBasicAdvAudio.cpp
+    dialogs/OBSBasicAdvAudio.hpp
+    dialogs/OBSBasicFilters.cpp
+    dialogs/OBSBasicFilters.hpp
+    dialogs/OBSBasicInteraction.cpp
+    dialogs/OBSBasicInteraction.hpp
+    dialogs/OBSBasicProperties.cpp
+    dialogs/OBSBasicProperties.hpp
+    dialogs/OBSBasicSourceSelect.cpp
+    dialogs/OBSBasicSourceSelect.hpp
+    dialogs/OBSBasicTransform.cpp
+    dialogs/OBSBasicTransform.hpp
+    dialogs/OBSBasicVCamConfig.cpp
+    dialogs/OBSBasicVCamConfig.hpp
+    dialogs/OBSLogReply.cpp
+    dialogs/OBSLogReply.hpp
+    dialogs/OBSLogViewer.cpp
+    dialogs/OBSLogViewer.hpp
+    dialogs/OBSMissingFiles.cpp
+    dialogs/OBSMissingFiles.hpp
+    dialogs/OBSRemux.cpp
+    dialogs/OBSRemux.hpp
+    dialogs/OBSWhatsNew.cpp
+    dialogs/OBSWhatsNew.hpp
+)

+ 1 - 0
frontend/cmake/ui-docks.cmake

@@ -0,0 +1 @@
+target_sources(obs-studio PRIVATE docks/OBSDock.cpp docks/OBSDock.hpp)

+ 4 - 0
frontend/cmake/ui-oauth.cmake

@@ -0,0 +1,4 @@
+target_sources(
+  obs-studio
+  PRIVATE oauth/Auth.cpp oauth/Auth.hpp oauth/AuthListener.cpp oauth/AuthListener.hpp oauth/OAuth.cpp oauth/OAuth.hpp
+)

+ 58 - 0
frontend/cmake/ui-qt.cmake

@@ -0,0 +1,58 @@
+find_package(Qt6 REQUIRED Widgets Network Svg Xml)
+
+if(OS_LINUX OR OS_FREEBSD OR OS_OPENBSD)
+  find_package(Qt6 REQUIRED Gui DBus)
+endif()
+
+if(NOT TARGET OBS::qt-wrappers)
+  add_subdirectory("${CMAKE_SOURCE_DIR}/shared/qt/wrappers" "${CMAKE_BINARY_DIR}/shared/qt/wrappers")
+endif()
+
+target_link_libraries(
+  obs-studio
+  PRIVATE Qt::Widgets Qt::Svg Qt::Xml Qt::Network OBS::qt-wrappers
+)
+
+set_target_properties(
+  obs-studio
+  PROPERTIES AUTOMOC TRUE AUTOUIC TRUE AUTORCC TRUE AUTOGEN_PARALLEL AUTO
+)
+
+set_property(TARGET obs-studio APPEND PROPERTY AUTOUIC_SEARCH_PATHS forms forms/source-toolbar)
+
+target_sources(
+  obs-studio
+  PRIVATE
+    forms/AutoConfigFinishPage.ui
+    forms/AutoConfigStartPage.ui
+    forms/AutoConfigStartPage.ui
+    forms/AutoConfigStreamPage.ui
+    forms/AutoConfigTestPage.ui
+    forms/AutoConfigVideoPage.ui
+    forms/ColorSelect.ui
+    forms/obs.qrc
+    forms/OBSAbout.ui
+    forms/OBSAdvAudio.ui
+    forms/OBSBasic.ui
+    forms/OBSBasicControls.ui
+    forms/OBSBasicFilters.ui
+    forms/OBSBasicInteraction.ui
+    forms/OBSBasicProperties.ui
+    forms/OBSBasicSettings.ui
+    forms/OBSBasicSourceSelect.ui
+    forms/OBSBasicVCamConfig.ui
+    forms/OBSExtraBrowsers.ui
+    forms/OBSImporter.ui
+    forms/OBSLogReply.ui
+    forms/OBSLogReply.ui
+    forms/OBSMissingFiles.ui
+    forms/OBSRemux.ui
+    forms/source-toolbar/browser-source-toolbar.ui
+    forms/source-toolbar/color-source-toolbar.ui
+    forms/source-toolbar/device-select-toolbar.ui
+    forms/source-toolbar/game-capture-toolbar.ui
+    forms/source-toolbar/image-source-toolbar.ui
+    forms/source-toolbar/media-controls.ui
+    forms/source-toolbar/text-source-toolbar.ui
+    forms/StatusBarWidget.ui
+)

+ 15 - 0
frontend/cmake/ui-settings.cmake

@@ -0,0 +1,15 @@
+target_sources(
+  obs-studio
+  PRIVATE
+    settings/OBSBasicSettings_A11y.cpp
+    settings/OBSBasicSettings_Appearance.cpp
+    settings/OBSBasicSettings_Stream.cpp
+    settings/OBSBasicSettings.cpp
+    settings/OBSBasicSettings.hpp
+    settings/OBSHotkeyEdit.cpp
+    settings/OBSHotkeyEdit.hpp
+    settings/OBSHotkeyLabel.cpp
+    settings/OBSHotkeyLabel.hpp
+    settings/OBSHotkeyWidget.cpp
+    settings/OBSHotkeyWidget.hpp
+)

+ 69 - 0
frontend/cmake/ui-utility.cmake

@@ -0,0 +1,69 @@
+target_sources(
+  obs-studio
+  PRIVATE
+    utility/AdvancedOutput.cpp
+    utility/AdvancedOutput.hpp
+    utility/audio-encoders.cpp
+    utility/audio-encoders.hpp
+    utility/BaseLexer.hpp
+    utility/BasicOutputHandler.cpp
+    utility/BasicOutputHandler.hpp
+    utility/display-helpers.hpp
+    utility/FFmpegCodec.cpp
+    utility/FFmpegCodec.hpp
+    utility/FFmpegFormat.cpp
+    utility/FFmpegFormat.hpp
+    utility/FFmpegShared.hpp
+    utility/GoLiveAPI_CensoredJson.cpp
+    utility/GoLiveAPI_CensoredJson.hpp
+    utility/GoLiveAPI_Network.cpp
+    utility/GoLiveAPI_Network.hpp
+    utility/GoLiveAPI_PostData.cpp
+    utility/GoLiveAPI_PostData.hpp
+    utility/item-widget-helpers.cpp
+    utility/item-widget-helpers.hpp
+    utility/MissingFilesModel.cpp
+    utility/MissingFilesModel.hpp
+    utility/MissingFilesPathItemDelegate.cpp
+    utility/MissingFilesPathItemDelegate.hpp
+    utility/models/multitrack-video.hpp
+    utility/MultitrackVideoError.cpp
+    utility/MultitrackVideoError.hpp
+    utility/MultitrackVideoOutput.cpp
+    utility/MultitrackVideoOutput.hpp
+    utility/obf.c
+    utility/obf.h
+    utility/OBSEventFilter.hpp
+    utility/OBSProxyStyle.cpp
+    utility/OBSProxyStyle.hpp
+    utility/OBSTheme.hpp
+    utility/OBSThemeVariable.hpp
+    utility/OBSTranslator.cpp
+    utility/OBSTranslator.hpp
+    utility/platform.hpp
+    utility/QuickTransition.cpp
+    utility/QuickTransition.hpp
+    utility/RemoteTextThread.cpp
+    utility/RemoteTextThread.hpp
+    utility/RemuxEntryPathItemDelegate.cpp
+    utility/RemuxEntryPathItemDelegate.hpp
+    utility/RemuxQueueModel.cpp
+    utility/RemuxQueueModel.hpp
+    utility/RemuxWorker.cpp
+    utility/RemuxWorker.hpp
+    utility/SceneRenameDelegate.cpp
+    utility/SceneRenameDelegate.hpp
+    utility/ScreenshotObj.cpp
+    utility/ScreenshotObj.hpp
+    utility/SettingsEventFilter.hpp
+    utility/SimpleOutput.cpp
+    utility/SimpleOutput.hpp
+    utility/StartMultiTrackVideoStreamingGuard.hpp
+    utility/SurfaceEventFilter.hpp
+    utility/system-info.hpp
+    utility/undo_stack.cpp
+    utility/undo_stack.hpp
+    utility/VCamConfig.hpp
+    utility/VolumeMeterTimer.cpp
+    utility/VolumeMeterTimer.hpp
+)

+ 66 - 0
frontend/cmake/ui-widgets.cmake

@@ -0,0 +1,66 @@
+if(NOT TARGET OBS::qt-vertical-scroll-area)
+  add_subdirectory(
+    "${CMAKE_SOURCE_DIR}/shared/qt/vertical-scroll-area"
+    "${CMAKE_BINARY_DIR}/shared/qt/vertical-scroll-area"
+  )
+endif()
+
+target_link_libraries(obs-studio PRIVATE OBS::qt-vertical-scroll-area)
+
+target_sources(
+  obs-studio
+  PRIVATE
+    widgets/ColorSelect.cpp
+    widgets/ColorSelect.hpp
+    widgets/OBSBasic.cpp
+    widgets/OBSBasic.hpp
+    widgets/OBSBasic_Browser.cpp
+    widgets/OBSBasic_Clipboard.cpp
+    widgets/OBSBasic_ContextToolbar.cpp
+    widgets/OBSBasic_Docks.cpp
+    widgets/OBSBasic_Dropfiles.cpp
+    widgets/OBSBasic_Hotkeys.cpp
+    widgets/OBSBasic_Icons.cpp
+    widgets/OBSBasic_MainControls.cpp
+    widgets/OBSBasic_OutputHandler.cpp
+    widgets/OBSBasic_Preview.cpp
+    widgets/OBSBasic_Profiles.cpp
+    widgets/OBSBasic_Projectors.cpp
+    widgets/OBSBasic_Recording.cpp
+    widgets/OBSBasic_ReplayBuffer.cpp
+    widgets/OBSBasic_SceneCollections.cpp
+    widgets/OBSBasic_SceneItems.cpp
+    widgets/OBSBasic_Scenes.cpp
+    widgets/OBSBasic_Screenshots.cpp
+    widgets/OBSBasic_Service.cpp
+    widgets/OBSBasic_StatusBar.cpp
+    widgets/OBSBasic_Streaming.cpp
+    widgets/OBSBasic_StudioMode.cpp
+    widgets/OBSBasic_SysTray.cpp
+    widgets/OBSBasic_Transitions.cpp
+    widgets/OBSBasic_Updater.cpp
+    widgets/OBSBasic_VirtualCam.cpp
+    widgets/OBSBasic_VolControl.cpp
+    widgets/OBSBasic_YouTube.cpp
+    widgets/OBSBasicControls.cpp
+    widgets/OBSBasicControls.hpp
+    widgets/OBSBasicPreview.cpp
+    widgets/OBSBasicPreview.hpp
+    widgets/OBSBasicStats.cpp
+    widgets/OBSBasicStats.hpp
+    widgets/OBSBasicStatusBar.cpp
+    widgets/OBSBasicStatusBar.hpp
+    widgets/OBSMainWindow.hpp
+    widgets/OBSProjector.cpp
+    widgets/OBSProjector.hpp
+    widgets/OBSQTDisplay.cpp
+    widgets/OBSQTDisplay.hpp
+    widgets/StatusBarWidget.cpp
+    widgets/StatusBarWidget.hpp
+    widgets/VolControl.cpp
+    widgets/VolControl.hpp
+    widgets/VolumeAccessibleInterface.cpp
+    widgets/VolumeAccessibleInterface.hpp
+    widgets/VolumeMeter.cpp
+    widgets/VolumeMeter.hpp
+)

+ 15 - 0
frontend/cmake/ui-wizards.cmake

@@ -0,0 +1,15 @@
+target_sources(
+  obs-studio
+  PRIVATE
+    wizards/AutoConfig.cpp
+    wizards/AutoConfig.hpp
+    wizards/AutoConfigStartPage.cpp
+    wizards/AutoConfigStartPage.hpp
+    wizards/AutoConfigStreamPage.cpp
+    wizards/AutoConfigStreamPage.hpp
+    wizards/AutoConfigTestPage.cpp
+    wizards/AutoConfigTestPage.hpp
+    wizards/AutoConfigVideoPage.cpp
+    wizards/AutoConfigVideoPage.hpp
+    wizards/TestMode.hpp
+)

+ 0 - 0
UI/cmake/windows/obs-studio.ico → frontend/cmake/windows/obs-studio.ico


+ 0 - 0
UI/cmake/windows/obs.manifest → frontend/cmake/windows/obs.manifest


+ 0 - 0
UI/cmake/windows/obs.rc.in → frontend/cmake/windows/obs.rc.in