* Make display node, layout spec, and style conform to NSLocking so that users/subclasses can access their locks
* Update the changelog
* Align slashes
* Put it back, when we're in ASDisplayNode
* Go a little further
* Put back the changes I didn't mean to commit
* Kick the CI
* Fix yoga build
* Put back non-locking change
* Address comments from Scott
* Fix ASPrimitiveTraitCollection initialization on iOS 9.
Add nil-value checks for preferredContentSizeCategory.
* * Mark -[ASTraitCollection init] as deprecated.
* Mark [ASViewController overrideDisplayTraitsWithWindowSize] as deprecated.
Code review changes:
* Remove unneeded nonnull annotations
* Add null check in ASTraitCollection constructor implementation
* Codestyle
* Add some documentation about ASPrimitiveTraitCollection vs ASTraitCollection usage
* Rename safeContentSizeCategory to AS_safeContentSizeCategory.
Remove safePrimitiveContentSizeCategory in favour of AS_safeContentSizeCategory.
* [Contexts] Use mmap directly for possible perf gain and to tag the memory as CGImage
* Wrap the mmap in an object
* Go straight to dataprovider
* Tweak it
* Remove wrong comment
* Finish that comment
* Address warnings
* - [ASWrapperCellNode] Introduce a new class allowing more control of UIKit passthrough cells.
A few minor fixes to Collections behavior as well, including a new isSynchronized
API. The difference from processingUpdates is that after Synchronized, all animations
have also completed (or runloop turn if animations disabled, so .collectionViewLayout
can be relied on being fully in sync).
More upstreaming to come after this can land...
* Fix -[ASDataController clearData] to take no action before initial data loading.
* Empty commit to kick CI
* Spacing change to kick CI (since an empty commit doesn't work...)
* Tweak ASDataController changes to handle an edge case in _editingTransactionQueueCount management.
* Avoid excess cyclic calls to onDidFinishProcessingUpdates: by avoiding ASMainSerialQueue.
* Reverting my initial change as it wasn't the right approach, following the real fix before this.
* Fix TextNode2 not respecting background color
* ASTextNode2: Use locks and copies right
* Increment changelog
* Make the Dangerfile accept any license header with Pinterest in it
* [tvOS] Fixes errors when building against tvOS SDK
* Update CHANGELOG.md
* [tvOS] Fixes implicit conversion between UIViewAnimationCurve +
UIViewAnimationOptions
* Enable tvOS deployment target in Texture.podspec (for CI)
* [ASMultiplexImageNode] Fixes typo
* [tvOS] Fixes warnings related to @available guards in Xcode 9
[ASMultiplexImageNode] Enables support for Photos framework on tvOS 10+
[ASMultiplexImageNode] Fixes comment depth
[ASAvailability] Adjust logic in AS_AVAILABLE_IOS_TVOS to account for
both versions
Adjusts API_AVAILABLE to minimum deployment target
* [ASAvailability] Update AS_AVAILABLE_XXX fallbacks to function more like
the built-in solution (more accurately target OS by checking target)
Change AS_AVAILABLE_IOS -> AS_AVAILABLE_IOS_TVOS in places that shoud
allow for both
[ASAvailability] Simplify AS_AVAILABLE_IOS_TVOS
* [ASControlNode] Adds missing 'super' call in -[ASControlNode didLoad]
when targeting tvOS
* Fix API_AVAILABLE iOS requirement
* [ASDisplayNode] Fixes last of the linker warnings related to category
overrides. Removes methods already implemented in
ASDisplayNode+UIViewBridge category.
[ASControlNode] Moves tvOS category declaration to ASControlNode header
[ASImageNode] Moves tvOS category declaration to ASImageNode header
[ASControlNode+Private] Adds private category for ASControlNode to
access private selectors
* [NSParagraphStyle+ASText] Fixes typo related to testing
* [ASControlNode] Re-add helpful comment
* [ASTextKitCoreTextAdditions] Adds mappings for kCTParagraphStyleSpecifierMinimumLineSpacing, kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineSpacingAdjustment when mapping CTParagraphStyle onto NSParagraphStyle
[ASTextNode] Uses CoreText-cleansed attributed string when assigning ascender/descender to avoid crash when a CTParagraphStyle is passed as an attribute
* [AsyncDisplayKit] Update project file to include new/deleted files
* [ASControlNode+tvOS] Add missing Foundation import (whoops!)
[ASImageNode+tvOS] Add missing Foundation import (whoops!)
* Update podspec to only link AssetsLibrary framework on iOS
* [ASTextKitCoreTextAdditions] If kCTParagraphStyleAttributeName key-value
evaluates to an NSParagraphStyle, pass through to cleansed attributes. This
fixes a bug that would occur if a CTParagraphStyle was passed as an
attribute _alone_ (would not be caught by unsupported attributes
check)
* [ASMultiplexImageNode] Bump availability check to support < Xcode 9
* [ASTraitCollection] Fixes typo that was causing build to fail
* Clean up formatting to adhere to character/line limit + braces
* - [ASDisplayNode] Consolidate main thread initialization and allow apps to invoke it manually instead of +load.
Additionally this has a few minor fixes for Yoga support, and adds some basic
but universally valuable callbacks like -nodeDidLoad to ASNodeController.
* Small fix for handling _layoutVersion.
* Remove poking the scale accessor
* fix SIMULATE_WEB_RESPONSE not imported #449
* Coalesce interface state updates to ASCATransactionQueue before CATransaction commit.
This will avoid duplicate interface state delegate calls caused by view repeatly added/removed to/from hierarchy during controller animation transition.
* fix tests for new run loop queue
* Support for disabling ASCATransactionQueue
* Fix didExitHierarchy to use ASCATransactionQueue.
* merge range managed and none range managed for didExitHierarchy
* Revert "merge range managed and none range managed for didExitHierarchy"
This reverts commit f807efaa65ed5dbdb6622d06da542e01a53715fa.
* merge range managed and none range managed for didExitHierarchy
* remove metadata
* abstract queue to impl class methods
* Add tests
* Fix test fail because of shared object.
* guard _pendingInterfaceState access with lock
* name refactor
* Refactor from comments https://github.com/TextureGroup/Texture/pull/788/\#pullrequestreview-94849919
* Apply InterfaceState immediately after ASCATranactionQueue is processed and before next runloop started.
* refactor
* no op to start CI build
* remove unused var and kick off tests
* change lisence
* remove code for weak ref
* add change log and adjust license
* [ASDisplayNode layout] Fix an issue that causes a node's pending layout to not be applied
- Since the implementation of layout version (#428), if a node's pending and calculated layouts have the same current version as well as the same constrained size, the 2 layouts are considered equal and can be used interchangeably. A layout version check between the 2 layouts was added in #695. This PR adds a missing constrained size check.
- If the pending layout has the same version but a different constrained size compare to the calculated layout's, we can assume that the pending layout is newer and should be preferred over the calculated one. That is because layout operations always register their new layout as pending, which then (immediately or eventually) get applied to the node as calculated layout.
- Failing to do so will introduce race conditions in which the property was updated on a background thread but main thread has not executed the block that updates the property of the node's layer. During that window, the layer's property is out-of-date and can't be used.
- After this change, ASDisplayNode's cornerRadius is the only source of truth and users must always use it instead of CALayer's.
This reverts commit 2e9858837251cf16c9ffd19ba2eaeaa1012c8977 (#751).
The reason we can't wait for the coming CA's layout pass is that cell node visibility events occur before the pass, at which time the cell's subnodes don't have correct frames for impression tracking.
The root cause of this problem is that, right now, cell node visible states are set by ASRangeController well before the layout pass of the hosting collection/table view. That means we're "jumping the gun". The more I think about this, the more I agree with @Adlai-Holler that we need to treat visible state differently. That is, a node should only be visible (and thus get visibility events) after it's fully loaded, it's view/layer attached to the hierarchy and laid out by a CA transaction. In other words, at the end of the CA layout pass. Such change needs time and effort to be thoroughly reviewed and tested. Until then, let's roll with this fix.
* Fix capturing self in the block while loading image in ASNetworkImageNode
* Restore re-strongify while switching on the main thread
* Update CHANGELOG.md
* Add support for piping arbitrary user info from ASImageDownloader to the ASNetworkImageNodeDelegate
* s/source/sourceType
* Fix stuff and take Michael's advice
* Faster collection operations
* Fix a few things
* Put the stupid semicolon
* Address warning
* Cut down retain/releases during collection operations
* Update CHANGELOG.md
- After #706, a layout pass is forced on an ASM-enabled node that enters preload state to make sure that its subnodes can start preloading as well. However, when the node is visible, a (coalesced, thus more efficient) layout pass will be triggered by CA soon anyways, so rely on it instead.
* [ASTraitCollection] Add missing properties to ASTraitCollection
* ASTraitCollection now completely reflects UITraitCollection
* Add ASContentSizeCategory enum that corresponds to
UIContentSizeCategory and can be used inside a struct.
* * Remove enum ASContentSizeCategory.
* Use __unsafe_unretained UIContentSizeCategory instead of the enum.
* Added ASPrimitiveTraitCollection lifetime test
* Changes requested at code review:
* Restore one of the ASTraitCollection constructors with a deprecation notice.
* Clean up API by the separation of tvOS-specific interfaces.
* Use [NSString -isEqualToString:] for ASPrimitiveContentSizeCategory equality tests for better readability.
* Encapsulate fallback logic for UIContentSizeCategoryUnspecified.
* Fix failing test
* Add "ASGraphicsContext" to skip copying our rendered images
* Zero the buffer before making a context
* Update license header
* Update dangerfile
* Make it a runtime flag
* Restore GState for good measure
* Free buffer if end without image
* Enable the experiment, and cut out the middle-man
* Fix typo
* Add support for interactive moves
* Enable drag & drop in collection view example
* Update changelog
* Change the gating logic to match UIKit
* Add a warning when we prevent interactive movement due to async layout
* Reimplement ASRectTable using unordered_map to avoid obscure NSMapTable exception.
The new class is called ASRectMap, which patterns alongside ASIntegerMap in both name and implementation.
After some pretty detailed investigation, including study of open-source reimplementations
of Foundation, the best lead I've found on the NSMapTable exception is that
some NSPointerFunction types are not fully supported. Strangely, the ones being used
do seem to work fine almost all of the time.
The main concern is the Struct memory type, which is not officially re-declared in
NSMapTable, and as such the documentation claims that there may exist some
combinations of NSPointerFunction that are not supported.
Because the exception is occurring frequently enough to be a concern (in the hundreds
to low thousands, though only 50 a day) - I decided to replace NSMapTable entirely
in order to ensure full correctness.
"*** -[NSMapTable initWithKeyPointerFunctions:valuePointerFunctions:capacity:] Requested configuration not supported."
* Fix Xcode project