* 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
* Added a bunch of unit tests and added text input to uikit feature
* cargo fmt
* I dunno what this is but it wasnt checked in
* Fix uikit unit tests
* maybe fix cargo fmt
* Fix iOS run
* fix cargo fmt
* Maybe fix cargo fmt
* maybe fix cargo fmt
* cargo fmt
* Try to fix cargo fmt one more time
* cargo fmt
This can happen in environments like plugins, where cacao can exist multiple times and thus tries to create and register its objc classes more than once.
- Added basic animation support, via NSAnimationContext proxy objects.
These can be used to animate layout constraints and alpha values,
currently.
- Fixed a bug in ListView where the underlying NSTableView would not
redraw the full correct virtual height in some conditions.
- Added safe layout guide support to some views.
- Added a new trait to buffer ObjC object access for view and control
types. This is the supertrait of the Layout and Control traits.
- Added a Control trait, which implements various NSControl pieces.
- Added a Select control, which is a Select-ish HTML dropdown lookalike.
- Added NSURL support, which is one of the few types to expose here.
- Filesystem and pasteboard types now work with NSURLs. Users who need
pathbufs can use the provided conversion method on NSURL.
- Fixed a bug where some Window and ViewController types could wind up
in a double-init scenario.
- AutoLayout is now behind a feature flag (that is defaulted) to enable
building and running on platforms that do _not_ support AutoLayout.
- Added a frame-based Layout example for platforms that don't have
AutoLayout support.
- Fixed a bug in geometry.rs where x/y coordinates would get swapped on
conversion to `CGRect`.
- Added a README to the examples directory to aid in first time users
running examples.
- Changes internal target_os flags to be feature flags; macOS is now
appkit, and iOS/tvOS are now uikit. This enables platforms that are
not Apple-specific platforms that use frameworks to be compiled for.
- Updates the examples to handle closing/quitting better.
- Corrects `feature` -> `target_os` checks.
- Updates the old iOS scene delegate pieces to use the new class
structure.
- Bundles in an iOS demo app.
- Blocks off most things that should not even attempt to compile for
iOS.
- Drag and drop, hidden, and so on now live on on the `Layout` trait,
which helps make the logic less of a hassle to support (these methods
are almost always guaranteed to exist on any view type, and it's
easier to just noop them on a specific view if need be).
- Begin reworking auto-drop-remove-from-superview logic by including an
`is_handle` flag on `View`; will need to extend this work to others.
- Adds a new `ObjcProperty` type, which wraps our Objective-C objects in
a Rust-backed Rc/Refcell combo. This in general makes understanding
reference counting/storage more digestable when reading through the
codebase and leans more on Rust to do its thing than the Objective-C
runtime.
- Most widgets that need to implement `Layout` now only need to provide
a slot for running a handler with the underlying node.
- Further documentation work ongoing.
- Anchors are now enums, which help in debugging constraint issues.
- Enum types that are acceptable for constraint generation are now
matched at runtime, and provide better error messages if a constraint
can't be satisfied and crashes the app.
- `left` and `right` anchors are now supported on all widgets, fixing an
oversight from early iterations of the framework.
- Reduces `unsafe` usage by a decent amount when setting constraint
pointers for widget types.