Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
339e6f9
Package portable releases and integrate accessible gallery and touch …
Oct 3, 2026
2ef5882
Reconfigure the actual system GLFW native build directory
Oct 3, 2026
fe76ac9
Clamp archival license timestamps to the ZIP format range
Oct 3, 2026
2d689d6
Replace Python release tooling with shell PowerShell and V
Oct 3, 2026
c241e6d
Share release build packaging and license helpers in V
Oct 3, 2026
69d58a4
Include portable launcher and support testing signed Android releases
Oct 3, 2026
0ad9ea3
List only relevant tools in release documentation
Oct 3, 2026
09c14d1
Resolve release commands across platforms and refresh native pins
Oct 3, 2026
75e69df
Guide example setup and add a portable release launcher
Oct 3, 2026
eed3473
Make setup and release scripts directly executable
Oct 3, 2026
f276e56
Add shared Escape and borderless fullscreen shortcuts
Oct 3, 2026
1be7f72
Use the current monitor mode for windowed fullscreen and validate tog…
Oct 3, 2026
95d04a0
Use native checkbox and radio actions in Windows accessibility probe
Oct 3, 2026
82c3dd5
Wait for the gallery view selection before switching back
Oct 3, 2026
b8c9ed7
Bound the shortcut probe window activation wait
Oct 3, 2026
2f26cca
Allow slower CI window startup and retain shortcut diagnostics
Oct 3, 2026
6611931
Report native scroll percentages in the Windows probe
Oct 3, 2026
c8c48a9
Pin the Windows scroll property update for release verification
Oct 3, 2026
9364e86
Keep the UIA wait helper from shadowing the text pattern
Oct 3, 2026
ee3c8f9
Pin the virtual list text-scaling and scroll priority fix
Oct 3, 2026
1491040
Use the correct UI Automation text enum namespaces
Oct 3, 2026
888566e
Run the Windows UIA client in a multithreaded COM apartment
Oct 3, 2026
aa29c78
Capture the window tree and stack when CI startup fails
Oct 3, 2026
85dfaf1
Require rendering log scanner and enable CI startup stacks
Oct 3, 2026
4293d5c
Use standard grep for rendering log checks
Oct 3, 2026
b87ada5
Check Unicode selection with native UIA and adopt portable upstream t…
Oct 3, 2026
56395bf
Include the ATK cleanup fix in release builds
Oct 3, 2026
8f5c924
Use current upstream revisions in all source checks
Oct 3, 2026
85cf554
Show initialized windows after draining startup events
Oct 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .github/actions/setup-v/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,15 @@ runs:
repository: vlang/tccbin
ref: d6e7ac1b1bcc98aed734a6ecbfa8509f24606c74
path: toolchain/v/thirdparty/tcc
- shell: bash
- if: runner.os != 'Windows'
shell: bash
run: |
make -C toolchain/v local=1
echo "$GITHUB_WORKSPACE/toolchain/v" >> "$GITHUB_PATH"
- if: runner.os == 'Windows'
shell: cmd
working-directory: toolchain/v
run: makev.bat -msvc --local
- if: runner.os == 'Windows'
shell: pwsh
run: '"$env:GITHUB_WORKSPACE\toolchain\v" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append'
2 changes: 1 addition & 1 deletion .github/workflows/additional-examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: antono2/imgui
ref: 658d1fa0e863c3d0345ffdd9685fee05876a7648
ref: 48d6c6614ead130450791a72179f711f4090a7e8
path: build/modules/antono2/imgui
submodules: recursive
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
Expand Down
13 changes: 8 additions & 5 deletions .github/workflows/compile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: antono2/imgui
ref: a28bfc544a46fd80221bdfe0aa45e161df9782d0
ref: fa2e194d447a4cb0975126b1d83e45889e7cadd9
path: source/modules/antono2/imgui
submodules: recursive
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
Expand Down Expand Up @@ -60,20 +60,23 @@ jobs:
make local=1
echo "$GITHUB_WORKSPACE/toolchain/v" >> "$GITHUB_PATH"
- name: Install native dependencies
run: sudo apt-get update && sudo apt-get install -y build-essential cmake libglfw3-dev libvulkan-dev libvulkan-volk-dev pkg-config mesa-vulkan-drivers vulkan-validationlayers xvfb
run: sudo apt-get update && sudo apt-get install -y build-essential cmake libglfw3-dev libvulkan-dev libvulkan-volk-dev pkg-config mesa-vulkan-drivers vulkan-validationlayers xvfb openbox xdotool x11-utils x11-xserver-utils wmctrl
- name: Build native ImGui library
working-directory: source/modules/antono2/imgui
run: v run build_vimgui.vsh --linkage shared --glfw system
- name: Compile GLFW/Vulkan example
run: |
v -check-syntax source/demo/setup.vsh
./source/demo/setup.vsh --help
for example in glfw_vulkan widget_gallery implot_dashboard; do
source=source/demo
if [ "$example" != glfw_vulkan ]; then source="source/demo/examples/$example"; fi
v -no-memory-limit -path "$GITHUB_WORKSPACE/source/modules/antono2|@vlib|@vmodules" -cc gcc -o "$RUNNER_TEMP/$example" "$source"
done
- name: Render desktop examples with Vulkan validation
run: bash source/demo/scripts/smoke_desktop.sh "$RUNNER_TEMP"
- name: Check desktop keyboard shortcuts
run: ./source/demo/tests/desktop/shortcuts.sh "$RUNNER_TEMP" --raw-gallery
- name: Verify executable
run: test -x "$RUNNER_TEMP/glfw_vulkan" && test -x "$RUNNER_TEMP/widget_gallery" && test -x "$RUNNER_TEMP/implot_dashboard"

Expand All @@ -89,7 +92,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: antono2/imgui
ref: a28bfc544a46fd80221bdfe0aa45e161df9782d0
ref: fa2e194d447a4cb0975126b1d83e45889e7cadd9
path: source/modules/antono2/imgui
submodules: recursive
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
Expand Down Expand Up @@ -127,7 +130,7 @@ jobs:
"$env:GITHUB_WORKSPACE\toolchain\v" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Install Vulkan SDK and SwiftShader test artifacts
shell: bash
run: bash source/modules/antono2/imgui/.github/scripts/setup-vulkan-ci.sh 1.4.309.0 v1.2
run: v run source/modules/antono2/imgui/scripts/setup_vulkan_ci.vsh 1.4.309.0 v1.2
- name: Install matching Volk header
shell: pwsh
run: |
Expand Down Expand Up @@ -201,7 +204,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: antono2/imgui
ref: a28bfc544a46fd80221bdfe0aa45e161df9782d0
ref: fa2e194d447a4cb0975126b1d83e45889e7cadd9
path: source/modules/antono2/imgui
submodules: recursive
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
Expand Down
144 changes: 144 additions & 0 deletions .github/workflows/release-packages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
name: Portable release packages
on:
pull_request:
branches: [master]
workflow_dispatch:
permissions:
contents: read
jobs:
desktop:
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, windows-2022]
variant: [docking, standard]
include:
- variant: docking
imgui-ref: fa2e194d447a4cb0975126b1d83e45889e7cadd9
- variant: standard
imgui-ref: 48d6c6614ead130450791a72179f711f4090a7e8
runs-on: ${{ matrix.os }}
timeout-minutes: 45
env:
VMODULES: ${{ github.workspace }}/build/modules
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- uses: ./.github/actions/setup-v
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with:
repository: antono2/imgui
ref: ${{ matrix.imgui-ref }}
path: build/modules/antono2/imgui
submodules: recursive
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with:
repository: antono2/vulkan
ref: v3.2.0
path: build/modules/antono2/vulkan
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with:
repository: antono2/glfw
ref: v2.0.0
path: build/modules/antono2/glfw
- name: Install Linux build and rendering tools
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y build-essential cmake libglfw3-dev libvulkan-dev libvulkan-volk-dev libdbus-1-dev libatk1.0-dev libatk-bridge2.0-dev libatspi2.0-dev libglib2.0-dev at-spi2-core dbus-x11 pkg-config mesa-vulkan-drivers vulkan-validationlayers ripgrep gdb xvfb patchelf zip xdotool openbox x11-utils x11-xserver-utils wmctrl
- name: Install Windows Vulkan build tools
if: runner.os == 'Windows'
shell: bash
run: v run build/modules/antono2/imgui/scripts/setup_vulkan_ci.vsh 1.4.309.0 v1.2
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
if: runner.os == 'Windows'
with:
repository: zeux/volk
ref: 58689c063427f5bad4f133625049b1a3c5dd8287
path: build/volk
- name: Install Windows Volk header
if: runner.os == 'Windows'
shell: pwsh
run: |
$Destination = Join-Path $env:VULKAN_SDK 'Include/volk'
New-Item -ItemType Directory -Force $Destination | Out-Null
Copy-Item build/volk/volk.h, build/volk/volk.c $Destination
- name: Build, bundle and render Linux releases
if: runner.os == 'Linux'
run: ./scripts/build_release.v '${{ matrix.variant }}'
- name: Exercise bundled gallery through native AT-SPI
if: runner.os == 'Linux'
run: |
c++ -std=c++17 tests/desktop/accessibility.cpp $(pkg-config --cflags --libs atspi-2 gio-2.0) -o build/accessibility-check
GSETTINGS_BACKEND=memory dbus-run-session -- xvfb-run -a build/accessibility-check "build/v-imgui-examples-linux-x64-${{ matrix.variant }}/widget_gallery" "build/release-atspi-${{ matrix.variant }}.log"
- name: Check bundled desktop keyboard shortcuts
if: runner.os == 'Linux'
run: |
sudo sysctl kernel.yama.ptrace_scope=0
./tests/desktop/shortcuts.sh "build/v-imgui-examples-linux-x64-${{ matrix.variant }}"
- name: Build and audit Windows release DLLs
if: runner.os == 'Windows'
shell: pwsh
run: |
. scripts/setup_windows_build.ps1
v -prod run scripts/build_release.v '${{ matrix.variant }}'
if ($LASTEXITCODE -ne 0) { throw 'Portable release build failed' }
& "build/v-imgui-examples-windows-x64-${{ matrix.variant }}/examples.exe" --help
if ($LASTEXITCODE -ne 0) { throw 'Examples launcher failed' }
- name: Exercise native Windows UI Automation
if: runner.os == 'Windows'
shell: pwsh
run: |
. scripts/setup_windows_build.ps1
cl.exe /nologo /std:c++17 /EHsc tests/desktop/windows_text.cpp /Febuild/windows-text-check.exe /Fobuild/windows-text-check.obj /link uiautomationcore.lib ole32.lib oleaut32.lib
if ($LASTEXITCODE -ne 0) { throw 'Native text probe build failed' }
powershell.exe -Mta -NoProfile -ExecutionPolicy Bypass -File tests/desktop/accessibility.ps1 -Executable "build/v-imgui-examples-windows-x64-${{ matrix.variant }}/widget_gallery.exe" -SelectionProbe "$PWD/build/windows-text-check.exe"
if ($LASTEXITCODE -ne 0) { throw 'Native UI Automation check failed' }
- name: Upload portable desktop package
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: desktop-${{ runner.os }}-${{ matrix.variant }}
path: build/v-imgui-examples-*.zip
if-no-files-found: error
- name: Upload rendering logs
if: always() && runner.os == 'Linux'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: render-${{ matrix.variant }}
path: |
build/v-imgui-examples-linux-*/smoke-logs
build/v-imgui-examples-linux-*/shortcut-logs

android:
strategy:
fail-fast: false
matrix:
abi: [armeabi-v7a, arm64-v8a, x86_64]
runs-on: ubuntu-24.04
timeout-minutes: 45
env:
ANDROID_ABI: ${{ matrix.abi }}
VIMGUI_ANDROID_APPLICATION_UI: '1'
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- uses: ./.github/actions/setup-v
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
- uses: android-actions/setup-android@v3
with:
packages: platform-tools
- name: Install Android build tools
run: |
sdkmanager --install 'ndk;27.3.13750724' 'platforms;android-36' 'build-tools;36.0.0'
echo "ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/27.3.13750724" >> "$GITHUB_ENV"
- name: Build accessible touch app
run: bash scripts/build_android.sh --build-only
- name: Collect Android notices
run: ./scripts/collect_licenses.v build/modules/antono2/imgui "build/android-touch-$ANDROID_ABI/licenses" android
- name: Upload unsigned APK and notices for release signing
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: android-release-input-${{ matrix.abi }}
path: |
build/android-touch-${{ matrix.abi }}/vimgui-demo-unsigned.apk
build/android-touch-${{ matrix.abi }}/licenses
if-no-files-found: error
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,12 @@ bin/
imgui.ini
main.cpp
run.sh
!packaging/run.sh
tmp.txt
.editorconfig

# Reproducible dependency checkouts and build artifacts
build/
*.apk

__pycache__/
2 changes: 1 addition & 1 deletion IMGUI_REVISION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
a28bfc544a46fd80221bdfe0aa45e161df9782d0
fa2e194d447a4cb0975126b1d83e45889e7cadd9
71 changes: 54 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,33 +19,69 @@ with Vulkan validation in both standard and docking variants; Windows compiles
all desktop examples. Android CI builds debug APKs for three ABIs. Device testing
is required before release; see [the testing checklist](docs/testing.md).

## Recommended quick start
## Try a release

From this checkout, the cross-platform setup installs/builds ImGui and compiles
the example without opening a window:
[Download a release](https://github.com/antono2/v_imgui_examples/releases) and follow
[installation instructions](docs/installing-releases.md). Desktop ZIPs bundle
their application runtime libraries; Android APKs include their native libraries
and font. The gallery and Android app include labelled native accessibility
controls, high contrast and text sizing. Choose **Docking** unless you specifically
want the Standard variant.

- **Windows:** extract the ZIP and open `examples.exe` to choose an example.
- **Linux:** extract the ZIP and run `./run.sh` for the example menu.
- **Android:** install the universal APK and open **V ImGui Touch Examples**.

In each desktop example, **Escape** quits when a control is not using it to
cancel an edit, drag, popup or navigation operation. **F11** toggles borderless
fullscreen on the window's monitor; pressing it again restores the window.

## Build from source

Install V and Git, then run this command from the checkout:

```sh
./setup.vsh
```

Use the official V compiler. The tested compiler revisions are recorded in
[the CI compiler setup](.github/actions/setup-v/action.yml).
On Windows, use `v run setup.vsh` with the same options; the direct executable
script commands below apply to Linux and macOS.

The guided runner lets you choose an example, explains setup changes, builds it
and opens it. It streams build progress and offers to run an existing desktop
build or rebuild it on later visits. Widget gallery is the default choice.
Missing tools are reported with next steps. System package installation requires
confirmation in the guided flow.

For automation, explicit options skip the menus and setup confirmation. System
installers may still request administrator authorization:

```sh
v run setup.vsh
v run setup.vsh --example widget_gallery
v run setup.vsh --example implot_dashboard
./setup.vsh --install --example widget_gallery --run
./setup.vsh --build-only --example implot_dashboard --run
./setup.vsh --check --example widget_gallery
```

Setup uses an isolated `build/modules` dependency directory and checks out the
ImGui commit recorded in `IMGUI_REVISION`. It does not discard changes in an
existing dependency checkout. Set `VMODULES` to use a different module directory.
The setup may install system prerequisites through the upstream setup script.

On Linux/macOS, launch `build/glfw_vulkan`, `build/widget_gallery`, or
`build/implot_dashboard` after setup. Windows setup reports its executable path.
Use `--build-only` to compile using dependencies already prepared, or `--check`
for read-only prerequisite diagnostics. Both accept `--example`.
Explicit builds only launch when `--run` is supplied. Use `--build-only` to
compile with prepared dependencies, or `--check` for read-only prerequisite
diagnostics. Windows keeps each built example beside its runtime DLLs.

For Android, set the SDK/NDK paths and ABI, then run
`scripts/build_android.sh --build-only`. It builds a signed debug APK without
installing it. See [Android instructions](examples/android_touch/README.md).
Choose Android in the menu for SDK/NDK detection and connected-device selection.
Install the Android development tools first; the runner can ask for their paths
but does not download the SDK. It builds, installs and opens a debug APK after
confirmation. The guided Android flow requires Bash and the toolchain described
in [Android instructions](examples/android_touch/README.md). Those instructions
also cover explicit builds without installing on a device.

The pinned ImGui commit includes the external-example host options. Until its
upstream PR is merged, use this revision rather than an older installed module.
The pinned ImGui commit includes the external-example host options. Use this
revision rather than an older installed module.

The ImGui repository owns native-library setup and pins a tested revision of
this example. On Ubuntu or Debian, the shortest supported path is:
Expand Down Expand Up @@ -106,7 +142,8 @@ the upstream native host. `examples/glfw_vulkan/` contains the shared desktop
loop, native flags, and the default demo UI. ImPlot context/spec objects are
created and destroyed through host lifecycle callbacks.

iOS/Metal and the optional application/accessibility layer are planned additions.
They are not yet examples in this repository.
The release gallery and touch app integrate the application/accessibility layer.
Raw API views retain ordinary ImGui widgets; they do not automatically expose
screen-reader semantics. iOS/Metal remains an upstream source integration.

![V + Vulkan + GLFW + Dear ImGui](Snapshot_glfw_vulkan.png)
Loading
Loading