* Added attributed versions of accessibilityLabel, accessibilityHint and accessibilityValue
* Follow conventions for property types
* Use curly braces
* Update changelog
* Follow conventions for property types in UIView+ASConvenience.h
* Add compatibility for Xcode 8
* Use isEqualToString instead of pointer comparison
* Only allocate attributed strings once. Use _setAttributedAccessibilityToViewAndProperty only for attributed properties.
* [ASCornerRounding] Initial (untested) implementation of ASCornerRounding features.
* [ASCornerRounding] Working version of both clip corners and precomposited corners.
* [ASCornerRounding] Improve factoring and documentation of corner rounding features.
* [ASCornerRounding] Some final fixups.
* Add entry to changelog for .cornerRoundingType
This makes it much easier to use the ASCoreAnimationExtras method which offers by
far the most efficient way to display a stretchable image.
In the future, we should move that function to UIImage+ASConvenience or another
header where it can be more easily found and enjoyed!
* Lock released between add to pend controller and modifying pend state
The existing design is pretty fraught with error. We should probably
rethink this but in the meantime, this fixes a bug where calling
setNeedsLayout can start failing for nodes.
Essentially the method ASDisplayNodeShouldApplyBridgedWriteToView has
a side effect of registering a node to apply it's pending state *if*
it doesn't currently need the pending state applied. My guess is this
was to avoid continually registering the node and this behavior actually
helped expose this bug.
The bug: after the node is registered for flushing it's state, several
code paths released the lock before applying that state to the pending
state object. Before it could re-obtain the lock to apply it to the pending
state, the pending state controller flushed it on the main thread.
On subsequent calls to setNeedsLayout, the pending state had pending state
already (from previous calls which missed the flush) and thus wasn't
registered for future flushing.
* Add changelog
* [ASDisplayNode] Convert isSynchronous to an Objective-C atomic BOOL.
This reduces lock contention, and should also fix a very rarely seen deadlock.
* [ASDisplayNode] Implement a std::atomic-based flag system for superb performance
Although Objective-C atomics are equally fast, or better that std::atomic when
access through method calls, for the most intense use cases it is best to avoid
method calls entirely.
In ASDisplayNode, we could benefit significantly from avoiding both method calls
(already true today) but also avoid locking the mutex, for both CPU and contention
gains.
There will still be many methods that need locking for transactional
consistency - however, there are currently dozens of accessor methods that could
avoid frequent lock / unlock cycles with use of atomics, and other usages of the
ivars directly where locking could be delayed until after early-return conditions
are checked and passed.
* [Yoga Beta] Improvements to the experimental support for Yoga layout.
Yoga remains an unsupported / speculative feature, but these improvements are important for
the functionality of clients that are experimenting with it.
For example, without these changes, ASButtonNode is not able to lay out correctly. These
changes allow certain subtrees that use layout specs to coexist properly in a Yoga heirarchy.
The most significant change here is moving ASEdgeInsets into the #if YOGA gating. Although
this is technically an API change, this type was added with no known use cases and is
really only useful for flexbox layout specification. So, before usages of it are created,
it makes sense to constrain the Texture API surface until that time.
* [RTL] Bridge the UISemanticContentAttribute property for more convenient RTL support.
Although apps could handle this before by setting the view's property in didLoad, it's
useful to bridge this property for setting during off-main initialization.
This change also makes RTL fully functional / automatic for Yoga layout users.
* Remove RTL property addition and depend on PR #60 landing first.
* Fix warnings
* Add line to changelog
Although apps could handle this before by setting the view's property in didLoad, it's
useful to bridge this property for setting during off-main initialization.
This change also makes RTL fully functional / automatic for Yoga layout users.
* Add a thread-safe layoutIfNeeded implementation to ASDisplayNode
* Trigger a layout pass when a display node enters preload state
- This ensures that all the subnodes have the correct size to preload their content.
* ASCollectionNode to trigger its initial data load when it enters preload state
* Minor change in _ASCollectionViewCell
* Layout sublayouts before dispatch to main for subclass hooks
* Update comments
* Don't wait until updates are committed when the collection node enters display state
* Same deal for table node
* Explain the layout trigger in ASDisplayNode