Commit graph

475 commits

Author SHA1 Message Date
Admin
17d86d145e remove origin from widget tree 2026-03-03 08:55:01 +01:00
Admin
ee8e75b713 find_child 2026-03-03 08:44:18 +01:00
Admin
e163f5d11a find_child 2026-03-03 08:38:55 +01:00
Admin
c545c2259e find_child 2026-03-03 08:37:28 +01:00
Admin
4edce27d8c weakref widget tree 2026-03-02 22:22:30 +01:00
Admin
4f38c0c324 finall fix render glitch 2026-03-02 20:16:29 +01:00
Admin
b437899d82 remote control 2026-03-02 12:07:59 +01:00
Admin
524ac9186d cleanup 2026-03-01 23:15:39 +01:00
Admin
1ef52d6553 wasm 2026-03-01 20:22:11 +01:00
Admin
01a4985e86 backend proto splitoff 2026-03-01 10:12:00 +01:00
Admin
952e6134a9 plaintext error 2026-02-28 11:40:11 +01:00
Julián Montes de Oca
ecb5e7ffae
Video Widget: Support on More Platforms (#867)
* Add support for Video widget on WASM

* Add support for Video widget on Linux

* Linux video:  GStreamer appsink pipeline, GL texture upload, accurate seeking

* Add support for Video widget on Windows

* Harden cross-platform video playback and error handling

* Cleanup video playback logs

* Restore wasm builds

* Restore linux builds

* Restore linux builds

* Remove unused import
2026-02-27 18:52:49 +01:00
Admin
8b6ccc0d85 centralised resource cache 2026-02-27 16:55:05 +01:00
offline-ant
e1d3653de2
iOS: app icons, fullscreen, iOS 15 support, GL texture fix, NSLog logging (#897)
Co-authored-by: ant <ant@offline.click>
2026-02-27 16:42:47 +01:00
offline-ant
af684756c9
Font optimization: reduce atlas 64MB→4MB, use static data for builtins (#898)
Co-authored-by: ant <ant@offline.click>
2026-02-27 16:39:38 +01:00
Admin
82fb692b05 override play 2026-02-27 10:28:00 +01:00
Admin
04e4c51ab8 implicit io markers 2026-02-27 08:36:46 +01:00
Julián Montes de Oca
0675c98cc8
Restore StackNavigation widget, add examples to ui-zoo (#892) 2026-02-26 13:54:36 +01:00
Admin
813844becc counter splash example 2026-02-26 10:08:25 +01:00
offline-ant
690be7c85d
widgets: add Label visible live property support (#885)
Co-authored-by: ant <ant@offline.click>
2026-02-26 08:24:29 +01:00
Kevin Boos
3db5766d33
Fix circle view (#887)
* Fix `CircleView` shader, support true circle shader behavior

Add CircleView examples w/ variety to `uizoo`

* splash example: fix popup notification behavior
2026-02-26 08:17:49 +01:00
admin
ddca609ad8 api 2026-02-25 17:14:39 +01:00
Kevin Boos
d1737883da
FIx Icon, improve to support IconRotated, expose geom in draw_svg (#883)
* Fix draw_svg to support a rotated Icon. Add `IconRotated` widget.

Fix icon resource paths in `splash` example

* Expose geometry in draw_svg to make icon/svg rotation more efficient

simplifies the code too
2026-02-25 13:05:14 +01:00
Sabin Regmi
ec983c982a
Remove left margin from window caption label (#884)
* Remove left margin from window caption label

Delete the hardcoded Inset{left: 100} margin on the caption Label in widgets/src/window.rs so the label can be centered by the parent layout. This cleans up alignment and removes an unnecessary offset in the window header.

* Use window title in caption; format button click

Apply the configured window title to the window caption and make a small UI code cleanup.

- examples/splash: set window.title to "Splash Example" and reformat the tooltip button click check to a multiline expression for readability.
- widgets/src/window.rs: import label::* and update ensure_initialized to copy cx.windows[window_id].create_title into the caption_label when non-empty so the window chrome shows the configured title.
2026-02-25 13:04:46 +01:00
Admin
33eeb0d244 little glitches in script engine 2026-02-24 23:32:56 +01:00
Admin
688da80e11 fix gc issues 2026-02-24 21:40:08 +01:00
Kevin Boos
c3cd1f034a
Add missing callout tooltip file (#882) 2026-02-24 19:59:44 +01:00
Kevin Boos
c0082cc323
Fix Tooltip behavior and structure. Add CalloutTooltip widget (#881)
The CalloutTooltip is a fancier wrapper atop Tooltip that allows
the user to display a tooltip with a callout triangle that points
at a particular widget, making it clearer what the tooltip
corresponds to. It also supports a custom text color, background color,
positioning suggestion (top, right, left, bottom), full text wrapping,
and dynamically resize and re-orient itself to fit within the app screen.
2026-02-24 19:43:06 +01:00
Admin
7813788fcd text cast in set_text 2026-02-24 17:12:54 +01:00
Admin
94c459cee9 add splash test/set text 2026-02-24 16:33:36 +01:00
Admin
9d18257fd1 add source to components 2026-02-24 14:40:08 +01:00
Admin
7816d8da43 network refactor 2026-02-24 14:04:37 +01:00
Admin
ca17ee8baa splice out a makepad-network crate 2026-02-23 23:21:31 +01:00
Admin
aa056e8053 fix dx11 memleak 2026-02-23 18:30:26 +01:00
Admin
7dc1249b4f fix up uizoo 2026-02-23 18:00:19 +01:00
offline-ant
759eeec03c
widgets: expose Label and View fields for external composition (#869)
Co-authored-by: ant <ant@offline.click>
2026-02-23 17:44:49 +01:00
Admin
00c64eb965 message refactor
;
2026-02-23 16:46:48 +01:00
Admin
6fa70b19ce studio<>app proto cleanup 2026-02-23 15:54:59 +01:00
Julián Montes de Oca
6bc8fde866
Video Widget: Support on MacOS & iOS (#863)
* Add macOS video playback support using AVPlayer + CVMetalTextureCache

Extends the Video widget from Android-only to also support macOS with
hardware-accelerated, zero-copy video rendering through Metal. Uses
AVPlayer for decoding and CVMetalTextureCache to map decoded frames
directly to MTLTextures without CPU copies.

Key changes:
- New AppleVideoPlayer module (AVPlayer + CVPixelBuffer → MTLTexture pipeline)
- FFI bindings for CVMetalTextureCache, CMTime, and related Apple APIs
- Video frame polling integrated into macOS paint cycle
- TextureFormat::VideoRGB ungated from Android-only to all platforms
- Video widget made cross-platform (TextureHandleReady wait is Android-only)
- Fixed shader aspect ratio bug (&&→|| for non-positive dimension check)
- Added video demo to uizoo and scratchpad examples

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add iOS video playback support

* Enhance video playback functionality with seek support and current position tracking

Key changes:
- Added `seek_video_playback` operation to allow seeking to specific timestamps.
- Introduced `current_position_ms` field in `VideoTextureUpdatedEvent` for tracking playback position.
- Implemented seeking functionality across iOS, macOS, and Android platforms.
- Updated Video widget to support new controls and indicators for seeking.

* Improve error handling for unsupported texture pixel formats

* Make volume icon drawing  use fixed width

* Make play/pause drawing use fixed width

* Remove video from scratchpad

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:19:21 +01:00
admin
68222399e3 tweakray 2026-02-22 20:30:14 +01:00
admin
617b5ba7e7 theme cleanup 2026-02-21 15:46:30 +01:00
admin
ec56475706 theme cleanup 2026-02-21 15:40:12 +01:00
admin
2d8754eea9 fix up theme hook 2026-02-21 15:21:27 +01:00
Admin
5b2e29fb74 make splats faster 2026-02-21 12:37:26 +01:00
offline-ant
209c660226
Fix some build issues + upgrade android to r28 ndk. (#862)
* fix: add **/* glob to Linux NDK unzip to match subdirectories

`*` alone doesn't match `/` on Linux unzip builds with WILD_STOP_AT_DIR,
causing only top-level files to be extracted. Adding `**/*` ensures bin/,
lib64/, sysroot/ subdirectories are included.

* Auto-bundle NDK shared library deps (e.g. libc++_shared.so) into APK

When libmakepad.so has NEEDED entries for shared libraries provided by
the NDK sysroot (like libc++_shared.so from C++ dependencies), those
libraries were not being included in the APK, causing runtime dlopen
failures on device.

Add bundle_ndk_shared_deps() which uses the NDK's llvm-readelf to scan
libmakepad.so for NEEDED entries, then copies any matching .so files
from the NDK sysroot base lib dir into the APK. System libraries
(present in the API-level subdirectory) are excluded since they are
provided by the Android OS at runtime.

The detection is general-purpose and not hardcoded to any specific
library name.

* fix: make SYS_GETTID arch-conditional (186 on x86_64, 178 on aarch64)

The constant was hardcoded to 178 (correct for aarch64 but maps to
query_module on x86_64), causing Android's seccomp filter to kill the
process immediately on x86_64 emulators.

* Upgrade Android NDK from r25 to r28, fix x86_64 seccomp crash

cargo_makepad:
- sdk.rs: NDK version 25.2.9519653 → 28.2.13676358, download URLs r25c → r28b
- sdk.rs: Update NDK_IN extract paths for all platforms (Windows, macOS, Linux)
- sdk.rs: macOS NDK extraction is now host-aware (darwin-aarch64 for Apple Silicon)
- compile.rs: MacosAarch64 uses native darwin-aarch64 prebuilt (no more Rosetta)
- compile.rs: ndk_prebuilt_dir() split for MacosX64 vs MacosAarch64

platform:
- libc_sys.rs: Make SYS_GETTID arch-conditional (186 on x86_64, 178 on aarch64)
  Was hardcoded to 178 which maps to query_module on x86_64, causing
  Android seccomp to kill the process on x86_64 emulators
- android.rs: Add pub display field on CxOs, pub make_current() on CxAndroidDisplay
  for Servo embedding support

* Fix GLSL struct constructor crash on Android GLES drivers

The r28 script-based shader backend (shader_glsl.rs) generates GLSL
struct constructor syntax in the vertex/fragment main() unpack code,
e.g.: vb_geom = QuadVertex(vec2(packed_geometry_0.x, ...));

Some GLES drivers (notably Android emulator ANGLE/SwiftShader) reject
this with 'Structure constructor arguments do not match structure
fields', even though it's valid per the GLES 3.0 spec.

This is a regression from r28. The old r25 shader compiler
(generate_glsl.rs) used VarUnpacker::unpack_var which generated direct
swizzle assignments (vb_geom.xy = packed_geometry_0.xy), never struct
constructors in the unpack path. The r25 branch is not affected.

Fix: generate per-sub-field assignments for struct-typed variables in
the main() geometry/instance/varying unpack code, matching the r25
behavior. Struct constructors in user shader function bodies are
unaffected.

* fix(android): Proper fullscreen support on API 30+ and FullscreenWindow/NormalizeWindow ops

Android platform changes:
- Add CxOsOp::FullscreenWindow handler: sets os.fullscreen flag and calls JNI setFullScreen
- Add CxOsOp::NormalizeWindow handler: clears os.fullscreen and exits fullscreen

MakepadActivity.java:
- onCreate: On API 30+, switch from legacy Theme.NoTitleBar.Fullscreen to
  Theme_DeviceDefault_NoActionBar to avoid FLAG_FULLSCREEN conflict
- onCreate: Call setDecorFitsSystemWindows(false) and set
  LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS before setContentView so SurfaceView
  is laid out at y=0 from the start
- Refactor setFullScreen into applyFullScreen with proper WindowInsetsController
  API on API 30+ (hide/show statusBars + navigationBars)
- Legacy path (pre-API 30) uses full immersive sticky flags
- ResizingLayout.onApplyWindowInsets: Return WindowInsets.CONSUMED to prevent
  system bar insets from offsetting child SurfaceView

* Fix Android touch radius DPI scaling and revert aggressive fullscreen inset handling

- Divide touch.radius by dpi_factor alongside touch.abs for correct touch sizing
- Return insets instead of consuming them in ResizingLayout so child views get proper insets
- Remove premature setDecorFitsSystemWindows/cutout mode override; let apps opt in via FullscreenWindow

* Make DrawImage image_scale/image_pan fields pub

Needed by external crates (e.g. servo makepad_shell) that create custom
widgets using DrawImage and need to flip the Y axis for GL render textures.

---------

Co-authored-by: ant <ant@offline.click>
2026-02-21 10:30:56 +01:00
Admin
a98c49dadd sortable drawcalls 2026-02-21 10:05:07 +01:00
Admin
f6bafb9a82 splats without sort yet 2026-02-21 08:43:52 +01:00
offline-ant
5532faabfc
Add Servo embedding support: render texture API, EGL access, Image Y-flip (#861)
Three minimal changes to support embedding Servo as a WebView:

1. windowing_backend.rs: Make opengl_cx field pub (was pub(super))
   Servo needs EGL display/context/platform handles to create a shared
   GL context. egl_platform and egl_platform_display have no EGL query
   to retrieve them — they must come from whoever created the display.
   Matches Makepad convention (Cx fields are pub, no accessors).

2. opengl.rs: Add Cx::create_gl_render_texture(width, height)
   Eagerly allocates a RenderBGRAu8 texture and returns (Texture, gl_id).
   Needed because Makepad allocates GL textures lazily during render,
   but Servo needs the GL texture ID at init to attach to its FBO.
   No existing API for eager allocation (update_render_target and
   cx.os.gl() are both pub(crate)).

3. image.rs: Add is_render() Y-flip in Image widget
   FBO render targets are Y-up in OpenGL; Makepad is Y-down.
   CachedView handles this via sample2d_rt shader, but Image widget
   was untested with render textures. set_texture() accepts them but
   displays upside-down. Fixes a genuine gap — no existing Makepad
   code puts RenderBGRAu8 into an Image widget.

Co-authored-by: ant <ant@offline.click>
2026-02-20 16:36:53 +01:00
Admin
6fdcbc923b portal list unstuck 2026-02-20 16:05:31 +01:00
Julián Montes de Oca
88abfedd24
Restore IME support (#860)
* Restore IME support

* Remove unused voice handling methods from Window
2026-02-20 14:06:02 +01:00