094ed59a04
* Use objc2 * Replace `objc_id` * Remove sel_impl import * Fix `add_method` calls * Fix accessing raw FFI functions * Fix Encode impl * Fix message sends arguments that do not implement `Encode` * Use immutable reference in a few places where now necessary See https://github.com/madsmtm/objc2/pull/150 for a bit of background * Add a few Send + Sync bounds where examples require it This is something we'll need to look into properly * Use `&'static Class` instead of `*const Class` Safer and more ergonomic. Also required for `msg_send_id!` macro * Use msg_send_id! and rc::Id * Update objc2 to v0.3.0-beta.2 * Replace `BOOL` with `Bool` when declaring delegates This makes cacao compile on Aarch64 again * Remove a few impossible to use correctly `into_inner` functions These consumed `self`, and hence also dropped `Id` variable that was responsible for keeping the returned pointer alive * Remove a few impossible to use correctly `From` implementations * Quickly fix UB with using BACKGROUND_COLOR ivar * Fix double-freeing of windows * Fix double freeing of strings * Fix a few remaining double-frees |
||
---|---|---|
.. | ||
browser | ||
calculator | ||
ios-beta | ||
todos_list | ||
animation.rs | ||
autolayout.rs | ||
custom_image_drawing.rs | ||
defaults.rs | ||
frame_layout.rs | ||
popover.rs | ||
readme.md | ||
safe_area.rs | ||
text_input.rs | ||
webview_custom_protocol.rs | ||
window.rs | ||
window_controller.rs | ||
window_delegate.rs |
Cacao Examples
This directory contains example code for apps written in cacao. To run an example, check out the list of commands below - some require certain features to be enabled.
AutoLayout
An example that showcases layout out a view with AutoLayout. This requires the feature flag autolayout
to be enabled, but it's defaulted for ease of use so doesn't need to be specified here. Platforms where AutoLayout is not supported will likely not work with this example.
cargo run --example autolayout
Frame Layout
An example that showcases laying out with a more old school Frame-based approach. Platforms where AutoLayout are not supported will want to try this instead of the AutoLayout example.
macOS:
cargo run --example frame_layout
Platforms lacking AutoLayout:
cargo run --example frame_layout --no-default-features --features appkit
Defaults
This example isn't GUI-specific, but showcases accessing NSUserDefaults
from Rust for persisting basic data.
cargo run --example defaults
Window
This example showcases creating a basic Window
. This should run on all AppKit-supporting platforms.
cargo run --example window
Window Controller
This example showcases creating a basic WindowController
. This may run on all AppKit-supporting platforms.
cargo run --example window_controller
Window Delegate
This example showcases creating a basic WindowDelegate
to receive and handle events. This may run on all AppKit-supporting platforms.
cargo run --example window_delegate
Text Input
This example showcases text input, and logs it to the underlying console. It's mostly a testbed to ensure that the backing widget for input behaves as expected.
cargo run --example text_input
Safe Area
This example showcases A window containg the text "Hello, world!" while keeping everything in the safearea to keep it visible.
cargo run --example safe_area
Calculator
A Rust-rendition of the macOS Calculator app.
cargo run --example calculator
To-Do List
A "kitchen sink" example that showcases how to do more advanced things, such as cached reusable ListView components.
cargo run --example todos_list
Browser
A very basic web browser. Platforms that don't support WKWebView will likely not work with this example.
cargo run --example browser --features webview
Webview Custom Protocol
This example showcases a custom protocol for the webview feature. Platforms that don't support WKWebView will likely not work with this example.
cargo run --example webview_custom_protocol --features webview
iOS (Beta)
This example showcases how to build and run an iOS app in Rust. See the README in the ios-beta
folder for instructions on how to run.