Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
19cb29a
feat(app): add lcui_request_frame and animation timer driver
lc-soft May 20, 2026
c844045
docs: add AGENTS.md
lc-soft May 20, 2026
abb97dc
refactor(app): drop app_ prefix from public API
lc-soft May 20, 2026
554cbed
fix(css): stack buffer overflow in selector fullname construction
orbisai0security May 21, 2026
ddce82d
build(yutil): update submodule to renamed tests/ layout
lc-soft May 23, 2026
27fd503
feat(ctest): add suite filter, list and CTEST_MAIN macro
lc-soft May 23, 2026
faa7058
test: reorganize test suite with xmake test integration
lc-soft May 23, 2026
58a9702
refactor(ui-router): extract router widgets into a new lib
lc-soft May 23, 2026
ec90e37
build(yutil): bump submodule for tests rundir fix
lc-soft May 23, 2026
d89b198
ci: cache xmake packages and bump action versions
lc-soft May 23, 2026
61258da
fix(pandagl): implicit declaration of function ‘pd_rect’
lc-soft May 23, 2026
fb4ea2f
ci: add xvfb and codecov-action
lc-soft May 24, 2026
befb118
ci: remove yutil tests
lc-soft May 24, 2026
f87d215
fix(pandagl): text deletion crashes and pd_text_dump missing line breaks
lc-soft May 24, 2026
61f0aba
refactor(pandagl): rename font API to align with typeface/glyph concepts
lc-soft May 24, 2026
ef23c9c
refactor(pandagl): flatten glyph bitmap cache to hash + lru
lc-soft May 24, 2026
e463e0b
refactor(pandagl): split text.c and rename caret/text-IO API
lc-soft May 24, 2026
eb275e3
ci: add pre-commit formatting via lint-staged and clang-format
lc-soft May 27, 2026
afa800d
build(xmake): fix package name, target naming and example install
lc-soft May 31, 2026
038b378
fix(ui): avoid mbstowcs assertion in ui_print_tree on Windows
lc-soft Jun 1, 2026
1ef42ee
fix(ui-server): correct inverted strcmp for update_visible flag
lc-soft Jun 1, 2026
dac5283
fix(ptk): handle window creation failures on win32
lc-soft Jun 1, 2026
01318a0
refactor(ui): consolidate flexbox row/column axis logic
Copilot Jun 2, 2026
d5bdae9
ci: avoid duplicate builds on PR branch push
lc-soft Jun 2, 2026
8ffaf66
refactor(pandagl): unify rounded border and crop corner rendering (#327)
Copilot Jun 3, 2026
58adb9e
fix(css): reset parse target on '}' to avoid stale property name
lc-soft Jun 6, 2026
3327943
feat(css): add gap, row-gap and column-gap support
lc-soft Jun 6, 2026
af2bd6f
test(flex-layout): add gap example to preview fixture
lc-soft Jun 6, 2026
04a00f9
chore: remove unused debug log
lc-soft Jun 6, 2026
70afc7e
feat: update settings APIs and add persistent configuration support (…
Copilot Jun 8, 2026
32f35c0
chore: update header files
lc-soft Jun 8, 2026
4c05e3d
fix: Consola -> Consolas
lc-soft Jun 8, 2026
2460d91
fix: UI display mode should be reset after destruction
lc-soft Jun 10, 2026
f9c171b
fix(ptk): handler self-removal during dispatch should not cause crash
lc-soft Jun 10, 2026
4087f8c
fix(ptk): ui_server should not bypass platform window destruction flow
lc-soft Jun 10, 2026
7264d24
ci: use clang-format-node for consistent formatting
lc-soft Jun 11, 2026
2ea7b4f
feat(settings): schema-driven serialization and window state persistence
lc-soft Jun 9, 2026
812b80b
ci: improve format check reliability
lc-soft Jun 12, 2026
ec3dce3
chore: update copyright and email
lc-soft Jun 13, 2026
4a3d190
fix(widgets): ceil text bbox size to avoid rounding precision loss
lc-soft Jun 21, 2026
69a3ab3
feat(settings): add custom string settings API
lc-soft Jun 16, 2026
b8642c9
docs: add native doc-viewer and widget documentation (#324)
Copilot Jun 23, 2026
a5e1cdb
feat: add progress widget
lc-soft Jun 27, 2026
3d5bed7
chore: update copyright comment
lc-soft Jun 27, 2026
6c86d7b
feat(pandagl): add backslash escape for style tag brackets
lc-soft Jun 27, 2026
8de6752
chore: convert yutil from submodule to regular directory
lc-soft Jun 28, 2026
b891d52
chore: add yutil as regular directory
lc-soft Jun 28, 2026
21977f8
refactor(yutil): rename public APIs and migrate timer to ptk
lc-soft Jun 28, 2026
1ed0243
fix(pandagl): unify text baseline across fallback fonts
lc-soft Jun 28, 2026
332556f
docs(doc-viewer): add usage, rename anatomy to composition
lc-soft Jun 28, 2026
b9a0591
feat(widgets): add label widget
lc-soft Jun 28, 2026
95dbe94
feat(widgets): add checkbox widget
lc-soft Jun 28, 2026
89f9f93
docs(doc-viewer): add label and checkbox widget documentation
lc-soft Jun 28, 2026
d4a6e12
feat(widgets): add radio-group widget
lc-soft Jun 29, 2026
fa37c80
fix(pandagl): nested [color] tags should use innermost tag's color
lc-soft Jul 2, 2026
4a3a65e
fix: build for string-render example (#331)
wineee Jul 16, 2026
fb15837
feat(ptk): add preliminary Wayland backend implementation
wineee May 23, 2026
8034064
chore(ci): support wayland build
wineee Jul 29, 2026
c8ccc60
build: update xmake-requires.lock dependency versions
wineee May 23, 2026
0ed720e
feat(ptk): rename PTK_APP_ID_LINUX to PTK_APP_ID_LINUX_FRAMEBUFFER fo…
wineee Jul 29, 2026
2e23606
feat(ptk): select linux backend by environment variables
wineee Jul 29, 2026
eb76e39
fix(ptk): enable wayland backend build and fix cursor scaling
wineee Jul 30, 2026
d4161d8
fix(ptk): fix wayland window rendering with unified logical coordinat…
wineee Jul 30, 2026
089ef81
fix(ptk): correct HiDPI scaling for Wayland integer scale factors
wineee Jul 30, 2026
e868b17
feat(ptk): add fractional scale support for Wayland backend
wineee Jul 30, 2026
49f1d59
fix(ptk): sync window geometry with compositor on every frame
wineee Jul 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,6 @@ SpacesInParentheses: false
SpacesInSquareBrackets: false
SortIncludes: false
UseTab: Never
InsertNewlineAtEOF: true
DeriveLineEnding: false
UseCRLF: false
2 changes: 1 addition & 1 deletion .github/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at admin@lc-soft.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hello@lcui.dev. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.

Expand Down
7 changes: 4 additions & 3 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,10 @@ To ensure consistency throughout the source code, keep these rules in mind as yo

- All features or bug fixes **must be tested** by one or more specs (unit-tests).
- All public API methods **must be documented**. (Details TBC).
- Follow the existing code style. You have the following two ways to format the code:
- Use [clang-format](http://clang.llvm.org/docs/ClangFormat.html) to format the changed files: `clang-format --style=file [src/????.c]`.
- Install the [NodeJS](https://nodejs.org/en/) Environment and run `npm install`, which will add a git hook to format the changed code, and it will run before you run `git commit`.
- Follow the existing code style. The project uses [clang-format](http://clang.llvm.org/docs/ClangFormat.html) with the rules defined in `.clang-format`. You have two options:
- Run `clang-format -i path/to/file.c` manually on the files you changed.
- Install [Node.js](https://nodejs.org/) and run `npm install` once. This installs [husky](https://typicode.github.io/husky/) + [lint-staged](https://github.com/lint-staged/lint-staged), which formats every staged `.c` / `.h` file with clang-format on `git commit` automatically.
- CI checks formatting of only the files changed in each PR, so pre-existing style deviations won't block you.

## Commit Message Guidelines

Expand Down
134 changes: 80 additions & 54 deletions .github/workflows/ccpp.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,36 @@
name: C/C++ CI
on: [push, pull_request]
on:
push:
branches:
- develop
- master
- main
tags:
- 'v*'
pull_request:
jobs:
format:
name: Check C/C++ formatting
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24'

- name: Install dependencies
run: npm ci

- name: Check formatting of changed files
run: npm run format:check -- origin/${{ github.base_ref || 'develop' }}

build:
needs: format
env:
TARGET_MAJOR: 3
TARGET_VERSION: 3.0.0
Expand All @@ -14,68 +43,47 @@ jobs:
runs-on: ${{ matrix.os }}
name: "Builds binaries on ${{ matrix.os }}"
steps:
- uses: actions/checkout@v1

- uses: xmake-io/github-action-setup-xmake@v1
- uses: actions/checkout@v4
with:
xmake-version: branch@dev
submodules: recursive

- name: Update git submodule
run: |
git submodule update --init
- uses: xmake-io/github-action-setup-xmake@v1
with:
package-cache: true
actions-cache-folder: '.xmake-cache'

- name: Install tools
if: runner.os == 'Linux'
run: |
sudo apt-get update --fix-missing
sudo apt-get install debhelper lcov valgrind -yy
sudo apt-get install libfreetype6-dev libpng-dev libyaml-dev libomp-dev libx11-dev ninja-build fontconfig libfontconfig1-dev libjpeg-dev
sudo apt-get install debhelper lcov valgrind xvfb -yy
sudo apt-get install libfreetype6-dev libpng-dev libyaml-dev libomp-dev libx11-dev ninja-build fontconfig libfontconfig1-dev libjpeg-dev libwayland-dev libxkbcommon-dev wayland-protocols

- name: Configure
if: runner.os == 'Windows'
run: xmake config -y -v -k ${{ env.TARGET_KIND }} -m release --ci-env=y

- name: Configure for coverage mode
if: runner.os == 'Linux'
run: xmake config -y -v -k ${{ env.TARGET_KIND }} -m coverage --ci-env=y
run: xmake config -y -v -k ${{ env.TARGET_KIND }} -m coverage --ci-env=y --memcheck=y

- name: Build
run: |
xmake
xmake build yutil_test
xmake build pandagl_tests
xmake build libcss_tests
xmake build librouter_tests
xmake build libi18n_tests
xmake build lcui_tests

- name: Run tests for libraries with memcheck
if: runner.os == 'Linux'
run: |
xmake run pandagl_tests
xmake run yutil_test --memcheck
xmake run libcss_tests --memcheck
xmake run librouter_tests --memcheck
xmake run libi18n_tests --memcheck
run: xmake

- name: Run tests for lcui with memcheck
if: runner.os == 'Linux'
run: |
xmake run lcui_tests --memcheck

- name: Run tests
- name: Run all tests
if: runner.os == 'Windows'
run: |
xmake run pandagl_tests
xmake run yutil_test
xmake run libcss_tests
xmake run librouter_tests
xmake run libi18n_tests
xmake run lcui_tests
run: xmake test

- name: Run all tests with memcheck
if: runner.os == 'Linux'
run: xvfb-run -a xmake test

- name: Upload reports to Codecov
if: runner.os == 'Linux'
run: bash <(curl -s https://codecov.io/bash);
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false

- name: Build for release
run: |
Expand All @@ -87,22 +95,40 @@ jobs:
xmake package
xmake install -o dist/lcui-package

- uses: actions/setup-node@v4
with:
node-version: '22'

- uses: oven-sh/setup-bun@v2

- name: Install doc-viewer dependencies
working-directory: examples/doc-viewer
run: bun install

- name: Install lcui-cli
run: npm install -g @lcui/cli

- name: Generate doc-viewer sources
working-directory: examples/doc-viewer
run: bun run compile

- name: Process doc-viewer TSX files
working-directory: examples/doc-viewer
run: lcui build

- name: Build examples
run: |
cd examples
xmake config -P . -y
xmake build -P .
xmake install -P . -o ../dist/lcui-examples
mv ../dist/lcui-examples/bin/* ../dist/lcui-examples/
rm -r ../dist/lcui-examples/bin

- uses: actions/upload-artifact@master
run: xmake build -yg lcui-examples

- name: Install examples
run: xmake install -o dist/lcui-examples -g lcui-examples

- uses: actions/upload-artifact@v4
with:
name: lcui${{ env.TARGET_MAJOR }}-${{ env.TARGET_VERSION }}-${{ env.TARGET_KIND }} (${{ runner.os }})
path: |
dist/lcui-package

- uses: actions/upload-artifact@master
- uses: actions/upload-artifact@v4
with:
name: lcui${{ env.TARGET_MAJOR }}-examples (${{ runner.os }})
path: |
Expand All @@ -116,10 +142,10 @@ jobs:
ARTIFACT_DIR: ./release

steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4

- name: Download artifacts
uses: actions/download-artifact@v3
uses: actions/download-artifact@v4
with:
path: ${{ env.ARTIFACT_DIR }}

Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,5 @@ build/*.jpg
config.h
test/build
vsxmake*
compile_commands.json
compile_commands.json
docs/build/
4 changes: 0 additions & 4 deletions .gitmodules

This file was deleted.

2 changes: 2 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/usr/bin/env sh
npx lint-staged
Loading
Loading