diff --git a/.github/actions/set-suffix/action.yml b/.github/actions/set-suffix/action.yml index 1c2d6962..5a33d91d 100644 --- a/.github/actions/set-suffix/action.yml +++ b/.github/actions/set-suffix/action.yml @@ -25,12 +25,12 @@ runs: if [[ $GITHUB_REF == *"refs/tags/"* ]] then echo "Found Tag : ${GITHUB_REF#refs/tags/}" - echo "::set-output name=suffix::${{ inputs.os }}-${GITHUB_REF#refs/tags/}" - echo "::set-output name=config::Release" - echo "::set-output name=dep::release" + echo "suffix=${{ inputs.os }}-${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT + echo "config=Release" >> $GITHUB_OUTPUT + echo "dep=release" >> $GITHUB_OUTPUT else - echo "::set-output name=suffix::${{ inputs.os }}-bleedingedge" - echo "::set-output name=config::Release" - echo "::set-output name=dep::release" + echo "suffix=${{ inputs.os }}-bleedingedge" >> $GITHUB_OUTPUT + echo "config=Release" >> $GITHUB_OUTPUT + echo "dep=release" >> $GITHUB_OUTPUT fi shell: bash diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6f512ec6..c4000b92 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,15 +7,15 @@ env: jobs: windows: name: Windows - #if: false # always skip job (heap space needs fix) - runs-on: windows-2019 + # if: false # always skip job + runs-on: windows-2022 strategy: matrix: include: - arch: win-x64 - buildFolder: "VisualStudio2019_CI" + buildFolder: "VisualStudio2022_CI" installerName: install - + fail-fast: false steps: @@ -43,9 +43,9 @@ jobs: - name: Force 64-bit Linker shell: powershell run: | - cmd.exe /c "call `"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat`" && set > %temp%\vcvars.txt" + cmd.exe /c "call `"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat`" && set > %temp%\vcvars.txt" Get-Content "$env:temp\vcvars.txt" | Foreach-Object { if ($_ -match "^(.*?)=(.*)$") { Set-Content "env:\$($matches[1])" $matches[2] }} - + - name: Build run: msbuild "Builds/${{ matrix.buildFolder }}/${{ env.ProjectName }}.sln" /p:PreferredToolArchitecture=x64 /m /verbosity:normal /p:Configuration=${{ steps.set_variables.outputs.config }} @@ -57,8 +57,8 @@ jobs: Invoke-WebRequest "${{ secrets.DEPDIRURL }}${{ env.ProjectName }}-win-x64-${{ steps.set_variables.outputs.dep }}-dependencies.zip" -OutFile ./deps.zip 7z e deps.zip -aoa &"C:/Program Files (x86)/Inno Setup 6/ISCC.exe" "${{ github.workspace }}/${{ matrix.installerName }}.iss" /O. /F$PKGNAME - echo "::set-output name=pkg-name::$PKGNAME.exe" - echo "::set-output name=pdb-name::$PKGNAME.pdb" + echo "pkg-name=$PKGNAME.exe" | Out-File -FilePath $Env:GITHUB_OUTPUT -Encoding utf8 -Append + echo "pdb-name=$PKGNAME.pdb" | Out-File -FilePath $Env:GITHUB_OUTPUT -Encoding utf8 -Append working-directory: ./Binaries/CI/App - name: Upload @@ -77,8 +77,7 @@ jobs: working-directory: ./Builds/${{ matrix.buildFolder }}/x64/${{ steps.set_variables.outputs.config }}/App - name: Upload PDB - if: false #force no upload for Bento right now - #if: ${{ steps.set_variables.outputs.config == 'Release' && matrix.arch == 'win-x64' }} + if: ${{ steps.set_variables.outputs.config == 'Release' && matrix.arch == 'win-x64' }} uses: ./.github/actions/upload with: pkg-name: ./Builds/${{ matrix.buildFolder }}/x64/${{ steps.set_variables.outputs.config }}/App/${{ steps.create_package.outputs.pdb-name }} @@ -86,9 +85,22 @@ jobs: pass: ${{ secrets.UPLOADPASS }} osx: - #if: false # tmp disable + # if: false # tmp disable name: OSX runs-on: macos-latest + + strategy: + matrix: + include: + - arch: x86_64 + suffix: intel + config: Release + + - arch: arm64 + suffix: silicon + config: ReleaseSilicon + + fail-fast: false steps: - name: Checkout repo @@ -107,7 +119,7 @@ jobs: id: set_variables uses: ./.github/actions/set-suffix with: - os: 'osx' + os: 'osx-${{ matrix.suffix }}' - name: Download Packages run: | @@ -117,13 +129,14 @@ jobs: hdiutil detach "/Volumes/Packages ${{ env.PackagesVersion }}/" - name: Build - uses: sersoft-gmbh/xcodebuild-action@v1.3 + uses: sersoft-gmbh/xcodebuild-action@v2.0.1 with: project: Builds/MacOSX_CI/${{ env.ProjectName }}.xcodeproj destination: platform=macOS jobs: 2 action: build - configuration: Release + arch: ${{ matrix.arch }} + configuration: ${{ matrix.config }} use-xcpretty: true - name: Create Package @@ -132,7 +145,7 @@ jobs: packagesbuild ${{ env.ProjectName }}.pkgproj PKGNAME=${{ env.ProjectName }}-${{ steps.set_variables.outputs.suffix }}.pkg mv ${{ env.ProjectName }}.pkg $PKGNAME - echo "::set-output name=pkg-name::$PKGNAME" + echo "pkg-name=$PKGNAME" >> $GITHUB_OUTPUT working-directory: ./Package - name: Upload @@ -143,19 +156,11 @@ jobs: pass: ${{ secrets.UPLOADPASS }} linux: - #if: false # tmp disable + # if: false # tmp disable name: Linux - runs-on: ubuntu-18.04 - strategy: - matrix: - include: - - arch: linux-x64 - buildFolder: "LinuxMakefile" - - - arch: linux-armhf - buildFolder: "Raspberry" - fail-fast: false + runs-on: ubuntu-22.04 + container: tommagnier/chataigne-linux-x64-build steps: - name: Checkout repo @@ -174,65 +179,39 @@ jobs: id: set_variables uses: ./.github/actions/set-suffix with: - os: ${{ matrix.arch }} + os: 'x64' - name: Installing dependencies id: install_deps #shell: bash {0} # Opt out of fail-fast behavior (necessary to ignore fetch errors) run: | - echo "Target system architecture: ${{ matrix.arch }}" - if [ "${{ matrix.arch }}" == "linux-armhf" ]; - then - sudo tee /etc/apt/sources.list << END - deb [arch=amd64] http://us.archive.ubuntu.com/ubuntu/ bionic main restricted universe multiverse - deb [arch=amd64] http://us.archive.ubuntu.com/ubuntu/ bionic-updates main restricted universe multiverse - deb [arch=amd64] http://us.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse - deb [arch=amd64] http://security.ubuntu.com/ubuntu bionic-security main restricted universe multiverse - - deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted universe multiverse - deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main restricted universe multiverse - deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ bionic-backports main restricted universe multiverse - deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ bionic-security main restricted universe multiverse - END - - sudo dpkg --add-architecture armhf - - sudo apt-get update - echo "Installing armhf cross compilation tools" - sudo apt-get install -qy g++-arm-linux-gnueabihf - - echo "Installing extra lib dependencies" - sudo apt-get install -qyf libgdk-pixbuf2.0-dev:armhf libpango1.0-dev:armhf libsoup2.4-dev:armhf libharfbuzz-dev:armhf libxml2-dev:armhf libicu-dev:armhf libc6-dev:armhf libxft-dev:armhf - - echo "Downloading AppImage runtime for armhf" - cd ${{ github.workspace }} - wget "https://github.com/AppImage/AppImageKit/releases/download/12/runtime-armhf" - echo "::set-output name=appImageRuntime::--runtime-file ${{ github.workspace }}/runtime-armhf" - - # DEP_ARCH is used later when downloading the dependencies - DEP_ARCH="armhf" - fi - - sudo apt-get update - echo "Installing JUCE lib dependencies and extra tools" - sudo apt-get install -qyf libfreetype6-dev:$DEP_ARCH libx11-dev:$DEP_ARCH libxinerama-dev:$DEP_ARCH libxrandr-dev:$DEP_ARCH libxcursor-dev:$DEP_ARCH libxcomposite-dev:$DEP_ARCH mesa-common-dev:$DEP_ARCH libasound2-dev:$DEP_ARCH freeglut3-dev:$DEP_ARCH libcurl4-gnutls-dev:$DEP_ARCH libasound2-dev:$DEP_ARCH libjack-dev:$DEP_ARCH libbluetooth-dev:$DEP_ARCH libgtk-3-dev:$DEP_ARCH libwebkit2gtk-4.0-dev:$DEP_ARCH libsdl2-dev:$DEP_ARCH libfuse2:$DEP_ARCH libusb-1.0-0-dev:$DEP_ARCH libhidapi-dev:$DEP_ARCH - sudo apt-get install -qy curl + # Most dependencies are already installed in the Docker image. Uncomment the following lines if you need more + # apt-get update && apt-get install ... - cd ${{ github.workspace }} - wget "https://github.com/AppImage/AppImageKit/releases/download/12/appimagetool-x86_64.AppImage" + cd $GITHUB_WORKSPACE + wget "https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage" chmod a+x appimagetool-x86_64.AppImage + # - name: Start SSH via ngrok + # uses: P3TERX/ssh2actions@main + # with: + # mode: ngrok + # env: + # # After sign up on the https://ngrok.com + # # You can find this token here: https://dashboard.ngrok.com/auth/your-authtoken + # NGROK_TOKEN: ${{ secrets.NGROK_TOKEN }} + + # # ngrok server region [us, eu, au, ap, sa, jp, in] (optional, default: us) + # # You can find this server region here: https://ngrok.com/docs#global-locations + # NGROK_REGION: us + + # # This password you will use when authorizing via SSH + # SSH_PASSWORD: ${{ secrets.SSH_PASSWORD }} + - name: Build run: | - if [ "${{ matrix.arch }}" == "linux-armhf" ]; - then - export CXX=arm-linux-gnueabihf-g++ - export CC=arm-linux-gnueabihf-gcc - export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig - export TARGET_ARCH="-march=armv8-a" # TARGET_ARCH is used in the Makefile - fi - - cd ${{ github.workspace }}/Builds/${{ matrix.buildFolder }} + cd $GITHUB_WORKSPACE/Builds/LinuxMakefile + gcc --version make -j2 CONFIG=Release - name: Create AppImage @@ -241,9 +220,99 @@ jobs: mkdir -p ${{ env.ProjectName }}.AppDir/usr/bin/ cp build/${{ env.ProjectName }} ${{ env.ProjectName }}.AppDir/usr/bin/ - PKGNAME=${{ env.ProjectName }}-${{ steps.set_variables.outputs.suffix }}.AppImage - echo "::set-output name=pkg-name::$PKGNAME" - ${{ github.workspace }}/appimagetool-x86_64.AppImage ${{ steps.install_deps.outputs.appImageRuntime }} ${{ env.ProjectName }}.AppDir $PKGNAME + PKGNAME=${{ env.ProjectName }}-linux-${{ steps.set_variables.outputs.suffix }}.AppImage + echo "pkg-name=$PKGNAME" >> $GITHUB_OUTPUT + $GITHUB_WORKSPACE/appimagetool-x86_64.AppImage --appimage-extract-and-run ${{ env.ProjectName }}.AppDir $PKGNAME + working-directory: ./Builds/LinuxMakefile + + - name: Upload + uses: ./.github/actions/upload + with: + pkg-name: ./Builds/LinuxMakefile/${{ steps.create_package.outputs.pkg-name }} + url: ${{ secrets.UPLOADURL }} + pass: ${{ secrets.UPLOADPASS }} + + raspberrypi: + # if: false # tmp disable + + name: Raspberry Pi + runs-on: ubuntu-22.04 + strategy: + matrix: + include: + - arch: armhf + cpu: arm1176 #suitable for all Pi versions + base_image: raspios_lite:2021-05-07 + cpu_info: raspberrypi_zero_w + buildFolder: "Raspberry" + buildConfig: "Release" + + - arch: aarch64 + cpu: cortex-a53 + base_image: raspios_lite_arm64:2022-04-04 + cpu_info: raspberrypi_zero2_w_arm64_w + buildFolder: "Raspberry64" + buildConfig: "Release" + + fail-fast: false + + steps: + - name: Checkout repo + uses: actions/checkout@v2 + with: + submodules: 'recursive' + + - name: Checkout JUCE + uses: actions/checkout@v2 + with: + repository: benkuper/JUCE + ref: develop-local + path: JUCE + + - name: Set Suffix + id: set_variables + uses: ./.github/actions/set-suffix + with: + os: ${{ matrix.arch }} + + - name: Download and prepare AppImage + run: | + sudo apt-get update + sudo apt-get install libfuse2 # required on ubuntu 22.04 + + wget "https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage" + chmod a+x appimagetool-x86_64.AppImage + + echo "Downloading AppImage runtime for ${{ matrix.arch }}" + wget "https://github.com/AppImage/AppImageKit/releases/download/13/runtime-${{ matrix.arch }}" + + mkdir -p ./Builds/${{ matrix.buildFolder }}/${{ env.ProjectName }}.AppDir/usr/bin/ + working-directory: ${{ github.workspace }} + + - name: Install dependencies and build + id: build + uses: pguyot/arm-runner-action@v2 + with: + image_additional_mb: 2048 + base_image: ${{ matrix.base_image }} + cpu: ${{ matrix.cpu }} + copy_artifact_path: Builds/${{ matrix.buildFolder }}/build/${{ env.ProjectName }} + copy_artifact_dest: Builds/${{ matrix.buildFolder }}/${{ env.ProjectName }}.AppDir/usr/bin/ + commands: | + apt-get update + echo "Installing JUCE lib dependencies and extra tools" + apt-get install -qyf libcurl3-gnutls libfreetype6-dev libx11-dev libxinerama-dev libxrandr-dev libxcursor-dev libxcomposite-dev mesa-common-dev libasound2-dev freeglut3-dev libcurl4-gnutls-dev libasound2-dev libjack-dev libbluetooth-dev libgtk-3-dev libwebkit2gtk-4.0-dev libsdl2-dev libusb-1.0-0-dev libhidapi-dev ladspa-sdk libssl-dev + apt-get install -qy curl + + cd Builds/${{ matrix.buildFolder }} + make -j2 CONFIG=${{ matrix.buildConfig }} + + - name: Create AppImage + id: create_package + run: | + PKGNAME=${{ env.ProjectName }}-linux-${{ steps.set_variables.outputs.suffix }}.AppImage + echo "pkg-name=$PKGNAME" >> $GITHUB_OUTPUT + ${{ github.workspace }}/appimagetool-x86_64.AppImage --runtime-file ${{ github.workspace }}/runtime-${{ matrix.arch }} ${{ env.ProjectName }}.AppDir $PKGNAME working-directory: ./Builds/${{ matrix.buildFolder }} - name: Upload @@ -251,4 +320,4 @@ jobs: with: pkg-name: ./Builds/${{ matrix.buildFolder }}/${{ steps.create_package.outputs.pkg-name }} url: ${{ secrets.UPLOADURL }} - pass: ${{ secrets.UPLOADPASS }} + pass: ${{ secrets.UPLOADPASS }} \ No newline at end of file diff --git a/BenTo.jucer b/BenTo.jucer index 5ac93d8d..43fdbd94 100644 --- a/BenTo.jucer +++ b/BenTo.jucer @@ -1,7 +1,7 @@ - @@ -695,11 +695,9 @@ - - @@ -708,7 +706,6 @@ - @@ -726,6 +723,7 @@ + - - + + @@ -750,7 +748,6 @@ - @@ -762,16 +759,15 @@ + - - + + @@ -785,7 +781,6 @@ - @@ -797,6 +792,7 @@ + - @@ -823,7 +817,6 @@ - @@ -834,56 +827,52 @@ + - + - - + + - - - - - - - - - - - - - - - - - - - + + + + + + - + + + + + + + + + + + + + + - + - + - @@ -898,7 +887,6 @@ - @@ -909,6 +897,7 @@ + diff --git a/Builds/LinuxMakefile/Makefile b/Builds/LinuxMakefile/Makefile index 85b171d1..9222c146 100644 --- a/Builds/LinuxMakefile/Makefile +++ b/Builds/LinuxMakefile/Makefile @@ -39,7 +39,7 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -m64 endif - JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DFILMSTRO_USE_FFMPEG=0" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=2.0.0b1" "-DJUCE_APP_VERSION_HEX=0x20000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 gl libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../Modules -I../../JUCE/modules -I../../External/serial/include -I../../External/servus/include -I../../Source $(CPPFLAGS) + JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DFILMSTRO_USE_FFMPEG=0" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=2.0.0b1" "-DJUCE_APP_VERSION_HEX=0x20000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 gl libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../Modules -I../../JUCE/modules -I../../Source -I../../External/asio -I../../External/serial/include -I../../External/servus/include -I../../External/ffmpeg/include $(CPPFLAGS) JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0" JUCE_TARGET_APP := BenTo @@ -60,7 +60,7 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -m64 endif - JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DFILMSTRO_USE_FFMPEG=0" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=2.0.0b1" "-DJUCE_APP_VERSION_HEX=0x20000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 gl libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../Modules -I../../JUCE/modules -I../../External/serial/include -I../../External/servus/include -I../../Source $(CPPFLAGS) + JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DFILMSTRO_USE_FFMPEG=0" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=2.0.0b1" "-DJUCE_APP_VERSION_HEX=0x20000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 gl libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../Modules -I../../JUCE/modules -I../../Source -I../../External/asio -I../../External/serial/include -I../../External/servus/include -I../../External/ffmpeg/include $(CPPFLAGS) JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0" JUCE_TARGET_APP := BenTo diff --git a/Builds/MacOSX/BenTo.xcodeproj/project.pbxproj b/Builds/MacOSX/BenTo.xcodeproj/project.pbxproj index 1c4ec4fe..4516efa4 100644 --- a/Builds/MacOSX/BenTo.xcodeproj/project.pbxproj +++ b/Builds/MacOSX/BenTo.xcodeproj/project.pbxproj @@ -1646,9 +1646,11 @@ "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../Modules", "$(HOME)/JUCE/modules", + "$(SRCROOT)/../../Source", + "$(SRCROOT)/../../External/asio", "$(SRCROOT)/../../External/serial/include", "$(SRCROOT)/../../External/servus/include", - "$(SRCROOT)/../../Source", + "$(SRCROOT)/../../External/ffmpeg/include", "$(inherited)", ); INFOPLIST_FILE = Info-App.plist; @@ -1663,7 +1665,7 @@ "\"../../Modules/juce_simpleweb/libs/MacOSX/${CURRENT_ARCH}\"", ); MACOSX_DEPLOYMENT_TARGET = 10.9; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../Modules $(HOME)/JUCE/modules $(SRCROOT)/../../External/serial/include $(SRCROOT)/../../External/servus/include $(SRCROOT)/../../Source"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../Modules $(HOME)/JUCE/modules $(SRCROOT)/../../Source $(SRCROOT)/../../External/asio $(SRCROOT)/../../External/serial/include $(SRCROOT)/../../External/servus/include $(SRCROOT)/../../External/ffmpeg/include"; OTHER_LDFLAGS = "-lServus -lserial -lssl -lcrypto -lz -weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.BenTo; PRODUCT_NAME = "BenTo"; @@ -1753,9 +1755,11 @@ "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../Modules", "$(HOME)/JUCE/modules", + "$(SRCROOT)/../../Source", + "$(SRCROOT)/../../External/asio", "$(SRCROOT)/../../External/serial/include", "$(SRCROOT)/../../External/servus/include", - "$(SRCROOT)/../../Source", + "$(SRCROOT)/../../External/ffmpeg/include", "$(inherited)", ); INFOPLIST_FILE = Info-App.plist; @@ -1771,7 +1775,7 @@ ); LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.9; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../Modules $(HOME)/JUCE/modules $(SRCROOT)/../../External/serial/include $(SRCROOT)/../../External/servus/include $(SRCROOT)/../../Source"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../Modules $(HOME)/JUCE/modules $(SRCROOT)/../../Source $(SRCROOT)/../../External/asio $(SRCROOT)/../../External/serial/include $(SRCROOT)/../../External/servus/include $(SRCROOT)/../../External/ffmpeg/include"; OTHER_LDFLAGS = "-lServus -lserial -lssl -lcrypto -lz -weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.BenTo; PRODUCT_NAME = "BenTo"; diff --git a/Builds/MacOSX_CI/BenTo.xcodeproj/project.pbxproj b/Builds/MacOSX_CI/BenTo.xcodeproj/project.pbxproj index 2b579313..6fb32a13 100644 --- a/Builds/MacOSX_CI/BenTo.xcodeproj/project.pbxproj +++ b/Builds/MacOSX_CI/BenTo.xcodeproj/project.pbxproj @@ -1646,9 +1646,11 @@ "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../Modules", "$(SRCROOT)/../../JUCE/modules", + "$(SRCROOT)/../../Source", + "$(SRCROOT)/../../External/asio", "$(SRCROOT)/../../External/serial/include", "$(SRCROOT)/../../External/servus/include", - "$(SRCROOT)/../../Source", + "$(SRCROOT)/../../External/ffmpeg/include", "$(inherited)", ); INFOPLIST_FILE = Info-App.plist; @@ -1663,7 +1665,7 @@ "\"../../Modules/juce_simpleweb/libs/MacOSX/${CURRENT_ARCH}\"", ); MACOSX_DEPLOYMENT_TARGET = 10.9; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../Modules $(SRCROOT)/../../JUCE/modules $(SRCROOT)/../../External/serial/include $(SRCROOT)/../../External/servus/include $(SRCROOT)/../../Source"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../Modules $(SRCROOT)/../../JUCE/modules $(SRCROOT)/../../Source $(SRCROOT)/../../External/asio $(SRCROOT)/../../External/serial/include $(SRCROOT)/../../External/servus/include $(SRCROOT)/../../External/ffmpeg/include"; OTHER_LDFLAGS = "-lServus -lserial -lssl -lcrypto -lz -weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.BenTo; PRODUCT_NAME = "BenTo"; @@ -1753,9 +1755,11 @@ "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../Modules", "$(SRCROOT)/../../JUCE/modules", + "$(SRCROOT)/../../Source", + "$(SRCROOT)/../../External/asio", "$(SRCROOT)/../../External/serial/include", "$(SRCROOT)/../../External/servus/include", - "$(SRCROOT)/../../Source", + "$(SRCROOT)/../../External/ffmpeg/include", "$(inherited)", ); INFOPLIST_FILE = Info-App.plist; @@ -1771,7 +1775,7 @@ ); LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.9; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../Modules $(SRCROOT)/../../JUCE/modules $(SRCROOT)/../../External/serial/include $(SRCROOT)/../../External/servus/include $(SRCROOT)/../../Source"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../Modules $(SRCROOT)/../../JUCE/modules $(SRCROOT)/../../Source $(SRCROOT)/../../External/asio $(SRCROOT)/../../External/serial/include $(SRCROOT)/../../External/servus/include $(SRCROOT)/../../External/ffmpeg/include"; OTHER_LDFLAGS = "-lServus -lserial -lssl -lcrypto -lz -weak_framework Metal -weak_framework MetalKit"; PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.BenTo; PRODUCT_NAME = "BenTo"; diff --git a/Builds/Raspberry/Makefile b/Builds/Raspberry/Makefile index 610a6b7b..891e8260 100644 --- a/Builds/Raspberry/Makefile +++ b/Builds/Raspberry/Makefile @@ -39,7 +39,7 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=armv7 endif - JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DFILMSTRO_USE_FFMPEG=0" "-DJUCER_LINUX_MAKE_9C1B7400=1" "-DJUCE_APP_VERSION=2.0.0b1" "-DJUCE_APP_VERSION_HEX=0x20000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 gl libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../Modules -I../../JUCE/modules -I../../External/serial/include -I../../External/servus/include -I../../Source $(CPPFLAGS) + JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DFILMSTRO_USE_FFMPEG=0" "-DJUCER_LINUX_MAKE_9C1B7400=1" "-DJUCE_APP_VERSION=2.0.0b1" "-DJUCE_APP_VERSION_HEX=0x20000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 gl libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../Modules -I../../JUCE/modules -I../../Source -I../../External/asio -I../../External/serial/include -I../../External/servus/include -I../../External/ffmpeg/include $(CPPFLAGS) JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0" JUCE_TARGET_APP := BenTo @@ -60,7 +60,7 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=armv7 endif - JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DFILMSTRO_USE_FFMPEG=0" "-DJUCER_LINUX_MAKE_9C1B7400=1" "-DJUCE_APP_VERSION=2.0.0b1" "-DJUCE_APP_VERSION_HEX=0x20000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 gl libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../Modules -I../../JUCE/modules -I../../External/serial/include -I../../External/servus/include -I../../Source $(CPPFLAGS) + JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DFILMSTRO_USE_FFMPEG=0" "-DJUCER_LINUX_MAKE_9C1B7400=1" "-DJUCE_APP_VERSION=2.0.0b1" "-DJUCE_APP_VERSION_HEX=0x20000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 gl libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../Modules -I../../JUCE/modules -I../../Source -I../../External/asio -I../../External/serial/include -I../../External/servus/include -I../../External/ffmpeg/include $(CPPFLAGS) JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0" JUCE_TARGET_APP := BenTo diff --git a/Builds/VisualStudio2019_CI/BenTo_App.vcxproj b/Builds/VisualStudio2019_CI/BenTo_App.vcxproj index b792d1f0..52216ca8 100644 --- a/Builds/VisualStudio2019_CI/BenTo_App.vcxproj +++ b/Builds/VisualStudio2019_CI/BenTo_App.vcxproj @@ -65,7 +65,7 @@ Disabled ProgramDatabase - ..\..\JuceLibraryCode;..\..\Modules;..\..\JUCE\modules;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;../../Source;%(AdditionalIncludeDirectories) + ..\..\JuceLibraryCode;..\..\Modules;..\..\JUCE\modules;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;../../Source;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2019_78A6631F=1;JUCE_APP_VERSION=2.0.0b1;JUCE_APP_VERSION_HEX=0x20000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -80,7 +80,7 @@ stdcpp17 - ..\..\JuceLibraryCode;..\..\Modules;..\..\JUCE\modules;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;../../Source;%(AdditionalIncludeDirectories) + ..\..\JuceLibraryCode;..\..\Modules;..\..\JUCE\modules;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;../../Source;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2019_78A6631F=1;JUCE_APP_VERSION=2.0.0b1;JUCE_APP_VERSION_HEX=0x20000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions) @@ -115,7 +115,7 @@ Full ProgramDatabase - ..\..\JuceLibraryCode;..\..\Modules;..\..\JUCE\modules;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;../../Source;%(AdditionalIncludeDirectories) + ..\..\JuceLibraryCode;..\..\Modules;..\..\JUCE\modules;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;../../Source;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2019_78A6631F=1;JUCE_APP_VERSION=2.0.0b1;JUCE_APP_VERSION_HEX=0x20000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -130,7 +130,7 @@ stdcpp17 - ..\..\JuceLibraryCode;..\..\Modules;..\..\JUCE\modules;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;../../Source;%(AdditionalIncludeDirectories) + ..\..\JuceLibraryCode;..\..\Modules;..\..\JUCE\modules;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;../../Source;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2019_78A6631F=1;JUCE_APP_VERSION=2.0.0b1;JUCE_APP_VERSION_HEX=0x20000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions) diff --git a/Builds/VisualStudio2022_CI/BenTo.sln b/Builds/VisualStudio2022_CI/BenTo.sln new file mode 100644 index 00000000..e55fa0a7 --- /dev/null +++ b/Builds/VisualStudio2022_CI/BenTo.sln @@ -0,0 +1,21 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio Version 17 + +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BenTo - App", "BenTo_App.vcxproj", "{AE9B8387-A2F6-0A55-0659-DFF253727185}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AE9B8387-A2F6-0A55-0659-DFF253727185}.Debug|x64.ActiveCfg = Debug|x64 + {AE9B8387-A2F6-0A55-0659-DFF253727185}.Debug|x64.Build.0 = Debug|x64 + {AE9B8387-A2F6-0A55-0659-DFF253727185}.Release|x64.ActiveCfg = Release|x64 + {AE9B8387-A2F6-0A55-0659-DFF253727185}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Builds/VisualStudio2022_CI/BenTo_App.vcxproj b/Builds/VisualStudio2022_CI/BenTo_App.vcxproj new file mode 100644 index 00000000..6804e6f5 --- /dev/null +++ b/Builds/VisualStudio2022_CI/BenTo_App.vcxproj @@ -0,0 +1,6125 @@ + + + + + + Debug + x64 + + + Release + x64 + + + + {AE9B8387-A2F6-0A55-0659-DFF253727185} + + + + Application + false + false + v143 + 10.0 + + + Application + false + true + v143 + 10.0 + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + .exe + .\..\..\Binaries\CI\App\ + $(Platform)\$(Configuration)\App\ + BenTo + true + $(LibraryPath);../../External/servus/lib/win/x64/debug;../../External/ffmpeg/lib;..\..\Modules\juce_sharedtexture\libs\VisualStudio2022\$(Platform)\MDd;..\..\Modules\juce_simpleweb\libs\VisualStudio2022\$(Platform)\MDd + .\..\..\Binaries\CI\App\ + $(Platform)\$(Configuration)\App\ + BenTo + true + $(LibraryPath);../../External/servus/lib/win/x64/release;../../External/ffmpeg/lib;..\..\Modules\juce_sharedtexture\libs\VisualStudio2022\$(Platform)\MD;..\..\Modules\juce_simpleweb\libs\VisualStudio2022\$(Platform)\MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + Disabled + ProgramDatabase + ..\..\JuceLibraryCode;..\..\Modules;..\..\JUCE\modules;D:\Softwares\JUCE\modules;../../Source;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2022_78B14C07=1;JUCE_APP_VERSION=2.0.0b1;JUCE_APP_VERSION_HEX=0x20000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + true + NotUsing + $(IntDir)\ + $(IntDir)\ + $(IntDir)\BenTo.pdb + Level4 + true + true + stdcpp17 + + + ..\..\JuceLibraryCode;..\..\Modules;..\..\JUCE\modules;D:\Softwares\JUCE\modules;../../Source;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2022_78B14C07=1;JUCE_APP_VERSION=2.0.0b1;JUCE_APP_VERSION_HEX=0x20000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions) + + + $(OutDir)\BenTo.exe + true + libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries) + true + $(IntDir)\BenTo.pdb + Windows + ../../External/servus/lib/win/x64/debug;../../External/ffmpeg/lib;..\..\Modules\juce_sharedtexture\libs\VisualStudio2022\$(Platform)\MDd;..\..\Modules\juce_simpleweb\libs\VisualStudio2022\$(Platform)\MDd;%(AdditionalLibraryDirectories) + true + Setupapi.lib;Servus.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;Setupapi.lib;SpoutLibrary.lib;libssl.lib;libcrypto.lib;%(AdditionalDependencies) + + + true + $(IntDir)\BenTo.bsc + + + Setupapi.lib;Servus.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;Setupapi.lib;SpoutLibrary.lib;libssl.lib;libcrypto.lib;%(AdditionalDependencies) + ../../External/servus/lib/win/x64/debug;../../External/ffmpeg/lib;..\..\Modules\juce_sharedtexture\libs\VisualStudio2022\$(Platform)\MDd;..\..\Modules\juce_simpleweb\libs\VisualStudio2022\$(Platform)\MDd;%(AdditionalLibraryDirectories) + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + + + + Full + None + ..\..\JuceLibraryCode;..\..\Modules;..\..\JUCE\modules;D:\Softwares\JUCE\modules;../../Source;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2022_78B14C07=1;JUCE_APP_VERSION=2.0.0b1;JUCE_APP_VERSION_HEX=0x20000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions) + MultiThreadedDLL + true + NotUsing + $(IntDir)\ + $(IntDir)\ + $(IntDir)\BenTo.pdb + Level4 + true + true + stdcpp17 + + + ..\..\JuceLibraryCode;..\..\Modules;..\..\JUCE\modules;D:\Softwares\JUCE\modules;../../Source;../../External/asio;../../External/serial/include;../../External/servus/include;../../External/ffmpeg/include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2022_78B14C07=1;JUCE_APP_VERSION=2.0.0b1;JUCE_APP_VERSION_HEX=0x20000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions) + + + $(OutDir)\BenTo.exe + true + %(IgnoreSpecificDefaultLibraries) + true + $(IntDir)\BenTo.pdb + Windows + true + true + ../../External/servus/lib/win/x64/release;../../External/ffmpeg/lib;..\..\Modules\juce_sharedtexture\libs\VisualStudio2022\$(Platform)\MD;..\..\Modules\juce_simpleweb\libs\VisualStudio2022\$(Platform)\MD;%(AdditionalLibraryDirectories) + true + UseLinkTimeCodeGeneration + Setupapi.lib;Servus.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;Setupapi.lib;SpoutLibrary.lib;libssl.lib;libcrypto.lib;%(AdditionalDependencies) + + + true + $(IntDir)\BenTo.bsc + + + Setupapi.lib;Servus.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;Setupapi.lib;SpoutLibrary.lib;libssl.lib;libcrypto.lib;%(AdditionalDependencies) + ../../External/servus/lib/win/x64/release;../../External/ffmpeg/lib;..\..\Modules\juce_sharedtexture\libs\VisualStudio2022\$(Platform)\MD;..\..\Modules\juce_simpleweb\libs\VisualStudio2022\$(Platform)\MD;%(AdditionalLibraryDirectories) + + + + + true + + + true + + + true + + + true + + + true + + + + true + + + + + + true + + + true + + + true + + + true + + + true + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + + + + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + + + + + + + + /bigobj %(AdditionalOptions) + + + + + + + + + + + + /bigobj %(AdditionalOptions) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Builds/VisualStudio2022_CI/BenTo_App.vcxproj.filters b/Builds/VisualStudio2022_CI/BenTo_App.vcxproj.filters new file mode 100644 index 00000000..04675f15 --- /dev/null +++ b/Builds/VisualStudio2022_CI/BenTo_App.vcxproj.filters @@ -0,0 +1,12354 @@ + + + + + + {A88B45F3-7EF1-9B04-CF40-A3F8072C6AE2} + + + {BE22C71A-063C-47F5-115C-8BCA1CA5F453} + + + {82DFFBAF-B77E-F752-5AAB-029B7F9C89C8} + + + {E5369823-18F7-F392-31F9-5DE2BFE7D0EE} + + + {8E65566C-A6CB-B998-F659-4E3386AD8621} + + + {C9A8C53E-67AF-6417-BB17-EAD9AEA30365} + + + {306FAF36-83CF-796C-601E-E7BA5D889C60} + + + {1328D82E-A170-F3E3-663B-68ED9EAE53A3} + + + {ACBE3565-6DFD-B7C2-79BA-202E8D24AFD0} + + + {CFA35B26-FF4F-B5B5-7CF9-87D7E4577113} + + + {7AFA2E1C-E4D3-B350-68A6-82756E5D9671} + + + {0A7C4CD8-CC31-4568-DB60-C772D3018E14} + + + {2F03148D-4022-BAB0-B304-F9AADC120D87} + + + {8F33A61D-72B9-4BF3-B536-A8AEE0A70444} + + + {4AD872E8-6802-68F1-87E8-812D61A5D46C} + + + {7161E67C-75F5-C91A-6199-D7FE7B43B023} + + + {B65A82FC-D3DB-67A3-2C87-012DE4DFF526} + + + {871EB0F9-7C2C-9AC7-2172-59ED2441BD4F} + + + {4EDB0323-E312-0CD6-3AD6-BA2563EF786D} + + + {AABB53FA-9F8F-97C0-CA8C-C40B46150CA0} + + + {93FC52DF-A04E-9944-804C-0849ECA10E83} + + + {4A784481-3ADA-137C-738F-DDD916C705D7} + + + {36A595E1-6940-B717-422B-33594773235F} + + + {587BA3A0-2D29-22BF-6868-A5762919330F} + + + {42CBB6D4-E397-8984-CB57-09BC25960679} + + + {BA4A8784-5238-F7A2-AFE0-CEA814247A1F} + + + {0901FC65-0F6C-593C-F6DF-E8B715C064F3} + + + {C86BA61C-B478-36D1-457D-F429CB1EE3F7} + + + {DF261092-08D6-C9CD-16EF-1E7D687216E3} + + + {260546D7-A415-97FE-268F-997A152194EF} + + + {BF15129C-05F2-0405-18F8-3C6A26C88696} + + + {70ED6924-EE8B-AA3E-55CE-D9387AEEA91C} + + + {C311421A-3E83-69A2-E49C-8BC5A1690B34} + + + {B4E4DA9A-8D7D-F875-24D8-F2AD03E156F5} + + + {B99D76F0-2C5D-8F58-F3F8-8BD5A1FC383C} + + + {5327FDA3-9B47-4E60-8AEF-65B6D4D8B137} + + + {B383C455-EF1C-7AEC-66DF-D469CE5E13A6} + + + {2309BA42-FD01-D90A-4AC7-E676A43E2FDA} + + + {E5517CF7-7EE0-BCAE-B9D5-0AB2C64316EA} + + + {A495B3B2-E31B-8762-DB71-1E7F741870E6} + + + {CF0FFD9C-52AB-A892-8C53-51AFEFEFD926} + + + {5F30ABEC-E105-ED56-F70A-994BE0A449C8} + + + {2645CDFB-146E-2288-FD74-445DA9C23985} + + + {6532AC9D-0846-E77C-1C54-8454436C7720} + + + {CC510EEE-DDEC-704C-A76A-2B84ED765010} + + + {09DD8656-A09B-F9B1-00C7-766B58A4CA92} + + + {C0DDC759-ABFC-FF2A-DB2B-E3001940E6F4} + + + {9004A774-F201-7768-DE32-CE83692086C6} + + + {1545531F-CD02-7D11-D7A4-2E641DEA5FEF} + + + {E3D77349-6113-E7B5-DE62-25E5117D4571} + + + {4C8005E0-7AC1-672B-C8C3-B5D28128A5CB} + + + {B00B08A4-FC8E-5823-88FA-F82B61D0CBC7} + + + {42800BE1-FA5D-90B7-8765-C675A846B713} + + + {463D9DDE-461C-14F5-DEDE-73726063657A} + + + {C5ACF510-FEE3-2C3B-19A4-6839FDD41CDC} + + + {317597BC-3D54-AAEF-DA4D-83BC441B1DA5} + + + {87CCBF7B-F56C-8182-6B1C-14953C1A9780} + + + {07B6EB5A-7A48-BF26-A252-CEAA6633C65E} + + + {CF096546-AF93-6C52-E6F0-B104402458D9} + + + {E839EA69-D9C2-6463-CF90-72329177C01B} + + + {ABEFE2FE-02B2-87E2-62A2-5CA00196BE46} + + + {6B745C7F-3143-9DC1-DC95-E328ECD6C137} + + + {92FA12E6-6A6E-84CD-1C95-9572ACEFA3C7} + + + {161BE3AF-5FB1-716F-5DB3-CF6938320196} + + + {A70E970E-2CC8-081F-AE46-444773171B53} + + + {AF461CAA-9BBA-2F1B-BF1A-845F6B878D25} + + + {F32AE84B-651D-BFC6-096C-2A59DD39A244} + + + {326CEE57-0676-79E2-34BA-CE6C84E59CA4} + + + {D88007EF-6EE7-0842-4531-E6AA176ACA0D} + + + {34F48938-A7EF-3A42-7556-FC609B2827A8} + + + {1960194A-6B94-0090-B7B4-2B4F6F5E3458} + + + {BB5638B3-AF4A-CD07-3D29-B4FB902364CA} + + + {630F4A78-9A43-E936-BFD0-9BDA240BEB22} + + + {EB58F05A-A968-CEBE-40C4-107CDD8F240F} + + + {5FCF559E-451A-CB1E-B177-A5DC5A0005BB} + + + {05CE33FC-868F-AA1A-12B8-79C98E753648} + + + {D78296AF-218E-B17E-7F8B-9D148601188D} + + + {B96EBA26-E668-FFAF-FC53-1EC1337DAF5A} + + + {D8532E5E-469E-5042-EFC8-238241704735} + + + {777B5D1D-9AF0-B22B-8894-034603EE97F5} + + + {8292766D-2459-2E7E-7615-17216318BA93} + + + {9BD56105-DAB4-EBD5-00DD-BD540E98FE88} + + + {10472B2C-9888-D269-F351-0D0AC3BCD16C} + + + {BF23FC10-1D57-2A9B-706F-6DD8A7B593D4} + + + {386862D5-4DCC-A4B3-5642-60A201E303EF} + + + {092EFC17-7C95-7E04-0ACA-0D61A462EE81} + + + {285118C6-8FDA-7DCE-BEF4-FFB2120876C5} + + + {69ED6B61-9B8D-D47E-E4A6-2E9F9A94A75A} + + + {7CDB7CD1-BB96-F593-3C78-1E06182B5839} + + + {B0A708DE-B4CF-196B-14FB-DC8221509B8E} + + + {34F46ADE-EE31-227A-A69E-7732E70145F1} + + + {BB9B3C77-17FB-E994-8B75-88F1727E4655} + + + {C0971D77-2F14-190A-E2AE-89D6285F4D5A} + + + {AABEA333-6524-8891-51C7-6DAEB5700628} + + + {F2D29337-983E-BAD7-7B5C-E0AB3D53D404} + + + {C674B0FB-1FC0-2986-94B1-083845018994} + + + {0AFC1CE8-F6E6-9817-8C21-8432B2A375DA} + + + {0D1AF264-3AC1-78A2-B2A4-AE6171F9194A} + + + {9A5DB854-CFFB-5F88-C566-0E10F994DDB3} + + + {38A5DDC7-416E-548F-39DA-887875FE6B20} + + + {980FE2DB-05D3-5FDA-79DA-067A56F5D19D} + + + {F336DC25-747A-0663-93D6-E3EB9AA0CBF8} + + + {7D78546A-80FC-4DCA-00B9-F191F0AB2179} + + + {9EB3EC7F-2AB7-DDAA-3C05-DF382B728D3F} + + + {6B9FBFDC-1D10-6246-356D-00FF4535CECB} + + + {D6FCFC8E-7136-9109-78C0-91A3EB4C443F} + + + {EBF18AC1-F0ED-937A-2824-4307CE2ADAF7} + + + {5A0F7922-2EFB-6465-57E4-A445B804EFB5} + + + {4EC45416-0E7C-7567-6F75-D0C8CEE7DC4F} + + + {C2985031-0496-55B5-41A8-BAB99E53D89D} + + + {FB4AB426-7009-0036-BB75-E34256AA7C89} + + + {E684D858-09E8-0251-8E86-5657129641E1} + + + {1EF1BF17-F941-243A-04D1-EE617D140CBA} + + + {344DB016-679C-FBD0-3EC6-4570C47522DE} + + + {3D9758A0-9359-1710-87C1-05D475C08B17} + + + {E824435F-FC7B-10BE-5D1A-5DACC51A8836} + + + {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + + {CDCCDBC1-E1A7-558D-D4AA-B48003178AE3} + + + {6656EC0E-A4C5-985B-242F-01890BDEFB1B} + + + {107F6637-689A-6DAC-1F5D-FD9734F3A0D9} + + + {C60CB2F9-12ED-74A2-C81C-366287805252} + + + {0BE3157E-54F5-3F72-7023-A62A81D83443} + + + {AD43AFB9-8A3D-C470-E098-4ADA2D6B1C07} + + + {77E6DFCD-32E7-A7E2-75E9-50C49384FEDA} + + + {8449F5A3-222A-3C21-88BD-2ACA69CD290A} + + + {50066622-9190-C54D-FE24-563064A80DB4} + + + {E8F398A4-2CFC-D98B-343B-FB06B6B54063} + + + {18BD9026-D673-60FB-C5C0-E4234E9FE71C} + + + {E469C933-C0FE-3A95-168B-234F8B4B620B} + + + {375C3EDB-D1F5-AA38-D498-B462B7BDEDE9} + + + {2E0391E6-2B82-F704-4B16-9EF63C4E25C1} + + + {D1C825D2-2980-075A-3EC0-43930977748F} + + + {B350BD14-1FB6-A9A0-4725-75CFEFC2D067} + + + {96D16B7E-5FC5-182E-8734-37C9D27C2299} + + + {56518C02-F710-7D5E-09E6-4B152D5900C7} + + + {8D78CFF1-6E9E-3E78-317D-7954EE6482BB} + + + {6B811726-62F3-6E7C-BE8E-493A61CAA9E4} + + + {C84EE2C8-14A3-D098-62A4-E1C75B7FA13A} + + + {42DD7AA9-DF7D-D9F9-E50C-69C44211A42B} + + + {009A44FF-D1C5-47C0-64CC-9122107C73D1} + + + {AAEE24C0-066F-8593-70EA-B7AC7553E885} + + + {CEC45021-32A4-16BA-8E12-023B029608CD} + + + {E5DFE07F-5901-AF5C-7759-84EBF9717E5E} + + + {3A189BF7-28D6-C0C4-B831-97AD9E46FE5A} + + + {829FC6C3-87E7-0491-B8C3-DC3905FB6039} + + + {49174595-84D0-A512-B98C-0CFD2D772B8A} + + + {E27C67CB-E138-DCCB-110D-623E2C01F9BC} + + + {392635C4-010A-C8A2-F46D-1A3628445E1C} + + + {1FF26A52-F9B9-625F-DEE9-8FEE0C02F0F4} + + + {3A5A13A1-B57C-EF05-AC38-53B08A4C8D4A} + + + {97983FD5-3F19-2B58-4941-D8FBB6B92BA4} + + + {ADC9725E-0948-5908-13BD-0275DB25325A} + + + {37AD6CD9-9FE5-A457-B1FE-36A85F973502} + + + {0F3B119C-FE8B-3978-2D80-53248BBBCDEA} + + + {5E836BFC-319A-1CE7-13C9-BD9E87F0A228} + + + {5D8E291B-1BB8-3A55-0939-D13A8589C395} + + + {BE3B7D89-2DE8-3CA1-B00E-55821EF3AAAC} + + + {E0DE9D5D-2792-148A-2CE1-182A90DD5F0E} + + + {DC27B453-334E-6965-BAD5-7F88C3E5BA46} + + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {600076D4-829D-CE7A-272C-832A4BBC40AB} + + + {C02D05C7-CD20-9901-2F02-95A9BD7FA797} + + + {47771136-6D29-90C7-2C6E-1728E7D1C485} + + + {3E938566-9812-78C0-9E81-75858F44C51F} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {D5B5DC1F-B81B-0449-5E26-15D1367B0C8C} + + + {2741675A-628F-4473-FF8D-45CD2C214CDA} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + + + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} + + + {9B6B6D54-D378-80C2-8CC9-D1D8FB44C2A8} + + + {D0584AC3-6837-14F6-90BF-5EA604D1F074} + + + {3CB9AC9F-1F99-25B3-8DC1-7DBB67D2E20C} + + + {794B64EC-B809-32E3-AD00-4EE6A74802CA} + + + {67BE498C-9E1F-C73A-B99A-387C034CE680} + + + {1A9C8538-959B-25E3-473D-B462C9A9D458} + + + {AA9F594C-DFAF-C0A7-0CCD-9F90E54D3A01} + + + {230BF784-34F4-3BE8-46D4-54E6B67E5E9E} + + + {39F680F3-5161-4D1C-EAD0-3911ED808874} + + + {3197198B-A978-E330-C7FB-07E5CE8236C7} + + + {42F7BE9D-3C8A-AE26-289B-8F355C068036} + + + {7868764A-6572-381A-906C-9C26792A4C29} + + + {03678508-A517-48BB-FB4A-485628C34E08} + + + {07D27C1D-3227-F527-356C-17DA11551A99} + + + {6146D580-99D2-A6C8-5908-30DC355BB6BA} + + + {C67003E8-BEA8-2188-F4B3-A122F4B4FA3F} + + + {09B91E68-1FF4-C7ED-9055-D4D96E66A0BA} + + + {30B3DA63-C1E4-F2EA-CEF0-8035D8CBFF64} + + + {4F24EEED-AA33-AC6C-9A39-72E71CF83EF0} + + + {0F70B1A9-BB50-23F5-2AE7-F95E51A00389} + + + {D4C8DC40-2CD2-04B6-05D0-1E7A88841390} + + + {58BED6AF-DB89-7560-B2B8-D937C1C0825A} + + + {B958F86B-6926-8D9B-2FC6-8BFD4BDC72C9} + + + {DB624F7D-D513-25AC-C13C-B9062EB3BEEE} + + + {89AA9B6C-4029-A34F-C1B0-3B5D8691F4D4} + + + {1A7F541C-B032-9C66-C320-A13B2A8A9866} + + + {4BAB7C18-51AB-0D9D-83CD-9C37F28D2E38} + + + {5523922E-8B0C-A52B-477C-752C09F8197F} + + + {857B6D8B-0ECB-FE9E-D1EB-D5E45E72F057} + + + {BAA582FA-40B7-320E-EE7A-4C3892C7BE72} + + + {89B3E447-34BE-C691-638E-09796C6B647E} + + + {9BE78436-DBF4-658C-579B-ED19FFD0EB5D} + + + {21E7FA61-9E0A-4BA1-04B7-AF47AFA9CB8B} + + + {632B4C79-AF7D-BFB5-D006-5AE67F607130} + + + {B10E20C2-4583-2B79-60B7-FE4D4B044313} + + + {CFB54F15-8A8A-0505-9B7F-ECA41CEE38E8} + + + {911F0159-A7A8-4A43-3FD4-154F62F4A44B} + + + {BBCC8BFE-A1CF-392C-ACF8-296FDF088AD6} + + + {5B720AB7-12B7-8186-6D26-23721CF9BBC0} + + + {CD2BB947-081D-2322-1C6E-203DE1DD6125} + + + {57A6A05F-DE74-4178-4A8D-D5D913D09935} + + + {9D5816C2-E2B2-2E3F-B095-AC8BD1100D29} + + + {3FDCD000-763F-8477-9AF8-70ABA2E91E5E} + + + {0947506F-66FA-EF8D-8A4E-4D48BCDBB226} + + + {E4B6AED3-F54C-3FF2-069F-640BACAE0E08} + + + {D5EADBCC-6A1C-C940-0206-26E49110AF08} + + + {D27DC92D-5BEB-9294-DCD1-81D54E245AD5} + + + {BCD73D20-42B1-6CDB-DE66-B06236A60F47} + + + {20DC13F6-2369-8841-9F0B-D13FA14EEE74} + + + {A302A8DB-120F-9EBB-A3D5-2C29963AA56B} + + + {45489C2A-6E0E-CCDC-6638-0DACEEB63CCA} + + + {F1B90726-DB55-0293-BFAF-C65C7DF5489C} + + + {2C55FD42-0ACD-B0B8-7EAE-EB17F09BAEEC} + + + {B68CD2B2-701F-9AB7-4638-2485D6E06BCF} + + + {B0B7C78E-729E-0FFA-D611-82AE8BC7FE2C} + + + {0A4F7E12-220C-14EF-0026-9C0629FA9C17} + + + {37F49E10-4E62-6D5C-FF70-722D0CA3D97E} + + + {160D9882-0F68-278D-C5F9-8960FD7421D2} + + + {4CED05DA-E0A2-E548-F753-1F2EF299A8E3} + + + {46AE69B8-AD58-4381-6CDE-25C8D75B01D2} + + + {E56CB4FC-32E8-8740-A3BB-B323CD937A99} + + + {4ECDCA0C-BB38-0729-A6B6-2FB0B4D0863B} + + + {294E4CD5-B06F-97D1-04A3-51871CEA507C} + + + {77228F15-BD91-06FF-2C7E-0377D25C2C94} + + + {5CB531E6-BF9A-2C50-056C-EE5A525D28D3} + + + {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + + + {3B09E947-B78C-1758-E072-7FD67F8DCB00} + + + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} + + + {D90A8DF7-FBAB-D363-13C0-6707BB22B72B} + + + {8AE77C40-6839-EC37-4515-BD3CC269BCE4} + + + {0EAD99DB-011F-09E5-45A2-365F646EB004} + + + {F57590C6-3B90-1BE1-1006-488BA33E8BD9} + + + {7C319D73-0D93-5842-0874-398D2D3038D5} + + + {2CB4DB0C-DD3B-6195-D822-76EC7A5C88D2} + + + {FE3CB19C-EF43-5CF5-DAF0-09D4E43D0AB9} + + + {C0E5DD5D-F8F1-DD25-67D7-291946AB3828} + + + {895C2D33-E08D-B1BA-BB36-FC4CA65090C8} + + + {D64A57DB-A956-5519-1929-1D929B56E1B0} + + + {5A99CC24-AC45-7ED6-C11A-B8B86E76D884} + + + {7A131EEC-25A7-22F6-2839-A2194DDF3007} + + + {EA9DB76C-CEF7-6BFC-2070-28B7DF8E8063} + + + {3C206A40-6F1B-E683-ACF1-DEC3703D0140} + + + {DF95D4BF-E18C-125A-5EBB-8993A06E232C} + + + {118946F2-AC24-0F09-62D5-753DF87A60CD} + + + {07329F9B-7D3D-CEB3-C771-714842076140} + + + {08BBBECB-B0D1-7611-37EC-F57E1D0CE2A2} + + + {268E8F2A-980C-BF2F-B161-AACABC9D91F3} + + + {A4D76113-9EDC-DA60-D89B-5BACF7F1C426} + + + {1A9221A3-E993-70B2-6EA2-8E1DB5FF646A} + + + {CC2DAD7A-5B45-62AB-4C54-6FE6B1AE86C3} + + + {599138A9-EA63-53DD-941F-ABE3412D2949} + + + {422A4014-8587-1AE6-584F-32A62613A37B} + + + {9FBFF5E5-56F1-34A1-2C85-F760DA2B1EB7} + + + {713F9F29-C2A1-3D8F-4394-6A948FA0175D} + + + {129F2071-932D-39D0-7756-2F0D13FA6835} + + + {8AE703C8-A5A3-3D91-3F30-A248B4940027} + + + {F764810A-E5C3-9E62-C008-A1937E9CED3B} + + + {0E5F94A6-BF2F-3A2F-6F75-556FAA34FCF5} + + + {A64CBF4B-AADA-FA1F-5FDC-CFF7E8DF556B} + + + {720CB5A6-80A1-C355-9DC3-FFF3D6860B58} + + + {7A9AC9C5-2D30-C866-66F4-ADFFFC8F654C} + + + {87824114-A534-681D-C5B1-F5DD42E13D60} + + + {113BFDB2-6CD7-CBB1-E543-F27243786328} + + + {06A9AB2B-A0BE-520F-1D4A-417ACF8A2D0E} + + + {FC220C33-4611-4F86-D380-C3817446B359} + + + {536EB392-F941-573E-557A-ABB126B53BD1} + + + {408CE83D-36B4-E38E-1E21-0BD4809E9846} + + + {D3E35206-F386-CFAB-A812-9B7BDB340B71} + + + {538772B5-B0E8-2C17-C250-C2F6EE345CA1} + + + {A0724705-28B2-FE7E-9FDC-273B8930E824} + + + {DD441617-E86F-B599-C793-C0AEE5F9B6CF} + + + {B600888C-9BF5-F2DA-748A-D86465A33FFD} + + + {E4C32E75-B35E-3B02-0D43-81C49A10D3AC} + + + {35082EBD-0C03-9FC7-51FE-10F9A70F1F5E} + + + {16E012BF-C71F-78C0-3115-36C57D781B20} + + + {30B6B3C5-1146-BAB5-0344-E4476D77330E} + + + {300D3F70-B324-481C-2302-15089971B7C0} + + + {E333732D-0D82-ED3D-963B-6E7FD764787E} + + + {E10327CB-2F25-43A6-1E65-F59DE08B9E61} + + + {25814E19-2B26-BC90-3B89-943EAAE4EE44} + + + {59B19CB2-CF22-F681-38D2-5345DC070B6A} + + + {20C49B18-CE94-9D44-6A5C-225B00E1D038} + + + {8985EB6E-3B3D-2F50-8596-35A90644BBDF} + + + {9FCEFBD6-3D28-D38D-7EB8-85987AE2E250} + + + {CBE8FDF8-CF6A-EA9F-A44D-DD3986DDB515} + + + {C5D6AAA0-784F-E8DC-DA88-70BC35463CA7} + + + {E9124A17-17F0-B752-28BF-F82728EF1721} + + + {B584F03F-45E5-7A57-0EC7-1B66627A8873} + + + {515E509D-9BDA-0CF1-D877-FB611D914497} + + + {54FE50EF-F56B-C1E4-8E3C-A566B33B6F8E} + + + {A5633EBC-1E29-7D6F-3236-00828EC13E8A} + + + {E7323725-1165-F166-9D72-42B9340ACD7F} + + + {427229E6-5C9E-151E-F571-468B856BB151} + + + {1DE9CE4E-5887-D7C5-F2FF-C3AD214BEE3E} + + + {922B0E72-8A4C-BE01-7301-CF50894560D4} + + + {9A2CA343-050A-C891-51B6-301A74570D17} + + + {CA08A3F4-FDEE-CBCC-1C52-7297B3958EFA} + + + {32A3CD22-6628-02D5-ED3C-B00A3684C103} + + + {6DD9A1D9-C559-A9AB-1012-00233734BB61} + + + {CCEB8A17-2052-FCF3-E886-3DEEAC06A9DD} + + + {894386DF-1FF3-DB9A-2FF3-EFE1E5CDA88A} + + + {D49E0848-0015-8A56-24E0-5F6D7323BCE1} + + + {B17F69BA-D688-9888-1C58-CAEC6EC7496B} + + + {089CBAD6-F911-41CF-CEFB-E37E26509E82} + + + {DB5572FB-D815-3E4A-5CEA-C961D3EE513B} + + + {1F6412E5-4F92-D8E6-7867-550FB25EF9ED} + + + {A096C000-E0AC-BA2B-B5A1-5F4E9A016CFD} + + + {31C38CE1-A5B5-B8EE-38A1-3191E420E51C} + + + {DD419A70-0554-4890-D6BD-84302EE9D946} + + + {3FA864BF-F5C5-AAF9-046A-0D2856097588} + + + {5CFEC491-7C81-34F0-8C86-D7ACD1D2816F} + + + {989923A5-2CC5-E70F-0A16-6110D5AC938B} + + + {180BD6DA-9455-5755-E8FE-27A04695CF02} + + + {D61E743A-2670-BFB7-3B65-E8D8FB84E1D0} + + + {3D156A4D-FAA0-EEBB-777D-15BD25FA69A0} + + + {44170466-D4D2-B9A5-AF29-84711EF75CE1} + + + {E16A4AC3-3A02-5A64-DC91-074AF09658C5} + + + {29F8AC1D-700F-8EF7-1F3D-4BEC8BC474F7} + + + {4BC1AC06-AAA3-905B-8EC6-B4DDD74C0211} + + + {53C1B9BB-CD33-B290-AF4D-9329F26F8E41} + + + {91FADFB6-70FE-3F81-2E5A-366E896BFF22} + + + {5F63D43A-3BA8-5209-9971-62F87C2979FE} + + + {EEE9B92C-AD26-4BEA-4D95-3F859090EA9F} + + + {B1DE8DB1-C00A-12C0-D690-8B3C9504A60A} + + + {CE6CF780-1FE0-E48A-B51A-BA74A57ED94E} + + + {9D3CEEDA-BB79-917C-CFEC-4C228E90F06B} + + + {D05DFFE3-DD87-EFBC-1A6A-06D586D17AB9} + + + {D5CD609E-3189-A51F-070A-EAD29BEF283E} + + + {ADF453F6-00B2-BAE7-8935-F83C8E18A09B} + + + {825009AC-139E-F28F-2FC4-DDE75F64FA4F} + + + {914032AE-27E8-B564-8123-F362B66A0627} + + + {7DFE9F75-2E32-F3C9-4C9C-BAEB72C44967} + + + {F95E7C0F-5663-3942-16BD-5DA277CCDFAA} + + + {10927F53-5739-34D4-A47E-45BFDF18190B} + + + {B738F86C-F58F-DC0B-329C-0C8462471F53} + + + {B33DB6AF-3417-CFEF-89D5-C363E723362A} + + + {D769B6AE-367B-792A-2F18-0E90F10ECD60} + + + {F8CE5FFE-E6FF-3A80-FC5A-A9A20A214575} + + + {6DA59350-C1E2-1044-15E8-D09CCE399B4F} + + + {4841BA61-F790-C3CA-7175-2E4A0C445555} + + + {23B02EDF-16A4-F171-AB31-C9CAF2BABCA1} + + + {A1A54544-4C01-7C7C-FEC1-FF588E88DD8A} + + + {FD5DD15D-03C6-3171-9FAE-C09C0DDE1EC0} + + + {11B22398-CCA1-FF4F-0135-B6E477150549} + + + {8C557B46-7EB8-A831-7EFE-9DB6CC092C19} + + + {D96D43DC-958D-3C00-56B1-A06CCC8B9E06} + + + {02D73652-F7E2-6F89-42B2-A95FCACD241E} + + + {83154911-71D6-696A-A70F-32CCD1D27AE5} + + + {8078B855-3025-B5EE-FAE3-B65C177C0C6F} + + + {03DDD91B-F561-42F6-8E2A-77EA90465952} + + + {30825128-356B-E21C-A581-623392DF8A55} + + + {8A31E23A-0D4D-A36C-1F67-5E04480FEF11} + + + {5A8499C2-BAD9-DB14-E54E-6E2B7369B660} + + + {19D240E5-61FC-6FC4-5E21-DB927DCC5DEC} + + + {C643E19E-CA54-83B4-5DE7-DAFE613C37BD} + + + {54911988-B33B-DB28-83EF-C2AA1D59FAF7} + + + {AB73AC6D-D3C3-6A5F-AAAA-9C160EAAB8D0} + + + {C982787C-225F-AB57-02AA-5571AFCBC8F8} + + + {E1691F7A-14D3-3409-5A4A-B1CB3EE18B6C} + + + {75B5FA31-47D9-058C-A9AF-0D0E6F1C3F62} + + + {86C6C273-28E1-BD33-D09D-F675B09B8476} + + + {2B72F40F-72FA-15D6-E2AD-B2A51B4E573C} + + + {C0A2EE99-AAF8-5882-8991-C499311DEF3D} + + + {36F87D6D-13CE-9C49-E6B9-60C58AD710EF} + + + {4BE584DB-DCC0-009E-D1CA-3C4D69EC56F3} + + + {2C0C2B19-CFE3-09BC-E63E-D9C5E2AD227B} + + + {7A3ECA86-87E1-0E08-7951-E4CC761B68A7} + + + {F83CFE3F-E398-42D5-A112-D2127BB8A06B} + + + {0F38CADC-6AB0-B98A-F3DA-893C4B37B1B9} + + + {D25362D0-3C0A-688F-F7E6-C8873E07CBA6} + + + {9684BA1D-7154-C152-738D-C2B17D1BDCE3} + + + {27A7C349-E808-FB6E-970C-05068A50479E} + + + {FDFBB697-32D9-2B4A-936F-4C4256AFFD81} + + + {927B0C0F-A737-BF56-1213-11FFF1B9E758} + + + {4A208D7E-781B-FBFA-1443-7728B2940D57} + + + {7381F9AE-6C71-1512-0273-33A3D73D1EA7} + + + {D391EFE7-9D9C-64D9-7CA8-C06DBE64F72C} + + + {675B1DB0-7AEA-A463-6F13-A6C8D7C5D25A} + + + {E6F9DA01-A486-96CB-63BA-06132A7EEB43} + + + {319110E8-E082-7BC9-BAAE-79176A306716} + + + {3E2233F6-6961-1D0A-5713-3948A75F9C33} + + + {5760E1A5-6E8A-8726-5D50-40D7185FB74D} + + + {32D57B7D-AE7E-065F-7840-14410E2C21F8} + + + {F808F0A0-B0F0-4E2A-F030-DA5C4A270465} + + + {4C4E3B19-5E09-E236-600D-A37EBF009738} + + + {B4D3CBA4-7C14-A44C-E2DA-67667C9F2E80} + + + {38321AC7-8947-F0A1-5A3D-3731F17C3F35} + + + {AB1A1199-96AB-2A7E-9E0C-870A25DEB6A5} + + + {6272CF56-3789-7A45-BFB5-49DBC5C977D7} + + + {849CC859-D283-1053-FD34-17629C25FB67} + + + {CC9A313E-0722-A2D4-17A7-BAF1A38EED37} + + + {57576BB0-BE29-31DA-48A8-DBEF5F4E9F61} + + + {85D6C1BA-B79E-A632-E094-2D9A0D6BC3C9} + + + {174D6D8D-6950-6C63-3A4A-577AC6BC0674} + + + {31374781-50DF-1D59-72CC-734A4B423CBB} + + + {CB8DF3B2-0409-6D59-C5D4-A034EBB7F973} + + + {7774F72F-C951-B8AB-E927-E34AD23C52C8} + + + {658BADF8-7095-C722-F9EC-9F36E8818187} + + + {2C58F450-CD01-0231-2F16-0D4D68565164} + + + {FE955B6B-68AC-AA07-70D8-2413F6DB65C8} + + + {7ED5A90E-41AF-A1EF-659B-37CEEAB9BA61} + + + + + BenTo\Source\Common\BlockViz + + + BenTo\Source\Common\EmbeddedScript\ui + + + BenTo\Source\Common\EmbeddedScript + + + BenTo\Source\Common\EmbeddedScript + + + BenTo\Source\Common\Identification + + + BenTo\Source\Common\Identification + + + BenTo\Source\Common\Zeroconf + + + BenTo\Source\Common + + + BenTo\Source\Audio\ui + + + BenTo\Source\Audio + + + BenTo\Source\Video\ui + + + BenTo\Source\Video\ui + + + BenTo\Source\Video + + + BenTo\Source\Video + + + BenTo\Source\Video + + + BenTo\Source\Video + + + BenTo\Source\Sequence\layers\Block\ui + + + BenTo\Source\Sequence\layers\Block\ui + + + BenTo\Source\Sequence\layers\Block\ui + + + BenTo\Source\Sequence\layers\Block\ui + + + BenTo\Source\Sequence\layers\Block + + + BenTo\Source\Sequence\layers\Block + + + BenTo\Source\Sequence\layers\Block + + + BenTo\Source\Sequence\layers\Block + + + BenTo\Source\Sequence\layers\Video\ui + + + BenTo\Source\Sequence\layers\Video\ui + + + BenTo\Source\Sequence\layers\Video + + + BenTo\Source\Sequence\layers\Video + + + BenTo\Source\Sequence + + + BenTo\Source\Sequence + + + BenTo\Source\Sequence + + + BenTo\Source\Node + + + BenTo\Source\Node\nodes\colorRemap + + + BenTo\Source\Node\nodes\composite + + + BenTo\Source\Node\nodes\model\ui + + + BenTo\Source\Node\nodes\model + + + BenTo\Source\Node\nodes\parameter\ui + + + BenTo\Source\Node\nodes\parameter + + + BenTo\Source\Node\nodes\positionRemap + + + BenTo\Source\Node\nodes\prop + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node + + + BenTo\Source\Node + + + BenTo\Source\Node + + + BenTo\Source\Node + + + BenTo\Source\Node + + + BenTo\Source\Node + + + BenTo\Source\LightBlock\model\preset + + + BenTo\Source\LightBlock\model\preset + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\blocks\embeddedscript + + + BenTo\Source\LightBlock\model\blocks\shape + + + BenTo\Source\LightBlock\model\blocks\filters + + + BenTo\Source\LightBlock\model\blocks\filters\generic\brightnesscontrast + + + BenTo\Source\LightBlock\model\blocks\filters\generic\hsv + + + BenTo\Source\LightBlock\model\blocks\filters\generic\remap + + + BenTo\Source\LightBlock\model\blocks\picture\ui + + + BenTo\Source\LightBlock\model\blocks\picture + + + BenTo\Source\LightBlock\model\blocks\dmx + + + BenTo\Source\LightBlock\model\blocks\video\ui + + + BenTo\Source\LightBlock\model\blocks\video + + + BenTo\Source\LightBlock\model\blocks\video + + + BenTo\Source\LightBlock\model\blocks\video + + + BenTo\Source\LightBlock\model\blocks\pattern + + + BenTo\Source\LightBlock\model\blocks\sequence\ui + + + BenTo\Source\LightBlock\model\blocks\sequence + + + BenTo\Source\LightBlock\model\blocks\node\ui + + + BenTo\Source\LightBlock\model\blocks\node + + + BenTo\Source\LightBlock\model\blocks\streamingscript + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock + + + BenTo\Source\LightBlock + + + BenTo\Source\VideoPreview + + + BenTo\Source\Prop\props\bento + + + BenTo\Source\Prop\props\bento + + + BenTo\Source\Prop\props\bento + + + BenTo\Source\Prop\Component + + + BenTo\Source\Prop\Shape\ui + + + BenTo\Source\Prop\Shape\ui + + + BenTo\Source\Prop\Shape\ui + + + BenTo\Source\Prop\Shape + + + BenTo\Source\Prop\Shape + + + BenTo\Source\Prop\Shape + + + BenTo\Source\Prop\Shape + + + BenTo\Source\Prop\TargetFilter + + + BenTo\Source\Prop\TargetFilter + + + BenTo\Source\Prop\Cluster\ui + + + BenTo\Source\Prop\Cluster + + + BenTo\Source\Prop\Cluster + + + BenTo\Source\Prop\Cluster + + + BenTo\Source\Prop\ui + + + BenTo\Source\Prop\ui + + + BenTo\Source\Prop\ui + + + BenTo\Source\Prop\ui + + + BenTo\Source\Prop\ui + + + BenTo\Source\Prop + + + BenTo\Source\Prop + + + BenTo\Source\Prop + + + BenTo\Source\Prop + + + BenTo\Source\Prop + + + BenTo\Source + + + BenTo\Source + + + BenTo\Source + + + BenTo\Source + + + BenTo\Source + + + JUCE Modules\filmstro_ffmpeg + + + JUCE Modules\filmstro_ffmpeg + + + JUCE Modules\filmstro_ffmpeg + + + JUCE Modules\juce_audio_basics\audio_play_head + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\synthesisers + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\sampler + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sratom\src + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\samples\vst-utilities\moduleinfotool\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\moduleinfo + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\moduleinfo + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\utility + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_audio_utils\audio_cd + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\native + + + JUCE Modules\juce_audio_utils\players + + + JUCE Modules\juce_audio_utils\players + + + JUCE Modules\juce_audio_utils + + + JUCE Modules\juce_audio_utils + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core + + + JUCE Modules\juce_core + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography + + + JUCE Modules\juce_cryptography + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_dmx\device\sacn + + + JUCE Modules\juce_dmx\device + + + JUCE Modules\juce_dmx\device + + + JUCE Modules\juce_dmx\device + + + JUCE Modules\juce_dmx\device + + + JUCE Modules\juce_dmx\device + + + JUCE Modules\juce_dmx\device + + + JUCE Modules\juce_dmx\ui + + + JUCE Modules\juce_dmx + + + JUCE Modules\juce_dmx + + + JUCE Modules\juce_dmx + + + JUCE Modules\juce_dmx + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events + + + JUCE Modules\juce_events + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\image_formats + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_gui_basics\accessibility + + + JUCE Modules\juce_gui_basics\application + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\documents + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra + + + JUCE Modules\juce_gui_extra + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\utils + + + JUCE Modules\juce_opengl + + + JUCE Modules\juce_opengl + + + JUCE Modules\juce_organicui\app + + + JUCE Modules\juce_organicui\app + + + JUCE Modules\juce_organicui\app + + + JUCE Modules\juce_organicui\app + + + JUCE Modules\juce_organicui\automation\common\fitting\intern + + + JUCE Modules\juce_organicui\automation\common\fitting\intern + + + JUCE Modules\juce_organicui\automation\common\fitting\intern + + + JUCE Modules\juce_organicui\automation\common\fitting\intern + + + JUCE Modules\juce_organicui\automation\curve\curve2D\easing\ui + + + JUCE Modules\juce_organicui\automation\curve\curve2D\easing + + + JUCE Modules\juce_organicui\automation\curve\curve2D\ui + + + JUCE Modules\juce_organicui\automation\curve\curve2D\ui + + + JUCE Modules\juce_organicui\automation\curve\curve2D\ui + + + JUCE Modules\juce_organicui\automation\curve\curve2D + + + JUCE Modules\juce_organicui\automation\curve\curve2D + + + JUCE Modules\juce_organicui\automation\easing\ui + + + JUCE Modules\juce_organicui\automation\easing + + + JUCE Modules\juce_organicui\automation\parameter\ui + + + JUCE Modules\juce_organicui\automation\parameter + + + JUCE Modules\juce_organicui\automation\recorder\ui + + + JUCE Modules\juce_organicui\automation\recorder + + + JUCE Modules\juce_organicui\automation\ui + + + JUCE Modules\juce_organicui\automation\ui + + + JUCE Modules\juce_organicui\automation\ui + + + JUCE Modules\juce_organicui\automation\ui + + + JUCE Modules\juce_organicui\automation + + + JUCE Modules\juce_organicui\automation + + + JUCE Modules\juce_organicui\comment\ui + + + JUCE Modules\juce_organicui\comment\ui + + + JUCE Modules\juce_organicui\comment + + + JUCE Modules\juce_organicui\comment + + + JUCE Modules\juce_organicui\controllable\dashboard\ui + + + JUCE Modules\juce_organicui\controllable\dashboard\ui + + + JUCE Modules\juce_organicui\controllable\dashboard\ui + + + JUCE Modules\juce_organicui\controllable\dashboard + + + JUCE Modules\juce_organicui\controllable\dashboard + + + JUCE Modules\juce_organicui\controllable\dashboard + + + JUCE Modules\juce_organicui\controllable\detective\ui + + + JUCE Modules\juce_organicui\controllable\detective\ui + + + JUCE Modules\juce_organicui\controllable\detective + + + JUCE Modules\juce_organicui\controllable\detective + + + JUCE Modules\juce_organicui\controllable\parameter\dashboard\ui + + + JUCE Modules\juce_organicui\controllable\parameter\dashboard + + + JUCE Modules\juce_organicui\controllable\parameter\detective\ui + + + JUCE Modules\juce_organicui\controllable\parameter\detective + + + JUCE Modules\juce_organicui\controllable\parameter\gradient\ui + + + JUCE Modules\juce_organicui\controllable\parameter\gradient\ui + + + JUCE Modules\juce_organicui\controllable\parameter\gradient\ui + + + JUCE Modules\juce_organicui\controllable\parameter\gradient + + + JUCE Modules\juce_organicui\controllable\parameter\gradient + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable + + + JUCE Modules\juce_organicui\controllable + + + JUCE Modules\juce_organicui\controllable + + + JUCE Modules\juce_organicui\controllable + + + JUCE Modules\juce_organicui\controllable + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\engine + + + JUCE Modules\juce_organicui\engine + + + JUCE Modules\juce_organicui\help + + + JUCE Modules\juce_organicui\help + + + JUCE Modules\juce_organicui\helpers\crypto\hmac + + + JUCE Modules\juce_organicui\helpers\crypto\hmac + + + JUCE Modules\juce_organicui\helpers + + + JUCE Modules\juce_organicui\helpers + + + JUCE Modules\juce_organicui\helpers + + + JUCE Modules\juce_organicui\inspectable\dashboard\ui + + + JUCE Modules\juce_organicui\inspectable\dashboard + + + JUCE Modules\juce_organicui\inspectable\ui + + + JUCE Modules\juce_organicui\inspectable\ui + + + JUCE Modules\juce_organicui\inspectable\ui + + + JUCE Modules\juce_organicui\inspectable\ui + + + JUCE Modules\juce_organicui\inspectable + + + JUCE Modules\juce_organicui\inspectable + + + JUCE Modules\juce_organicui\inspectable + + + JUCE Modules\juce_organicui\logger\ui + + + JUCE Modules\juce_organicui\logger + + + JUCE Modules\juce_organicui\manager\ui + + + JUCE Modules\juce_organicui\manager\ui + + + JUCE Modules\juce_organicui\manager + + + JUCE Modules\juce_organicui\manager + + + JUCE Modules\juce_organicui\manager + + + JUCE Modules\juce_organicui\outliner + + + JUCE Modules\juce_organicui\parrot\ui + + + JUCE Modules\juce_organicui\parrot\ui + + + JUCE Modules\juce_organicui\parrot + + + JUCE Modules\juce_organicui\parrot + + + JUCE Modules\juce_organicui\parrot + + + JUCE Modules\juce_organicui\parrot + + + JUCE Modules\juce_organicui\progress\ui + + + JUCE Modules\juce_organicui\progress + + + JUCE Modules\juce_organicui\remotecontrol + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources + + + JUCE Modules\juce_organicui\script\ui + + + JUCE Modules\juce_organicui\script\ui + + + JUCE Modules\juce_organicui\script + + + JUCE Modules\juce_organicui\script + + + JUCE Modules\juce_organicui\script + + + JUCE Modules\juce_organicui\script + + + JUCE Modules\juce_organicui\script + + + JUCE Modules\juce_organicui\settings\ui + + + JUCE Modules\juce_organicui\settings + + + JUCE Modules\juce_organicui\settings + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui + + + JUCE Modules\juce_organicui\ui + + + JUCE Modules\juce_organicui\ui + + + JUCE Modules\juce_organicui\undo + + + JUCE Modules\juce_organicui\updater + + + JUCE Modules\juce_organicui\warning\ui + + + JUCE Modules\juce_organicui\warning\ui + + + JUCE Modules\juce_organicui\warning + + + JUCE Modules\juce_organicui\warning + + + JUCE Modules\juce_organicui + + + JUCE Modules\juce_organicui + + + JUCE Modules\juce_organicui + + + JUCE Modules\juce_organicui + + + JUCE Modules\juce_organicui + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc + + + JUCE Modules\juce_serial\lib\cobs + + + JUCE Modules\juce_serial\lib\serial\impl\list_ports + + + JUCE Modules\juce_serial\lib\serial\impl\list_ports + + + JUCE Modules\juce_serial\lib\serial\impl + + + JUCE Modules\juce_serial\lib\serial\impl + + + JUCE Modules\juce_serial\lib\serial + + + JUCE Modules\juce_serial + + + JUCE Modules\juce_serial + + + JUCE Modules\juce_serial + + + JUCE Modules\juce_serial + + + JUCE Modules\juce_sharedtexture + + + JUCE Modules\juce_sharedtexture + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\common + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb + + + JUCE Modules\juce_simpleweb + + + JUCE Modules\juce_simpleweb + + + JUCE Modules\juce_simpleweb + + + JUCE Modules\juce_simpleweb + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources + + + JUCE Modules\juce_timeline\timeline\Sequence\Cue\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Cue\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Cue + + + JUCE Modules\juce_timeline\timeline\Sequence\Cue + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Block\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Block\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Block + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Block + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer + + + JUCE Modules\juce_timeline\timeline\Sequence\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\ui + + + JUCE Modules\juce_timeline\timeline\Sequence + + + JUCE Modules\juce_timeline\timeline\Sequence + + + JUCE Modules\juce_timeline\timeline\ui + + + JUCE Modules\juce_timeline\timeline\ui + + + JUCE Modules\juce_timeline\timeline + + + JUCE Modules\juce_timeline + + + JUCE Modules\juce_timeline + + + JUCE Modules\juce_video\capture + + + JUCE Modules\juce_video\playback + + + JUCE Modules\juce_video + + + JUCE Modules\juce_video + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + + + BenTo\Source\Source\LightBlock\ui + + + BenTo\Source\Common\BlockViz + + + BenTo\Source\Common\EmbeddedScript\ui + + + BenTo\Source\Common\EmbeddedScript + + + BenTo\Source\Common\EmbeddedScript + + + BenTo\Source\Common\Identification + + + BenTo\Source\Common\Identification + + + BenTo\Source\Common\Zeroconf + + + BenTo\Source\Common + + + BenTo\Source\Audio\ui + + + BenTo\Source\Audio + + + BenTo\Source\Video\ui + + + BenTo\Source\Video\ui + + + BenTo\Source\Video + + + BenTo\Source\Video + + + BenTo\Source\Video + + + BenTo\Source\Video + + + BenTo\Source\Video + + + BenTo\Source\Sequence\layers\Block\ui + + + BenTo\Source\Sequence\layers\Block\ui + + + BenTo\Source\Sequence\layers\Block\ui + + + BenTo\Source\Sequence\layers\Block\ui + + + BenTo\Source\Sequence\layers\Block + + + BenTo\Source\Sequence\layers\Block + + + BenTo\Source\Sequence\layers\Block + + + BenTo\Source\Sequence\layers\Block + + + BenTo\Source\Sequence\layers\Video\ui + + + BenTo\Source\Sequence\layers\Video\ui + + + BenTo\Source\Sequence\layers\Video + + + BenTo\Source\Sequence\layers\Video + + + BenTo\Source\Sequence + + + BenTo\Source\Sequence + + + BenTo\Source\Sequence + + + BenTo\Source\Node + + + BenTo\Source\Node\nodes\colorRemap + + + BenTo\Source\Node\nodes\composite + + + BenTo\Source\Node\nodes\model\ui + + + BenTo\Source\Node\nodes\model + + + BenTo\Source\Node\nodes\parameter\ui + + + BenTo\Source\Node\nodes\parameter + + + BenTo\Source\Node\nodes\positionRemap + + + BenTo\Source\Node\nodes\prop + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node\ui + + + BenTo\Source\Node + + + BenTo\Source\Node + + + BenTo\Source\Node + + + BenTo\Source\Node + + + BenTo\Source\Node + + + BenTo\Source\Node + + + BenTo\Source\LightBlock\model\preset + + + BenTo\Source\LightBlock\model\preset + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\ui + + + BenTo\Source\LightBlock\model\blocks\embeddedscript + + + BenTo\Source\LightBlock\model\blocks\shape + + + BenTo\Source\LightBlock\model\blocks\filters + + + BenTo\Source\LightBlock\model\blocks\filters\generic\brightnesscontrast + + + BenTo\Source\LightBlock\model\blocks\filters\generic\hsv + + + BenTo\Source\LightBlock\model\blocks\filters\generic\remap + + + BenTo\Source\LightBlock\model\blocks\picture\ui + + + BenTo\Source\LightBlock\model\blocks\picture + + + BenTo\Source\LightBlock\model\blocks\dmx + + + BenTo\Source\LightBlock\model\blocks\video\ui + + + BenTo\Source\LightBlock\model\blocks\video + + + BenTo\Source\LightBlock\model\blocks\video + + + BenTo\Source\LightBlock\model\blocks\video + + + BenTo\Source\LightBlock\model\blocks\pattern + + + BenTo\Source\LightBlock\model\blocks\sequence\ui + + + BenTo\Source\LightBlock\model\blocks\sequence + + + BenTo\Source\LightBlock\model\blocks\node\ui + + + BenTo\Source\LightBlock\model\blocks\node + + + BenTo\Source\LightBlock\model\blocks\streamingscript + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock\model + + + BenTo\Source\LightBlock + + + BenTo\Source\LightBlock + + + BenTo\Source\VideoPreview + + + BenTo\Source\Prop\props\bento + + + BenTo\Source\Prop\props\bento + + + BenTo\Source\Prop\props\bento + + + BenTo\Source\Prop\Component + + + BenTo\Source\Prop\Shape\ui + + + BenTo\Source\Prop\Shape\ui + + + BenTo\Source\Prop\Shape\ui + + + BenTo\Source\Prop\Shape + + + BenTo\Source\Prop\Shape + + + BenTo\Source\Prop\Shape + + + BenTo\Source\Prop\Shape + + + BenTo\Source\Prop\TargetFilter + + + BenTo\Source\Prop\TargetFilter + + + BenTo\Source\Prop\Cluster\ui + + + BenTo\Source\Prop\Cluster + + + BenTo\Source\Prop\Cluster + + + BenTo\Source\Prop\Cluster + + + BenTo\Source\Prop\ui + + + BenTo\Source\Prop\ui + + + BenTo\Source\Prop\ui + + + BenTo\Source\Prop\ui + + + BenTo\Source\Prop\ui + + + BenTo\Source\Prop + + + BenTo\Source\Prop + + + BenTo\Source\Prop + + + BenTo\Source\Prop + + + BenTo\Source\Prop + + + BenTo\Source + + + BenTo\Source + + + BenTo\Source + + + JUCE Modules\filmstro_audiohelpers + + + JUCE Modules\filmstro_audiohelpers + + + JUCE Modules\filmstro_audiohelpers + + + JUCE Modules\filmstro_audiohelpers + + + JUCE Modules\filmstro_audiohelpers + + + JUCE Modules\filmstro_ffmpeg + + + JUCE Modules\filmstro_ffmpeg + + + JUCE Modules\filmstro_ffmpeg + + + JUCE Modules\filmstro_ffmpeg + + + JUCE Modules\filmstro_ffmpeg + + + JUCE Modules\filmstro_ffmpeg + + + JUCE Modules\juce_audio_basics\audio_play_head + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\buffers + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\midi + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\mpe + + + JUCE Modules\juce_audio_basics\native + + + JUCE Modules\juce_audio_basics\native + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\sources + + + JUCE Modules\juce_audio_basics\synthesisers + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics\utilities + + + JUCE Modules\juce_audio_basics + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\audio_io + + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\midi_io + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\include\oboe + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\aaudio + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\common + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\fifo + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph\resampler + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\flowgraph + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native\oboe\src\opensles + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\native + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices\sources + + + JUCE Modules\juce_audio_devices + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\private + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac\libFLAC\include\protected + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\coupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\coupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\floor + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\books\uncoupled + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib\modes + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7\lib + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\codecs + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\format + + + JUCE Modules\juce_audio_formats\sampler + + + JUCE Modules\juce_audio_formats + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\lilv + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\lilv + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lilv\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\atom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\buf-size + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\core + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\core + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\core + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\data-access + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\dynmanifest + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\event + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\event + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\instance-access + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\log + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\log + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\midi + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\morph + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\options + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\parameters + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\patch + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\port-groups + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\port-props + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\presets + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\resize-port + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\state + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\time + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\ui + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\units + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\uri-map + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\urid + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\lv2\lv2\worker + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\serd + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\serd\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\sord + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\sord + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src\zix + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sord\src + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK\sratom\sratom + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\pslextensions + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\moduleinfo + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\moduleinfo + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\moduleinfo + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\moduleinfo + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\moduleinfo + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\utility + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\utility + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\utility + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\format_types + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\processors + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\scanning + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities\ARA + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors\utilities + + + JUCE Modules\juce_audio_processors + + + JUCE Modules\juce_audio_utils\audio_cd + + + JUCE Modules\juce_audio_utils\audio_cd + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\gui + + + JUCE Modules\juce_audio_utils\players + + + JUCE Modules\juce_audio_utils\players + + + JUCE Modules\juce_audio_utils + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\containers + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\files + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\javascript + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\logging + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\maths + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\memory + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\misc + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\native + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\network + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\streams + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\system + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\text + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\threads + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\time + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\unit_tests + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\xml + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip\zlib + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core\zip + + + JUCE Modules\juce_core + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\encryption + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography\hashing + + + JUCE Modules\juce_cryptography + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\app_properties + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\undomanager + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures\values + + + JUCE Modules\juce_data_structures + + + JUCE Modules\juce_dmx\device\sacn + + + JUCE Modules\juce_dmx\device + + + JUCE Modules\juce_dmx\device + + + JUCE Modules\juce_dmx\device + + + JUCE Modules\juce_dmx\device + + + JUCE Modules\juce_dmx\device + + + JUCE Modules\juce_dmx\device + + + JUCE Modules\juce_dmx\ui + + + JUCE Modules\juce_dmx + + + JUCE Modules\juce_dmx + + + JUCE Modules\juce_dmx + + + JUCE Modules\juce_dmx + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\broadcasters + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\interprocess + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\messages + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\native + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events\timers + + + JUCE Modules\juce_events + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\colour + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\contexts + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\effects + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\fonts + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\geometry + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\images + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\native + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics\placement + + + JUCE Modules\juce_graphics + + + JUCE Modules\juce_gui_basics\accessibility\enums + + + JUCE Modules\juce_gui_basics\accessibility\enums + + + JUCE Modules\juce_gui_basics\accessibility\enums + + + JUCE Modules\juce_gui_basics\accessibility\interfaces + + + JUCE Modules\juce_gui_basics\accessibility\interfaces + + + JUCE Modules\juce_gui_basics\accessibility\interfaces + + + JUCE Modules\juce_gui_basics\accessibility\interfaces + + + JUCE Modules\juce_gui_basics\accessibility + + + JUCE Modules\juce_gui_basics\accessibility + + + JUCE Modules\juce_gui_basics\application + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\buttons + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\commands + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\components + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\detail + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\drawables + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\filebrowser + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\keyboard + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\layout + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\lookandfeel + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\menus + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\misc + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\mouse + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native\accessibility + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\native + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\positioning + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\properties + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\widgets + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics\windows + + + JUCE Modules\juce_gui_basics + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\code_editor + + + JUCE Modules\juce_gui_extra\documents + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\embedding + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\misc + + + JUCE Modules\juce_gui_extra\native + + + JUCE Modules\juce_gui_extra + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\geometry + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\native + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\opengl + + + JUCE Modules\juce_opengl\utils + + + JUCE Modules\juce_opengl + + + JUCE Modules\juce_organicui\app + + + JUCE Modules\juce_organicui\app + + + JUCE Modules\juce_organicui\app + + + JUCE Modules\juce_organicui\automation\common\fitting\intern + + + JUCE Modules\juce_organicui\automation\common\fitting\intern + + + JUCE Modules\juce_organicui\automation\common\fitting\intern + + + JUCE Modules\juce_organicui\automation\common\fitting + + + JUCE Modules\juce_organicui\automation\common + + + JUCE Modules\juce_organicui\automation\curve\curve2D\easing\ui + + + JUCE Modules\juce_organicui\automation\curve\curve2D\easing + + + JUCE Modules\juce_organicui\automation\curve\curve2D\ui + + + JUCE Modules\juce_organicui\automation\curve\curve2D\ui + + + JUCE Modules\juce_organicui\automation\curve\curve2D\ui + + + JUCE Modules\juce_organicui\automation\curve\curve2D + + + JUCE Modules\juce_organicui\automation\curve\curve2D + + + JUCE Modules\juce_organicui\automation\easing\ui + + + JUCE Modules\juce_organicui\automation\easing + + + JUCE Modules\juce_organicui\automation\parameter\ui + + + JUCE Modules\juce_organicui\automation\parameter + + + JUCE Modules\juce_organicui\automation\recorder\ui + + + JUCE Modules\juce_organicui\automation\recorder + + + JUCE Modules\juce_organicui\automation\ui + + + JUCE Modules\juce_organicui\automation\ui + + + JUCE Modules\juce_organicui\automation\ui + + + JUCE Modules\juce_organicui\automation\ui + + + JUCE Modules\juce_organicui\automation + + + JUCE Modules\juce_organicui\automation + + + JUCE Modules\juce_organicui\comment\ui + + + JUCE Modules\juce_organicui\comment\ui + + + JUCE Modules\juce_organicui\comment + + + JUCE Modules\juce_organicui\comment + + + JUCE Modules\juce_organicui\controllable\dashboard\ui + + + JUCE Modules\juce_organicui\controllable\dashboard\ui + + + JUCE Modules\juce_organicui\controllable\dashboard\ui + + + JUCE Modules\juce_organicui\controllable\dashboard + + + JUCE Modules\juce_organicui\controllable\dashboard + + + JUCE Modules\juce_organicui\controllable\dashboard + + + JUCE Modules\juce_organicui\controllable\detective\ui + + + JUCE Modules\juce_organicui\controllable\detective\ui + + + JUCE Modules\juce_organicui\controllable\detective + + + JUCE Modules\juce_organicui\controllable\detective + + + JUCE Modules\juce_organicui\controllable\parameter\dashboard\ui + + + JUCE Modules\juce_organicui\controllable\parameter\dashboard + + + JUCE Modules\juce_organicui\controllable\parameter\detective\ui + + + JUCE Modules\juce_organicui\controllable\parameter\detective + + + JUCE Modules\juce_organicui\controllable\parameter\gradient\ui + + + JUCE Modules\juce_organicui\controllable\parameter\gradient\ui + + + JUCE Modules\juce_organicui\controllable\parameter\gradient\ui + + + JUCE Modules\juce_organicui\controllable\parameter\gradient + + + JUCE Modules\juce_organicui\controllable\parameter\gradient + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter\ui + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\parameter + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable\ui + + + JUCE Modules\juce_organicui\controllable + + + JUCE Modules\juce_organicui\controllable + + + JUCE Modules\juce_organicui\controllable + + + JUCE Modules\juce_organicui\controllable + + + JUCE Modules\juce_organicui\controllable + + + JUCE Modules\juce_organicui\controllable + + + JUCE Modules\juce_organicui\controllable + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard\ui + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\dashboard + + + JUCE Modules\juce_organicui\engine + + + JUCE Modules\juce_organicui\engine + + + JUCE Modules\juce_organicui\help + + + JUCE Modules\juce_organicui\help + + + JUCE Modules\juce_organicui\helpers\crypto\hmac + + + JUCE Modules\juce_organicui\helpers\crypto\hmac + + + JUCE Modules\juce_organicui\helpers\crypto\sha512 + + + JUCE Modules\juce_organicui\helpers + + + JUCE Modules\juce_organicui\helpers + + + JUCE Modules\juce_organicui\helpers + + + JUCE Modules\juce_organicui\helpers + + + JUCE Modules\juce_organicui\helpers + + + JUCE Modules\juce_organicui\helpers + + + JUCE Modules\juce_organicui\helpers + + + JUCE Modules\juce_organicui\helpers + + + JUCE Modules\juce_organicui\inspectable\dashboard\ui + + + JUCE Modules\juce_organicui\inspectable\dashboard + + + JUCE Modules\juce_organicui\inspectable\ui + + + JUCE Modules\juce_organicui\inspectable\ui + + + JUCE Modules\juce_organicui\inspectable\ui + + + JUCE Modules\juce_organicui\inspectable\ui + + + JUCE Modules\juce_organicui\inspectable + + + JUCE Modules\juce_organicui\inspectable + + + JUCE Modules\juce_organicui\inspectable + + + JUCE Modules\juce_organicui\logger\ui + + + JUCE Modules\juce_organicui\logger + + + JUCE Modules\juce_organicui\manager\ui + + + JUCE Modules\juce_organicui\manager\ui + + + JUCE Modules\juce_organicui\manager\ui + + + JUCE Modules\juce_organicui\manager\ui + + + JUCE Modules\juce_organicui\manager\ui + + + JUCE Modules\juce_organicui\manager\ui + + + JUCE Modules\juce_organicui\manager\ui + + + JUCE Modules\juce_organicui\manager\ui + + + JUCE Modules\juce_organicui\manager\ui + + + JUCE Modules\juce_organicui\manager + + + JUCE Modules\juce_organicui\manager + + + JUCE Modules\juce_organicui\manager + + + JUCE Modules\juce_organicui\manager + + + JUCE Modules\juce_organicui\manager + + + JUCE Modules\juce_organicui\manager + + + JUCE Modules\juce_organicui\manager + + + JUCE Modules\juce_organicui\outliner + + + JUCE Modules\juce_organicui\parrot\ui + + + JUCE Modules\juce_organicui\parrot\ui + + + JUCE Modules\juce_organicui\parrot + + + JUCE Modules\juce_organicui\parrot + + + JUCE Modules\juce_organicui\parrot + + + JUCE Modules\juce_organicui\parrot + + + JUCE Modules\juce_organicui\progress\ui + + + JUCE Modules\juce_organicui\progress + + + JUCE Modules\juce_organicui\remotecontrol + + + JUCE Modules\juce_organicui\remotecontrol + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui\resources + + + JUCE Modules\juce_organicui\script\ui + + + JUCE Modules\juce_organicui\script\ui + + + JUCE Modules\juce_organicui\script + + + JUCE Modules\juce_organicui\script + + + JUCE Modules\juce_organicui\script + + + JUCE Modules\juce_organicui\script + + + JUCE Modules\juce_organicui\script + + + JUCE Modules\juce_organicui\script + + + JUCE Modules\juce_organicui\settings\ui + + + JUCE Modules\juce_organicui\settings + + + JUCE Modules\juce_organicui\settings + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui\shapeshifter + + + JUCE Modules\juce_organicui\ui + + + JUCE Modules\juce_organicui\ui + + + JUCE Modules\juce_organicui\ui + + + JUCE Modules\juce_organicui\ui + + + JUCE Modules\juce_organicui\undo + + + JUCE Modules\juce_organicui\updater + + + JUCE Modules\juce_organicui\warning\ui + + + JUCE Modules\juce_organicui\warning\ui + + + JUCE Modules\juce_organicui\warning + + + JUCE Modules\juce_organicui\warning + + + JUCE Modules\juce_organicui + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc\osc + + + JUCE Modules\juce_osc + + + JUCE Modules\juce_serial\lib\cobs + + + JUCE Modules\juce_serial\serial\impl + + + JUCE Modules\juce_serial\serial\impl + + + JUCE Modules\juce_serial\serial + + + JUCE Modules\juce_serial\serial + + + JUCE Modules\juce_serial + + + JUCE Modules\juce_serial + + + JUCE Modules\juce_serial + + + JUCE Modules\juce_serial + + + JUCE Modules\juce_sharedtexture + + + JUCE Modules\juce_sharedtexture + + + JUCE Modules\juce_sharedtexture + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\generic\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\generic + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\generic + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\generic + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\generic + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\generic + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ip + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\local\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\local + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\local + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\local + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\local + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\posix + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\posix + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\posix + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\posix + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\posix + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl\impl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ts + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ts + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ts + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ts + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ts + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ts + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ts + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\ts + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\windows + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\windows + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\windows + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\windows + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\windows + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\windows + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\windows + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\windows + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio\windows + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include\asio + + + JUCE Modules\juce_simpleweb\asio\asio\include + + + JUCE Modules\juce_simpleweb\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\detail\impl + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\detail + + + JUCE Modules\juce_simpleweb\asio\generic\detail + + + JUCE Modules\juce_simpleweb\asio\generic + + + JUCE Modules\juce_simpleweb\asio\generic + + + JUCE Modules\juce_simpleweb\asio\generic + + + JUCE Modules\juce_simpleweb\asio\generic + + + JUCE Modules\juce_simpleweb\asio\generic + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\impl + + + JUCE Modules\juce_simpleweb\asio\ip\detail + + + JUCE Modules\juce_simpleweb\asio\ip\detail + + + JUCE Modules\juce_simpleweb\asio\ip\impl + + + JUCE Modules\juce_simpleweb\asio\ip\impl + + + JUCE Modules\juce_simpleweb\asio\ip\impl + + + JUCE Modules\juce_simpleweb\asio\ip\impl + + + JUCE Modules\juce_simpleweb\asio\ip\impl + + + JUCE Modules\juce_simpleweb\asio\ip\impl + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\ip + + + JUCE Modules\juce_simpleweb\asio\local\detail + + + JUCE Modules\juce_simpleweb\asio\local + + + JUCE Modules\juce_simpleweb\asio\local + + + JUCE Modules\juce_simpleweb\asio\local + + + JUCE Modules\juce_simpleweb\asio\local + + + JUCE Modules\juce_simpleweb\asio\posix + + + JUCE Modules\juce_simpleweb\asio\posix + + + JUCE Modules\juce_simpleweb\asio\posix + + + JUCE Modules\juce_simpleweb\asio\posix + + + JUCE Modules\juce_simpleweb\asio\posix + + + JUCE Modules\juce_simpleweb\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\ssl\detail + + + JUCE Modules\juce_simpleweb\asio\ssl\impl + + + JUCE Modules\juce_simpleweb\asio\ssl\impl + + + JUCE Modules\juce_simpleweb\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\ssl + + + JUCE Modules\juce_simpleweb\asio\ts + + + JUCE Modules\juce_simpleweb\asio\ts + + + JUCE Modules\juce_simpleweb\asio\ts + + + JUCE Modules\juce_simpleweb\asio\ts + + + JUCE Modules\juce_simpleweb\asio\ts + + + JUCE Modules\juce_simpleweb\asio\ts + + + JUCE Modules\juce_simpleweb\asio\ts + + + JUCE Modules\juce_simpleweb\asio\ts + + + JUCE Modules\juce_simpleweb\asio\windows + + + JUCE Modules\juce_simpleweb\asio\windows + + + JUCE Modules\juce_simpleweb\asio\windows + + + JUCE Modules\juce_simpleweb\asio\windows + + + JUCE Modules\juce_simpleweb\asio\windows + + + JUCE Modules\juce_simpleweb\asio\windows + + + JUCE Modules\juce_simpleweb\asio\windows + + + JUCE Modules\juce_simpleweb\asio\windows + + + JUCE Modules\juce_simpleweb\asio\windows + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb\common + + + JUCE Modules\juce_simpleweb\common + + + JUCE Modules\juce_simpleweb\common + + + JUCE Modules\juce_simpleweb\common + + + JUCE Modules\juce_simpleweb\common + + + JUCE Modules\juce_simpleweb\common + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\openssl + + + JUCE Modules\juce_simpleweb\webserver + + + JUCE Modules\juce_simpleweb\webserver + + + JUCE Modules\juce_simpleweb\webserver + + + JUCE Modules\juce_simpleweb\websocket + + + JUCE Modules\juce_simpleweb\websocket + + + JUCE Modules\juce_simpleweb\websocket + + + JUCE Modules\juce_simpleweb\websocket + + + JUCE Modules\juce_simpleweb + + + JUCE Modules\juce_simpleweb + + + JUCE Modules\juce_simpleweb + + + JUCE Modules\juce_simpleweb + + + JUCE Modules\juce_simpleweb + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline\resources + + + JUCE Modules\juce_timeline\timeline\Sequence\Cue\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Cue\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Cue + + + JUCE Modules\juce_timeline\timeline\Sequence\Cue + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\audio + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Block\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Block\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Block + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Block + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\SequenceBlock + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\layers\Trigger + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer + + + JUCE Modules\juce_timeline\timeline\Sequence\Layer + + + JUCE Modules\juce_timeline\timeline\Sequence\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\ui + + + JUCE Modules\juce_timeline\timeline\Sequence\ui + + + JUCE Modules\juce_timeline\timeline\Sequence + + + JUCE Modules\juce_timeline\timeline\Sequence + + + JUCE Modules\juce_timeline\timeline\ui + + + JUCE Modules\juce_timeline\timeline\ui + + + JUCE Modules\juce_timeline\timeline + + + JUCE Modules\juce_timeline + + + JUCE Modules\juce_timeline + + + JUCE Modules\juce_video\capture + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\native + + + JUCE Modules\juce_video\playback + + + JUCE Modules\juce_video + + + JUCE Library Code + + + JUCE Library Code + + + JUCE Library Code + + + + + BenTo\Resources\firmware\server + + + BenTo\Resources\firmware\server + + + BenTo\Resources\firmware\server + + + BenTo\Resources\firmware\server + + + BenTo\Resources\models\patterns + + + BenTo\Resources\models\patterns + + + BenTo\Resources\models\patterns + + + BenTo\Resources\models\patterns + + + BenTo\Resources\models\patterns + + + BenTo\Resources\models\patterns + + + BenTo\Resources\models\patterns + + + BenTo\Resources\models\patterns + + + BenTo\Resources\models + + + BenTo\Resources\models + + + BenTo\Resources\models + + + BenTo\Resources\models + + + BenTo\Resources\models + + + BenTo\Resources\models + + + BenTo\Resources\models + + + BenTo\Resources + + + BenTo\Resources + + + BenTo\Resources + + + BenTo\Resources + + + BenTo\Resources + + + BenTo\Resources + + + JUCE Modules\juce_audio_devices\native\oboe + + + JUCE Modules\juce_audio_devices\native\oboe + + + JUCE Modules\juce_audio_formats\codecs\flac + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis\libvorbis-1.3.7 + + + JUCE Modules\juce_audio_formats\codecs\oggvorbis + + + JUCE Modules\juce_audio_processors\format_types\LV2_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\moduleinfo + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_core\native\java + + + JUCE Modules\juce_dmx + + + JUCE Modules\juce_graphics\image_formats\jpglib + + + JUCE Modules\juce_graphics\image_formats\pnglib + + + JUCE Modules\juce_organicui\resources\organicui_resources\JuceLibraryCode + + + JUCE Modules\juce_organicui + + + JUCE Modules\juce_serial + + + JUCE Modules\juce_sharedtexture + + + JUCE Modules\juce_simpleweb\asio + + + JUCE Modules\juce_simpleweb + + + JUCE Modules\juce_timeline\resources\timeline_resources\JuceLibraryCode + + + JUCE Modules\juce_timeline + + + JUCE Library Code + + + + + + JUCE Library Code + + + diff --git a/Builds/VisualStudio2022_CI/icon.ico b/Builds/VisualStudio2022_CI/icon.ico new file mode 100644 index 00000000..5de47d3b Binary files /dev/null and b/Builds/VisualStudio2022_CI/icon.ico differ diff --git a/Builds/VisualStudio2022_CI/packages.config b/Builds/VisualStudio2022_CI/packages.config new file mode 100644 index 00000000..8f7758db --- /dev/null +++ b/Builds/VisualStudio2022_CI/packages.config @@ -0,0 +1,4 @@ + + + + diff --git a/Builds/VisualStudio2022_CI/packages/Microsoft.Web.WebView2.1.0.902.49/.signature.p7s b/Builds/VisualStudio2022_CI/packages/Microsoft.Web.WebView2.1.0.902.49/.signature.p7s new file mode 100644 index 00000000..66488604 Binary files /dev/null and b/Builds/VisualStudio2022_CI/packages/Microsoft.Web.WebView2.1.0.902.49/.signature.p7s differ diff --git a/Builds/VisualStudio2022_CI/packages/Microsoft.Web.WebView2.1.0.902.49/LICENSE.txt b/Builds/VisualStudio2022_CI/packages/Microsoft.Web.WebView2.1.0.902.49/LICENSE.txt new file mode 100644 index 00000000..45f02978 --- /dev/null +++ b/Builds/VisualStudio2022_CI/packages/Microsoft.Web.WebView2.1.0.902.49/LICENSE.txt @@ -0,0 +1,27 @@ +Copyright (C) Microsoft Corporation. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * The name of Microsoft Corporation, or the names of its contributors +may not be used to endorse or promote products derived from this +software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Builds/VisualStudio2022_CI/packages/Microsoft.Web.WebView2.1.0.902.49/Microsoft.Web.WebView2.1.0.902.49.nupkg b/Builds/VisualStudio2022_CI/packages/Microsoft.Web.WebView2.1.0.902.49/Microsoft.Web.WebView2.1.0.902.49.nupkg new file mode 100644 index 00000000..6da0316f Binary files /dev/null and b/Builds/VisualStudio2022_CI/packages/Microsoft.Web.WebView2.1.0.902.49/Microsoft.Web.WebView2.1.0.902.49.nupkg differ diff --git a/Builds/VisualStudio2022_CI/packages/Microsoft.Web.WebView2.1.0.902.49/WebView2.idl b/Builds/VisualStudio2022_CI/packages/Microsoft.Web.WebView2.1.0.902.49/WebView2.idl new file mode 100644 index 00000000..77a6eb79 --- /dev/null +++ b/Builds/VisualStudio2022_CI/packages/Microsoft.Web.WebView2.1.0.902.49/WebView2.idl @@ -0,0 +1,4979 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import "objidl.idl"; +import "oaidl.idl"; +import "EventToken.idl"; + +[uuid(26d34152-879f-4065-bea2-3daa2cfadfb8), version(1.0)] +library WebView2 { + +// Interface forward declarations + +interface ICoreWebView2AcceleratorKeyPressedEventArgs; +interface ICoreWebView2AcceleratorKeyPressedEventHandler; +interface ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler; +interface ICoreWebView2CallDevToolsProtocolMethodCompletedHandler; +interface ICoreWebView2CapturePreviewCompletedHandler; +interface ICoreWebView2; +interface ICoreWebView2_2; +interface ICoreWebView2_3; +interface ICoreWebView2_4; +interface ICoreWebView2BytesReceivedChangedEventHandler; +interface ICoreWebView2CompositionController; +interface ICoreWebView2CompositionController2; +interface ICoreWebView2Controller; +interface ICoreWebView2Controller2; +interface ICoreWebView2Controller3; +interface ICoreWebView2ContentLoadingEventArgs; +interface ICoreWebView2ContentLoadingEventHandler; +interface ICoreWebView2Cookie; +interface ICoreWebView2CookieList; +interface ICoreWebView2CookieManager; +interface ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler; +interface ICoreWebView2CreateCoreWebView2ControllerCompletedHandler; +interface ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler; +interface ICoreWebView2ContainsFullScreenElementChangedEventHandler; +interface ICoreWebView2CursorChangedEventHandler; +interface ICoreWebView2DocumentTitleChangedEventHandler; +interface ICoreWebView2DOMContentLoadedEventArgs; +interface ICoreWebView2DOMContentLoadedEventHandler; +interface ICoreWebView2Deferral; +interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs; +interface ICoreWebView2DevToolsProtocolEventReceivedEventHandler; +interface ICoreWebView2DevToolsProtocolEventReceiver; +interface ICoreWebView2DownloadOperation; +interface ICoreWebView2DownloadStartingEventArgs; +interface ICoreWebView2DownloadStartingEventHandler; +interface ICoreWebView2Environment; +interface ICoreWebView2Environment2; +interface ICoreWebView2Environment3; +interface ICoreWebView2Environment4; +interface ICoreWebView2EnvironmentOptions; +interface ICoreWebView2EstimatedEndTimeChangedEventHandler; +interface ICoreWebView2ExecuteScriptCompletedHandler; +interface ICoreWebView2Frame; +interface ICoreWebView2FrameCreatedEventArgs; +interface ICoreWebView2FrameCreatedEventHandler; +interface ICoreWebView2FrameDestroyedEventHandler; +interface ICoreWebView2FrameNameChangedEventHandler; +interface ICoreWebView2FrameInfo; +interface ICoreWebView2FrameInfoCollection; +interface ICoreWebView2FrameInfoCollectionIterator; +interface ICoreWebView2FocusChangedEventHandler; +interface ICoreWebView2GetCookiesCompletedHandler; +interface ICoreWebView2HistoryChangedEventHandler; +interface ICoreWebView2HttpHeadersCollectionIterator; +interface ICoreWebView2HttpRequestHeaders; +interface ICoreWebView2HttpResponseHeaders; +interface ICoreWebView2Interop; +interface ICoreWebView2MoveFocusRequestedEventArgs; +interface ICoreWebView2MoveFocusRequestedEventHandler; +interface ICoreWebView2NavigationCompletedEventArgs; +interface ICoreWebView2NavigationCompletedEventHandler; +interface ICoreWebView2NavigationStartingEventArgs; +interface ICoreWebView2NavigationStartingEventHandler; +interface ICoreWebView2NewBrowserVersionAvailableEventHandler; +interface ICoreWebView2NewWindowRequestedEventArgs; +interface ICoreWebView2NewWindowRequestedEventHandler; +interface ICoreWebView2PermissionRequestedEventArgs; +interface ICoreWebView2PermissionRequestedEventHandler; +interface ICoreWebView2PointerInfo; +interface ICoreWebView2ProcessFailedEventArgs; +interface ICoreWebView2ProcessFailedEventArgs2; +interface ICoreWebView2ProcessFailedEventHandler; +interface ICoreWebView2RasterizationScaleChangedEventHandler; +interface ICoreWebView2ScriptDialogOpeningEventArgs; +interface ICoreWebView2ScriptDialogOpeningEventHandler; +interface ICoreWebView2Settings; +interface ICoreWebView2Settings2; +interface ICoreWebView2Settings3; +interface ICoreWebView2Settings4; +interface ICoreWebView2Settings5; +interface ICoreWebView2SourceChangedEventArgs; +interface ICoreWebView2SourceChangedEventHandler; +interface ICoreWebView2StateChangedEventHandler; +interface ICoreWebView2TrySuspendCompletedHandler; +interface ICoreWebView2WebMessageReceivedEventArgs; +interface ICoreWebView2WebMessageReceivedEventHandler; +interface ICoreWebView2WebResourceRequest; +interface ICoreWebView2WebResourceRequestedEventArgs; +interface ICoreWebView2WebResourceRequestedEventHandler; +interface ICoreWebView2WebResourceResponse; +interface ICoreWebView2WebResourceResponseReceivedEventHandler; +interface ICoreWebView2WebResourceResponseReceivedEventArgs; +interface ICoreWebView2WebResourceResponseView; +interface ICoreWebView2WebResourceResponseViewGetContentCompletedHandler; +interface ICoreWebView2WindowCloseRequestedEventHandler; +interface ICoreWebView2WindowFeatures; +interface ICoreWebView2ZoomFactorChangedEventHandler; + +// Enums and structs + +/// Specifies the image format for the `ICoreWebView2::CapturePreview` method. + +[v1_enum] +typedef enum COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT { + + /// Indicates that the PNG image format is used. + + COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_PNG, + + /// Indicates the JPEG image format is used. + + COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_JPEG, +} COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT; + +/// Kind of cookie SameSite status used in the ICoreWebView2Cookie interface. +/// These fields match those as specified in https://developer.mozilla.org/docs/Web/HTTP/Cookies#. +/// Learn more about SameSite cookies here: https://tools.ietf.org/html/draft-west-first-party-cookies-07 +[v1_enum] +typedef enum COREWEBVIEW2_COOKIE_SAME_SITE_KIND { + /// None SameSite type. No restrictions on cross-site requests. + COREWEBVIEW2_COOKIE_SAME_SITE_KIND_NONE, + /// Lax SameSite type. The cookie will be sent with "same-site" requests, and with "cross-site" top level navigation. + COREWEBVIEW2_COOKIE_SAME_SITE_KIND_LAX, + /// Strict SameSite type. The cookie will only be sent along with "same-site" requests. + COREWEBVIEW2_COOKIE_SAME_SITE_KIND_STRICT, +} COREWEBVIEW2_COOKIE_SAME_SITE_KIND; + +/// Kind of cross origin resource access allowed for host resources during download. +/// Note that other normal access checks like same origin DOM access check and [Content +/// Security Policy](https://developer.mozilla.org/docs/Web/HTTP/CSP) still apply. +/// The following table illustrates the host resource cross origin access according to +/// access context and `COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND`. +/// Cross Origin Access Context | DENY | ALLOW | DENY_CORS +/// --- | --- | --- | --- +/// From DOM like src of img, script or iframe element| Deny | Allow | Allow +/// From Script like Fetch or XMLHttpRequest| Deny | Allow | Deny +[v1_enum] +typedef enum COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND { + /// All cross origin resource access is denied, including normal sub resource access + /// as src of a script or image element. + COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND_DENY, + + /// All cross origin resource access is allowed, including accesses that are + /// subject to Cross-Origin Resource Sharing(CORS) check. The behavior is similar to + /// a web site sends back http header Access-Control-Allow-Origin: *. + COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND_ALLOW, + + /// Cross origin resource access is allowed for normal sub resource access like + /// as src of a script or image element, while any access that subjects to CORS check + /// will be denied. + /// See [Cross-Origin Resource Sharing](https://developer.mozilla.org/docs/Web/HTTP/CORS) + /// for more information. + COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND_DENY_CORS, +} COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND; + +/// Specifies the JavaScript dialog type used in the +/// `ICoreWebView2ScriptDialogOpeningEventHandler` interface. + +[v1_enum] +typedef enum COREWEBVIEW2_SCRIPT_DIALOG_KIND { + + /// Indicates that the dialog uses the `window.alert` JavaScript function. + + COREWEBVIEW2_SCRIPT_DIALOG_KIND_ALERT, + + /// Indicates that the dialog uses the `window.confirm` JavaScript function. + + COREWEBVIEW2_SCRIPT_DIALOG_KIND_CONFIRM, + + /// Indicates that the dialog uses the `window.prompt` JavaScript function. + + COREWEBVIEW2_SCRIPT_DIALOG_KIND_PROMPT, + + /// Indicates that the dialog uses the `beforeunload` JavaScript event. + + COREWEBVIEW2_SCRIPT_DIALOG_KIND_BEFOREUNLOAD, +} COREWEBVIEW2_SCRIPT_DIALOG_KIND; + +/// Specifies the process failure type used in the +/// `ICoreWebView2ProcessFailedEventHandler` interface. The values in this enum +/// make reference to the process kinds in the Chromium architecture. For more +/// information about what these processes are and what they do, see +/// [Browser Architecture - Inside look at modern web browser](https://developers.google.com/web/updates/2018/09/inside-browser-part1). + +[v1_enum] +typedef enum COREWEBVIEW2_PROCESS_FAILED_KIND { + + /// Indicates that the browser process ended unexpectedly. The WebView + /// automatically moves to the Closed state. The app has to recreate a new + /// WebView to recover from this failure. + + COREWEBVIEW2_PROCESS_FAILED_KIND_BROWSER_PROCESS_EXITED, + + /// Indicates that the main frame's render process ended unexpectedly. A new + /// render process is created automatically and navigated to an error page. + /// You can use the `Reload` method to try to reload the page that failed. + + COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_EXITED, + + /// Indicates that the main frame's render process is unresponsive. + + // Note that this does not seem to work right now. + // Does not fire for simple long running script case, the only related test + // SitePerProcessBrowserTest::NoCommitTimeoutForInvisibleWebContents is + // disabled. + + COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_UNRESPONSIVE, + + /// Indicates that a frame-only render process ended unexpectedly. The process + /// exit does not affect the top-level document, only a subset of the + /// subframes within it. The content in these frames is replaced with an error + /// page in the frame. + + COREWEBVIEW2_PROCESS_FAILED_KIND_FRAME_RENDER_PROCESS_EXITED, + + /// Indicates that a utility process ended unexpectedly. + + COREWEBVIEW2_PROCESS_FAILED_KIND_UTILITY_PROCESS_EXITED, + + /// Indicates that a sandbox helper process ended unexpectedly. + + COREWEBVIEW2_PROCESS_FAILED_KIND_SANDBOX_HELPER_PROCESS_EXITED, + + /// Indicates that the GPU process ended unexpectedly. + + COREWEBVIEW2_PROCESS_FAILED_KIND_GPU_PROCESS_EXITED, + + /// Indicates that a PPAPI plugin process ended unexpectedly. + + COREWEBVIEW2_PROCESS_FAILED_KIND_PPAPI_PLUGIN_PROCESS_EXITED, + + /// Indicates that a PPAPI plugin broker process ended unexpectedly. + + COREWEBVIEW2_PROCESS_FAILED_KIND_PPAPI_BROKER_PROCESS_EXITED, + + /// Indicates that a process of unspecified kind ended unexpectedly. + + COREWEBVIEW2_PROCESS_FAILED_KIND_UNKNOWN_PROCESS_EXITED, +} COREWEBVIEW2_PROCESS_FAILED_KIND; + +/// Specifies the process failure reason used in the +/// `ICoreWebView2ProcessFailedEventHandler` interface. + +[v1_enum] +typedef enum COREWEBVIEW2_PROCESS_FAILED_REASON { + + /// An unexpected process failure occurred. + COREWEBVIEW2_PROCESS_FAILED_REASON_UNEXPECTED, + + /// The process became unresponsive. + /// This only applies to the main frame's render process. + + COREWEBVIEW2_PROCESS_FAILED_REASON_UNRESPONSIVE, + + /// The process was terminated. For example, from Task Manager. + + COREWEBVIEW2_PROCESS_FAILED_REASON_TERMINATED, + + /// The process crashed. + + COREWEBVIEW2_PROCESS_FAILED_REASON_CRASHED, + + /// The process failed to launch. + + COREWEBVIEW2_PROCESS_FAILED_REASON_LAUNCH_FAILED, + + /// The process died due to running out of memory. + + COREWEBVIEW2_PROCESS_FAILED_REASON_OUT_OF_MEMORY, +} COREWEBVIEW2_PROCESS_FAILED_REASON; + +/// Indicates the type of a permission request. + +[v1_enum] +typedef enum COREWEBVIEW2_PERMISSION_KIND { + + /// Indicates an unknown permission. + + COREWEBVIEW2_PERMISSION_KIND_UNKNOWN_PERMISSION, + + /// Indicates permission to capture audio. + + COREWEBVIEW2_PERMISSION_KIND_MICROPHONE, + + /// Indicates permission to capture video. + + COREWEBVIEW2_PERMISSION_KIND_CAMERA, + + /// Indicates permission to access geolocation. + + COREWEBVIEW2_PERMISSION_KIND_GEOLOCATION, + + /// Indicates permission to send web notifications. This permission request + /// is currently auto-rejected and no event is run for it. + + COREWEBVIEW2_PERMISSION_KIND_NOTIFICATIONS, + + /// Indicates permission to access generic sensor. Generic Sensor covering + /// ambient-light-sensor, accelerometer, gyroscope, and magnetometer. + + COREWEBVIEW2_PERMISSION_KIND_OTHER_SENSORS, + + /// Indicates permission to read the system clipboard without a user gesture. + + COREWEBVIEW2_PERMISSION_KIND_CLIPBOARD_READ, +} COREWEBVIEW2_PERMISSION_KIND; + +/// Specifies the response to a permission request. + +[v1_enum] +typedef enum COREWEBVIEW2_PERMISSION_STATE { + + /// Specifies that the default browser behavior is used, which normally + /// prompt users for decision. + + COREWEBVIEW2_PERMISSION_STATE_DEFAULT, + + /// Specifies that the permission request is granted. + + COREWEBVIEW2_PERMISSION_STATE_ALLOW, + + /// Specifies that the permission request is denied. + + COREWEBVIEW2_PERMISSION_STATE_DENY, +} COREWEBVIEW2_PERMISSION_STATE; + +/// Indicates the error status values for web navigations. + +[v1_enum] +typedef enum COREWEBVIEW2_WEB_ERROR_STATUS { + + /// Indicates that an unknown error occurred. + + COREWEBVIEW2_WEB_ERROR_STATUS_UNKNOWN, + + /// Indicates that the SSL certificate common name does not match the web + /// address. + + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_COMMON_NAME_IS_INCORRECT, + + /// Indicates that the SSL certificate has expired. + + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_EXPIRED, + + /// Indicates that the SSL client certificate contains errors. + + COREWEBVIEW2_WEB_ERROR_STATUS_CLIENT_CERTIFICATE_CONTAINS_ERRORS, + + /// Indicates that the SSL certificate has been revoked. + + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_REVOKED, + + /// Indicates that the SSL certificate is not valid. The certificate may not + /// match the public key pins for the host name, the certificate is signed + /// by an untrusted authority or using a weak sign algorithm, the certificate + /// claimed DNS names violate name constraints, the certificate contains a + /// weak key, the validity period of the certificate is too long, lack of + /// revocation information or revocation mechanism, non-unique host name, + /// lack of certificate transparency information, or the certificate is + /// chained to a + /// \[legacy Symantec root\]\[GoogleblogSecurity201803DistrustSymantecPkiImmediateHtml\]. + /// + /// \[GoogleblogSecurity201803DistrustSymantecPkiImmediateHtml\]: https://security.googleblog.com/2018/03/distrust-of-symantec-pki-immediate.html "Distrust of the Symantec PKI: Immediate action needed by site operators | Google Security Blog" + + COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_IS_INVALID, + + /// Indicates that the host is unreachable. + + COREWEBVIEW2_WEB_ERROR_STATUS_SERVER_UNREACHABLE, + + /// Indicates that the connection has timed out. + + COREWEBVIEW2_WEB_ERROR_STATUS_TIMEOUT, + + /// Indicates that the server returned an invalid or unrecognized response. + + COREWEBVIEW2_WEB_ERROR_STATUS_ERROR_HTTP_INVALID_SERVER_RESPONSE, + + /// Indicates that the connection was stopped. + + COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_ABORTED, + + /// Indicates that the connection was reset. + + COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_RESET, + + /// Indicates that the Internet connection has been lost. + + COREWEBVIEW2_WEB_ERROR_STATUS_DISCONNECTED, + + /// Indicates that a connection to the destination was not established. + + COREWEBVIEW2_WEB_ERROR_STATUS_CANNOT_CONNECT, + + /// Indicates that the provided host name was not able to be resolved. + + COREWEBVIEW2_WEB_ERROR_STATUS_HOST_NAME_NOT_RESOLVED, + + /// Indicates that the operation was canceled. + + COREWEBVIEW2_WEB_ERROR_STATUS_OPERATION_CANCELED, + + /// Indicates that the request redirect failed. + + COREWEBVIEW2_WEB_ERROR_STATUS_REDIRECT_FAILED, + + /// Indicates that an unexpected error occurred. + + COREWEBVIEW2_WEB_ERROR_STATUS_UNEXPECTED_ERROR, +} COREWEBVIEW2_WEB_ERROR_STATUS; + +/// Specifies the web resource request contexts. + +[v1_enum] +typedef enum COREWEBVIEW2_WEB_RESOURCE_CONTEXT { + + /// Specifies all resources. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL, + + /// Specifies a document resource. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_DOCUMENT, + + /// Specifies a CSS resource. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_STYLESHEET, + + /// Specifies an image resource. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_IMAGE, + + /// Specifies another media resource such as a video. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MEDIA, + + /// Specifies a font resource. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FONT, + + /// Specifies a script resource. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SCRIPT, + + /// Specifies an XML HTTP request. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_XML_HTTP_REQUEST, + + /// Specifies a Fetch API communication. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FETCH, + + /// Specifies a TextTrack resource. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_TEXT_TRACK, + + /// Specifies an EventSource API communication. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_EVENT_SOURCE, + + /// Specifies a WebSocket API communication. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_WEBSOCKET, + + /// Specifies a Web App Manifest. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MANIFEST, + + /// Specifies a Signed HTTP Exchange. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SIGNED_EXCHANGE, + + /// Specifies a Ping request. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_PING, + + /// Specifies a CSP Violation Report. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_CSP_VIOLATION_REPORT, + + /// Specifies an other resource. + + COREWEBVIEW2_WEB_RESOURCE_CONTEXT_OTHER +} COREWEBVIEW2_WEB_RESOURCE_CONTEXT; + +/// Specifies the reason for moving focus. + +[v1_enum] +typedef enum COREWEBVIEW2_MOVE_FOCUS_REASON { + + /// Specifies that the code is setting focus into WebView. + + COREWEBVIEW2_MOVE_FOCUS_REASON_PROGRAMMATIC, + + /// Specifies that the focus is moving due to Tab traversal forward. + + COREWEBVIEW2_MOVE_FOCUS_REASON_NEXT, + + /// Specifies that the focus is moving due to Tab traversal backward. + + COREWEBVIEW2_MOVE_FOCUS_REASON_PREVIOUS, +} COREWEBVIEW2_MOVE_FOCUS_REASON; + +/// Specifies the key event type that triggered an `AcceleratorKeyPressed` +/// event. + +[v1_enum] +typedef enum COREWEBVIEW2_KEY_EVENT_KIND { + + /// Specifies that the key event type corresponds to window message + /// `WM_KEYDOWN`. + + COREWEBVIEW2_KEY_EVENT_KIND_KEY_DOWN, + + /// Specifies that the key event type corresponds to window message + /// `WM_KEYUP`. + + COREWEBVIEW2_KEY_EVENT_KIND_KEY_UP, + + /// Specifies that the key event type corresponds to window message + /// `WM_SYSKEYDOWN`. + + COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_DOWN, + + /// Specifies that the key event type corresponds to window message + /// `WM_SYSKEYUP`. + + COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_UP, +} COREWEBVIEW2_KEY_EVENT_KIND; + +/// Contains the information packed into the `LPARAM` sent to a Win32 key +/// event. For more information about `WM_KEYDOWN`, navigate to +/// \[WM_KEYDOWN message\]\[WindowsWin32InputdevWmKeydown\]. +/// +/// \[WindowsWin32InputdevWmKeydown\]: /windows/win32/inputdev/wm-keydown "WM_KEYDOWN message | Microsoft Docs" + +typedef struct COREWEBVIEW2_PHYSICAL_KEY_STATUS { + + /// Specifies the repeat count for the current message. + + UINT32 RepeatCount; + + /// Specifies the scan code. + + UINT32 ScanCode; + + /// Indicates that the key is an extended key. + + BOOL IsExtendedKey; + + /// Indicates that a menu key is held down (context code). + + BOOL IsMenuKeyDown; + + /// Indicates that the key was held down. + + BOOL WasKeyDown; + + /// Indicates that the key was released. + + BOOL IsKeyReleased; +} COREWEBVIEW2_PHYSICAL_KEY_STATUS; + +/// A value representing RGBA color (Red, Green, Blue, Alpha) for WebView2. +/// Each component takes a value from 0 to 255, with 0 being no intensity +/// and 255 being the highest intensity. + +typedef struct COREWEBVIEW2_COLOR { + + /// Specifies the intensity of the Alpha ie. opacity value. 0 is transparent, + /// 255 is opaque. + + BYTE A; + + /// Specifies the intensity of the Red color + + BYTE R; + + /// Specifies the intensity of the Green color + + BYTE G; + + /// Specifies the intensity of the Blue color + + BYTE B; +} COREWEBVIEW2_COLOR; + +/// Mouse event type used by SendMouseInput to convey the type of mouse event +/// being sent to WebView. The values of this enum align with the matching +/// WM_* window messages. + +[v1_enum] +typedef enum COREWEBVIEW2_MOUSE_EVENT_KIND { + + /// Mouse horizontal wheel scroll event, WM_MOUSEHWHEEL. + + COREWEBVIEW2_MOUSE_EVENT_KIND_HORIZONTAL_WHEEL = 0x020E, + + /// Left button double click mouse event, WM_LBUTTONDBLCLK. + + COREWEBVIEW2_MOUSE_EVENT_KIND_LEFT_BUTTON_DOUBLE_CLICK = 0x0203, + + /// Left button down mouse event, WM_LBUTTONDOWN. + + COREWEBVIEW2_MOUSE_EVENT_KIND_LEFT_BUTTON_DOWN = 0x0201, + + /// Left button up mouse event, WM_LBUTTONUP. + + COREWEBVIEW2_MOUSE_EVENT_KIND_LEFT_BUTTON_UP = 0x0202, + + /// Mouse leave event, WM_MOUSELEAVE. + + COREWEBVIEW2_MOUSE_EVENT_KIND_LEAVE = 0x02A3, + + /// Middle button double click mouse event, WM_MBUTTONDBLCLK. + + COREWEBVIEW2_MOUSE_EVENT_KIND_MIDDLE_BUTTON_DOUBLE_CLICK = 0x0209, + + /// Middle button down mouse event, WM_MBUTTONDOWN. + + COREWEBVIEW2_MOUSE_EVENT_KIND_MIDDLE_BUTTON_DOWN = 0x0207, + + /// Middle button up mouse event, WM_MBUTTONUP. + + COREWEBVIEW2_MOUSE_EVENT_KIND_MIDDLE_BUTTON_UP = 0x0208, + + /// Mouse move event, WM_MOUSEMOVE. + + COREWEBVIEW2_MOUSE_EVENT_KIND_MOVE = 0x0200, + + /// Right button double click mouse event, WM_RBUTTONDBLCLK. + + COREWEBVIEW2_MOUSE_EVENT_KIND_RIGHT_BUTTON_DOUBLE_CLICK = 0x0206, + + /// Right button down mouse event, WM_RBUTTONDOWN. + + COREWEBVIEW2_MOUSE_EVENT_KIND_RIGHT_BUTTON_DOWN = 0x0204, + + /// Right button up mouse event, WM_RBUTTONUP. + + COREWEBVIEW2_MOUSE_EVENT_KIND_RIGHT_BUTTON_UP = 0x0205, + + /// Mouse wheel scroll event, WM_MOUSEWHEEL. + + COREWEBVIEW2_MOUSE_EVENT_KIND_WHEEL = 0x020A, + + /// First or second X button double click mouse event, WM_XBUTTONDBLCLK. + + COREWEBVIEW2_MOUSE_EVENT_KIND_X_BUTTON_DOUBLE_CLICK = 0x020D, + + /// First or second X button down mouse event, WM_XBUTTONDOWN. + + COREWEBVIEW2_MOUSE_EVENT_KIND_X_BUTTON_DOWN = 0x020B, + + /// First or second X button up mouse event, WM_XBUTTONUP. + + COREWEBVIEW2_MOUSE_EVENT_KIND_X_BUTTON_UP = 0x020C, +} COREWEBVIEW2_MOUSE_EVENT_KIND; + +/// Mouse event virtual keys associated with a COREWEBVIEW2_MOUSE_EVENT_KIND for +/// SendMouseInput. These values can be combined into a bit flag if more than +/// one virtual key is pressed for the event. The values of this enum align +/// with the matching MK_* mouse keys. + +[v1_enum] +typedef enum COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS { + + /// No additional keys pressed. + + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_NONE = 0x0, + + /// Left mouse button is down, MK_LBUTTON. + + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_LEFT_BUTTON = 0x0001, + + /// Right mouse button is down, MK_RBUTTON. + + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_RIGHT_BUTTON = 0x0002, + + /// SHIFT key is down, MK_SHIFT. + + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_SHIFT = 0x0004, + + /// CTRL key is down, MK_CONTROL. + + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_CONTROL = 0x0008, + + /// Middle mouse button is down, MK_MBUTTON. + + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_MIDDLE_BUTTON = 0x0010, + + /// First X button is down, MK_XBUTTON1 + + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_X_BUTTON1 = 0x0020, + + /// Second X button is down, MK_XBUTTON2 + + COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS_X_BUTTON2 = 0x0040, +} COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS; +cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS);") + +/// Pointer event type used by SendPointerInput to convey the type of pointer +/// event being sent to WebView. The values of this enum align with the +/// matching WM_POINTER* window messages. + +[v1_enum] +typedef enum COREWEBVIEW2_POINTER_EVENT_KIND { + + /// Corresponds to WM_POINTERACTIVATE. + + COREWEBVIEW2_POINTER_EVENT_KIND_ACTIVATE = 0x024B, + + /// Corresponds to WM_POINTERDOWN. + + COREWEBVIEW2_POINTER_EVENT_KIND_DOWN = 0x0246, + + /// Corresponds to WM_POINTERENTER. + + COREWEBVIEW2_POINTER_EVENT_KIND_ENTER = 0x0249, + + /// Corresponds to WM_POINTERLEAVE. + + COREWEBVIEW2_POINTER_EVENT_KIND_LEAVE = 0x024A, + + /// Corresponds to WM_POINTERUP. + + COREWEBVIEW2_POINTER_EVENT_KIND_UP = 0x0247, + + /// Corresponds to WM_POINTERUPDATE. + + COREWEBVIEW2_POINTER_EVENT_KIND_UPDATE = 0x0245, +} COREWEBVIEW2_POINTER_EVENT_KIND; + +/// Mode for how the Bounds property is interpreted in relation to the RasterizationScale property. +[v1_enum] +typedef enum COREWEBVIEW2_BOUNDS_MODE { + + /// Bounds property represents raw pixels. Physical size of Webview is not impacted by RasterizationScale. + + COREWEBVIEW2_BOUNDS_MODE_USE_RAW_PIXELS, + + /// Bounds property represents logicl pixels and the RasterizationScale property is used to get the physical size of the WebView. + + COREWEBVIEW2_BOUNDS_MODE_USE_RASTERIZATION_SCALE, +} COREWEBVIEW2_BOUNDS_MODE; + +/// State of the download operation. +[v1_enum] +typedef enum COREWEBVIEW2_DOWNLOAD_STATE { + /// The download is in progress. + COREWEBVIEW2_DOWNLOAD_STATE_IN_PROGRESS, + /// The connection with the file host was broken. The `InterruptReason` property + /// can be accessed from `ICoreWebView2DownloadOperation`. See + /// `COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON` for descriptions of kinds of + /// interrupt reasons. Host can check whether an interrupted download can be + /// resumed with the `CanResume` property on the `ICoreWebView2DownloadOperation`. + /// Once resumed, a download is in the `COREWEBVIEW2_DOWNLOAD_STATE_IN_PROGRESS` state. + COREWEBVIEW2_DOWNLOAD_STATE_INTERRUPTED, + /// The download completed successfully. + COREWEBVIEW2_DOWNLOAD_STATE_COMPLETED, +} COREWEBVIEW2_DOWNLOAD_STATE; + +/// Reason why a download was interrupted. +[v1_enum] +typedef enum COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON { + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NONE, + + /// Generic file error. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, + /// Access denied due to security restrictions. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED, + /// Disk full. User should free some space or choose a different location to + /// store the file. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, + /// Result file path with file name is too long. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_NAME_TOO_LONG, + /// File is too large for file system. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_TOO_LARGE, + /// Microsoft Defender Smartscreen detected a virus in the file. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_MALICIOUS, + /// File was in use, too many files opened, or out of memory. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR, + /// File blocked by local policy. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_BLOCKED_BY_POLICY, + /// Security check failed unexpectedly. Microsoft Defender SmartScreen could + /// not scan this file. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_SECURITY_CHECK_FAILED, + /// Seeking past the end of a file in opening a file, as part of resuming an + /// interrupted download. The file did not exist or was not as large as + /// expected. Partially downloaded file was truncated or deleted, and download + /// will be restarted automatically. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_TOO_SHORT, + /// Partial file did not match the expected hash and was deleted. Download + /// will be restarted automatically. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_HASH_MISMATCH, + + /// Generic network error. User can retry the download manually. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, + /// Network operation timed out. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_TIMEOUT, + /// Network connection lost. User can retry the download manually. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED, + /// Server has gone down. User can retry the download manually. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_SERVER_DOWN, + /// Network request invalid because original or redirected URI is invalid, has + /// an unsupported scheme, or is disallowed by network policy. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_NETWORK_INVALID_REQUEST, + + /// Generic server error. User can retry the download manually. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED, + /// Server does not support range requests. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_NO_RANGE, + /// Server does not have the requested data. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, + /// Server did not authorize access to resource. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_UNAUTHORIZED, + /// Server certificate problem. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_CERTIFICATE_PROBLEM, + /// Server access forbidden. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_FORBIDDEN, + /// Unexpected server response. Responding server may not be intended server. + /// User can retry the download manually. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_UNEXPECTED_RESPONSE, + /// Server sent fewer bytes than the Content-Length header. Content-length + /// header may be invalid or connection may have closed. Download is treated + /// as complete unless there are + /// [strong validators](https://tools.ietf.org/html/rfc7232#section-2) present + /// to interrupt the download. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_CONTENT_LENGTH_MISMATCH, + /// Unexpected cross-origin redirect. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_CROSS_ORIGIN_REDIRECT, + + /// User canceled the download. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_USER_CANCELED, + /// User shut down the WebView. Resuming downloads that were interrupted + /// during shutdown is not yet supported. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN, + /// User paused the download. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_USER_PAUSED, + + /// WebView crashed. + COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_DOWNLOAD_PROCESS_CRASHED, +} COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON; + +// End of enums and structs + +/// WebView2 enables you to host web content using the latest Microsoft Edge +/// browser and web technology. + +[uuid(76eceacb-0462-4d94-ac83-423a6793775e), object, pointer_default(unique)] +interface ICoreWebView2 : IUnknown { + + /// The `ICoreWebView2Settings` object contains various modifiable settings + /// for the running WebView. + + [propget] HRESULT Settings([out, retval] ICoreWebView2Settings** settings); + + /// The URI of the current top level document. This value potentially + /// changes as a part of the `SourceChanged` event that runs for some cases + /// such as navigating to a different site or fragment navigations. It + /// remains the same for other types of navigations such as page refreshes + /// or `history.pushState` with the same URL as the current page. + /// + /// \snippet ControlComponent.cpp SourceChanged + + [propget] HRESULT Source([out, retval] LPWSTR* uri); + + /// Cause a navigation of the top-level document to run to the specified URI. + /// For more information, navigate to \[Navigation events\]\[MicrosoftEdgeWebview2ConceptsNavigationevents\]. + /// + /// \[MicrosoftEdgeWebview2ConceptsNavigationevents\]: /microsoft-edge/webview2/concepts/navigation-events "Navigation events | Microsoft Docs" + /// + /// > [!NOTE] + /// This operation starts a navigation and the corresponding + /// `NavigationStarting` event triggers sometime after `Navigate` runs. + /// + /// \snippet ControlComponent.cpp Navigate + + HRESULT Navigate([in] LPCWSTR uri); + + /// Initiates a navigation to htmlContent as source HTML of a new document. + /// The `htmlContent` parameter may not be larger than 2 MB in total size. + /// The origin of the new page is `about:blank`. + /// + /// \snippet SettingsComponent.cpp NavigateToString + + HRESULT NavigateToString([in] LPCWSTR htmlContent); + + /// Add an event handler for the `NavigationStarting` event. + /// `NavigationStarting` runs when the WebView main frame is requesting + /// permission to navigate to a different URI. Redirects trigger this + /// operation as well, and the navigation id is the same as the original + /// one. + /// + /// You may block corresponding navigations until the event handler returns. + /// + /// \snippet SettingsComponent.cpp NavigationStarting + + HRESULT add_NavigationStarting( + [in] ICoreWebView2NavigationStartingEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_NavigationStarting`. + + HRESULT remove_NavigationStarting( + [in] EventRegistrationToken token); + + /// Add an event handler for the `ContentLoading` event. `ContentLoading` + /// triggers before any content is loaded, including scripts added with + /// `AddScriptToExecuteOnDocumentCreated`. `ContentLoading` does not trigger + /// if a same page navigation occurs (such as through `fragment` + /// navigations or `history.pushState` navigations). This operation + /// follows the `NavigationStarting` and `SourceChanged` events and precedes + /// the `HistoryChanged` and `NavigationCompleted` events. + + HRESULT add_ContentLoading( + [in] ICoreWebView2ContentLoadingEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_ContentLoading`. + + HRESULT remove_ContentLoading( + [in] EventRegistrationToken token); + + /// Add an event handler for the `SourceChanged` event. `SourceChanged` + /// triggers when the `Source` property changes. `SourceChanged` runs when + /// navigating to a different site or fragment navigations. It does not + /// trigger for other types of navigations such as page refreshes or + /// `history.pushState` with the same URL as the current page. + /// `SourceChanged` runs before `ContentLoading` for navigation to a new + /// document. + /// + /// \snippet ControlComponent.cpp SourceChanged + + HRESULT add_SourceChanged( + [in] ICoreWebView2SourceChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_SourceChanged`. + + HRESULT remove_SourceChanged( + [in] EventRegistrationToken token); + + /// Add an event handler for the `HistoryChanged` event. `HistoryChanged` + /// listens to the change of navigation history for the top level document. + /// Use `HistoryChanged` to verify that the `CanGoBack` or `CanGoForward` + /// value has changed. `HistoryChanged` also runs for using `GoBack`or + /// `GoForward`. `HistoryChanged` runs after `SourceChanged` and + /// `ContentLoading`. + /// + /// \snippet ControlComponent.cpp HistoryChanged + + HRESULT add_HistoryChanged( + [in] ICoreWebView2HistoryChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_HistoryChanged`. + + HRESULT remove_HistoryChanged( + [in] EventRegistrationToken token); + + /// Add an event handler for the `NavigationCompleted` event. + /// `NavigationCompleted` runs when the WebView has completely loaded + /// (`body.onload` runs) or loading stopped with error. + /// + /// \snippet ControlComponent.cpp NavigationCompleted + + HRESULT add_NavigationCompleted( + [in] ICoreWebView2NavigationCompletedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_NavigationCompleted`. + + HRESULT remove_NavigationCompleted( + [in] EventRegistrationToken token); + + /// Add an event handler for the `FrameNavigationStarting` event. + /// `FrameNavigationStarting` triggers when a child frame in the WebView + /// requests permission to navigate to a different URI. Redirects trigger + /// this operation as well, and the navigation id is the same as the original + /// one. + /// + /// You may block corresponding navigations until the event handler returns. + /// + /// \snippet SettingsComponent.cpp FrameNavigationStarting + + HRESULT add_FrameNavigationStarting( + [in] ICoreWebView2NavigationStartingEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with + /// `add_FrameNavigationStarting`. + + HRESULT remove_FrameNavigationStarting( + [in] EventRegistrationToken token); + + /// Add an event handler for the `FrameNavigationCompleted` event. + /// `FrameNavigationCompleted` triggers when a child frame has completely + /// loaded (`body.onload` has triggered) or loading stopped with error. + /// + /// \snippet ControlComponent.cpp FrameNavigationCompleted + + HRESULT add_FrameNavigationCompleted( + [in] ICoreWebView2NavigationCompletedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with + /// `add_FrameNavigationCompleted`. + + HRESULT remove_FrameNavigationCompleted( + [in] EventRegistrationToken token); + + /// Add an event handler for the `ScriptDialogOpening` event. + /// `ScriptDialogOpening` runs when a JavaScript dialog (`alert`, `confirm`, + /// `prompt`, or `beforeunload`) displays for the webview. This event only + /// triggers if the `ICoreWebView2Settings::AreDefaultScriptDialogsEnabled` + /// property is set to `FALSE`. The `ScriptDialogOpening` event suppresses + /// dialogs or replaces default dialogs with custom dialogs. + /// + /// If a deferral is not taken on the event args, the subsequent scripts are + /// blocked until the event handler returns. If a deferral is taken, the + /// scripts are blocked until the deferral is completed. + /// + /// \snippet SettingsComponent.cpp ScriptDialogOpening + + HRESULT add_ScriptDialogOpening( + [in] ICoreWebView2ScriptDialogOpeningEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_ScriptDialogOpening`. + + HRESULT remove_ScriptDialogOpening( + [in] EventRegistrationToken token); + + /// Add an event handler for the `PermissionRequested` event. + /// `PermissionRequested` runs when content in a WebView requests permission + /// to access some privileged resources. + /// + /// If a deferral is not taken on the event args, the subsequent scripts are + /// blocked until the event handler returns. If a deferral is taken, the + /// scripts are blocked until the deferral is completed. + /// + /// \snippet SettingsComponent.cpp PermissionRequested + + HRESULT add_PermissionRequested( + [in] ICoreWebView2PermissionRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_PermissionRequested`. + + HRESULT remove_PermissionRequested( + [in] EventRegistrationToken token); + + /// Add an event handler for the `ProcessFailed` event. `ProcessFailed` runs + /// when a WebView process ends unexpectedly or becomes unresponsive. + /// + /// \snippet ProcessComponent.cpp ProcessFailed + + HRESULT add_ProcessFailed( + [in] ICoreWebView2ProcessFailedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with add_ProcessFailed. + + HRESULT remove_ProcessFailed( + [in] EventRegistrationToken token); + + /// Add the provided JavaScript to a list of scripts that should be run after + /// the global object has been created, but before the HTML document has + /// been parsed and before any other script included by the HTML document is + /// run. This method injects a script that runs on all top-level document + /// and child frame page navigations. This method runs asynchronously, and + /// you must wait for the completion handler to finish before the injected + /// script is ready to run. When this method completes, the `Invoke` method + /// of the handler is run with the `id` of the injected script. `id` is a + /// string. To remove the injected script, use + /// `RemoveScriptToExecuteOnDocumentCreated`. + /// + /// If the method is run in add_NewWindowRequested handler it should be called + /// after the new window deferral is completed. For more details see `ICoreWebView2NewWindowRequestedEventArgs::put_NewWindow`. + /// + /// > [!NOTE] + /// If an HTML document is running in a sandbox of some kind using + /// \[sandbox\]\[MdnDocsWebHtmlElementIframeAttrSandbox\] + /// properties or the + /// \[Content-Security-Policy\]\[MdnDocsWebHttpHeadersContentSecurityPolicy\] + /// HTTP header affects the script that runs. For example, if the + /// `allow-modals` keyword is not set then requests to run the `alert` + /// function are ignored. + /// + /// \snippet ScriptComponent.cpp AddScriptToExecuteOnDocumentCreated + /// + /// \[MdnDocsWebHtmlElementIframeAttrSandbox\]: https://developer.mozilla.org/docs/Web/HTML/Element/iframe#attr-sandbox "sandbox - <iframe>: The Inline Frame element | MDN" + /// + /// \[MdnDocsWebHttpHeadersContentSecurityPolicy\]: https://developer.mozilla.org/docs/Web/HTTP/Headers/Content-Security-Policy "Content-Security-Policy | MDN" + + HRESULT AddScriptToExecuteOnDocumentCreated( + [in] LPCWSTR javaScript, + [in] ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler* handler); + + /// Remove the corresponding JavaScript added using + /// `AddScriptToExecuteOnDocumentCreated` with the specified script ID. + + HRESULT RemoveScriptToExecuteOnDocumentCreated([in] LPCWSTR id); + + /// Run JavaScript code from the javascript parameter in the current + /// top-level document rendered in the WebView. The result of evaluating + /// the provided JavaScript is used in this parameter. The result value is + /// a JSON encoded string. If the result is undefined, contains a reference + /// cycle, or otherwise is not able to be encoded into JSON, the JSON `null` + /// value is returned as the `null` string. + /// + /// > [!NOTE] + /// A function that has no explicit return value returns undefined. If the + /// script that was run throws an unhandled exception, then the result is + /// also `null`. This method is applied asynchronously. If the method is + /// run after the `NavigationStarting` event during a navigation, the script + /// runs in the new document when loading it, around the time + /// `ContentLoading` is run. This operation works even if + /// `ICoreWebView2Settings::IsScriptEnabled` is set to `FALSE`. + /// + /// \snippet ScriptComponent.cpp ExecuteScript + + HRESULT ExecuteScript( + [in] LPCWSTR javaScript, + [in] ICoreWebView2ExecuteScriptCompletedHandler* handler); + + /// Capture an image of what WebView is displaying. Specify the format of + /// the image with the `imageFormat` parameter. The resulting image binary + /// data is written to the provided `imageStream` parameter. When + /// `CapturePreview` finishes writing to the stream, the `Invoke` method on + /// the provided `handler` parameter is run. This method fails if called + /// before the first ContentLoading event. For example if this is called in + /// the NavigationStarting event for the first navigation it will fail. + /// For subsequent navigations, the method may not fail, but will not capture + /// an image of a given webpage until the ContentLoading event has been fired + /// for it. Any call to this method prior to that will result in a capture of + /// the page being navigated away from. + /// + /// \snippet FileComponent.cpp CapturePreview + + HRESULT CapturePreview( + [in] COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT imageFormat, + [in] IStream* imageStream, + [in] ICoreWebView2CapturePreviewCompletedHandler* handler); + + /// Reload the current page. This is similar to navigating to the URI of + /// current top level document including all navigation events firing and + /// respecting any entries in the HTTP cache. But, the back or forward + /// history are not modified. + + HRESULT Reload(); + + /// Post the specified webMessage to the top level document in this WebView. + /// Runs the message event of the `window.chrome.webview` of the top-level + /// document. JavaScript in that document may subscribe and unsubscribe to + /// the event using the following code. + /// + /// ```cpp + /// window.chrome.webview.addEventListener('message', handler) + /// window.chrome.webview.removeEventListener('message', handler) + /// ``` + /// + /// The event args is an instance of `MessageEvent`. The + /// `ICoreWebView2Settings::IsWebMessageEnabled` setting must be `TRUE` or + /// this method fails with `E_INVALIDARG`. The `data` property of the event + /// arg is the `webMessage` string parameter parsed as a JSON string into a + /// JavaScript object. The `source` property of the event arg is a reference + /// to the `window.chrome.webview` object. For information about sending + /// messages from the HTML document in the WebView to the host, navigate to + /// \[add_WebMessageReceived]. The message is sent asynchronously. If a + /// navigation occurs before the message is posted to the page, the message + /// is not sent. + /// + /// \snippet ScenarioWebMessage.cpp WebMessageReceived + + HRESULT PostWebMessageAsJson([in] LPCWSTR webMessageAsJson); + + /// Posts a message that is a simple string rather than a JSON string + /// representation of a JavaScript object. This behaves in exactly the same + /// manner as `PostWebMessageAsJson`, but the `data` property of the event + /// arg of the `window.chrome.webview` message is a string with the same + /// value as `webMessageAsString`. Use this instead of + /// `PostWebMessageAsJson` if you want to communicate using simple strings + /// rather than JSON objects. + + HRESULT PostWebMessageAsString([in] LPCWSTR webMessageAsString); + + /// Add an event handler for the `WebMessageReceived` event. + /// `WebMessageReceived` runs when the + /// `ICoreWebView2Settings::IsWebMessageEnabled` setting is set and the + /// top-level document of the WebView runs + /// `window.chrome.webview.postMessage`. The `postMessage` function is + /// `void postMessage(object)` where object is any object supported by JSON + /// conversion. + /// + /// \snippet assets\ScenarioWebMessage.html chromeWebView + /// + /// When `postMessage` is run, the `Invoke` method of the `handler` is run + /// with the `object` parameter of the `postMessage` converted to a JSON + /// string. + /// + /// \snippet ScenarioWebMessage.cpp WebMessageReceived + + HRESULT add_WebMessageReceived( + [in] ICoreWebView2WebMessageReceivedEventHandler* handler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_WebMessageReceived`. + + HRESULT remove_WebMessageReceived( + [in] EventRegistrationToken token); + + /// Runs an asynchronous `DevToolsProtocol` method. For more information + /// about available methods, navigate to + /// \[DevTools Protocol Viewer\]\[GithubChromedevtoolsDevtoolsProtocolTot\] + /// . The `methodName` parameter is the full name of the method in the + /// `{domain}.{method}` format. The `parametersAsJson` parameter is a JSON + /// formatted string containing the parameters for the corresponding method. + /// The `Invoke` method of the `handler` is run when the method + /// asynchronously completes. `Invoke` is run with the return object of the + /// method as a JSON string. + /// + /// \snippet ScriptComponent.cpp CallDevToolsProtocolMethod + /// + /// + /// \[GithubChromedevtoolsDevtoolsProtocolTot\]: https://chromedevtools.github.io/devtools-protocol/tot "latest (tip-of-tree) protocol - Chrome DevTools Protocol | GitHub" + + HRESULT CallDevToolsProtocolMethod( + [in] LPCWSTR methodName, + [in] LPCWSTR parametersAsJson, + [in] ICoreWebView2CallDevToolsProtocolMethodCompletedHandler* handler); + + /// The process ID of the browser process that hosts the WebView. + + [propget] HRESULT BrowserProcessId([out, retval] UINT32* value); + + /// `TRUE` if the WebView is able to navigate to a previous page in the + /// navigation history. If `CanGoBack` changes value, the `HistoryChanged` + /// event runs. + + [propget] HRESULT CanGoBack([out, retval] BOOL* canGoBack); + + /// `TRUE` if the WebView is able to navigate to a next page in the + /// navigation history. If `CanGoForward` changes value, the + /// `HistoryChanged` event runs. + + [propget] HRESULT CanGoForward([out, retval] BOOL* canGoForward); + + /// Navigates the WebView to the previous page in the navigation history. + + HRESULT GoBack(); + + /// Navigates the WebView to the next page in the navigation history. + + HRESULT GoForward(); + + /// Get a DevTools Protocol event receiver that allows you to subscribe to a + /// DevTools Protocol event. The `eventName` parameter is the full name of + /// the event in the format `{domain}.{event}`. For more information about + /// DevTools Protocol events description and event args, navigate to + /// \[DevTools Protocol Viewer\]\[GithubChromedevtoolsDevtoolsProtocolTot\]. + /// + /// \snippet ScriptComponent.cpp DevToolsProtocolEventReceived + /// + /// + /// \[GithubChromedevtoolsDevtoolsProtocolTot\]: https://chromedevtools.github.io/devtools-protocol/tot "latest (tip-of-tree) protocol - Chrome DevTools Protocol | GitHub" + + HRESULT GetDevToolsProtocolEventReceiver( + [in] LPCWSTR eventName, + [out, retval] ICoreWebView2DevToolsProtocolEventReceiver** receiver); + + /// Stop all navigations and pending resource fetches. Does not stop scripts. + + HRESULT Stop(); + + /// Add an event handler for the `NewWindowRequested` event. + /// `NewWindowRequested` runs when content inside the WebView requests to + /// open a new window, such as through `window.open`. The app passes a + /// target WebView that is considered the opened window. + /// + /// If a deferral is not taken on the event args, scripts that resulted in + /// the new window that are requested are blocked until the event handler + /// returns. If a deferral is taken, then scripts are blocked until the + /// deferral is completed. + /// + /// For more details and considerations on the target WebView to be supplied + /// at the opened window, see `ICoreWebView2NewWindowRequestedEventArgs::put_NewWindow`. + /// + /// \snippet AppWindow.cpp NewWindowRequested + + HRESULT add_NewWindowRequested( + [in] ICoreWebView2NewWindowRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_NewWindowRequested`. + + HRESULT remove_NewWindowRequested( + [in] EventRegistrationToken token); + + /// Add an event handler for the `DocumentTitleChanged` event. + /// `DocumentTitleChanged` runs when the `DocumentTitle` property of the + /// WebView changes and may run before or after the `NavigationCompleted` + /// event. + /// + /// \snippet FileComponent.cpp DocumentTitleChanged + + HRESULT add_DocumentTitleChanged( + [in] ICoreWebView2DocumentTitleChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_DocumentTitleChanged`. + + HRESULT remove_DocumentTitleChanged( + [in] EventRegistrationToken token); + + /// The title for the current top-level document. If the document has no + /// explicit title or is otherwise empty, a default that may or may not match + /// the URI of the document is used. + + [propget] HRESULT DocumentTitle([out, retval] LPWSTR* title); + + /// Add the provided host object to script running in the WebView with the + /// specified name. Host objects are exposed as host object proxies using + /// `window.chrome.webview.hostObjects.{name}`. Host object proxies are + /// promises and resolves to an object representing the host object. The + /// promise is rejected if the app has not added an object with the name. + /// When JavaScript code access a property or method of the object, a promise + /// is return, which resolves to the value returned from the host for the + /// property or method, or rejected in case of error, for example, no + /// property or method on the object or parameters are not valid. + /// + /// > [!NOTE] + /// While simple types, `IDispatch` and array are supported, generic + /// `IUnknown`, `VT_DECIMAL`, or `VT_RECORD` variant is not supported. + /// Remote JavaScript objects like callback functions are represented as an + /// `VT_DISPATCH` `VARIANT` with the object implementing `IDispatch`. The + /// JavaScript callback method may be invoked using `DISPID_VALUE` for the + /// `DISPID`. Nested arrays are supported up to a depth of 3. Arrays of by + /// reference types are not supported. `VT_EMPTY` and `VT_NULL` are mapped + /// into JavaScript as `null`. In JavaScript, `null` and undefined are + /// mapped to `VT_EMPTY`. + /// + /// Additionally, all host objects are exposed as + /// `window.chrome.webview.hostObjects.sync.{name}`. Here the host objects + /// are exposed as synchronous host object proxies. These are not promises + /// and function runtimes or property access synchronously block running + /// script waiting to communicate cross process for the host code to run. + /// Accordingly the result may have reliability issues and it is recommended + /// that you use the promise-based asynchronous + /// `window.chrome.webview.hostObjects.{name}` API. + /// + /// Synchronous host object proxies and asynchronous host object proxies may + /// both use a proxy to the same host object. Remote changes made by one + /// proxy propagates to any other proxy of that same host object whether + /// the other proxies and synchronous or asynchronous. + /// + /// While JavaScript is blocked on a synchronous run to native code, that + /// native code is unable to run back to JavaScript. Attempts to do so fail + /// with `HRESULT_FROM_WIN32(ERROR_POSSIBLE_DEADLOCK)`. + /// + /// Host object proxies are JavaScript Proxy objects that intercept all + /// property get, property set, and method invocations. Properties or methods + /// that are a part of the Function or Object prototype are run locally. + /// Additionally any property or method in the + /// `chrome.webview.hostObjects.options.forceLocalProperties` + /// array are also run locally. This defaults to including optional methods + /// that have meaning in JavaScript like `toJSON` and `Symbol.toPrimitive`. + /// Add more to the array as required. + /// + /// The `chrome.webview.hostObjects.cleanupSome` method performs a best + /// effort garbage collection on host object proxies. + /// + /// Host object proxies additionally have the following methods which run + /// locally. + /// + /// Method name | Details + /// ---|--- + ///`applyHostFunction`, `getHostProperty`, `setHostProperty` | Perform a method invocation, property get, or property set on the host object. Use the methods to explicitly force a method or property to run remotely if a conflicting local method or property exists. For instance, `proxy.toString()` runs the local `toString` method on the proxy object. But proxy.applyHostFunction('toString') runs `toString` on the host proxied object instead. + ///`getLocalProperty`, `setLocalProperty` | Perform property get, or property set locally. Use the methods to force getting or setting a property on the host object proxy rather than on the host object it represents. For instance, `proxy.unknownProperty` gets the property named `unknownProperty` from the host proxied object. But proxy.getLocalProperty('unknownProperty') gets the value of the property `unknownProperty` on the proxy object. + ///`sync` | Asynchronous host object proxies expose a sync method which returns a promise for a synchronous host object proxy for the same host object. For example, `chrome.webview.hostObjects.sample.methodCall()` returns an asynchronous host object proxy. Use the `sync` method to obtain a synchronous host object proxy instead: `const syncProxy = await chrome.webview.hostObjects.sample.methodCall().sync()`. + ///`async` | Synchronous host object proxies expose an async method which blocks and returns an asynchronous host object proxy for the same host object. For example, `chrome.webview.hostObjects.sync.sample.methodCall()` returns a synchronous host object proxy. Running the `async` method on this blocks and then returns an asynchronous host object proxy for the same host object: `const asyncProxy = chrome.webview.hostObjects.sync.sample.methodCall().async()`. + ///`then` | Asynchronous host object proxies have a `then` method. Allows proxies to be awaitable. `then` returns a promise that resolves with a representation of the host object. If the proxy represents a JavaScript literal, a copy of that is returned locally. If the proxy represents a function, a non-awaitable proxy is returned. If the proxy represents a JavaScript object with a mix of literal properties and function properties, the a copy of the object is returned with some properties as host object proxies. + /// + /// All other property and method invocations (other than the above Remote + /// object proxy methods, `forceLocalProperties` list, and properties on + /// Function and Object prototypes) are run remotely. Asynchronous host + /// object proxies return a promise representing asynchronous completion of + /// remotely invoking the method, or getting the property. The promise + /// resolves after the remote operations complete and the promises resolve to + /// the resulting value of the operation. Synchronous host object proxies + /// work similarly, but block running JavaScript and wait for the remote + /// operation to complete. + /// + /// Setting a property on an asynchronous host object proxy works slightly + /// differently. The set returns immediately and the return value is the + /// value that is set. This is a requirement of the JavaScript Proxy object. + /// If you need to asynchronously wait for the property set to complete, use + /// the `setHostProperty` method which returns a promise as described above. + /// Synchronous object property set property synchronously blocks until the + /// property is set. + /// + /// For example, suppose you have a COM object with the following interface. + /// + /// \snippet HostObjectSample.idl AddHostObjectInterface + /// + /// Add an instance of this interface into your JavaScript with + /// `AddHostObjectToScript`. In this case, name it `sample`. + /// + /// \snippet ScenarioAddHostObject.cpp AddHostObjectToScript + /// + /// In the HTML document, use the COM object using + /// `chrome.webview.hostObjects.sample`. + /// + /// \snippet assets\ScenarioAddHostObject.html HostObjectUsage + /// + /// Exposing host objects to script has security risk. For more information + /// about best practices, navigate to + /// \[Best practices for developing secure WebView2 applications\]\[MicrosoftEdgeWebview2ConceptsSecurity\]. + /// + /// \[MicrosoftEdgeWebview2ConceptsSecurity\]: /microsoft-edge/webview2/concepts/security "Best practices for developing secure WebView2 applications | Microsoft Docs" + + HRESULT AddHostObjectToScript([in] LPCWSTR name, [in] VARIANT* object); + + /// Remove the host object specified by the name so that it is no longer + /// accessible from JavaScript code in the WebView. While new access + /// attempts are denied, if the object is already obtained by JavaScript code + /// in the WebView, the JavaScript code continues to have access to that + /// object. Run this method for a name that is already removed or never + /// added fails. + + HRESULT RemoveHostObjectFromScript([in] LPCWSTR name); + + /// Opens the DevTools window for the current document in the WebView. Does + /// nothing if run when the DevTools window is already open. + + HRESULT OpenDevToolsWindow(); + + /// Add an event handler for the `ContainsFullScreenElementChanged` event. + /// `ContainsFullScreenElementChanged` triggers when the + /// `ContainsFullScreenElement` property changes. An HTML element inside the + /// WebView may enter fullscreen to the size of the WebView or leave + /// fullscreen. This event is useful when, for example, a video element + /// requests to go fullscreen. The listener of + /// `ContainsFullScreenElementChanged` may resize the WebView in response. + /// + /// \snippet AppWindow.cpp ContainsFullScreenElementChanged + + HRESULT add_ContainsFullScreenElementChanged( + [in] ICoreWebView2ContainsFullScreenElementChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with + /// `add_ContainsFullScreenElementChanged`. + + HRESULT remove_ContainsFullScreenElementChanged( + [in] EventRegistrationToken token); + + /// Indicates if the WebView contains a fullscreen HTML element. + + [propget] HRESULT ContainsFullScreenElement( + [out, retval] BOOL* containsFullScreenElement); + + /// Add an event handler for the `WebResourceRequested` event. + /// `WebResourceRequested` runs when the WebView is performing a URL request + /// to a matching URL and resource context filter that was added with + /// `AddWebResourceRequestedFilter`. At least one filter must be added for + /// the event to run. + /// + /// The web resource requested may be blocked until the event handler returns + /// if a deferral is not taken on the event args. If a deferral is taken, + /// then the web resource requested is blocked until the deferral is + /// completed. + /// + /// If the method is run in add_NewWindowRequested handler it should be called + /// after the new window deferral is completed. For more details see `ICoreWebView2NewWindowRequestedEventArgs::put_NewWindow`. + /// + /// \snippet SettingsComponent.cpp WebResourceRequested0 + /// \snippet SettingsComponent.cpp WebResourceRequested1 + + HRESULT add_WebResourceRequested( + [in] ICoreWebView2WebResourceRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_WebResourceRequested`. + + HRESULT remove_WebResourceRequested( + [in] EventRegistrationToken token); + + /// Adds a URI and resource context filter to the `WebResourceRequested` + /// event. The `URI` parameter value may be set to a wildcard string + /// (`*`: zero or more, `?`: exactly one). `nullptr` is equivalent to + /// `L""`. For more information about resource context filters, navigate to + /// [COREWEBVIEW2_WEB_RESOURCE_CONTEXT]. + + HRESULT AddWebResourceRequestedFilter( + [in] LPCWSTR const uri, + [in] COREWEBVIEW2_WEB_RESOURCE_CONTEXT const resourceContext); + + /// Removes a matching WebResource filter that was previously added for the + /// `WebResourceRequested` event. If the same filter was added multiple + /// times, then it must be removed as many times as it was added for the + /// removal to be effective. Returns `E_INVALIDARG` for a filter that was + /// never added. + + HRESULT RemoveWebResourceRequestedFilter( + [in] LPCWSTR const uri, + [in] COREWEBVIEW2_WEB_RESOURCE_CONTEXT const resourceContext); + + /// Add an event handler for the `WindowCloseRequested` event. + /// `WindowCloseRequested` triggers when content inside the WebView + /// requested to close the window, such as after `window.close` is run. The + /// app should close the WebView and related app window if that makes sense + /// to the app. + /// + /// \snippet AppWindow.cpp WindowCloseRequested + + HRESULT add_WindowCloseRequested( + [in] ICoreWebView2WindowCloseRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_WindowCloseRequested`. + + HRESULT remove_WindowCloseRequested( + [in] EventRegistrationToken token); +} + +/// A continuation of the ICoreWebView2 interface. +[uuid(9E8F0CF8-E670-4B5E-B2BC-73E061E3184C), object, pointer_default(unique)] +interface ICoreWebView2_2 : ICoreWebView2 { + /// Add an event handler for the WebResourceResponseReceived event. + /// WebResourceResponseReceived is raised when the WebView receives the + /// response for a request for a web resource (any URI resolution performed by + /// the WebView; such as HTTP/HTTPS, file and data requests from redirects, + /// navigations, declarations in HTML, implicit favicon lookups, and fetch API + /// usage in the document). The host app can use this event to view the actual + /// request and response for a web resource. There is no guarantee about the + /// order in which the WebView processes the response and the host app's + /// handler runs. The app's handler will not block the WebView from processing + /// the response. + /// \snippet ScenarioAuthentication.cpp WebResourceResponseReceived + HRESULT add_WebResourceResponseReceived( + [in] ICoreWebView2WebResourceResponseReceivedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with + /// add_WebResourceResponseReceived. + HRESULT remove_WebResourceResponseReceived( + [in] EventRegistrationToken token); + + /// Navigates using a constructed WebResourceRequest object. This lets you + /// provide post data or additional request headers during navigation. + /// The headers in the WebResourceRequest override headers + /// added by WebView2 runtime except for Cookie headers. + /// Method can only be either "GET" or "POST". Provided post data will only + /// be sent only if the method is "POST" and the uri scheme is HTTP(S). + /// \snippet ScenarioNavigateWithWebResourceRequest.cpp NavigateWithWebResourceRequest + HRESULT NavigateWithWebResourceRequest([in] ICoreWebView2WebResourceRequest* request); + + /// Add an event handler for the DOMContentLoaded event. + /// DOMContentLoaded is raised when the initial html document has been parsed. + /// This aligns with the the document's DOMContentLoaded event in html. + /// + /// \snippet ScenarioDOMContentLoaded.cpp DOMContentLoaded + HRESULT add_DOMContentLoaded( + [in] ICoreWebView2DOMContentLoadedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_DOMContentLoaded. + HRESULT remove_DOMContentLoaded( + [in] EventRegistrationToken token); + + /// Gets the cookie manager object associated with this ICoreWebView2. + /// See ICoreWebView2CookieManager. + /// + /// \snippet ScenarioCookieManagement.cpp CookieManager + [propget] HRESULT CookieManager([out, retval] ICoreWebView2CookieManager** cookieManager); + + /// Exposes the CoreWebView2Environment used to create this CoreWebView2. + [propget] HRESULT Environment([out, retval] ICoreWebView2Environment** environment); +} + +/// A continuation of the ICoreWebView2_2 interface. +[uuid(A0D6DF20-3B92-416D-AA0C-437A9C727857), object, pointer_default(unique)] +interface ICoreWebView2_3 : ICoreWebView2_2 { + /// An app may call the `TrySuspend` API to have the WebView2 consume less memory. + /// This is useful when a Win32 app becomes invisible, or when a Universal Windows + /// Platform app is being suspended, during the suspended event handler before completing + /// the suspended event. + /// The CoreWebView2Controller's IsVisible property must be false when the API is called. + /// Otherwise, the API fails with `HRESULT_FROM_WIN32(ERROR_INVALID_STATE)`. + /// Suspending is similar to putting a tab to sleep in the Edge browser. Suspending pauses + /// WebView script timers and animations, minimizes CPU usage for the associated + /// browser renderer process and allows the operating system to reuse the memory that was + /// used by the renderer process for other processes. + /// Note that Suspend is best effort and considered completed successfully once the request + /// is sent to browser renderer process. If there is a running script, the script will continue + /// to run and the renderer process will be suspended after that script is done. + /// See [Sleeping Tabs FAQ](https://techcommunity.microsoft.com/t5/articles/sleeping-tabs-faq/m-p/1705434) + /// for conditions that might prevent WebView from being suspended. In those situations, + /// the completed handler will be invoked with isSuccessful as false and errorCode as S_OK. + /// The WebView will be automatically resumed when it becomes visible. Therefore, the + /// app normally does not have to call `Resume` explicitly. + /// The app can call `Resume` and then `TrySuspend` periodically for an invisible WebView so that + /// the invisible WebView can sync up with latest data and the page ready to show fresh content + /// when it becomes visible. + /// All WebView APIs can still be accessed when a WebView is suspended. Some APIs like Navigate + /// will auto resume the WebView. To avoid unexpected auto resume, check `IsSuspended` property + /// before calling APIs that might change WebView state. + /// + /// \snippet ViewComponent.cpp ToggleIsVisibleOnMinimize + /// + /// \snippet ViewComponent.cpp Suspend + /// + HRESULT TrySuspend([in] ICoreWebView2TrySuspendCompletedHandler* handler); + + /// Resumes the WebView so that it resumes activities on the web page. + /// This API can be called while the WebView2 controller is invisible. + /// The app can interact with the WebView immediately after `Resume`. + /// WebView will be automatically resumed when it becomes visible. + /// + /// \snippet ViewComponent.cpp ToggleIsVisibleOnMinimize + /// + /// \snippet ViewComponent.cpp Resume + /// + HRESULT Resume(); + + /// Whether WebView is suspended. + /// `TRUE` when WebView is suspended, from the time when TrySuspend has completed + /// successfully until WebView is resumed. + [propget] HRESULT IsSuspended([out, retval] BOOL* isSuspended); + + /// Sets a mapping between a virtual host name and a folder path to make available to web sites + /// via that host name. + /// + /// After setting the mapping, documents loaded in the WebView can use HTTP or HTTPS URLs at + /// the specified host name specified by hostName to access files in the local folder specified + /// by folderPath. + /// + /// This mapping applies to both top-level document and iframe navigations as well as subresource + /// references from a document. This also applies to dedicated and shared worker scripts but does + /// not apply to service worker scripts. + /// Due to a current implementation limitation, media files accessed using virtual host name can be + /// very slow to load. + /// As the resource loaders for the current page might have already been created and running, + /// changes to the mapping might not be applied to the current page and a reload of the page is + /// needed to apply the new mapping. + /// + /// Both absolute and relative paths are supported for folderPath. Relative paths are interpreted + /// as relative to the folder where the exe of the app is in. + /// + /// accessKind specifies the level of access to resources under the virtual host from other sites. + /// + /// For example, after calling + /// ```cpp + /// SetVirtualHostNameToFolderMapping( + /// L"appassets.example", L"assets", + /// COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND_DENY); + /// ``` + /// navigating to `https://appassets.example/my-local-file.html` will + /// show content from my-local-file.html in the assets subfolder located on disk under the same + /// path as the app's executable file. + /// + /// You should typically choose virtual host names that are never used by real sites. + /// If you own a domain such as example.com, another option is to use a subdomain reserved for + /// the app (like my-app.example.com). + /// + /// [RFC 6761](https://tools.ietf.org/html/rfc6761) has reserved several special-use domain + /// names that are guaranteed to not be used by real sites (for example, .example, .test, and + /// .invalid.) + /// + /// Apps should use distinct domain names when mapping folder from different sources that + /// should be isolated from each other. For instance, the app might use app-file.example for + /// files that ship as part of the app, and book1.example might be used for files containing + /// books from a less trusted source that were previously downloaded and saved to the disk by + /// the app. + /// + /// The host name used in the APIs is canonicalized using Chromium's host name parsing logic + /// before being used internally. + /// + /// All host names that are canonicalized to the same string are considered identical. + /// For example, `EXAMPLE.COM` and `example.com` are treated as the same host name. + /// An international host name and its Punycode-encoded host name are considered the same host + /// name. There is no DNS resolution for host name and the trailing '.' is not normalized as + /// part of canonicalization. + /// + /// Therefore `example.com` and `example.com.` are treated as different host names. Similarly, + /// `virtual-host-name` and `virtual-host-name.example.com` are treated as different host names + /// even if the machine has a DNS suffix of `example.com`. + /// + /// Specify the minimal cross-origin access necessary to run the app. If there is not a need to + /// access local resources from other origins, use COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND_DENY. + /// + /// \snippet AppWindow.cpp AddVirtualHostNameToFolderMapping + /// + /// \snippet AppWindow.cpp LocalUrlUsage + HRESULT SetVirtualHostNameToFolderMapping( + [in] LPCWSTR hostName, + [in] LPCWSTR folderPath, + [in] COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND accessKind); + /// Clears a host name mapping for local folder that was added by `SetVirtualHostNameToFolderMapping`. + HRESULT ClearVirtualHostNameToFolderMapping( + [in] LPCWSTR hostName); +} + +/// A continuation of the ICoreWebView2_3 interface to support FrameCreated and +/// DownloadStarting events. +[uuid(20d02d59-6df2-42dc-bd06-f98a694b1302), object, pointer_default(unique)] +interface ICoreWebView2_4 : ICoreWebView2_3 { + /// Raised when a new iframe is created. Use the + /// CoreWebView2Frame.add_Destroyed to listen for when this iframe goes + /// away. + HRESULT add_FrameCreated( + [in] ICoreWebView2FrameCreatedEventHandler * eventHandler, + [out] EventRegistrationToken * token); + + /// Remove an event handler previously added with add_FrameCreated. + HRESULT remove_FrameCreated([in] EventRegistrationToken token); + + /// Add an event handler for the `DownloadStarting` event. This event is + /// raised when a download has begun, blocking the default download dialog, + /// but not blocking the progress of the download. + /// + /// The host can choose to cancel a download, change the result file path, + /// and hide the default download dialog. + /// If the host chooses to cancel the download, the download is not saved, no + /// dialog is shown, and the state is changed to + /// COREWEBVIEW2_DOWNLOAD_STATE_INTERRUPTED with interrupt reason + /// COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_USER_CANCELED. Otherwise, the + /// download is saved to the default path after the event completes, + /// and default download dialog is shown if the host did not choose to hide it. + /// The host can change the visibility of the download dialog using the + /// `Handled` property. If the event is not handled, downloads complete + /// normally with the default dialog shown. + /// + /// \snippet ScenarioCustomDownloadExperience.cpp DownloadStarting + HRESULT add_DownloadStarting( + [in] ICoreWebView2DownloadStartingEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_DownloadStarting`. + HRESULT remove_DownloadStarting( + [in] EventRegistrationToken token); +} + +/// The caller implements this interface to receive the TrySuspend result. +[uuid(00F206A7-9D17-4605-91F6-4E8E4DE192E3), object, pointer_default(unique)] +interface ICoreWebView2TrySuspendCompletedHandler : IUnknown { + + /// Provides the result of the TrySuspend operation. + /// See [Sleeping Tabs FAQ](https://techcommunity.microsoft.com/t5/articles/sleeping-tabs-faq/m-p/1705434) + /// for conditions that might prevent WebView from being suspended. In those situations, + /// isSuccessful will be false and errorCode is S_OK. + HRESULT Invoke([in] HRESULT errorCode, [in] BOOL isSuccessful); + +} + +/// The owner of the `CoreWebView2` object that provides support for resizing, +/// showing and hiding, focusing, and other functionality related to +/// windowing and composition. The `CoreWebView2Controller` owns the +/// `CoreWebView2`, and if all references to the `CoreWebView2Controller` go +/// away, the WebView is closed. + +[uuid(4d00c0d1-9434-4eb6-8078-8697a560334f), object, pointer_default(unique)] +interface ICoreWebView2Controller : IUnknown { + + /// The `IsVisible` property determines whether to show or hide the WebView2. + /// If `IsVisible` is set to `FALSE`, the WebView2 is transparent and is + /// not rendered. However, this does not affect the window containing the + /// WebView2 (the `HWND` parameter that was passed to + /// `CreateCoreWebView2Controller`). If you want that window to disappear + /// too, run `ShowWindow` on it directly in addition to modifying the + /// `IsVisible` property. WebView2 as a child window does not get window + /// messages when the top window is minimized or restored. For performance + /// reason, developer should set `IsVisible` property of the WebView to + /// `FALSE` when the app window is minimized and back to `TRUE` when app + /// window is restored. App window does this by handling + /// `SC_MINIMIZE and SC_RESTORE` command upon receiving `WM_SYSCOMMAND` + /// message. + /// + /// \snippet ViewComponent.cpp ToggleIsVisible + + [propget] HRESULT IsVisible([out, retval] BOOL* isVisible); + + /// Sets the `IsVisible` property. + /// + /// \snippet ViewComponent.cpp ToggleIsVisibleOnMinimize + + [propput] HRESULT IsVisible([in] BOOL isVisible); + + /// The WebView bounds. Bounds are relative to the parent `HWND`. The app + /// has two ways to position a WebView. + /// + /// * Create a child `HWND` that is the WebView parent `HWND`. Position + /// the window where the WebView should be. Use `(0, 0)` for the + /// top-left corner (the offset) of the `Bounds` of the WebView. + /// * Use the top-most window of the app as the WebView parent HWND. For + /// example, to position WebView correctly in the app, set the top-left + /// corner of the Bound of the WebView. + /// + /// The values of `Bounds` are limited by the coordinate space of the host. + + [propget] HRESULT Bounds([out, retval] RECT* bounds); + + /// Sets the `Bounds` property. + /// + /// \snippet ViewComponent.cpp ResizeWebView + + [propput] HRESULT Bounds([in] RECT bounds); + + /// The zoom factor for the WebView. + /// + /// > [!NOTE] + /// Changing zoom factor may cause `window.innerWidth`, + /// `window.innerHeight`, both, and page layout to change. A zoom factor + /// that is applied by the host by running `ZoomFactor` becomes the new + /// default zoom for the WebView. The zoom factor applies across navigations + /// and is the zoom factor WebView is returned to when the user chooses + /// Ctrl+0. When the zoom factor is changed by the user (resulting in + /// the app receiving `ZoomFactorChanged`), that zoom applies only for the + /// current page. Any user applied zoom is only for the current page and is + /// reset on a navigation. Specifying a `zoomFactor` less than or equal to + /// `0` is not allowed. WebView also has an internal supported zoom factor + /// range. When a specified zoom factor is out of that range, it is + /// normalized to be within the range, and a `ZoomFactorChanged` event is + /// triggered for the real applied zoom factor. When the range normalization + /// happens, the `ZoomFactor` property reports the zoom factor specified + /// during the previous modification of the `ZoomFactor` property until the + /// `ZoomFactorChanged` event is received after WebView applies the + /// normalized zoom factor. + + [propget] HRESULT ZoomFactor([out, retval] double* zoomFactor); + + /// Sets the `ZoomFactor` property. + + [propput] HRESULT ZoomFactor([in] double zoomFactor); + + /// Adds an event handler for the `ZoomFactorChanged` event. + /// `ZoomFactorChanged` runs when the `ZoomFactor` property of the WebView + /// changes. The event may run because the `ZoomFactor` property was + /// modified, or due to the user manually modifying the zoom. When it is + /// modified using the `ZoomFactor` property, the internal zoom factor is + /// updated immediately and no `ZoomFactorChanged` event is triggered. + /// WebView associates the last used zoom factor for each site. It is + /// possible for the zoom factor to change when navigating to a different + /// page. When the zoom factor changes due to a navigation change, the + /// `ZoomFactorChanged` event runs right after the `ContentLoading` event. + /// + /// \snippet ViewComponent.cpp ZoomFactorChanged + + HRESULT add_ZoomFactorChanged( + [in] ICoreWebView2ZoomFactorChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_ZoomFactorChanged`. + + HRESULT remove_ZoomFactorChanged( + [in] EventRegistrationToken token); + + /// Updates `Bounds` and `ZoomFactor` properties at the same time. This + /// operation is atomic from the perspective of the host. After returning + /// from this function, the `Bounds` and `ZoomFactor` properties are both + /// updated if the function is successful, or neither is updated if the + /// function fails. If `Bounds` and `ZoomFactor` are both updated by the + /// same scale (for example, `Bounds` and `ZoomFactor` are both doubled), + /// then the page does not display a change in `window.innerWidth` or + /// `window.innerHeight` and the WebView renders the content at the new size + /// and zoom without intermediate renderings. This function also updates + /// just one of `ZoomFactor` or `Bounds` by passing in the new value for one + /// and the current value for the other. + /// + /// \snippet ViewComponent.cpp SetBoundsAndZoomFactor + + HRESULT SetBoundsAndZoomFactor([in] RECT bounds, [in] double zoomFactor); + + /// Moves focus into WebView. WebView gets focus and focus is set to + /// correspondent element in the page hosted in the WebView. For + /// Programmatic reason, focus is set to previously focused element or the + /// default element if no previously focused element exists. For `Next` + /// reason, focus is set to the first element. For `Previous` reason, focus + /// is set to the last element. WebView changes focus through user + /// interaction including selecting into a WebView or Tab into it. For + /// tabbing, the app runs MoveFocus with Next or Previous to align with Tab + /// and Shift+Tab respectively when it decides the WebView is the next + /// element that may exist in a tab. Or, the app runs `IsDialogMessage` + /// as part of the associated message loop to allow the platform to auto + /// handle tabbing. The platform rotates through all windows with + /// `WS_TABSTOP`. When the WebView gets focus from `IsDialogMessage`, it is + /// internally put the focus on the first or last element for tab and + /// Shift+Tab respectively. + /// + /// \snippet App.cpp MoveFocus0 + /// + /// \snippet ControlComponent.cpp MoveFocus1 + /// + /// \snippet ControlComponent.cpp MoveFocus2 + + HRESULT MoveFocus([in] COREWEBVIEW2_MOVE_FOCUS_REASON reason); + + /// Adds an event handler for the `MoveFocusRequested` event. + /// `MoveFocusRequested` runs when user tries to tab out of the WebView. The + /// focus of the WebView has not changed when this event is run. + /// + /// \snippet ControlComponent.cpp MoveFocusRequested + + HRESULT add_MoveFocusRequested( + [in] ICoreWebView2MoveFocusRequestedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Removes an event handler previously added with `add_MoveFocusRequested`. + + HRESULT remove_MoveFocusRequested( + [in] EventRegistrationToken token); + + /// Adds an event handler for the `GotFocus` event. `GotFocus` runs when + /// WebView has focus. + + HRESULT add_GotFocus( + [in] ICoreWebView2FocusChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Removes an event handler previously added with `add_GotFocus`. + + HRESULT remove_GotFocus( + [in] EventRegistrationToken token); + + /// Adds an event handler for the `LostFocus` event. `LostFocus` runs when + /// WebView loses focus. In the case where `MoveFocusRequested` event is + /// run, the focus is still on WebView when `MoveFocusRequested` event runs. + /// `LostFocus` only runs afterwards when code of the app or default action + /// of `MoveFocusRequested` event set focus away from WebView. + + HRESULT add_LostFocus( + [in] ICoreWebView2FocusChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Removes an event handler previously added with `add_LostFocus`. + + HRESULT remove_LostFocus( + [in] EventRegistrationToken token); + + /// Adds an event handler for the `AcceleratorKeyPressed` event. + /// `AcceleratorKeyPressed` runs when an accelerator key or key combo is + /// pressed or released while the WebView is focused. A key is considered an + /// accelerator if either of the following conditions are true. + /// + /// * Ctrl or Alt is currently being held. + /// * The pressed key does not map to a character. + /// + /// A few specific keys are never considered accelerators, such as Shift. + /// The `Escape` key is always considered an accelerator. + /// + /// Auto-repeated key events caused by holding the key down also triggers + /// this event. Filter out the auto-repeated key events by verifying the + /// `KeyEventLParam` or `PhysicalKeyStatus` event args. + /// + /// In windowed mode, the event handler is run synchronously. Until you + /// run `Handled()` on the event args or the event handler returns, the + /// browser process is blocked and outgoing cross-process COM requests fail + /// with `RPC_E_CANTCALLOUT_ININPUTSYNCCALL`. All `CoreWebView2` API methods + /// work, however. + /// + /// In windowless mode, the event handler is run asynchronously. Further + /// input do not reach the browser until the event handler returns or + /// `Handled()` is run, but the browser process is not blocked, and outgoing + /// COM requests work normally. + /// + /// It is recommended to run `Handled(TRUE)` as early as are able to know + /// that you want to handle the accelerator key. + /// + /// \snippet ControlComponent.cpp AcceleratorKeyPressed + + HRESULT add_AcceleratorKeyPressed( + [in] ICoreWebView2AcceleratorKeyPressedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Removes an event handler previously added with + /// `add_AcceleratorKeyPressed`. + + HRESULT remove_AcceleratorKeyPressed( + [in] EventRegistrationToken token); + + /// The parent window provided by the app that this WebView is using to + /// render content. This API initially returns the window passed into + /// `CreateCoreWebView2Controller`. + + [propget] HRESULT ParentWindow([out, retval] HWND* parentWindow); + + /// Sets the parent window for the WebView. This causes the WebView to + /// re-parent the main WebView window to the newly provided window. + + [propput] HRESULT ParentWindow([in] HWND parentWindow); + + /// This is a notification separate from `Bounds` that tells WebView that the + /// main WebView parent (or any ancestor) `HWND` moved. This is needed + /// for accessibility and certain dialogs in WebView to work correctly. + /// + /// \snippet ViewComponent.cpp NotifyParentWindowPositionChanged + + HRESULT NotifyParentWindowPositionChanged(); + + /// Closes the WebView and cleans up the underlying browser instance. + /// Cleaning up the browser instance releases the resources powering the + /// WebView. The browser instance is shut down if no other WebViews are + /// using it. + /// + /// After running `Close`, most methods will fail and event handlers stop + /// running. Specifically, the WebView releases the associated references to + /// any associated event handlers when `Close` is run. + /// + /// `Close` is implicitly run when the `CoreWebView2Controller` loses the + /// final reference and is destructed. But it is best practice to + /// explicitly run `Close` to avoid any accidental cycle of references + /// between the WebView and the app code. Specifically, if you capture a + /// reference to the WebView in an event handler you create a reference cycle + /// between the WebView and the event handler. Run `Close` to break the + /// cycle by releasing all event handlers. But to avoid the situation, it is + /// best to both explicitly run `Close` on the WebView and to not capture a + /// reference to the WebView to ensure the WebView is cleaned up correctly. + /// + /// \snippet AppWindow.cpp Close + + HRESULT Close(); + + /// Gets the `CoreWebView2` associated with this `CoreWebView2Controller`. + + [propget] HRESULT CoreWebView2([out, retval] ICoreWebView2** coreWebView2); +} + +/// A continuation of the ICoreWebView2Controller interface. +[uuid(c979903e-d4ca-4228-92eb-47ee3fa96eab), object, pointer_default(unique)] +interface ICoreWebView2Controller2 : ICoreWebView2Controller { + /// The `DefaultBackgroundColor` property is the color WebView renders + /// underneath all web content. This means WebView renders this color when + /// there is no web content loaded such as before the initial navigation or + /// between navigations. This also means web pages with undefined css + /// background properties or background properties containing transparent + /// pixels will render their contents over this color. Web pages with defined + /// and opaque background properties that span the page will obscure the + /// `DefaultBackgroundColor` and display normally. The default value for this + /// property is white to resemble the native browser experience. + /// + /// The Color is specified by the COREWEBVIEW2_COLOR that represents an RGBA + /// value. The `A` represents an Alpha value, meaning + /// `DefaultBackgroundColor` can be transparent. In the case of a transparent + /// `DefaultBackgroundColor` WebView will render hosting app content as the + /// background. This Alpha value is not supported on Windows 7. Any `A` value + /// other than 255 will result in E_INVALIDARG on Windows 7. + /// It is supported on all other WebView compatible platforms. + /// + /// Semi-transparent colors are not currently supported by this API and + /// setting `DefaultBackgroundColor` to a semi-transparent color will fail + /// with E_INVALIDARG. The only supported alpha values are 0 and 255, all + /// other values will result in E_INVALIDARG. + /// `DefaultBackgroundColor` can only be an opaque color or transparent. + /// + /// \snippet ViewComponent.cpp DefaultBackgroundColor + + [propget] HRESULT DefaultBackgroundColor( + [out, retval] COREWEBVIEW2_COLOR* backgroundColor); + + /// Sets the `DefaultBackgroundColor` property. + + [propput] HRESULT DefaultBackgroundColor( + [in] COREWEBVIEW2_COLOR backgroundColor); +} + +/// A continuation of the ICoreWebView2Controller2 interface. +[uuid(f9614724-5d2b-41dc-aef7-73d62b51543b), object, pointer_default(unique)] +interface ICoreWebView2Controller3 : ICoreWebView2Controller2 { + /// The rasterization scale for the WebView. The rasterization scale is the + /// combination of the monitor DPI scale and text scaling set by the user. + /// This value should be updated when the DPI scale of the app's top level + /// window changes (i.e. monitor DPI scale changes or window changes monitor) + /// or when the text scale factor of the system changes. + /// + /// \snippet AppWindow.cpp DPIChanged + /// + /// \snippet AppWindow.cpp TextScaleChanged1 + /// + /// \snippet AppWindow.cpp TextScaleChanged2 + /// + /// Rasterization scale applies to the WebView content, as well as + /// popups, context menus, scroll bars, and so on. Normal app scaling + /// scenarios should use the ZoomFactor property or SetBoundsAndZoomFactor + /// API which only scale the rendered HTML content and not popups, context + /// menus, scroll bars, and so on. + /// + /// \snippet ViewComponent.cpp RasterizationScale + [propget] HRESULT RasterizationScale([out, retval] double* scale); + /// Set the rasterization scale property. + [propput] HRESULT RasterizationScale([in] double scale); + + /// ShouldDetectMonitorScaleChanges property determines whether the WebView + /// attempts to track monitor DPI scale changes. When true, the WebView will + /// track monitor DPI scale changes, update the RasterizationScale property, + /// and raises RasterizationScaleChanged event. When false, the WebView will + /// not track monitor DPI scale changes, and the app must update the + /// RasterizationScale property itself. RasterizationScaleChanged event will + /// never raise when ShouldDetectMonitorScaleChanges is false. + [propget] HRESULT ShouldDetectMonitorScaleChanges([out, retval] BOOL* value); + /// Set the ShouldDetectMonitorScaleChanges property. + [propput] HRESULT ShouldDetectMonitorScaleChanges([in] BOOL value); + + /// Add an event handler for the RasterizationScaleChanged event. + /// The event is raised when the WebView detects that the monitor DPI scale + /// has changed, ShouldDetectMonitorScaleChanges is true, and the WebView has + /// changed the RasterizationScale property. + /// + /// \snippet ViewComponent.cpp RasterizationScaleChanged + HRESULT add_RasterizationScaleChanged( + [in] ICoreWebView2RasterizationScaleChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with + /// add_RasterizationScaleChanged. + HRESULT remove_RasterizationScaleChanged( + [in] EventRegistrationToken token); + + /// BoundsMode affects how setting the Bounds and RasterizationScale + /// properties work. Bounds mode can either be in COREWEBVIEW2_BOUNDS_MODE_USE_RAW_PIXELS + /// mode or COREWEBVIEW2_BOUNDS_MODE_USE_RASTERIZATION_SCALE mode. + /// + /// When the mode is in COREWEBVIEW2_BOUNDS_MODE_USE_RAW_PIXELS, setting the bounds + /// property will set the size of the WebView in raw screen pixels. Changing + /// the rasterization scale in this mode won't change the raw pixel size of + /// the WebView and will only change the rasterization scale. + /// + /// When the mode is in COREWEBVIEW2_BOUNDS_MODE_USE_RASTERIZATION_SCALE, setting the + /// bounds property will change the logical size of the WebView which can be + /// described by the following equation: + /// ```text + /// Logical size * rasterization scale = Raw Pixel size + /// ``` + /// In this case, changing the rasterization scale will keep the logical size + /// the same and change the raw pixel size. + /// + /// \snippet ViewComponent.cpp BoundsMode + [propget] HRESULT BoundsMode( + [out, retval] COREWEBVIEW2_BOUNDS_MODE* boundsMode); + /// Set the BoundsMode property. + [propput] HRESULT BoundsMode([in] COREWEBVIEW2_BOUNDS_MODE boundsMode); +} + +/// This interface is an extension of the ICoreWebView2Controller interface to +/// support visual hosting. An object implementing the +/// ICoreWebView2CompositionController interface will also implement +/// ICoreWebView2Controller. Callers are expected to use +/// ICoreWebView2Controller for resizing, visibility, focus, and so on, and +/// then use ICoreWebView2CompositionController to connect to a composition +/// tree and provide input meant for the WebView. +[uuid(3df9b733-b9ae-4a15-86b4-eb9ee9826469), object, pointer_default(unique)] +interface ICoreWebView2CompositionController : IUnknown { + /// The RootVisualTarget is a visual in the hosting app's visual tree. This + /// visual is where the WebView will connect its visual tree. The app uses + /// this visual to position the WebView within the app. The app still needs + /// to use the Bounds property to size the WebView. The RootVisualTarget + /// property can be an IDCompositionVisual or a + /// Windows::UI::Composition::ContainerVisual. WebView will connect its visual + /// tree to the provided visual before returning from the property setter. The + /// app needs to commit on its device setting the RootVisualTarget property. + /// The RootVisualTarget property supports being set to nullptr to disconnect + /// the WebView from the app's visual tree. + /// \snippet ViewComponent.cpp SetRootVisualTarget + /// \snippet ViewComponent.cpp BuildDCompTree + [propget] HRESULT RootVisualTarget([out, retval] IUnknown** target); + /// Set the RootVisualTarget property. + [propput] HRESULT RootVisualTarget([in] IUnknown* target); + + /// If eventKind is COREWEBVIEW2_MOUSE_EVENT_KIND_HORIZONTAL_WHEEL or + /// COREWEBVIEW2_MOUSE_EVENT_KIND_WHEEL, then mouseData specifies the amount of + /// wheel movement. A positive value indicates that the wheel was rotated + /// forward, away from the user; a negative value indicates that the wheel was + /// rotated backward, toward the user. One wheel click is defined as + /// WHEEL_DELTA, which is 120. + /// If eventKind is COREWEBVIEW2_MOUSE_EVENT_KIND_X_BUTTON_DOUBLE_CLICK + /// COREWEBVIEW2_MOUSE_EVENT_KIND_X_BUTTON_DOWN, or + /// COREWEBVIEW2_MOUSE_EVENT_KIND_X_BUTTON_UP, then mouseData specifies which X + /// buttons were pressed or released. This value should be 1 if the first X + /// button is pressed/released and 2 if the second X button is + /// pressed/released. + /// If eventKind is COREWEBVIEW2_MOUSE_EVENT_KIND_LEAVE, then virtualKeys, + /// mouseData, and point should all be zero. + /// If eventKind is any other value, then mouseData should be zero. + /// Point is expected to be in the client coordinate space of the WebView. + /// To track mouse events that start in the WebView and can potentially move + /// outside of the WebView and host application, calling SetCapture and + /// ReleaseCapture is recommended. + /// To dismiss hover popups, it is also recommended to send + /// COREWEBVIEW2_MOUSE_EVENT_KIND_LEAVE messages. + /// \snippet ViewComponent.cpp SendMouseInput + HRESULT SendMouseInput( + [in] COREWEBVIEW2_MOUSE_EVENT_KIND eventKind, + [in] COREWEBVIEW2_MOUSE_EVENT_VIRTUAL_KEYS virtualKeys, + [in] UINT32 mouseData, + [in] POINT point); + + /// SendPointerInput accepts touch or pen pointer input of types defined in + /// COREWEBVIEW2_POINTER_EVENT_KIND. Any pointer input from the system must be + /// converted into an ICoreWebView2PointerInfo first. + HRESULT SendPointerInput( + [in] COREWEBVIEW2_POINTER_EVENT_KIND eventKind, + [in] ICoreWebView2PointerInfo* pointerInfo); + + /// The current cursor that WebView thinks it should be. The cursor should be + /// set in WM_SETCURSOR through ::SetCursor or set on the corresponding + /// parent/ancestor HWND of the WebView through ::SetClassLongPtr. The HCURSOR + /// can be freed so CopyCursor/DestroyCursor is recommended to keep your own + /// copy if you are doing more than immediately setting the cursor. + [propget] HRESULT Cursor([out, retval] HCURSOR* cursor); + + /// The current system cursor ID reported by the underlying rendering engine + /// for WebView. For example, most of the time, when the cursor is over text, + /// this will return the int value for IDC_IBEAM. The systemCursorId is only + /// valid if the rendering engine reports a default Windows cursor resource + /// value. Navigate to + /// /[LoadCursorW/]/[WindowsWin32ApiWinuserNfwinuserloadcursorw/] for more + /// details. Otherwise, if custom CSS cursors are being used, this will return + /// 0. To actually use systemCursorId in LoadCursor or LoadImage, + /// MAKEINTRESOURCE must be called on it first. + /// + /// [WindowsWin32ApiWinuserNfwinuserloadcursorw]: /windows/win32/api/winuser/nf-winuser-loadcursorw "LoadCursorW function (winuser.h) - Win32 apps | Microsoft Docs" + /// + /// \snippet ViewComponent.cpp SystemCursorId + [propget] HRESULT SystemCursorId([out, retval] UINT32* systemCursorId); + + /// Add an event handler for the CursorChanged event. + /// The event is raised when WebView thinks the cursor should be changed. For + /// example, when the mouse cursor is currently the default cursor but is then + /// moved over text, it may try to change to the IBeam cursor. + /// + /// It is expected for the developer to send + /// COREWEBVIEW2_MOUSE_EVENT_KIND_LEAVE messages (in addition to + /// COREWEBVIEW2_MOUSE_EVENT_KIND_MOVE messages) through the SendMouseInput + /// API. This is to ensure that the mouse is actually within the WebView that + /// sends out CursorChanged events. + /// + /// \snippet ViewComponent.cpp CursorChanged + HRESULT add_CursorChanged( + [in] ICoreWebView2CursorChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + /// Remove an event handler previously added with add_CursorChanged. + HRESULT remove_CursorChanged( + [in] EventRegistrationToken token); +} + +/// A continuation of the ICoreWebView2CompositionController interface. +[uuid(0b6a3d24-49cb-4806-ba20-b5e0734a7b26), object, pointer_default(unique)] +interface ICoreWebView2CompositionController2 : ICoreWebView2CompositionController { + /// Returns the UI Automation Provider for the WebView. + [propget] HRESULT UIAProvider([out, retval] IUnknown** provider); +} + +/// This interface is used to complete deferrals on event args that support +/// getting deferrals using the `GetDeferral` method. + +[uuid(c10e7f7b-b585-46f0-a623-8befbf3e4ee0), object, pointer_default(unique)] +interface ICoreWebView2Deferral : IUnknown { + + /// Completes the associated deferred event. Complete should only be run + /// once for each deferral taken. + + HRESULT Complete(); +} + +/// Defines properties that enable, disable, or modify WebView features. +/// Setting changes made after `NavigationStarting` event does not apply +/// until the next top-level navigation. + +[uuid(e562e4f0-d7fa-43ac-8d71-c05150499f00), object, pointer_default(unique)] +interface ICoreWebView2Settings : IUnknown { + + /// Controls if running JavaScript is enabled in all future navigations in + /// the WebView. This only affects scripts in the document. Scripts + /// injected with `ExecuteScript` runs even if script is disabled. + /// The default value is `TRUE`. + /// + /// \snippet SettingsComponent.cpp IsScriptEnabled + + [propget] HRESULT IsScriptEnabled( + [out, retval] BOOL* isScriptEnabled); + + /// Sets the `IsScriptEnabled` property. + + [propput] HRESULT IsScriptEnabled([in] BOOL isScriptEnabled); + + /// The `IsWebMessageEnabled` property is used when loading a new HTML + /// document. If set to `TRUE`, communication from the host to the top-level + /// HTML document of the WebView is allowed using `PostWebMessageAsJson`, + /// `PostWebMessageAsString`, and message event of `window.chrome.webview`. + /// For more information, navigate to [PostWebMessageAsJson]. Communication + /// from the top-level HTML document of the WebView to the host is allowed + /// using the postMessage function of `window.chrome.webview` and + /// `add_WebMessageReceived` method. For more information, navigate to + /// [add_WebMessageReceived]. If set to false, then communication is + /// disallowed. `PostWebMessageAsJson` and `PostWebMessageAsString` fails + /// with `E_ACCESSDENIED` and `window.chrome.webview.postMessage` fails by + /// throwing an instance of an `Error` object. + /// The default value is `TRUE`. + /// + /// \snippet ScenarioWebMessage.cpp IsWebMessageEnabled + + [propget] HRESULT IsWebMessageEnabled( + [out, retval] BOOL* isWebMessageEnabled); + + /// Sets the `IsWebMessageEnabled` property. + + [propput] HRESULT IsWebMessageEnabled([in] BOOL isWebMessageEnabled); + + /// `AreDefaultScriptDialogsEnabled` is used when loading a new HTML + /// document. If set to `FALSE`, WebView2 does not render the default JavaScript + /// dialog box (Specifically those displayed by the JavaScript alert, + /// confirm, prompt functions and `beforeunload` event). Instead, if an + /// event handler is set using `add_ScriptDialogOpening`, WebView sends an + /// event that contains all of the information for the dialog and allow the + /// host app to show a custom UI. + /// The default value is `TRUE`. + + [propget] HRESULT AreDefaultScriptDialogsEnabled( + [out, retval] BOOL* areDefaultScriptDialogsEnabled); + + /// Sets the `AreDefaultScriptDialogsEnabled` property. + + [propput] HRESULT AreDefaultScriptDialogsEnabled( + [in] BOOL areDefaultScriptDialogsEnabled); + + /// `IsStatusBarEnabled` controls whether the status bar is displayed. The + /// status bar is usually displayed in the lower left of the WebView and + /// shows things such as the URI of a link when the user hovers over it and + /// other information. + /// The default value is `TRUE`. + + [propget] HRESULT IsStatusBarEnabled([out, retval] BOOL* isStatusBarEnabled); + + /// Sets the `IsStatusBarEnabled` property. + + [propput] HRESULT IsStatusBarEnabled([in] BOOL isStatusBarEnabled); + + /// `AreDevToolsEnabled` controls whether the user is able to use the context + /// menu or keyboard shortcuts to open the DevTools window. + /// The default value is `TRUE`. + + [propget] HRESULT AreDevToolsEnabled([out, retval] BOOL* areDevToolsEnabled); + + /// Sets the `AreDevToolsEnabled` property. + + [propput] HRESULT AreDevToolsEnabled([in] BOOL areDevToolsEnabled); + + /// The `AreDefaultContextMenusEnabled` property is used to prevent default + /// context menus from being shown to user in WebView. + /// The default value is `TRUE`. + /// + /// \snippet SettingsComponent.cpp DisableContextMenu + + [propget] HRESULT AreDefaultContextMenusEnabled([out, retval] BOOL* enabled); + + /// Sets the `AreDefaultContextMenusEnabled` property. + + [propput] HRESULT AreDefaultContextMenusEnabled([in] BOOL enabled); + + /// The `AreHostObjectsAllowed` property is used to control whether host + /// objects are accessible from the page in WebView. + /// The default value is `TRUE`. + /// + /// \snippet SettingsComponent.cpp HostObjectsAccess + + [propget] HRESULT AreHostObjectsAllowed([out, retval] BOOL* allowed); + + /// Sets the `AreHostObjectsAllowed` property. + + [propput] HRESULT AreHostObjectsAllowed([in] BOOL allowed); + + /// The `IsZoomControlEnabled` property is used to prevent the user from + /// impacting the zoom of the WebView. When disabled, the user is not able + /// to zoom using Ctrl++, Ctrl+-, or Ctrl+mouse wheel, but the zoom + /// is set using `ZoomFactor` API. The default value is `TRUE`. + /// + /// \snippet SettingsComponent.cpp DisableZoomControl + + [propget] HRESULT IsZoomControlEnabled([out, retval] BOOL* enabled); + + /// Sets the `IsZoomControlEnabled` property. + + [propput] HRESULT IsZoomControlEnabled([in] BOOL enabled); + + /// The `IsBuiltInErrorPageEnabled` property is used to disable built in + /// error page for navigation failure and render process failure. When + /// disabled, a blank page is displayed when the related error happens. + /// The default value is `TRUE`. + /// + /// \snippet SettingsComponent.cpp BuiltInErrorPageEnabled + + [propget] HRESULT IsBuiltInErrorPageEnabled([out, retval] BOOL* enabled); + + /// Sets the `IsBuiltInErrorPageEnabled` property. + + [propput] HRESULT IsBuiltInErrorPageEnabled([in] BOOL enabled); +} + +/// A continuation of the ICoreWebView2Settings interface that manages the user agent. + +[uuid(ee9a0f68-f46c-4e32-ac23-ef8cac224d2a), object, pointer_default(unique)] +interface ICoreWebView2Settings2 : ICoreWebView2Settings { + /// Returns the User Agent. The default value is the default User Agent of the + /// Microsoft Edge browser. + /// + /// \snippet SettingsComponent.cpp UserAgent + [propget] HRESULT UserAgent([out, retval] LPWSTR* userAgent); + /// Sets the `UserAgent` property. This property may be overriden if + /// the User-Agent header is set in a request. If the parameter is empty + /// the User Agent will not be updated and the current User Agent will remain. + [propput] HRESULT UserAgent([in] LPCWSTR userAgent); +} + +/// A continuation of the ICoreWebView2Settings interface that manages whether +/// browser accelerator keys are enabled. +[uuid(fdb5ab74-af33-4854-84f0-0a631deb5eba), object, pointer_default(unique)] +interface ICoreWebView2Settings3 : ICoreWebView2Settings2 { + /// When this setting is set to FALSE, it disables all accelerator keys that + /// access features specific to a web browser, including but not limited to: + /// - Ctrl-F and F3 for Find on Page + /// - Ctrl-P for Print + /// - Ctrl-R and F5 for Reload + /// - Ctrl-Plus and Ctrl-Minus for zooming + /// - Ctrl-Shift-C and F12 for DevTools + /// - Special keys for browser functions, such as Back, Forward, and Search + /// + /// It does not disable accelerator keys related to movement and text editing, + /// such as: + /// - Home, End, Page Up, and Page Down + /// - Ctrl-X, Ctrl-C, Ctrl-V + /// - Ctrl-A for Select All + /// - Ctrl-Z for Undo + /// + /// Those accelerator keys will always be enabled unless they are handled in + /// the `AcceleratorKeyPressed` event. + /// + /// This setting has no effect on the `AcceleratorKeyPressed` event. The event + /// will be fired for all accelerator keys, whether they are enabled or not. + /// + /// The default value for `AreBrowserAcceleratorKeysEnabled` is TRUE. + /// + /// \snippet SettingsComponent.cpp AreBrowserAcceleratorKeysEnabled + [propget] HRESULT AreBrowserAcceleratorKeysEnabled( + [out, retval] BOOL* areBrowserAcceleratorKeysEnabled); + + /// Sets the `AreBrowserAcceleratorKeysEnabled` property. + [propput] HRESULT AreBrowserAcceleratorKeysEnabled( + [in] BOOL areBrowserAcceleratorKeysEnabled); +} + +/// A continuation of the ICoreWebView2Settings interface. +[uuid(cb56846c-4168-4d53-b04f-03b6d6796ff2), object, pointer_default(unique)] +interface ICoreWebView2Settings4 : ICoreWebView2Settings3 { + /// IsPasswordAutosaveEnabled controls whether autosave for password + /// information is enabled. The IsPasswordAutosaveEnabled property behaves + /// independently of the IsGeneralAutofillEnabled property. When IsPasswordAutosaveEnabled is + /// false, no new password data is saved and no Save/Update Password prompts are displayed. + /// However, if there was password data already saved before disabling this setting, + /// then that password information is auto-populated, suggestions are shown and clicking on + /// one will populate the fields. + /// When IsPasswordAutosaveEnabled is true, password information is auto-populated, + /// suggestions are shown and clicking on one will populate the fields, new data + /// is saved, and a Save/Update Password prompt is displayed. + /// The default value is `FALSE`. + /// + /// \snippet SettingsComponent.cpp PasswordAutosaveEnabled + [propget] HRESULT IsPasswordAutosaveEnabled([out, retval] BOOL* value); + /// Set the IsPasswordAutosaveEnabled property. + [propput] HRESULT IsPasswordAutosaveEnabled([in] BOOL value); + + /// IsGeneralAutofillEnabled controls whether autofill for information + /// like names, street and email addresses, phone numbers, and arbitrary input + /// is enabled. This excludes password and credit card information. When + /// IsGeneralAutofillEnabled is false, no suggestions appear, and no new information + /// is saved. When IsGeneralAutofillEnabled is true, information is saved, suggestions + /// appear and clicking on one will populate the form fields. + /// The default value is `TRUE`. + /// + /// \snippet SettingsComponent.cpp GeneralAutofillEnabled + [propget] HRESULT IsGeneralAutofillEnabled([out, retval] BOOL* value); + /// Set the IsGeneralAutofillEnabled property. + [propput] HRESULT IsGeneralAutofillEnabled([in] BOOL value); +} + +/// A continuation of the ICoreWebView2Settings interface. +[uuid(183e7052-1d03-43a0-ab99-98e043b66b39), object, pointer_default(unique)] +interface ICoreWebView2Settings5 : ICoreWebView2Settings4 { + /// Pinch-zoom, referred to as “Page Scale” zoom, is performed as a post-rendering step, + /// it changes the page scale factor property and scales the surface the web page is + /// rendered onto when user performs a pinch zooming action. It does not change the layout + /// but rather changes the viewport and clips the web content, the content outside of the + /// viewport isn't visible onscreen and users can't reach this content using mouse. + /// + /// The `IsPinchZoomEnabled` property enables or disables the ability of + /// the end user to use a pinching motion on touch input enabled devices + /// to scale the web content in the WebView2. It defaults to `TRUE`. + /// When set to `FALSE`, the end user cannot pinch zoom after the next navigation. + /// Disabling/Enabling `IsPinchZoomEnabled` only affects the end user's ability to use + /// pinch motions and does not change the page scale factor. + /// This API only affects the Page Scale zoom and has no effect on the + /// existing browser zoom properties (`IsZoomControlEnabled` and `ZoomFactor`) + /// or other end user mechanisms for zooming. + /// + /// \snippet SettingsComponent.cpp TogglePinchZoomEnabled + [propget] HRESULT IsPinchZoomEnabled([out, retval] BOOL* enabled); + /// Set the `IsPinchZoomEnabled` property + [propput] HRESULT IsPinchZoomEnabled([in] BOOL enabled); +} + +/// Event args for the `ProcessFailed` event. + +[uuid(8155a9a4-1474-4a86-8cae-151b0fa6b8ca), object, pointer_default(unique)] +interface ICoreWebView2ProcessFailedEventArgs : IUnknown { + + /// The kind of process failure that has occurred. `processFailedKind` is + /// `COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_EXITED` if the + /// failed process is the main frame's renderer, even if there were subframes + /// rendered by such process; all frames are gone when this happens. + + [propget] HRESULT ProcessFailedKind( + [out, retval] COREWEBVIEW2_PROCESS_FAILED_KIND* processFailedKind); +} + +/// Receives `ProcessFailed` events. + +[uuid(79e0aea4-990b-42d9-aa1d-0fcc2e5bc7f1), object, pointer_default(unique)] +interface ICoreWebView2ProcessFailedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. + + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2ProcessFailedEventArgs* args); +} + +/// Implements the interface to receive `ZoomFactorChanged` events. Use the +/// `ICoreWebView2Controller.ZoomFactor` property to get the modified zoom +/// factor. + +[uuid(b52d71d6-c4df-4543-a90c-64a3e60f38cb), object, pointer_default(unique)] +interface ICoreWebView2ZoomFactorChangedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. No event args exist + /// and the `args` parameter is set to `null`. + + HRESULT Invoke([in] ICoreWebView2Controller* sender, [in] IUnknown* args); +} + +/// Iterator for a collection of HTTP headers. For more information, navigate +/// to ICoreWebView2HttpRequestHeaders and ICoreWebView2HttpResponseHeaders. +/// +/// \snippet ScenarioWebViewEventMonitor.cpp HttpRequestHeaderIterator + +[uuid(0702fc30-f43b-47bb-ab52-a42cb552ad9f), object, pointer_default(unique)] +interface ICoreWebView2HttpHeadersCollectionIterator : IUnknown { + + /// Get the name and value of the current HTTP header of the iterator. If + /// the previous `MoveNext` operation set the `hasNext` parameter to `FALSE`, + /// this method fails. + + HRESULT GetCurrentHeader([out] LPWSTR* name, [out] LPWSTR* value); + + /// `TRUE` when the iterator has not run out of headers. If the collection + /// over which the iterator is iterating is empty or if the iterator has gone + /// past the end of the collection then this is `FALSE`. + + [propget] HRESULT HasCurrentHeader([out, retval] BOOL* hasCurrent); + + /// Move the iterator to the next HTTP header in the collection. + /// + /// > [!NOTE] + /// If no more HTTP headers exist, the `hasNext` parameter is set to + /// `FALSE`. After this occurs the `GetCurrentHeader` method fails. + + HRESULT MoveNext([out, retval] BOOL* hasNext); +} + +/// HTTP request headers. Used to inspect the HTTP request on +/// `WebResourceRequested` event and `NavigationStarting` event. +/// +/// > [!NOTE] +/// It is possible to modify the HTTP request from a `WebResourceRequested` +/// event, but not from a `NavigationStarting` event. + +[uuid(e86cac0e-5523-465c-b536-8fb9fc8c8c60), object, pointer_default(unique)] +interface ICoreWebView2HttpRequestHeaders : IUnknown { + + /// Gets the header value matching the name. + + HRESULT GetHeader([in] LPCWSTR name, [out, retval] LPWSTR* value); + + /// Gets the header value matching the name using an iterator. + + HRESULT GetHeaders([in] LPCWSTR name, [out, retval] ICoreWebView2HttpHeadersCollectionIterator** iterator); + + /// Verifies that the headers contain an entry that matches the header name. + + HRESULT Contains([in] LPCWSTR name, [out, retval] BOOL* contains); + + /// Adds or updates header that matches the name. + + HRESULT SetHeader([in] LPCWSTR name, [in] LPCWSTR value); + + /// Removes header that matches the name. + + HRESULT RemoveHeader([in] LPCWSTR name); + + /// Gets an iterator over the collection of request headers. + + HRESULT GetIterator( + [out, retval] ICoreWebView2HttpHeadersCollectionIterator** iterator); +} + +/// HTTP response headers. Used to construct a `WebResourceResponse` for the +/// `WebResourceRequested` event. + +[uuid(03c5ff5a-9b45-4a88-881c-89a9f328619c), object, pointer_default(unique)] +interface ICoreWebView2HttpResponseHeaders : IUnknown { + + /// Appends header line with name and value. + + HRESULT AppendHeader([in] LPCWSTR name, [in] LPCWSTR value); + + /// Verifies that the headers contain entries that match the header name. + + HRESULT Contains([in] LPCWSTR name, [out, retval] BOOL* contains); + + /// Gets the first header value in the collection matching the name. + + HRESULT GetHeader([in] LPCWSTR name, [out, retval] LPWSTR* value); + + /// Gets the header values matching the name. + + HRESULT GetHeaders([in] LPCWSTR name, [out, retval] ICoreWebView2HttpHeadersCollectionIterator** iterator); + + /// Gets an iterator over the collection of entire response headers. + + HRESULT GetIterator( + [out, retval] ICoreWebView2HttpHeadersCollectionIterator** iterator); +} + +/// An HTTP request used with the `WebResourceRequested` event. + +[uuid(97055cd4-512c-4264-8b5f-e3f446cea6a5), object, pointer_default(unique)] +interface ICoreWebView2WebResourceRequest : IUnknown { + + /// The request URI. + + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// Sets the `Uri` property. + + [propput] HRESULT Uri([in] LPCWSTR uri); + + /// The HTTP request method. + + [propget] HRESULT Method([out, retval] LPWSTR* method); + + /// Sets the `Method` property. + + [propput] HRESULT Method([in] LPCWSTR method); + + /// The HTTP request message body as stream. POST data should be here. If a + /// stream is set, which overrides the message body, the stream must have + /// all the content data available by the time the `WebResourceRequested` + /// event deferral of this response is completed. Stream should be agile or + /// be created from a background STA to prevent performance impact to the UI + /// thread. `Null` means no content data. `IStream` semantics apply + /// (return `S_OK` to `Read` runs until all data is exhausted). + + [propget] HRESULT Content([out, retval] IStream** content); + + /// Sets the `Content` property. + + [propput] HRESULT Content([in] IStream* content); + + /// The mutable HTTP request headers + + [propget] HRESULT Headers([out, retval] ICoreWebView2HttpRequestHeaders** headers); +} + +/// An HTTP response used with the `WebResourceRequested` event. + +[uuid(aafcc94f-fa27-48fd-97df-830ef75aaec9), object, pointer_default(unique)] +interface ICoreWebView2WebResourceResponse : IUnknown { + + /// HTTP response content as stream. Stream must have all the content data + /// available by the time the `WebResourceRequested` event deferral of this + /// response is completed. Stream should be agile or be created from a + /// background thread to prevent performance impact to the UI thread. `Null` + /// means no content data. `IStream` semantics apply (return `S_OK` to + /// `Read` runs until all data is exhausted). + + [propget] HRESULT Content([out, retval] IStream** content); + + /// Sets the `Content` property. + + [propput] HRESULT Content([in] IStream* content); + + /// Overridden HTTP response headers. + + [propget] HRESULT Headers([out, retval] ICoreWebView2HttpResponseHeaders** headers); + + /// The HTTP response status code. + + [propget] HRESULT StatusCode([out, retval] int* statusCode); + + /// Sets the `StatusCode` property. + + [propput] HRESULT StatusCode([in] int statusCode); + + /// The HTTP response reason phrase. + + [propget] HRESULT ReasonPhrase([out, retval] LPWSTR* reasonPhrase); + + /// Sets the `ReasonPhrase` property. + + [propput] HRESULT ReasonPhrase([in] LPCWSTR reasonPhrase); +} + +/// Event args for the `NavigationStarting` event. + +[uuid(5b495469-e119-438a-9b18-7604f25f2e49), object, pointer_default(unique)] +interface ICoreWebView2NavigationStartingEventArgs : IUnknown { + + /// The uri of the requested navigation. + + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// `TRUE` when the navigation was initiated through a user gesture as + /// opposed to programmatic navigation by page script. Navigations initiated + /// via WebView2 APIs are considered as user initiated. + + [propget] HRESULT IsUserInitiated([out, retval] BOOL* isUserInitiated); + + /// `TRUE` when the navigation is redirected. + + [propget] HRESULT IsRedirected([out, retval] BOOL* isRedirected); + + /// The HTTP request headers for the navigation. + /// + /// > [!NOTE] + /// You are not able to modify the HTTP request headers in a + /// `NavigationStarting` event. + + [propget] HRESULT RequestHeaders([out, retval] ICoreWebView2HttpRequestHeaders** requestHeaders); + + /// The host may set this flag to cancel the navigation. If set, the + /// navigation is not longer present and the content of the current page is + /// intact. For performance reasons, `GET` HTTP requests may happen, while + /// the host is responding. You may set cookies and use part of a request + /// for the navigation. Cancellation for navigation to `about:blank` or + /// frame navigation to `srcdoc` is not supported. Such attempts are + /// ignored. + + [propget] HRESULT Cancel([out, retval] BOOL* cancel); + + /// Sets the `Cancel` property. + + [propput] HRESULT Cancel([in] BOOL cancel); + + /// The ID of the navigation. + + [propget] HRESULT NavigationId([out, retval] UINT64* navigationId); +} + +/// Receives `NavigationStarting` events. + +[uuid(9adbe429-f36d-432b-9ddc-f8881fbd76e3), object, pointer_default(unique)] +interface ICoreWebView2NavigationStartingEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. + + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2NavigationStartingEventArgs* args); +} + +/// Event args for the `ContentLoading` event. + +[uuid(0c8a1275-9b6b-4901-87ad-70df25bafa6e), object, pointer_default(unique)] +interface ICoreWebView2ContentLoadingEventArgs : IUnknown { + + /// `TRUE` if the loaded content is an error page. + + [propget] HRESULT IsErrorPage([out, retval] BOOL* isErrorPage); + + /// The ID of the navigation. + + [propget] HRESULT NavigationId([out, retval] UINT64* navigationId); +} + +/// Receives `ContentLoading` events. + +[uuid(364471e7-f2be-4910-bdba-d72077d51c4b), object, pointer_default(unique)] +interface ICoreWebView2ContentLoadingEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. + + HRESULT Invoke([in] ICoreWebView2* sender, [in] ICoreWebView2ContentLoadingEventArgs* args); +} + +/// Event args for the `SourceChanged` event. + +[uuid(31e0e545-1dba-4266-8914-f63848a1f7d7), object, pointer_default(unique)] +interface ICoreWebView2SourceChangedEventArgs : IUnknown { + + /// `TRUE` if the page being navigated to is a new document. + + [propget] HRESULT IsNewDocument([out, retval] BOOL* isNewDocument); +} + +/// Receives `SourceChanged` events. + +[uuid(3c067f9f-5388-4772-8b48-79f7ef1ab37c), object, pointer_default(unique)] +interface ICoreWebView2SourceChangedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. + + HRESULT Invoke([in] ICoreWebView2* sender, [in] ICoreWebView2SourceChangedEventArgs* args); +} + +/// Receives `HistoryChanged` events. + +[uuid(c79a420c-efd9-4058-9295-3e8b4bcab645), object, pointer_default(unique)] +interface ICoreWebView2HistoryChangedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. No event args exist + /// and the `args` parameter is set to `null`. + + HRESULT Invoke([in] ICoreWebView2* sender, [in] IUnknown* args); +} + +/// Event args for the `ScriptDialogOpening` event. + +[uuid(7390bb70-abe0-4843-9529-f143b31b03d6), object, pointer_default(unique)] +interface ICoreWebView2ScriptDialogOpeningEventArgs : IUnknown { + + /// The URI of the page that requested the dialog box. + + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// The kind of JavaScript dialog box. `alert`, `confirm`, `prompt`, or + /// `beforeunload`. + + [propget] HRESULT Kind([out, retval] COREWEBVIEW2_SCRIPT_DIALOG_KIND* kind); + + /// The message of the dialog box. From JavaScript this is the first + /// parameter passed to `alert`, `confirm`, and `prompt` and is empty for + /// `beforeunload`. + + [propget] HRESULT Message([out, retval] LPWSTR* message); + + /// The host may run this to respond with **OK** to `confirm`, `prompt`, and + /// `beforeunload` dialogs. Do not run this method to indicate cancel. + /// From JavaScript, this means that the `confirm` and `beforeunload` function + /// returns `TRUE` if `Accept` is run. And for the prompt function it returns + /// the value of `ResultText` if `Accept` is run and otherwise returns + /// `FALSE`. + + HRESULT Accept(); + + /// The second parameter passed to the JavaScript prompt dialog. + /// The result of the prompt JavaScript function uses this value as the + /// default value. + + [propget] HRESULT DefaultText([out, retval] LPWSTR* defaultText); + + /// The return value from the JavaScript prompt function if `Accept` is run. + /// This value is ignored for dialog kinds other than prompt. If `Accept` + /// is not run, this value is ignored and `FALSE` is returned from prompt. + + [propget] HRESULT ResultText([out, retval] LPWSTR* resultText); + + /// Sets the `ResultText` property. + + [propput] HRESULT ResultText([in] LPCWSTR resultText); + + /// Returns an `ICoreWebView2Deferral` object. Use this operation to + /// complete the event at a later time. + + HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral); +} + +/// Receives `ScriptDialogOpening` events. + +[uuid(ef381bf9-afa8-4e37-91c4-8ac48524bdfb), object, pointer_default(unique)] +interface ICoreWebView2ScriptDialogOpeningEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. + + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2ScriptDialogOpeningEventArgs* args); +} + +/// Event args for the `NavigationCompleted` event. + +[uuid(30d68b7d-20d9-4752-a9ca-ec8448fbb5c1), object, pointer_default(unique)] +interface ICoreWebView2NavigationCompletedEventArgs : IUnknown { + + /// `TRUE` when the navigation is successful. `FALSE` for a navigation that + /// ended up in an error page (failures due to no network, DNS lookup + /// failure, HTTP server responds with 4xx), but may also be `FALSE` for + /// additional scenarios such as `window.stop()` run on navigated page. + + [propget] HRESULT IsSuccess([out, retval] BOOL* isSuccess); + + /// The error code if the navigation failed. + + [propget] HRESULT WebErrorStatus([out, retval] COREWEBVIEW2_WEB_ERROR_STATUS* + webErrorStatus); + + /// The ID of the navigation. + + [propget] HRESULT NavigationId([out, retval] UINT64* navigationId); +} + +/// Receives `NavigationCompleted` events. + +[uuid(d33a35bf-1c49-4f98-93ab-006e0533fe1c), object, pointer_default(unique)] +interface ICoreWebView2NavigationCompletedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. + + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2NavigationCompletedEventArgs* args); +} + +/// Event args for the `PermissionRequested` event. + +[uuid(973ae2ef-ff18-4894-8fb2-3c758f046810), object, pointer_default(unique)] +interface ICoreWebView2PermissionRequestedEventArgs : IUnknown { + + /// The origin of the web content that requests the permission. + + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// The type of the permission that is requested. + + [propget] HRESULT PermissionKind([out, retval] COREWEBVIEW2_PERMISSION_KIND* permissionKind); + + /// `TRUE` when the permission request was initiated through a user gesture. + /// + /// > [!NOTE] + /// Being initiated through a user gesture does not mean that user intended + /// to access the associated resource. + + [propget] HRESULT IsUserInitiated([out, retval] BOOL* isUserInitiated); + + /// The status of a permission request, (for example is the request is granted). + /// The default value is `COREWEBVIEW2_PERMISSION_STATE_DEFAULT`. + + [propget] HRESULT State([out, retval] COREWEBVIEW2_PERMISSION_STATE* state); + + /// Sets the `State` property. + + [propput] HRESULT State([in] COREWEBVIEW2_PERMISSION_STATE state); + + /// Gets an `ICoreWebView2Deferral` object. Use the deferral object to make + /// the permission decision at a later time. + + HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral); +} + +/// Receives `PermissionRequested` events. + +[uuid(15e1c6a3-c72a-4df3-91d7-d097fbec6bfd), object, pointer_default(unique)] +interface ICoreWebView2PermissionRequestedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. + + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2PermissionRequestedEventArgs* args); +} + +/// Receives the result of the `AddScriptToExecuteOnDocumentCreated` method. + +[uuid(b99369f3-9b11-47b5-bc6f-8e7895fcea17), object, pointer_default(unique)] +interface ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler : IUnknown { + + /// Provide the completion status and result of the corresponding + /// asynchronous method. + + HRESULT Invoke([in] HRESULT errorCode, [in] LPCWSTR id); +} + +/// Receives the result of the `ExecuteScript` method. + +[uuid(49511172-cc67-4bca-9923-137112f4c4cc), object, pointer_default(unique)] +interface ICoreWebView2ExecuteScriptCompletedHandler : IUnknown { + + /// Provide the implementer with the completion status and result of the + /// corresponding asynchronous method. + + HRESULT Invoke([in] HRESULT errorCode, [in] LPCWSTR resultObjectAsJson); +} + +/// Event args for the `WebResourceRequested` event. + +[uuid(453e667f-12c7-49d4-be6d-ddbe7956f57a), object, pointer_default(unique)] +interface ICoreWebView2WebResourceRequestedEventArgs : IUnknown +{ + + /// The Web resource request. The request object may be missing some headers + /// that are added by network stack at a later time. + + [propget] HRESULT Request([out, retval] ICoreWebView2WebResourceRequest** request); + + /// A placeholder for the web resource response object. If this object is + /// set, the web resource request is completed with the specified response. + + [propget] HRESULT Response([out, retval] ICoreWebView2WebResourceResponse** response); + + /// Sets the `Response` property. Create an empty web resource response + /// object with `CreateWebResourceResponse` and then modify it to construct + /// the response. + + [propput] HRESULT Response([in] ICoreWebView2WebResourceResponse* response); + + /// Obtain an `ICoreWebView2Deferral` object and put the event into a + /// deferred state. Use the `ICoreWebView2Deferral` object to complete the + /// request at a later time. + + HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral); + + /// The web resource request context. + + [propget] HRESULT ResourceContext([out, retval] COREWEBVIEW2_WEB_RESOURCE_CONTEXT* context); +} + +/// Runs when a URL request (through network, file, and so on) is made in +/// the webview for a Web resource matching resource context filter and URL +/// specified in `AddWebResourceRequestedFilter`. The host views and modifies +/// the request or provide a response in a similar pattern to HTTP, in which +/// case the request immediately completed. This may not contain any request +/// headers that are added by the network stack, such as an `Authorization` +/// header. + +[uuid(ab00b74c-15f1-4646-80e8-e76341d25d71), object, pointer_default(unique)] +interface ICoreWebView2WebResourceRequestedEventHandler : IUnknown +{ + + /// Provides the event args for the corresponding event. + + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2WebResourceRequestedEventArgs* args); +} + +/// Receives the result of the `CapturePreview` method. The result is written +/// to the stream provided in the `CapturePreview` method. + +[uuid(697e05e9-3d8f-45fa-96f4-8ffe1ededaf5), object, pointer_default(unique)] +interface ICoreWebView2CapturePreviewCompletedHandler : IUnknown { + + /// Provides the completion status of the corresponding asynchronous method. + + HRESULT Invoke([in] HRESULT errorCode); +} + +/// Receives `GotFocus` and `LostFocus` events. + +[uuid(05ea24bd-6452-4926-9014-4b82b498135d), object, pointer_default(unique)] +interface ICoreWebView2FocusChangedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. No event args exist + /// and the `args` parameter is set to `null`. + + HRESULT Invoke( + [in] ICoreWebView2Controller* sender, + [in] IUnknown* args); +} + +/// Event args for the `MoveFocusRequested` event. + +[uuid(2d6aa13b-3839-4a15-92fc-d88b3c0d9c9d), object, pointer_default(unique)] +interface ICoreWebView2MoveFocusRequestedEventArgs : IUnknown { + + /// The reason for WebView to run the `MoveFocusRequested` event. + + [propget] HRESULT Reason([out, retval] COREWEBVIEW2_MOVE_FOCUS_REASON* reason); + + /// Indicates whether the event has been handled by the app. If the app has + /// moved the focus to another desired location, it should set the `Handled` + /// property to `TRUE`. When the `Handled` property is `FALSE` after the + /// event handler returns, default action is taken. The default action is to + /// try to find the next tab stop child window in the app and try to move + /// focus to that window. If no other window exists to move focus, focus is + /// cycled within the web content of the WebView. + + [propget] HRESULT Handled([out, retval] BOOL* value); + + /// Sets the `Handled` property. + + [propput] HRESULT Handled([in] BOOL value); +} + +/// Receives `MoveFocusRequested` events. + +[uuid(69035451-6dc7-4cb8-9bce-b2bd70ad289f), object, pointer_default(unique)] +interface ICoreWebView2MoveFocusRequestedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. + + HRESULT Invoke( + [in] ICoreWebView2Controller* sender, + [in] ICoreWebView2MoveFocusRequestedEventArgs* args); +} + +/// Event args for the `WebMessageReceived` event. + +[uuid(0f99a40c-e962-4207-9e92-e3d542eff849), object, pointer_default(unique)] +interface ICoreWebView2WebMessageReceivedEventArgs : IUnknown { + + /// The URI of the document that sent this web message. + + [propget] HRESULT Source([out, retval] LPWSTR* source); + + /// The message posted from the WebView content to the host converted to a + /// JSON string. Run this operation to communicate using JavaScript objects. + /// + /// For example, the following `postMessage` runs result in the following + /// `WebMessageAsJson` values. + /// + /// ```json + /// postMessage({'a': 'b'}) L"{\"a\": \"b\"}" + /// postMessage(1.2) L"1.2" + /// postMessage('example') L"\"example\"" + /// ``` + + [propget] HRESULT WebMessageAsJson([out, retval] LPWSTR* webMessageAsJson); + + /// If the message posted from the WebView content to the host is a string + /// type, this method returns the value of that string. If the message + /// posted is some other kind of JavaScript type this method fails with the + /// following error. + /// + /// ```text + /// E_INVALIDARG + /// ``` + /// + /// Run this operation to communicate using simple strings. + /// + /// For example, the following `postMessage` runs result in the following + /// `WebMessageAsString` values. + /// + /// ```json + /// postMessage({'a': 'b'}) E_INVALIDARG + /// postMessage(1.2) E_INVALIDARG + /// postMessage('example') L"example" + /// ``` + + HRESULT TryGetWebMessageAsString([out, retval] LPWSTR* webMessageAsString); +} + +/// Receives `WebMessageReceived` events. + +[uuid(57213f19-00e6-49fa-8e07-898ea01ecbd2), object, pointer_default(unique)] +interface ICoreWebView2WebMessageReceivedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. + + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2WebMessageReceivedEventArgs* args); +} + +/// Event args for the `DevToolsProtocolEventReceived` event. + +[uuid(653c2959-bb3a-4377-8632-b58ada4e66c4), object, pointer_default(unique)] +interface ICoreWebView2DevToolsProtocolEventReceivedEventArgs : IUnknown { + + /// The parameter object of the corresponding `DevToolsProtocol` event + /// represented as a JSON string. + + [propget] HRESULT ParameterObjectAsJson([out, retval] LPWSTR* + parameterObjectAsJson); +} + +/// Receives `DevToolsProtocolEventReceived` events from the WebView. + +[uuid(e2fda4be-5456-406c-a261-3d452138362c), object, pointer_default(unique)] +interface ICoreWebView2DevToolsProtocolEventReceivedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. + + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2DevToolsProtocolEventReceivedEventArgs* args); +} + +/// Receives `CallDevToolsProtocolMethod` completion results. + +[uuid(5c4889f0-5ef6-4c5a-952c-d8f1b92d0574), object, pointer_default(unique)] +interface ICoreWebView2CallDevToolsProtocolMethodCompletedHandler : IUnknown { + + /// Provides the completion status and result of the corresponding + /// asynchronous method. + + HRESULT Invoke([in] HRESULT errorCode, [in] LPCWSTR returnObjectAsJson); +} + +/// Receives the `CoreWebView2Controller` created using `CreateCoreWebView2Controller`. + +[uuid(6c4819f3-c9b7-4260-8127-c9f5bde7f68c), object, pointer_default(unique)] +interface ICoreWebView2CreateCoreWebView2ControllerCompletedHandler : IUnknown { + + /// Provides the completion status and result of the corresponding + /// asynchronous method. + + HRESULT Invoke(HRESULT errorCode, ICoreWebView2Controller* createdController); +} + +/// The caller implements this interface to receive the CoreWebView2Controller +/// created via CreateCoreWebView2CompositionController. +[uuid(02fab84b-1428-4fb7-ad45-1b2e64736184), object, pointer_default(unique)] +interface ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler : IUnknown { + /// Called to provide the implementer with the completion status and result + /// of the corresponding asynchronous method call. + HRESULT Invoke( + HRESULT errorCode, + ICoreWebView2CompositionController* webView); +} + +/// Event args for the `NewWindowRequested` event. The event is run when +/// content inside webview requested to a open a new window (through +/// `window.open()` and so on). + +[uuid(34acb11c-fc37-4418-9132-f9c21d1eafb9), object, pointer_default(unique)] +interface ICoreWebView2NewWindowRequestedEventArgs : IUnknown +{ + + /// The target uri of the new window requested. + + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// Sets a CoreWebView2 as a result of the NewWindowRequested event. If the + /// `NewWindow` is set, the top-level window returns as the opened `WindowProxy`. + /// The NewWindow property should be set to a CoreWebView2 that has not been + /// navigated previously. Don't use methods that cause navigation or interact + /// with the DOM on this CoreWebView2. Setting event handlers, changing + /// Settings properties, or other methods are fine to call. Once the + /// NewWindowRequested event handler completes or its deferral completes, + /// the underlying web contents of this CoreWebView2 will be replaced and + /// navigated as appropriate for the new window. + /// + /// The methods which should affect the new web contents like + /// AddScriptToExecuteOnDocumentCreated and add_WebResourceRequested + /// have to be called after the deferral is completed. + + [propput] HRESULT NewWindow([in] ICoreWebView2* newWindow); + + /// Gets the new window. + + [propget] HRESULT NewWindow([out, retval] ICoreWebView2** newWindow); + + /// Sets whether the `NewWindowRequested` event is handled by host. If this + /// is `FALSE` and no `NewWindow` is set, the WebView opens a popup window + /// and it returns as opened `WindowProxy`. If set to `TRUE` and no + /// `NewWindow` is set for `window.open`, the opened `WindowProxy` is for an + /// testing window object and no window loads. + /// The default value is `FALSE`. + + [propput] HRESULT Handled([in] BOOL handled); + + /// Gets whether the `NewWindowRequested` event is handled by host. + + [propget] HRESULT Handled([out, retval] BOOL* handled); + + /// `TRUE` when the new window request was initiated through a user gesture + /// such as selecting an anchor tag with target. The Microsoft Edge popup + /// blocker is disabled for WebView so the app is able to use this flag to + /// block non-user initiated popups. + + [propget] HRESULT IsUserInitiated([out, retval] BOOL* isUserInitiated); + + /// Obtain an `ICoreWebView2Deferral` object and put the event into a + /// deferred state. Use the `ICoreWebView2Deferral` object to complete the + /// window open request at a later time. While this event is deferred the + /// opener window returns a `WindowProxy` to an un-navigated window, which + /// navigates when the deferral is complete. + + HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral); + + /// Window features specified by the `window.open`. The features should be + /// considered for positioning and sizing of new webview windows. + + [propget] HRESULT WindowFeatures([out, retval] ICoreWebView2WindowFeatures** value); +} + +/// The window features for a WebView popup window. The fields match the +/// `windowFeatures` passed to `window.open` as specified in +/// \[Window features\]\[MdnDocsWebApiWindowOpenWindowFeatures\] +/// on MDN. +/// There is no requirement for you to respect the values. If your app does +/// not have corresponding UI features (for example, no toolbar) or if all +/// instance of WebView are opened in tabs and do not have distinct size or +/// positions, then your app does not respect the values. You may want to +/// respect values, but perhaps only some apply to the UI of you app. +/// Accordingly, you may respect all, some, or none of the properties as +/// appropriate for your app. For all numeric properties, if the value that is +/// passed to `window.open` is outside the range of an unsigned 32bit int, the +/// resulting value is the absolute value of the maximum for unsigned 32bit +/// integer. If you are not able to parse the value an integer, it is +/// considered `0`. If the value is a floating point value, it is rounded down +/// to an integer. +/// +/// \[MdnDocsWebApiWindowOpenWindowFeatures\]: https://developer.mozilla.org/docs/Web/API/Window/open#Window_features "Window features - Window.open() | MDN" + +[uuid(5eaf559f-b46e-4397-8860-e422f287ff1e), object, pointer_default(unique)] +interface ICoreWebView2WindowFeatures : IUnknown +{ + + /// Specifies left and top values. + + [propget] HRESULT HasPosition([out, retval] BOOL* value); + + /// Specifiesheight and width values. + + [propget] HRESULT HasSize([out, retval] BOOL* value); + + /// Specifies the left position of the window. If `HasPosition` is set to + /// `FALSE`, this field is ignored. + + [propget] HRESULT Left([out, retval] UINT32* value); + + /// Specifies the top position of the window. If `HasPosition` is set to + /// `FALSE`, this field is ignored. + + [propget] HRESULT Top([out, retval] UINT32* value); + + /// Specifies the height of the window. Minimum value is `100`. If + /// `HasSize` is set to `FALSE`, this field is ignored. + + [propget] HRESULT Height([out, retval] UINT32* value); + + /// Specifies the width of the window. Minimum value is `100`. If `HasSize` + /// is set to `FALSE`, this field is ignored. + + [propget] HRESULT Width([out, retval] UINT32* value); + + /// Indicates that the menu bar is displayed. + + [propget] HRESULT ShouldDisplayMenuBar([out, retval] BOOL* value); + + /// Indicates that the status bar is displayed. + + [propget] HRESULT ShouldDisplayStatus([out, retval] BOOL* value); + + /// Indicates that the browser toolbar is displayed. + + [propget] HRESULT ShouldDisplayToolbar([out, retval] BOOL* value); + + /// Indicates that the scroll bars are displayed. + + [propget] HRESULT ShouldDisplayScrollBars([out, retval] BOOL* value); +} + +/// Receives `NewWindowRequested` events. + +[uuid(d4c185fe-c81c-4989-97af-2d3fa7ab5651), object, pointer_default(unique)] +interface ICoreWebView2NewWindowRequestedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. + + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2NewWindowRequestedEventArgs* args); +} + +/// Receives `DocumentTitleChanged` events. Use the `DocumentTitle` property +/// to get the modified title. + +[uuid(f5f2b923-953e-4042-9f95-f3a118e1afd4), object, pointer_default(unique)] +interface ICoreWebView2DocumentTitleChangedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. No event args exist + /// and the `args` parameter is set to `null`. + + HRESULT Invoke([in] ICoreWebView2* sender, [in] IUnknown* args); +} + +/// Event args for the `AcceleratorKeyPressed` event. + +[uuid(9f760f8a-fb79-42be-9990-7b56900fa9c7), object, pointer_default(unique)] +interface ICoreWebView2AcceleratorKeyPressedEventArgs : IUnknown { + + /// The key event type that caused the event to run. + + [propget] HRESULT KeyEventKind([out, retval] COREWEBVIEW2_KEY_EVENT_KIND* keyEventKind); + + /// The Win32 virtual key code of the key that was pressed or released. It + /// is one of the Win32 virtual key constants such as `VK_RETURN` or an + /// (uppercase) ASCII value such as `A`. Verify whether Ctrl or Alt + /// are pressed by running `GetKeyState(VK_CONTROL)` or + /// `GetKeyState(VK_MENU)`. + + [propget] HRESULT VirtualKey([out, retval] UINT* virtualKey); + + /// The `LPARAM` value that accompanied the window message. For more + /// information, navigate to + /// \[WM_KEYDOWN\]\[WindowsWin32InputdevWmKeydown\] + /// and + /// \[WM_KEYUP\]\[WindowsWin32InputdevWmKeyup\]. + /// + /// \[WindowsWin32InputdevWmKeydown\]: /windows/win32/inputdev/wm-keydown "WM_KEYDOWN message | Microsoft Docs" + /// + /// \[WindowsWin32InputdevWmKeyup\]: /windows/win32/inputdev/wm-keyup "WM_KEYUP message | Microsoft Docs" + + [propget] HRESULT KeyEventLParam([out, retval] INT* lParam); + + /// A structure representing the information passed in the `LPARAM` of the + /// window message. + + [propget] HRESULT PhysicalKeyStatus( + [out, retval] COREWEBVIEW2_PHYSICAL_KEY_STATUS* physicalKeyStatus); + + /// During `AcceleratorKeyPressedEvent` handler invocation the WebView is + /// blocked waiting for the decision of if the accelerator is handled by the + /// host (or not). If the `Handled` property is set to `TRUE` then this + /// prevents the WebView from performing the default action for this + /// accelerator key. Otherwise the WebView performs the default action for + /// the accelerator key. + + [propget] HRESULT Handled([out, retval] BOOL* handled); + + /// Sets the `Handled` property. + + [propput] HRESULT Handled([in] BOOL handled); +} + +/// Receives `AcceleratorKeyPressed` events. + +[uuid(b29c7e28-fa79-41a8-8e44-65811c76dcb2), object, pointer_default(unique)] +interface ICoreWebView2AcceleratorKeyPressedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. + + HRESULT Invoke( + [in] ICoreWebView2Controller* sender, + [in] ICoreWebView2AcceleratorKeyPressedEventArgs* args); +} + +/// Receives `NewBrowserVersionAvailable` events. + +[uuid(f9a2976e-d34e-44fc-adee-81b6b57ca914), object, pointer_default(unique)] +interface ICoreWebView2NewBrowserVersionAvailableEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. + + HRESULT Invoke([in] ICoreWebView2Environment* sender, + [in] IUnknown* args); +} + +/// Receives `ContainsFullScreenElementChanged` events. + +[uuid(e45d98b1-afef-45be-8baf-6c7728867f73), object, pointer_default(unique)] +interface ICoreWebView2ContainsFullScreenElementChangedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. No event args exist + /// and the `args` parameter is set to `null`. + + HRESULT Invoke([in] ICoreWebView2* sender, [in] IUnknown* args); +} + +/// Receives `WindowCloseRequested` events. + +[uuid(5c19e9e0-092f-486b-affa-ca8231913039), object, pointer_default(unique)] +interface ICoreWebView2WindowCloseRequestedEventHandler : IUnknown { + + /// Provides the event args for the corresponding event. No event args exist + /// and the `args` parameter is set to `null`. + + HRESULT Invoke([in] ICoreWebView2* sender, [in] IUnknown* args); +} + +/// Receives `WebResourceResponseReceived` events. +[uuid(7DE9898A-24F5-40C3-A2DE-D4F458E69828), object, pointer_default(unique)] +interface ICoreWebView2WebResourceResponseReceivedEventHandler : IUnknown { + /// Provides the event args for the corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2WebResourceResponseReceivedEventArgs* args); +} + +/// Event args for the WebResourceResponseReceived event. +[uuid(D1DB483D-6796-4B8B-80FC-13712BB716F4), object, pointer_default(unique)] +interface ICoreWebView2WebResourceResponseReceivedEventArgs : IUnknown { + /// The request object for the web resource, as committed. This includes + /// headers added by the network stack that were not be included during the + /// associated WebResourceRequested event, such as Authentication headers. + /// Modifications to this object have no effect on how the request is + /// processed as it has already been sent. + [propget] HRESULT Request([out, retval] ICoreWebView2WebResourceRequest** request); + /// View of the response object received for the web resource. + [propget] HRESULT Response([out, retval] ICoreWebView2WebResourceResponseView** response); +} + +/// View of the HTTP representation for a web resource response. The properties +/// of this object are not mutable. This response view is used with the +/// WebResourceResponseReceived event. +[uuid(79701053-7759-4162-8F7D-F1B3F084928D), object, pointer_default(unique)] +interface ICoreWebView2WebResourceResponseView : IUnknown +{ + /// The HTTP response headers as received. + [propget] HRESULT Headers( + [out, retval] ICoreWebView2HttpResponseHeaders** headers); + /// The HTTP response status code. + [propget] HRESULT StatusCode([out, retval] int* statusCode); + /// The HTTP response reason phrase. + [propget] HRESULT ReasonPhrase([out, retval] LPWSTR* reasonPhrase); + + /// Get the response content asynchronously. The handler will receive the + /// response content stream. + /// If this method is being called again before a first call has completed, + /// the handler will be invoked at the same time the handlers from prior calls + /// are invoked. + /// If this method is being called after a first call has completed, the + /// handler will be invoked immediately. + /// \snippet ScenarioWebViewEventMonitor.cpp GetContent + HRESULT GetContent( + [in] ICoreWebView2WebResourceResponseViewGetContentCompletedHandler* handler); +} + +/// Receives the result of the +/// `ICoreWebView2WebResourceResponseView::GetContent` method. +[uuid(875738E1-9FA2-40E3-8B74-2E8972DD6FE7), object, pointer_default(unique)] +interface ICoreWebView2WebResourceResponseViewGetContentCompletedHandler : IUnknown +{ + /// Provides the completion status and result of the corresponding + /// asynchronous method call. A failure `errorCode` will be passed if the + /// content failed to load. `E_ABORT` means the response loading was blocked + /// (e.g., by CORS policy); `ERROR_CANCELLED` means the response loading was + /// cancelled. `ERROR_NO_DATA` means the response has no content data, + /// `content` is `null` in this case. Note content (if any) is ignored for + /// redirects, 204 No Content, 205 Reset Content, and HEAD-request responses. + HRESULT Invoke([in] HRESULT errorCode, [in] IStream* content); +} + +/// Event args for the DOMContentLoaded event. +[uuid(16B1E21A-C503-44F2-84C9-70ABA5031283), object, pointer_default(unique)] +interface ICoreWebView2DOMContentLoadedEventArgs : IUnknown { + /// The ID of the navigation which corresponds to other navigation ID properties on other navigation events. + [propget] HRESULT NavigationId([out, retval] UINT64* navigationId); +} + +/// Receives `DOMContentLoaded` events. +[uuid(4BAC7E9C-199E-49ED-87ED-249303ACF019), object, pointer_default(unique)] +interface ICoreWebView2DOMContentLoadedEventHandler : IUnknown { + /// Provides the event args for the corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2DOMContentLoadedEventArgs* args); +} + +/// Provides a set of properties that are used to manage an +/// ICoreWebView2Cookie. +/// +/// \snippet ScenarioCookieManagement.cpp CookieObject +[uuid(AD26D6BE-1486-43E6-BF87-A2034006CA21), object, pointer_default(unique)] +interface ICoreWebView2Cookie : IUnknown { + /// Cookie name. + [propget] HRESULT Name([out, retval] LPWSTR* name); + + /// Cookie value. + [propget] HRESULT Value([out, retval] LPWSTR* value); + /// Set the cookie value property. + [propput] HRESULT Value([in] LPCWSTR value); + + /// The domain for which the cookie is valid. + /// The default is the host that this cookie has been received from. + /// Note that, for instance, ".bing.com", "bing.com", and "www.bing.com" are + /// considered different domains. + [propget] HRESULT Domain([out, retval] LPWSTR* domain); + + /// The path for which the cookie is valid. The default is "/", which means + /// this cookie will be sent to all pages on the Domain. + [propget] HRESULT Path([out, retval] LPWSTR* path); + + /// The expiration date and time for the cookie as the number of seconds since the UNIX epoch. + /// The default is -1.0, which means cookies are session cookies by default. + [propget] HRESULT Expires([out, retval] double* expires); + /// Set the Expires property. Cookies are session cookies and will not be + /// persistent if Expires is set to -1.0. NaN, infinity, and any negative + /// value set other than -1.0 is disallowed. + [propput] HRESULT Expires([in] double expires); + + /// Whether this cookie is http-only. + /// True if a page script or other active content cannot access this + /// cookie. The default is false. + [propget] HRESULT IsHttpOnly([out, retval] BOOL* isHttpOnly); + /// Set the IsHttpOnly property. + [propput] HRESULT IsHttpOnly([in] BOOL isHttpOnly); + + /// SameSite status of the cookie which represents the enforcement mode of the cookie. + /// The default is COREWEBVIEW2_COOKIE_SAME_SITE_KIND_LAX. + [propget] HRESULT SameSite([out, retval] COREWEBVIEW2_COOKIE_SAME_SITE_KIND* sameSite); + /// Set the SameSite property. + [propput] HRESULT SameSite([in] COREWEBVIEW2_COOKIE_SAME_SITE_KIND sameSite); + + /// The security level of this cookie. True if the client is only to return + /// the cookie in subsequent requests if those requests use HTTPS. + /// The default is false. + /// Note that cookie that requests COREWEBVIEW2_COOKIE_SAME_SITE_KIND_NONE but + /// is not marked Secure will be rejected. + [propget] HRESULT IsSecure([out, retval] BOOL* isSecure); + /// Set the IsSecure property. + [propput] HRESULT IsSecure([in] BOOL isSecure); + + /// Whether this is a session cookie. The default is false. + [propget] HRESULT IsSession([out, retval] BOOL* isSession); +} + +/// Creates, adds or updates, gets, or or view the cookies. The changes would +/// apply to the context of the user profile. That is, other WebViews under the +/// same user profile could be affected. +[uuid(177CD9E7-B6F5-451A-94A0-5D7A3A4C4141), object, pointer_default(unique)] +interface ICoreWebView2CookieManager : IUnknown { + /// Create a cookie object with a specified name, value, domain, and path. + /// One can set other optional properties after cookie creation. + /// This only creates a cookie object and it is not added to the cookie + /// manager until you call AddOrUpdateCookie. + /// Leading or trailing whitespace(s), empty string, and special characters + /// are not allowed for name. + /// See ICoreWebView2Cookie for more details. + HRESULT CreateCookie( + [in] LPCWSTR name, + [in] LPCWSTR value, + [in] LPCWSTR domain, + [in] LPCWSTR path, + [out, retval] ICoreWebView2Cookie** cookie); + + /// Creates a cookie whose params matches those of the specified cookie. + HRESULT CopyCookie( + [in] ICoreWebView2Cookie* cookieParam, + [out, retval] ICoreWebView2Cookie** cookie); + + /// Gets a list of cookies matching the specific URI. + /// If uri is empty string or null, all cookies under the same profile are + /// returned. + /// You can modify the cookie objects by calling + /// ICoreWebView2CookieManager::AddOrUpdateCookie, and the changes + /// will be applied to the webview. + /// \snippet ScenarioCookieManagement.cpp GetCookies + HRESULT GetCookies( + [in] LPCWSTR uri, + [in] ICoreWebView2GetCookiesCompletedHandler* handler); + + /// Adds or updates a cookie with the given cookie data; may overwrite + /// cookies with matching name, domain, and path if they exist. + /// This method will fail if the domain of the given cookie is not specified. + /// \snippet ScenarioCookieManagement.cpp AddOrUpdateCookie + HRESULT AddOrUpdateCookie([in] ICoreWebView2Cookie* cookie); + + /// Deletes a cookie whose name and domain/path pair + /// match those of the specified cookie. + HRESULT DeleteCookie([in] ICoreWebView2Cookie* cookie); + + /// Deletes cookies with matching name and uri. + /// Cookie name is required. + /// All cookies with the given name where domain + /// and path match provided URI are deleted. + HRESULT DeleteCookies([in] LPCWSTR name, [in] LPCWSTR uri); + + /// Deletes cookies with matching name and domain/path pair. + /// Cookie name is required. + /// If domain is specified, deletes only cookies with the exact domain. + /// If path is specified, deletes only cookies with the exact path. + HRESULT DeleteCookiesWithDomainAndPath([in] LPCWSTR name, [in] LPCWSTR domain, [in] LPCWSTR path); + + /// Deletes all cookies under the same profile. + /// This could affect other WebViews under the same user profile. + HRESULT DeleteAllCookies(); +} + +/// A list of cookie objects. See `ICoreWebView2Cookie`. +/// \snippet ScenarioCookieManagement.cpp GetCookies +[uuid(F7F6F714-5D2A-43C6-9503-346ECE02D186), object, pointer_default(unique)] +interface ICoreWebView2CookieList : IUnknown { + /// The number of cookies contained in the ICoreWebView2CookieList. + [propget] HRESULT Count([out, retval] UINT* count); + + /// Gets the cookie object at the given index. + HRESULT GetValueAtIndex([in] UINT index, [out, retval] ICoreWebView2Cookie** cookie); +} + +/// Receives the result of the `GetCookies` method. The result is written to +/// the cookie list provided in the `GetCookies` method call. +[uuid(5A4F5069-5C15-47C3-8646-F4DE1C116670), object, pointer_default(unique)] +interface ICoreWebView2GetCookiesCompletedHandler : IUnknown { + /// Provides the completion status of the corresponding asynchronous method + /// call. + HRESULT Invoke(HRESULT result, ICoreWebView2CookieList* cookieList); +} + +/// This mostly represents a combined win32 +/// POINTER_INFO/POINTER_TOUCH_INFO/POINTER_PEN_INFO object. It takes fields +/// from all three and excludes some win32 specific data types like HWND and +/// HANDLE. Note, sourceDevice is taken out but we expect the PointerDeviceRect +/// and DisplayRect to cover the existing use cases of sourceDevice. +/// Another big difference is that any of the point or rect locations are +/// expected to be in WebView physical coordinates. That is, coordinates +/// relative to the WebView and no DPI scaling applied. +// +// The PointerId, PointerFlags, ButtonChangeKind, PenFlags, PenMask, TouchFlags, +// and TouchMask are all #defined flags or enums in the +// POINTER_INFO/POINTER_TOUCH_INFO/POINTER_PEN_INFO structure. We define those +// properties here as UINT32 or INT32 and expect the developer to know how to +// populate those values based on the Windows definitions. +[uuid(e6995887-d10d-4f5d-9359-4ce46e4f96b9), object, pointer_default(unique)] +interface ICoreWebView2PointerInfo : IUnknown { + /// Get the PointerKind of the pointer event. This corresponds to the + /// pointerKind property of the POINTER_INFO struct. The values are defined by + /// the POINTER_INPUT_KIND enum in the Windows SDK (winuser.h). Supports + /// PT_PEN and PT_TOUCH. + [propget] HRESULT PointerKind([out, retval] DWORD* pointerKind); + /// Set the PointerKind of the pointer event. This corresponds to the + /// pointerKind property of the POINTER_INFO struct. The values are defined by + /// the POINTER_INPUT_KIND enum in the Windows SDK (winuser.h). Supports + /// PT_PEN and PT_TOUCH. + [propput] HRESULT PointerKind([in] DWORD pointerKind); + + /// Get the PointerId of the pointer event. This corresponds to the pointerId + /// property of the POINTER_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propget] HRESULT PointerId([out, retval] UINT32* pointerId); + /// Set the PointerId of the pointer event. This corresponds to the pointerId + /// property of the POINTER_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propput] HRESULT PointerId([in] UINT32 pointerId); + + /// Get the FrameID of the pointer event. This corresponds to the frameId + /// property of the POINTER_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propget] HRESULT FrameId([out, retval] UINT32* frameId); + /// Set the FrameID of the pointer event. This corresponds to the frameId + /// property of the POINTER_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propput] HRESULT FrameId([in] UINT32 frameId); + + /// Get the PointerFlags of the pointer event. This corresponds to the + /// pointerFlags property of the POINTER_INFO struct. The values are defined + /// by the POINTER_FLAGS constants in the Windows SDK (winuser.h). + [propget] HRESULT PointerFlags([out, retval] UINT32* pointerFlags); + /// Set the PointerFlags of the pointer event. This corresponds to the + /// pointerFlags property of the POINTER_INFO struct. The values are defined + /// by the POINTER_FLAGS constants in the Windows SDK (winuser.h). + [propput] HRESULT PointerFlags([in] UINT32 pointerFlags); + + /// Get the PointerDeviceRect of the sourceDevice property of the + /// POINTER_INFO struct as defined in the Windows SDK (winuser.h). + [propget] HRESULT PointerDeviceRect([out, retval] RECT* pointerDeviceRect); + /// Set the PointerDeviceRect of the sourceDevice property of the + /// POINTER_INFO struct as defined in the Windows SDK (winuser.h). + [propput] HRESULT PointerDeviceRect([in] RECT pointerDeviceRect); + + /// Get the DisplayRect of the sourceDevice property of the POINTER_INFO + /// struct as defined in the Windows SDK (winuser.h). + [propget] HRESULT DisplayRect([out, retval] RECT* displayRect); + /// Set the DisplayRect of the sourceDevice property of the POINTER_INFO + /// struct as defined in the Windows SDK (winuser.h). + [propput] HRESULT DisplayRect([in] RECT displayRect); + + /// Get the PixelLocation of the pointer event. This corresponds to the + /// ptPixelLocation property of the POINTER_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propget] HRESULT PixelLocation([out, retval] POINT* pixelLocation); + /// Set the PixelLocation of the pointer event. This corresponds to the + /// ptPixelLocation property of the POINTER_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propput] HRESULT PixelLocation([in] POINT pixelLocation); + + /// Get the HimetricLocation of the pointer event. This corresponds to the + /// ptHimetricLocation property of the POINTER_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propget] HRESULT HimetricLocation([out, retval] POINT* himetricLocation); + /// Set the HimetricLocation of the pointer event. This corresponds to the + /// ptHimetricLocation property of the POINTER_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propput] HRESULT HimetricLocation([in] POINT himetricLocation); + + /// Get the PixelLocationRaw of the pointer event. This corresponds to the + /// ptPixelLocationRaw property of the POINTER_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propget] HRESULT PixelLocationRaw([out, retval] POINT* pixelLocationRaw); + /// Set the PixelLocationRaw of the pointer event. This corresponds to the + /// ptPixelLocationRaw property of the POINTER_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propput] HRESULT PixelLocationRaw([in] POINT pixelLocationRaw); + + /// Get the HimetricLocationRaw of the pointer event. This corresponds to the + /// ptHimetricLocationRaw property of the POINTER_INFO struct as defined in + /// the Windows SDK (winuser.h). + [propget] HRESULT HimetricLocationRaw([out, retval] POINT* himetricLocationRaw); + /// Set the HimetricLocationRaw of the pointer event. This corresponds to the + /// ptHimetricLocationRaw property of the POINTER_INFO struct as defined in + /// the Windows SDK (winuser.h). + [propput] HRESULT HimetricLocationRaw([in] POINT himetricLocationRaw); + + /// Get the Time of the pointer event. This corresponds to the dwTime property + /// of the POINTER_INFO struct as defined in the Windows SDK (winuser.h). + [propget] HRESULT Time([out, retval] DWORD* time); + /// Set the Time of the pointer event. This corresponds to the dwTime property + /// of the POINTER_INFO struct as defined in the Windows SDK (winuser.h). + [propput] HRESULT Time([in] DWORD time); + + /// Get the HistoryCount of the pointer event. This corresponds to the + /// historyCount property of the POINTER_INFO struct as defined in the Windows + /// SDK (winuser.h). + [propget] HRESULT HistoryCount([out, retval] UINT32* historyCount); + /// Set the HistoryCount of the pointer event. This corresponds to the + /// historyCount property of the POINTER_INFO struct as defined in the Windows + /// SDK (winuser.h). + [propput] HRESULT HistoryCount([in] UINT32 historyCount); + + /// Get the InputData of the pointer event. This corresponds to the InputData + /// property of the POINTER_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propget] HRESULT InputData([out, retval] INT32* inputData); + /// Set the InputData of the pointer event. This corresponds to the InputData + /// property of the POINTER_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propput] HRESULT InputData([in] INT32 inputData); + + /// Get the KeyStates of the pointer event. This corresponds to the + /// dwKeyStates property of the POINTER_INFO struct as defined in the Windows + /// SDK (winuser.h). + [propget] HRESULT KeyStates([out, retval] DWORD* keyStates); + /// Set the KeyStates of the pointer event. This corresponds to the + /// dwKeyStates property of the POINTER_INFO struct as defined in the Windows + /// SDK (winuser.h). + [propput] HRESULT KeyStates([in] DWORD keyStates); + + /// Get the PerformanceCount of the pointer event. This corresponds to the + /// PerformanceCount property of the POINTER_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propget] HRESULT PerformanceCount([out, retval] UINT64* performanceCount); + /// Set the PerformanceCount of the pointer event. This corresponds to the + /// PerformanceCount property of the POINTER_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propput] HRESULT PerformanceCount([in] UINT64 performanceCount); + + /// Get the ButtonChangeKind of the pointer event. This corresponds to the + /// ButtonChangeKind property of the POINTER_INFO struct. The values are + /// defined by the POINTER_BUTTON_CHANGE_KIND enum in the Windows SDK + /// (winuser.h). + [propget] HRESULT ButtonChangeKind([out, retval] INT32* buttonChangeKind); + /// Set the ButtonChangeKind of the pointer event. This corresponds to the + /// ButtonChangeKind property of the POINTER_INFO struct. The values are + /// defined by the POINTER_BUTTON_CHANGE_KIND enum in the Windows SDK + /// (winuser.h). + [propput] HRESULT ButtonChangeKind([in] INT32 buttonChangeKind); + + // Pen specific attributes + + /// Get the PenFlags of the pointer event. This corresponds to the penFlags + /// property of the POINTER_PEN_INFO struct. The values are defined by the + /// PEN_FLAGS constants in the Windows SDK (winuser.h). + [propget] HRESULT PenFlags([out, retval] UINT32* penFLags); + /// Set the PenFlags of the pointer event. This corresponds to the penFlags + /// property of the POINTER_PEN_INFO struct. The values are defined by the + /// PEN_FLAGS constants in the Windows SDK (winuser.h). + [propput] HRESULT PenFlags([in] UINT32 penFLags); + + /// Get the PenMask of the pointer event. This corresponds to the penMask + /// property of the POINTER_PEN_INFO struct. The values are defined by the + /// PEN_MASK constants in the Windows SDK (winuser.h). + [propget] HRESULT PenMask([out, retval] UINT32* penMask); + /// Set the PenMask of the pointer event. This corresponds to the penMask + /// property of the POINTER_PEN_INFO struct. The values are defined by the + /// PEN_MASK constants in the Windows SDK (winuser.h). + [propput] HRESULT PenMask([in] UINT32 penMask); + + /// Get the PenPressure of the pointer event. This corresponds to the pressure + /// property of the POINTER_PEN_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propget] HRESULT PenPressure([out, retval] UINT32* penPressure); + /// Set the PenPressure of the pointer event. This corresponds to the pressure + /// property of the POINTER_PEN_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propput] HRESULT PenPressure([in] UINT32 penPressure); + + /// Get the PenRotation of the pointer event. This corresponds to the rotation + /// property of the POINTER_PEN_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propget] HRESULT PenRotation([out, retval] UINT32* penRotation); + /// Set the PenRotation of the pointer event. This corresponds to the rotation + /// property of the POINTER_PEN_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propput] HRESULT PenRotation([in] UINT32 penRotation); + + /// Get the PenTiltX of the pointer event. This corresponds to the tiltX + /// property of the POINTER_PEN_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propget] HRESULT PenTiltX([out, retval] INT32* penTiltX); + /// Set the PenTiltX of the pointer event. This corresponds to the tiltX + /// property of the POINTER_PEN_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propput] HRESULT PenTiltX([in] INT32 penTiltX); + + /// Get the PenTiltY of the pointer event. This corresponds to the tiltY + /// property of the POINTER_PEN_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propget] HRESULT PenTiltY([out, retval] INT32* penTiltY); + /// Set the PenTiltY of the pointer event. This corresponds to the tiltY + /// property of the POINTER_PEN_INFO struct as defined in the Windows SDK + /// (winuser.h). + [propput] HRESULT PenTiltY([in] INT32 penTiltY); + + // Touch specific attributes + + /// Get the TouchFlags of the pointer event. This corresponds to the + /// touchFlags property of the POINTER_TOUCH_INFO struct. The values are + /// defined by the TOUCH_FLAGS constants in the Windows SDK (winuser.h). + [propget] HRESULT TouchFlags([out, retval] UINT32* touchFlags); + /// Set the TouchFlags of the pointer event. This corresponds to the + /// touchFlags property of the POINTER_TOUCH_INFO struct. The values are + /// defined by the TOUCH_FLAGS constants in the Windows SDK (winuser.h). + [propput] HRESULT TouchFlags([in] UINT32 touchFlags); + + /// Get the TouchMask of the pointer event. This corresponds to the + /// touchMask property of the POINTER_TOUCH_INFO struct. The values are + /// defined by the TOUCH_MASK constants in the Windows SDK (winuser.h). + [propget] HRESULT TouchMask([out, retval] UINT32* touchMask); + /// Set the TouchMask of the pointer event. This corresponds to the + /// touchMask property of the POINTER_TOUCH_INFO struct. The values are + /// defined by the TOUCH_MASK constants in the Windows SDK (winuser.h). + [propput] HRESULT TouchMask([in] UINT32 touchMask); + + /// Get the TouchContact of the pointer event. This corresponds to the + /// rcContact property of the POINTER_TOUCH_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propget] HRESULT TouchContact([out, retval] RECT* touchContact); + /// Set the TouchContact of the pointer event. This corresponds to the + /// rcContact property of the POINTER_TOUCH_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propput] HRESULT TouchContact([in] RECT touchContact); + + /// Get the TouchContactRaw of the pointer event. This corresponds to the + /// rcContactRaw property of the POINTER_TOUCH_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propget] HRESULT TouchContactRaw([out, retval] RECT* touchContactRaw); + /// Set the TouchContactRaw of the pointer event. This corresponds to the + /// rcContactRaw property of the POINTER_TOUCH_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propput] HRESULT TouchContactRaw([in] RECT touchContactRaw); + + /// Get the TouchOrientation of the pointer event. This corresponds to the + /// orientation property of the POINTER_TOUCH_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propget] HRESULT TouchOrientation([out, retval] UINT32* touchOrientation); + /// Set the TouchOrientation of the pointer event. This corresponds to the + /// orientation property of the POINTER_TOUCH_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propput] HRESULT TouchOrientation([in] UINT32 touchOrientation); + + /// Get the TouchPressure of the pointer event. This corresponds to the + /// pressure property of the POINTER_TOUCH_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propget] HRESULT TouchPressure([out, retval] UINT32* touchPressure); + /// Set the TouchPressure of the pointer event. This corresponds to the + /// pressure property of the POINTER_TOUCH_INFO struct as defined in the + /// Windows SDK (winuser.h). + [propput] HRESULT TouchPressure([in] UINT32 touchPressure); +} + +/// The caller implements this interface to receive CursorChanged events. Use +/// the Cursor property to get the new cursor. +[uuid(9da43ccc-26e1-4dad-b56c-d8961c94c571), object, pointer_default(unique)] +interface ICoreWebView2CursorChangedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. There are no event args and the args + /// parameter will be null. + HRESULT Invoke([in] ICoreWebView2CompositionController* sender, [in] IUnknown* args); +} + +/// Receives `RasterizationScaleChanged` events. Use the `RasterizationScale` +/// property to get the modified scale. + +[uuid(9c98c8b1-ac53-427e-a345-3049b5524bbe), object, pointer_default(unique)] +interface ICoreWebView2RasterizationScaleChangedEventHandler : IUnknown { + /// Called to provide the implementer with the event args for the + /// corresponding event. There are no event args and the args + /// parameter will be null. + HRESULT Invoke( + [in] ICoreWebView2Controller* sender, + [in] IUnknown* args); +} + +/// Represents the WebView2 Environment. WebViews created from an environment +/// run on the browser process specified with environment parameters and +/// objects created from an environment should be used in the same +/// environment. Using it in different environments are not guaranteed to be +/// compatible and may fail. + +[uuid(b96d755e-0319-4e92-a296-23436f46a1fc), object, pointer_default(unique)] +interface ICoreWebView2Environment : IUnknown { + + /// Asynchronously create a new WebView. + /// + /// `parentWindow` is the `HWND` in which the WebView should be displayed and + /// from which receive input. The WebView adds a child window to the + /// provided window during WebView creation. Z-order and other things + /// impacted by sibling window order are affected accordingly. + /// + /// It is recommended that the app set Application User Model ID for the + /// process or the app window. If none is set, during WebView creation a + /// generated Application User Model ID is set to root window of + /// `parentWindow`. + /// + /// \snippet AppWindow.cpp CreateCoreWebView2Controller + /// + /// It is recommended that the app handles restart manager messages, to + /// gracefully restart it in the case when the app is using the WebView2 + /// Runtime from a certain installation and that installation is being + /// uninstalled. For example, if a user installs a version of the WebView2 + /// Runtime and opts to use another version of the WebView2 Runtime for + /// testing the app, and then uninstalls the 1st version of the WebView2 + /// Runtime without closing the app, the app restarts to allow + /// un-installation to succeed. + /// + /// \snippet AppWindow.cpp RestartManager + /// + /// When the app retries `CreateCoreWebView2Controller` upon failure, it is + /// recommended that the app restarts from creating a new WebView2 + /// Environment. If an WebView2 Runtime update happens, the version + /// associated with a WebView2 Environment may have been removed and causing + /// the object to no longer work. Creating a new WebView2 Environment works + /// since it uses the latest version. + /// + /// WebView creation fails if a running instance using the same user data + /// folder exists, and the Environment objects have different + /// `EnvironmentOptions`. For example, if a WebView was created with one + /// language, an attempt to create a WebView with a different language using + /// the same user data folder fails. + + HRESULT CreateCoreWebView2Controller( + HWND parentWindow, + ICoreWebView2CreateCoreWebView2ControllerCompletedHandler* handler); + + /// Create a new web resource response object. The `headers` parameter is + /// the raw response header string delimited by newline. It is also possible + /// to create this object with null headers string and then use the + /// `ICoreWebView2HttpResponseHeaders` to construct the headers line by line. + /// For more information about other parameters, navigate to + /// \[ICoreWebView2WebResourceResponse\]\[MicrosoftEdgeWebview2ReferenceWin32Icorewebview2webresourceresponse\]. + /// + /// \snippet SettingsComponent.cpp WebResourceRequested0 + /// \snippet SettingsComponent.cpp WebResourceRequested1 + /// + /// \[MicrosoftEdgeWebview2ReferenceWin32Icorewebview2webresourceresponse\]: /microsoft-edge/webview2/reference/win32/icorewebview2webresourceresponse "interface ICoreWebView2WebResourceResponse | Microsoft Docs" + + HRESULT CreateWebResourceResponse( + [in] IStream* content, + [in] int statusCode, + [in] LPCWSTR reasonPhrase, + [in] LPCWSTR headers, + [out, retval] ICoreWebView2WebResourceResponse** response); + + /// The browser version info of the current `ICoreWebView2Environment`, + /// including channel name if it is not the WebView2 Runtime. It matches the + /// format of the `GetAvailableCoreWebView2BrowserVersionString` API. + /// Channel names are `beta`, `dev`, and `canary`. + /// + /// \snippet AppWindow.cpp GetBrowserVersionString + + [propget] HRESULT BrowserVersionString([out, retval] LPWSTR* versionInfo); + + /// Add an event handler for the `NewBrowserVersionAvailable` event. + /// `NewBrowserVersionAvailable` runs when a newer version of the WebView2 + /// Runtime is installed and available using WebView2. To use the newer + /// version of the browser you must create a new environment and WebView. + /// The event only runs for new version from the same WebView2 Runtime from + /// which the code is running. When not running with installed WebView2 + /// Runtime, no event is run. + /// + /// Because a user data folder is only able to be used by one browser + /// process at a time, if you want to use the same user data folder in the + /// WebView using the new version of the browser, you must close the + /// environment and instance of WebView that are using the older version of + /// the browser first. Or simply prompt the user to restart the app. + /// + /// \snippet AppWindow.cpp NewBrowserVersionAvailable + + HRESULT add_NewBrowserVersionAvailable( + [in] ICoreWebView2NewBrowserVersionAvailableEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_NewBrowserVersionAvailable`. + + HRESULT remove_NewBrowserVersionAvailable( + [in] EventRegistrationToken token); +} + +/// A continuation of the ICoreWebView2Environment interface. +[uuid(41F3632B-5EF4-404F-AD82-2D606C5A9A21), object, pointer_default(unique)] +interface ICoreWebView2Environment2 : ICoreWebView2Environment { + /// Create a new web resource request object. + /// URI parameter must be absolute URI. + /// The headers string is the raw request header string delimited by CRLF + /// (optional in last header). + /// It's also possible to create this object with null headers string + /// and then use the ICoreWebView2HttpRequestHeaders to construct the headers + /// line by line. + /// For information on other parameters see ICoreWebView2WebResourceRequest. + /// + /// \snippet ScenarioNavigateWithWebResourceRequest.cpp NavigateWithWebResourceRequest + HRESULT CreateWebResourceRequest([in] LPCWSTR uri, + [in] LPCWSTR method, + [in] IStream* postData, + [in] LPCWSTR headers, + [out, retval] ICoreWebView2WebResourceRequest** request); +} + +/// A continuation of the ICoreWebView2Environment2 interface. +[uuid(80a22ae3-be7c-4ce2-afe1-5a50056cdeeb), object, pointer_default(unique)] +interface ICoreWebView2Environment3 : ICoreWebView2Environment2 { + /// Asynchronously create a new WebView for use with visual hosting. + /// + /// parentWindow is the HWND in which the app will connect the visual tree of + /// the WebView. This will be the HWND that the app will receive pointer/ + /// mouse input meant for the WebView (and will need to use SendMouseInput/ + /// SendPointerInput to forward). If the app moves the WebView visual tree to + /// underneath a different window, then it needs to call put_ParentWindow to + /// update the new parent HWND of the visual tree. + /// + /// Use put_RootVisualTarget on the created CoreWebView2CompositionController to + /// provide a visual to host the browser's visual tree. + /// + /// It is recommended that the application set Application User Model ID for + /// the process or the application window. If none is set, during WebView + /// creation a generated Application User Model ID is set to root window of + /// parentWindow. + /// \snippet AppWindow.cpp CreateCoreWebView2Controller + /// + /// It is recommended that the application handles restart manager messages + /// so that it can be restarted gracefully in the case when the app is using + /// Edge for WebView from a certain installation and that installation is + /// being uninstalled. For example, if a user installs Edge from Dev channel + /// and opts to use Edge from that channel for testing the app, and then + /// uninstalls Edge from that channel without closing the app, the app will + /// be restarted to allow uninstallation of the dev channel to succeed. + /// \snippet AppWindow.cpp RestartManager + HRESULT CreateCoreWebView2CompositionController( + HWND parentWindow, + ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler* handler); + + /// Create an empty ICoreWebView2PointerInfo. The returned + /// ICoreWebView2PointerInfo needs to be populated with all of the relevant + /// info before calling SendPointerInput. + HRESULT CreateCoreWebView2PointerInfo( + [out, retval] ICoreWebView2PointerInfo** pointerInfo); +} + +/// A continuation of the ICoreWebView2Environment3 interface. +[uuid(20944379-6dcf-41d6-a0a0-abc0fc50de0d), object, pointer_default(unique)] +interface ICoreWebView2Environment4 : ICoreWebView2Environment3 { + /// Returns the UI Automation Provider for the + /// ICoreWebView2CompositionController that corresponds with the given HWND. + HRESULT GetProviderForHwnd([in] HWND hwnd, + [out, retval] IUnknown** provider); +} + +/// Options used to create WebView2 Environment. A default implementation is +/// provided in `WebView2EnvironmentOptions.h`. +/// +/// \snippet AppWindow.cpp CreateCoreWebView2EnvironmentWithOptions + +[uuid(2fde08a8-1e9a-4766-8c05-95a9ceb9d1c5), object, pointer_default(unique)] +interface ICoreWebView2EnvironmentOptions : IUnknown { + + /// Changes the behavior of the WebView. The arguments are passed to the + /// browser process as part of the command. For more information about + /// using command-line switches with Chromium browser processes, navigate to + /// \[Run Chromium with Flags\]\[ChromiumDevelopersHowTosRunWithFlags\]. + /// The value appended to a switch is appended to the browser process, for + /// example, in `--edge-webview-switches=xxx` the value is `xxx`. If you + /// specify a switch that is important to WebView functionality, it is + /// ignored, for example, `--user-data-dir`. Specific features are disabled + /// internally and blocked from being enabled. If a switch is specified + /// multiple times, only the last instance is used. + /// + /// > [!NOTE] + /// A merge of the different values of the same switch is not attempted, + /// except for disabled and enabled features. The features specified by + /// `--enable-features` and `--disable-features` are merged with simple + /// logic.\n> * The features is the union of the specified features + /// and built-in features. If a feature is disabled, it is removed from the + /// enabled features list. + /// + /// If you specify command-line switches and use the + /// `additionalBrowserArguments` parameter, the `--edge-webview-switches` + /// value takes precedence and is processed last. If a switch fails to + /// parse, the switched is ignored. The default state for the operation is + /// to run the browser process with no extra flags. + /// + /// + /// \[ChromiumDevelopersHowTosRunWithFlags\]: https://www.chromium.org/developers/how-tos/run-chromium-with-flags "Run Chromium with flags | The Chromium Projects" + + [propget] HRESULT AdditionalBrowserArguments([out, retval] LPWSTR* value); + + /// Sets the `AdditionalBrowserArguments` property. + + [propput] HRESULT AdditionalBrowserArguments([in] LPCWSTR value); + + /// The default display language for WebView. It applies to browser UI such as + /// context menu and dialogs. It also applies to the `accept-languages` HTTP + /// header that WebView sends to websites. It is in the format of + /// `language[-country]` where `language` is the 2-letter code from + /// + /// \[ISO 639\]\[ISO639LanguageCodesHtml\] + /// and `country` is the + /// 2-letter code from + /// \[ISO 3166\]\[ISOStandard72482Html\]. + /// + /// \[ISO639LanguageCodesHtml\]: https://www.iso.org/iso-639-language-codes.html "ISO 639 | ISO" + /// + /// \[ISOStandard72482Html\]: https://www.iso.org/standard/72482.html "ISO 3166-1:2020 | ISO" + + [propget] HRESULT Language([out, retval] LPWSTR* value); + + /// Sets the `Language` property. + + [propput] HRESULT Language([in] LPCWSTR value); + + /// Specifies the version of the WebView2 Runtime binaries required to be + /// compatible with your app. This defaults to the WebView2 Runtime version + /// that corresponds with the version of the SDK the app is using. The + /// format of this value is the same as the format of the + /// `BrowserVersionString` property and other `BrowserVersion` values. Only + /// the version part of the `BrowserVersion` value is respected. The channel + /// suffix, if it exists, is ignored. The version of the WebView2 Runtime + /// binaries actually used may be different from the specified + /// `TargetCompatibleBrowserVersion`. The binaries are only guaranteed to be + /// compatible. Verify the actual version on the `BrowserVersionString` + /// property on the `ICoreWebView2Environment`. + + [propget] HRESULT TargetCompatibleBrowserVersion([out, retval] LPWSTR* value); + + /// Sets the `TargetCompatibleBrowserVersion` property. + + [propput] HRESULT TargetCompatibleBrowserVersion([in] LPCWSTR value); + + /// The `AllowSingleSignOnUsingOSPrimaryAccount` property is used to enable + /// single sign on with Azure Active Directory (AAD) and personal Microsoft + /// Account (MSA) resources inside WebView. All AAD accounts, connected to + /// Windows and shared for all apps, are supported. For MSA, SSO is only enabled + /// for the account associated for Windows account login, if any. + /// Default is disabled. Universal Windows Platform apps must also declare + /// `enterpriseCloudSSO` + /// \[Restricted capabilities\]\[WindowsUwpPackagingAppCapabilityDeclarationsRestrictedCapabilities\] + /// for the single sign on (SSO) to work. + /// + /// \[WindowsUwpPackagingAppCapabilityDeclarationsRestrictedCapabilities\]: /windows/uwp/packaging/app-capability-declarations#restricted-capabilities "Restricted capabilities - App capability declarations | Microsoft Docs" + + [propget] HRESULT AllowSingleSignOnUsingOSPrimaryAccount([out, retval] BOOL* allow); + + /// Sets the `AllowSingleSignOnUsingOSPrimaryAccount` property. + + [propput] HRESULT AllowSingleSignOnUsingOSPrimaryAccount([in] BOOL allow); +} + +/// Receives the `WebView2Environment` created using +/// `CreateCoreWebView2Environment`. + +[uuid(4e8a3389-c9d8-4bd2-b6b5-124fee6cc14d), object, pointer_default(unique)] +interface ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler : IUnknown { + + /// Provides the completion status and result of the corresponding + /// asynchronous method. + + HRESULT Invoke(HRESULT errorCode, ICoreWebView2Environment* createdEnvironment); +} + +/// A Receiver is created for a particular DevTools Protocol event and allows +/// you to subscribe and unsubscribe from that event. Obtained from the +/// WebView object using `GetDevToolsProtocolEventReceiver`. + +[uuid(b32ca51a-8371-45e9-9317-af021d080367), object, pointer_default(unique)] +interface ICoreWebView2DevToolsProtocolEventReceiver : IUnknown { + + /// Subscribe to a `DevToolsProtocol` event. The `Invoke` method of the + /// `handler` runs whenever the corresponding `DevToolsProtocol` event runs. + /// `Invoke` runs with an event args object containing the parameter object + /// of the DevTools Protocol event as a JSON string. + /// + /// \snippet ScriptComponent.cpp DevToolsProtocolEventReceived + + HRESULT add_DevToolsProtocolEventReceived( + [in] ICoreWebView2DevToolsProtocolEventReceivedEventHandler* handler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with + /// `add_DevToolsProtocolEventReceived`. + + HRESULT remove_DevToolsProtocolEventReceived( + [in] EventRegistrationToken token); + +} + +/// WebView2Frame provides direct access to the iframes information. +[uuid(f1131a5e-9ba9-11eb-a8b3-0242ac130003), object, pointer_default(unique)] +interface ICoreWebView2Frame : IUnknown { + /// The name of the iframe from the iframe html tag declaring it. + /// Calling this method fails if it is called after the iframe is destroyed. + [propget] HRESULT Name([ out, retval ] LPWSTR * name); + /// Raised when the iframe changes its window.name property. + HRESULT add_NameChanged( + [in] ICoreWebView2FrameNameChangedEventHandler * eventHandler, + [out] EventRegistrationToken * token); + /// Remove an event handler previously added with add_NameChanged. + HRESULT remove_NameChanged([in] EventRegistrationToken token); + + /// Add the provided host object to script running in the iframe with the + /// specified name for the list of the specified origins. The host object + /// will be accessible for this iframe only if the iframe's origin during + /// access matches one of the origins which are passed. The provided origins + /// will be normalized before comparing to the origin of the document. + /// So the scheme name is made lower case, the host will be punycode decoded + /// as appropriate, default port values will be removed, and so on. + /// This means the origin's host may be punycode encoded or not and will match + /// regardless. If list contains malformed origin the call will fail. + /// The method can be called multiple times in a row without calling + /// RemoveHostObjectFromScript for the same object name. It will replace + /// the previous object with the new object and new list of origins. + /// List of origins will be treated as following: + /// 1. empty list - call will succeed and object will be added for the iframe + /// but it will not be exposed to any origin; + /// 2. list with origins - during access to host object from iframe the + /// origin will be checked that it belongs to this list; + /// 3. list with "*" element - host object will be available for iframe for + /// all origins. We suggest not to use this feature without understanding + /// security implications of giving access to host object from from iframes + /// with unknown origins. + /// Calling this method fails if it is called after the iframe is destroyed. + /// \snippet ScenarioAddHostObject.cpp AddHostObjectToScriptWithOrigins + /// For more information about host objects navigate to + /// [AddHostObjectToScript] + HRESULT AddHostObjectToScriptWithOrigins( + [in] LPCWSTR name, + [in] VARIANT * object, + [in] UINT32 originsCount, + [ in, size_is(originsCount) ] LPCWSTR * origins); + /// Remove the host object specified by the name so that it is no longer + /// accessible from JavaScript code in the iframe. While new access + /// attempts are denied, if the object is already obtained by JavaScript code + /// in the iframe, the JavaScript code continues to have access to that + /// object. Calling this method for a name that is already removed or was + /// never added fails. If the iframe is destroyed this method will return fail + /// also. + HRESULT RemoveHostObjectFromScript([in] LPCWSTR name); + + /// The Destroyed event is raised when the iframe corresponding + /// to this CoreWebView2Frame object is removed or the document + /// containing that iframe is destroyed. + HRESULT add_Destroyed( + [in] ICoreWebView2FrameDestroyedEventHandler * eventHandler, + [out] EventRegistrationToken * token); + /// Remove an event handler previously added with add_Destroyed. + HRESULT remove_Destroyed([in] EventRegistrationToken token); + /// Check whether a frame is destroyed. Returns true during + /// the Destroyed event. + HRESULT IsDestroyed([ out, retval ] BOOL * destroyed); +} + +/// Receives `FrameCreated` event. +[uuid(38059770-9baa-11eb-a8b3-0242ac130003), object, pointer_default(unique)] +interface ICoreWebView2FrameCreatedEventHandler : IUnknown { + /// Provides the result for the iframe created event. + HRESULT Invoke([in] ICoreWebView2 * sender, + [in] ICoreWebView2FrameCreatedEventArgs * args); +} + +/// Receives `FrameNameChanged` event. +[uuid(435c7dc8-9baa-11eb-a8b3-0242ac130003), object, pointer_default(unique)] +interface ICoreWebView2FrameNameChangedEventHandler : IUnknown { + /// Provides the result for the iframe name changed event. + /// No event args exist and the `args` parameter is set to `null`. + HRESULT Invoke([in] ICoreWebView2Frame * sender, [in] IUnknown * args); +} + +/// Event args for the `FrameCreated` events. +[uuid(4d6e7b5e-9baa-11eb-a8b3-0242ac130003), object, pointer_default(unique)] +interface ICoreWebView2FrameCreatedEventArgs : IUnknown { + /// The frame which was created. + [propget] HRESULT Frame([ out, retval ] ICoreWebView2Frame **frame); +} + +/// Receives `FrameDestroyed` event. +[uuid(59dd7b4c-9baa-11eb-a8b3-0242ac130003), object, pointer_default(unique)] +interface ICoreWebView2FrameDestroyedEventHandler : IUnknown { + /// Provides the result for the iframe destroyed event. + /// No event args exist and the `args` parameter is set to `null`. + HRESULT Invoke([in] ICoreWebView2Frame * sender, [in] IUnknown * args); +} + +/// Add an event handler for the `DownloadStarting` event. +[uuid(efedc989-c396-41ca-83f7-07f845a55724), object, pointer_default(unique)] +interface ICoreWebView2DownloadStartingEventHandler : IUnknown +{ + /// Provides the event args for the corresponding event. + HRESULT Invoke( + [in] ICoreWebView2* sender, + [in] ICoreWebView2DownloadStartingEventArgs* args); +} + +/// Event args for the `DownloadStarting` event. +[uuid(e99bbe21-43e9-4544-a732-282764eafa60), object, pointer_default(unique)] +interface ICoreWebView2DownloadStartingEventArgs : IUnknown +{ + /// Returns the `ICoreWebView2DownloadOperation` for the download that + /// has started. + [propget] HRESULT DownloadOperation( + [out, retval] ICoreWebView2DownloadOperation** downloadOperation); + + /// The host may set this flag to cancel the download. If canceled, the + /// download save dialog is not displayed regardless of the + /// `Handled` property. + [propget] HRESULT Cancel([out, retval] BOOL* cancel); + + /// Sets the `Cancel` property. + [propput] HRESULT Cancel([in] BOOL cancel); + + /// The path to the file. If setting the path, the host should ensure that it + /// is an absolute path, including the file name, and that the path does not + /// point to an existing file. If the path points to an existing file, the + /// file will be overwritten. If the directory does not exist, it is created. + [propget] HRESULT ResultFilePath([out, retval] LPWSTR* resultFilePath); + + /// Sets the `ResultFilePath` property. + [propput] HRESULT ResultFilePath([in] LPCWSTR resultFilePath); + + /// The host may set this flag to `TRUE` to hide the default download dialog + /// for this download. The download will progress as normal if it is not + /// canceled, there will just be no default UI shown. By default the value is + /// `FALSE` and the default download dialog is shown. + [propget] HRESULT Handled([out, retval] BOOL* handled); + + /// Sets the `Handled` property. + [propput] HRESULT Handled([in] BOOL handled); + + /// Returns an `ICoreWebView2Deferral` object. Use this operation to + /// complete the event at a later time. + HRESULT GetDeferral([out, retval] ICoreWebView2Deferral** deferral); +} + +/// Implements the interface to receive `BytesReceivedChanged` event. Use the +/// `ICoreWebView2DownloadOperation.BytesReceived` property to get the received +/// bytes count. +[uuid(828e8ab6-d94c-4264-9cef-5217170d6251), object, pointer_default(unique)] +interface ICoreWebView2BytesReceivedChangedEventHandler : IUnknown +{ + /// Provides the event args for the corresponding event. No event args exist + /// and the `args` parameter is set to `null`. + HRESULT Invoke( + [in] ICoreWebView2DownloadOperation* sender, [in] IUnknown* args); +} + +/// Implements the interface to receive `EstimatedEndTimeChanged` event. Use the +/// `ICoreWebView2DownloadOperation.EstimatedEndTime` property to get the new +/// estimated end time. +[uuid(28f0d425-93fe-4e63-9f8d-2aeec6d3ba1e), object, pointer_default(unique)] +interface ICoreWebView2EstimatedEndTimeChangedEventHandler : IUnknown +{ + /// Provides the event args for the corresponding event. No event args exist + /// and the `args` parameter is set to `null`. + HRESULT Invoke( + [in] ICoreWebView2DownloadOperation* sender, [in] IUnknown* args); +} + +/// Implements the interface to receive `StateChanged` event. Use the +/// `ICoreWebView2DownloadOperation.State` property to get the current state, +/// which can be in progress, interrupted, or completed. Use the +/// `ICoreWebView2DownloadOperation.InterruptReason` property to get the +/// interrupt reason if the download is interrupted. +[uuid(81336594-7ede-4ba9-bf71-acf0a95b58dd), object, pointer_default(unique)] +interface ICoreWebView2StateChangedEventHandler : IUnknown +{ + /// Provides the event args for the corresponding event. No event args exist + /// and the `args` parameter is set to `null`. + HRESULT Invoke( + [in] ICoreWebView2DownloadOperation* sender, [in] IUnknown* args); +} + +/// Represents a download operation. Gives access to the download's metadata +/// and supports a user canceling, pausing, or resuming the download. +[uuid(3d6b6cf2-afe1-44c7-a995-c65117714336), object, pointer_default(unique)] +interface ICoreWebView2DownloadOperation : IUnknown +{ + /// Add an event handler for the `BytesReceivedChanged` event. + /// + /// \snippet ScenarioCustomDownloadExperience.cpp BytesReceivedChanged + HRESULT add_BytesReceivedChanged( + [in] ICoreWebView2BytesReceivedChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_BytesReceivedChanged`. + HRESULT remove_BytesReceivedChanged( + [in] EventRegistrationToken token); + + /// Add an event handler for the `EstimatedEndTimeChanged` event. + HRESULT add_EstimatedEndTimeChanged( + [in] ICoreWebView2EstimatedEndTimeChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_EstimatedEndTimeChanged`. + HRESULT remove_EstimatedEndTimeChanged( + [in] EventRegistrationToken token); + + /// Add an event handler for the `StateChanged` event. + /// + /// \snippet ScenarioCustomDownloadExperience.cpp StateChanged + HRESULT add_StateChanged( + [in] ICoreWebView2StateChangedEventHandler* eventHandler, + [out] EventRegistrationToken* token); + + /// Remove an event handler previously added with `add_StateChanged`. + HRESULT remove_StateChanged( + [in] EventRegistrationToken token); + + /// The URI of the download. + [propget] HRESULT Uri([out, retval] LPWSTR* uri); + + /// The Content-Disposition header value from the download's HTTP response. + [propget] HRESULT ContentDisposition([out, retval] LPWSTR* contentDisposition); + + /// MIME type of the downloaded content. + [propget] HRESULT MimeType([out, retval] LPWSTR* mimeType); + + /// The expected size of the download in total number of bytes based on the + /// HTTP Content-Length header. Returns -1 if the size is unknown. + [propget] HRESULT TotalBytesToReceive([out, retval] INT64* totalBytesToReceive); + + /// The number of bytes that have been written to the download file. + [propget] HRESULT BytesReceived([out, retval] INT64* bytesReceived); + + /// The estimated end time in [ISO 8601 Date and Time Format](https://www.iso.org/iso-8601-date-and-time-format.html). + [propget] HRESULT EstimatedEndTime([out, retval] LPWSTR* estimatedEndTime); + + /// The absolute path to the download file, including file name. Host can change + /// this from `ICoreWebView2DownloadStartingEventArgs`. + [propget] HRESULT ResultFilePath([out, retval] LPWSTR* resultFilePath); + + /// The state of the download. A download can be in progress, interrupted, or + /// completed. See `COREWEBVIEW2_DOWNLOAD_STATE` for descriptions of states. + [propget] HRESULT State([out, retval] COREWEBVIEW2_DOWNLOAD_STATE* downloadState); + + /// The reason why connection with file host was broken. + [propget] HRESULT InterruptReason( + [out, retval] COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON* interruptReason); + + /// Cancels the download. If canceled, the default download dialog shows + /// that the download was canceled. Host should set the `Cancel` property from + /// `ICoreWebView2SDownloadStartingEventArgs` if the download should be + /// canceled without displaying the default download dialog. + HRESULT Cancel(); + + /// Pauses the download. If paused, the default download dialog shows that the + /// download is paused. No effect if download is already paused. Pausing a + /// download changes the state to `COREWEBVIEW2_DOWNLOAD_STATE_INTERRUPTED` + /// with `InterruptReason` set to `COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_USER_PAUSED`. + HRESULT Pause(); + + /// Resumes a paused download. May also resume a download that was interrupted + /// for another reason, if `CanResume` returns true. Resuming a download changes + /// the state from `COREWEBVIEW2_DOWNLOAD_STATE_INTERRUPTED` to + /// `COREWEBVIEW2_DOWNLOAD_STATE_IN_PROGRESS`. + HRESULT Resume(); + + /// Returns true if an interrupted download can be resumed. Downloads with + /// the following interrupt reasons may automatically resume without you + /// calling any methods: + /// `COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_SERVER_NO_RANGE`, + /// `COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_HASH_MISMATCH`, + /// `COREWEBVIEW2_DOWNLOAD_INTERRUPT_REASON_FILE_TOO_SHORT`. + /// In these cases download progress may be restarted with `BytesReceived` + /// reset to 0. + [propget] HRESULT CanResume([out, retval] BOOL* canResume); +} + +/// A continuation of the ICoreWebView2ProcessFailedEventArgs interface. + +[uuid(4dab9422-46fa-4c3e-a5d2-41d2071d3680), object, pointer_default(unique)] +interface ICoreWebView2ProcessFailedEventArgs2 : ICoreWebView2ProcessFailedEventArgs { + + /// The reason for the process failure. The reason is always + /// `COREWEBVIEW2_PROCESS_FAILED_REASON_UNEXPECTED` when `ProcessFailedKind` + /// is `COREWEBVIEW2_PROCESS_FAILED_KIND_BROWSER_PROCESS_EXITED`, and + /// `COREWEBVIEW2_PROCESS_FAILED_REASON_UNRESPONSIVE` when `ProcessFailedKind` + /// is `COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_UNRESPONSIVE`. + /// For other process failure kinds, the reason may be any of the reason + /// values. + + [propget] HRESULT Reason( + [out, retval] COREWEBVIEW2_PROCESS_FAILED_REASON* reason); + + /// The exit code of the failing process, for telemetry purposes. The exit + /// code is always `1` when `ProcessFailedKind` is + /// `COREWEBVIEW2_PROCESS_FAILED_KIND_BROWSER_PROCESS_EXITED`, and + /// `STILL_ACTIVE` (`259`) when `ProcessFailedKind` is + /// `COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_UNRESPONSIVE`. + + [propget] HRESULT ExitCode( + [out, retval] int* exitCode); + + /// Description of the process assigned by the WebView2 Runtime. This is a + /// technical English term appropriate for logging or development purposes, + /// and not localized for the end user. It applies to utility processes (for + /// example, "Audio Service", "Video Capture") and plugin processes (for + /// example, "Flash"). The returned `processDescription` is empty if the + /// WebView2 Runtime did not assign a description to the process. + + [propget] HRESULT ProcessDescription( + [out, retval] LPWSTR* processDescription); + + /// The collection of `FrameInfo`s for frames in the `ICoreWebView2` that were + /// being rendered by the failed process. The content in these frames is + /// replaced with an error page. + /// This is only available when `ProcessFailedKind` is + /// `COREWEBVIEW2_PROCESS_FAILED_KIND_FRAME_RENDER_PROCESS_EXITED`; + /// `frames` is `null` for all other process failure kinds, including the case + /// in which the failed process was the renderer for the main frame and + /// subframes within it, for which the failure kind is + /// `COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_EXITED`. + + [propget] HRESULT FrameInfosForFailedProcess( + [out, retval] ICoreWebView2FrameInfoCollection** frames); +} + +/// Collection of `FrameInfo`s (name and source). Used to list the affected +/// frames' info when a frame-only render process failure occurs in the +/// `ICoreWebView2`. + +[uuid(8f834154-d38e-4d90-affb-6800a7272839), object, pointer_default(unique)] +interface ICoreWebView2FrameInfoCollection : IUnknown { + + /// Gets an iterator over the collection of `FrameInfo`s. + + HRESULT GetIterator( + [out, retval] ICoreWebView2FrameInfoCollectionIterator** iterator); +} + +/// Iterator for a collection of `FrameInfo`s. For more info, see +/// `ICoreWebView2ProcessFailedEventArgs2` and +/// `ICoreWebView2FrameInfoCollection`. + +[uuid(1bf89e2d-1b2b-4629-b28f-05099b41bb03), object, pointer_default(unique)] +interface ICoreWebView2FrameInfoCollectionIterator : IUnknown { + + /// `TRUE` when the iterator has not run out of `FrameInfo`s. If the + /// collection over which the iterator is iterating is empty or if the + /// iterator has gone past the end of the collection, then this is `FALSE`. + + [propget] HRESULT HasCurrent([out, retval] BOOL* hasCurrent); + + /// Get the current `ICoreWebView2FrameInfo` of the iterator. + + HRESULT GetCurrent([out, retval] ICoreWebView2FrameInfo** frameInfo); + + /// Move the iterator to the next `FrameInfo` in the collection. + + HRESULT MoveNext([out, retval] BOOL* hasNext); +} + +/// Provides a set of properties for a frame in the `ICoreWebView2`. + +[uuid(da86b8a1-bdf3-4f11-9955-528cefa59727), object, pointer_default(unique)] +interface ICoreWebView2FrameInfo : IUnknown { + + /// The name attribute of the frame, as in `