# 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`

## 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.