392 Commits

Author SHA1 Message Date
Adlai Holler
f5460a44e0 [ASDisplayNode] Reduce locking in removeFromSupernode 2016-06-16 17:10:09 -07:00
Hannah Troisi
c857e809f4 Clean up header comments (for consistent Facebook licensing info) (#1741)
[Licensing] Clean up header comments (for consistent Facebook licensing info)
2016-06-11 23:31:39 -07:00
appleguy
c211c76c64 Merge pull request #1735 from levi/betterFlatten3
[ASLayout] Clean up flattening process of ASLayout
2016-06-11 23:15:16 -07:00
appleguy
a7128cd213 Merge pull request #1605 from lappp9/override-callback-for-display-range
[ASDisplayNode] Added callbacks for entering and exiting fetch data and display ranges
2016-06-11 22:21:20 -07:00
Levi McCallum
7e8d519a9a Introduce type property to replace layout id check 2016-06-10 12:43:46 -07:00
Levi McCallum
a3e8f556a3 Clean up flattening process in ASLayout 2016-06-10 12:43:46 -07:00
appleguy
6632b4ec5f Merge pull request #1722 from rcancro/layoutSpecTraitObject
[ASLayoutSpec] Remove cached ASTraitCollection
2016-06-08 22:29:47 -07:00
Michael Schneider
434102f988 Address comments from review
- Remove public NSMutableArray header for validators
- Add ASDISPLAYNODE_EXTERN_C_BEGIN/END
- Rename isRootLayout to isFinalLayoutable
2016-06-08 18:42:32 -07:00
Michael Schneider
9ff7223b77 Move validation code to ASLayoutValidation and add validation flag 2016-06-08 16:59:46 -07:00
Michael Schneider
197950f39b Add basic infrastructure for layout validation 2016-06-08 10:35:28 -07:00
ricky
3c34d51a19 [ASLayoutSpec] Remove cached ASTraitCollection 2016-06-07 10:50:42 -07:00
Levi McCallum
e5d7d29eb6 Fix boolean logic that prevents layout 2016-06-06 13:57:17 -07:00
Levi McCallum
20523821f9 Revert "Merge pull request #1673 from maicki/AddAutomaticMeasureBeforeLayout"
This reverts commit 2e384a32e15d34ea8f963dbc4e44aaa297ca019b, reversing
changes made to b8618d3151d9714d24ccfd935b92a99b774442f1.
2016-06-06 13:12:10 -07:00
Scott Goodson
58d7a18dd4 [Build] Tag __unused for variable only needed by an assertion. 2016-06-06 00:45:23 -07:00
Luke Parham
fc5467b110 fixed typo and added backwards compatibility for 'visibilityDidChange' 2016-06-06 02:02:23 -05:00
Luke Parham
e510120031 changed '-visibilityDidChange:' to '-visiblieStateDidChange:' to match the others 2016-06-06 00:56:21 -05:00
Luke Parham
d47059dffe updated load and display did change methods 2016-06-06 00:56:21 -05:00
Luke Parham
4b2aa1fc59 added comments to header and cleaned up interface state did change 2016-06-06 00:56:21 -05:00
Luke Parham
449a2cc517 added callbacks for entering and exiting fetch data and display ranges 2016-06-06 00:56:21 -05:00
Levi McCallum
3b6347c392 Update naming of dirty layout method 2016-06-05 09:33:27 -07:00
Levi McCallum
f809d4a1c9 Let ASLayout determine if a node should measure 2016-06-05 09:32:48 -07:00
Levi McCallum
19e949e02f [ASDisplayNode] Move constrainedSize to layout 2016-06-05 09:30:57 -07:00
Levi McCallum
c469ad273b [ASLayout] Cache constrained size range 2016-06-05 09:22:46 -07:00
appleguy
8801b61707 Merge pull request #1438 from Adlai-Holler/AvoidMutatingSublayersAgain
[ASDisplayNode] Copy Sublayers in recursivelyTriggerDisplayForLayer to Avoid NSFastEnumerationMutation Exception
2016-06-04 21:36:05 -07:00
Michael Schneider
4f493c4ad3 Fix placeholder image is not appearing if size of node changed after initial placement 2016-06-04 15:04:52 -07:00
appleguy
2e384a32e1 Merge pull request #1673 from maicki/AddAutomaticMeasureBeforeLayout
[ASDisplayNode] Add automatic measure before layout
2016-06-04 00:36:18 -07:00
appleguy
e5eed560e1 Merge pull request #1693 from rcancro/traitUpdate
[ASTraitCollection] Bug fixing/LayoutSpec propagation
2016-06-03 22:01:13 -07:00
Hannah Troisi
c9ac554889 [ASDisplayNode] Add assertion to +initialize warning developers who override and do not call super.
If a developer makes this error, it would prevent calls to key lifecycle methods, such as -layoutSpecThatFits:.
Although the superclasses of ASDisplayNode do not implement +initialize, a super call is added here for consistency.
2016-06-03 20:18:12 -07:00
Michael Schneider
691749d098 Address comments 2016-06-03 14:18:49 -07:00
Michael Schneider
b4d490848f Add measure: call for nodes without host on themselves if developer does not
Normally measure will be called before layout occurs. If this doesn't happen, nothing is going to call it at all.  An experimenting developer probably added a node to the hierarchy directly. We simply call measureWithSizeRange: using a size range equal to whatever bounds were provided to that element. This make initial experimentation using layoutSpecs much easier. Furthermore added logging if no size is given for the node before layout occurs.
2016-06-03 13:24:47 -07:00
ricky
01dbc86778 First pass of comments
* make variable naming reflect ASEnvironmentTraitCollection vs ASTraitCollection
* move trait propagation to cell allocation instead of via a nested block
* move trait propagation when setting a displaynode's supernode instead of when adding a subnode
* fixed misspelling of "colection"
2016-06-03 09:59:24 -07:00
ricky
c42b0dd33a Remove explicit passing of trait collection to setChild/Children 2016-05-25 10:49:42 -07:00
Levi McCallum
95f1ab4902 [ASDisplayNode] Rename ASDisplayNodeTransitionContext to ASLayoutTransition (#1680)
* [ASDisplayNode] Rename ASDisplayNodeTransitionContext to ASLayoutTransition

* Rename internal ivar to fit new naming

* Fix tabbing
2016-05-25 10:10:27 +07:00
ricky
59a26ee111 [ASTraitCollection] Bug fixing/LayoutSpec propagation
* Fixed bug in `ASEnvironmentMergeObjectAndState`
* New ASLayoutSpec methods for `setChild`/`setChildren`/`setChild:forIdentifier:` have been added to take in a trait collection.
* Added `setChild:`-like methods for ASLayoutSpecs take a traitCollection
* Fixed instances where nodes in a data controller were not getting their trait collections
* propagate traitCollection in ASDisplayNode on insertSubnode or addSubnode
2016-05-23 16:37:40 -07:00
Garrett Moon
94bb3b79cb May as well use the existing visibility function. (#1684) 2016-05-22 14:12:29 +08:00
rcancro
8e444092be [ASEnvironment] Remove unneeded locking on environmentState 2016-05-12 13:13:30 -07:00
rcancro
4b54144f55 Levi's comments 2016-05-11 10:21:11 -07:00
rcancro
9d622c7eac changed DisplayTraits to TraitCollection 2016-05-10 14:45:03 -07:00
rcancro
f828d079fa added nsobject based ASDisplayTraits class 2016-05-10 14:44:43 -07:00
rcancro
b4a6f87ca6 addressed some comments 2016-05-10 14:44:32 -07:00
rcancro
8bb4eba080 Initial attempt at implementing Display Traits
Initial attempt to get display traits working with ASEnvironment.

To get proper ASDisplayTraits support, you must use an ASViewController. The ASViewController implements UITraitCollection-related methods (`traitCollectionDidChange:`, `willTransitionToTraitCollection:withTransitionCoordinator:`, viewWillTransitionToSize:withTransitionCoordinator`) to update the internal ASDisplayTraits and propagate them to subnodes.

ASTableNode and ASCollectionNode don't actually have their cells as subnodes, so a little bit of trickery is involved (on `setEnvironment:` the table/collection node gets its data controllers completedNodes and propagates the new traits. see `ASDisplayTraitsCollectionTableSetEnvironmentState`). The data controller also passes the current display traits when creating new cells.

ASViewController also supports the ability to return a custom set of display traits. So if you have a modal dialog that should always be told it is in a compact size class, you can set the override block before displaying the VC.

A new example, called Display Traits, has been added. It shows how display traits can be used in a ASViewController with a normal ASDisplayNode as its root, as well as in ASViewControllers hosting table nodes and collection nodes. There is also an example of overriding the default display traits of a VC.

Please provide feedback!
2016-05-10 14:44:22 -07:00
Michael Schneider
d1054d6ed9 Move from ASSentinel to a atomic int 2016-05-05 20:25:07 -07:00
Michael Schneider
dc6d2e7660 Improve Transition ID handling 2016-05-05 20:25:07 -07:00
Garrett Moon
025dd55312 Dang, message local var, not ivar 2016-05-03 15:59:21 -07:00
Garrett Moon
938ecd9b6f Fix deadlock when laying out on multiple threads
Summary:
We observed a deadlock which occurred when two threads were laying out the same set of nodes.

On one thread, layout would occur on a leaf node. It would lock and as part of this layout
process, ASDK walks up the node tree and calls __setNeedsLayout on its supernode until it
reaches the supernode with no supernode. When the supernode gets its call to __setNeedsLayout
it also locks. So leaf node locks and then awaits supernode lock.

On another thread, we're doing a layout pass on the supernode in the above thread. This locks
the supernode and attempts to lock the leaf node. This deadlocks (remember the above thread
is holding onto the leaf lock and awaiting the supernode lock. This thread is holding onto
the supernode lock and awaiting the leaf lock).

This is all exacerbated by the use of recursive locks.
2016-05-03 15:56:38 -07:00
Wendy
0b55df9649 Add the ability for ASNetworkImageNodes to keep track of their progressive image quality 2016-04-26 18:33:59 -07:00
Michael Schneider
79e5337948 Fix setter override for setLayoutSpecBlock: 2016-04-22 11:22:01 -07:00
Michael Schneider
fde8f1af0e Change layoutSpecBlock against NULL 2016-04-22 11:21:42 -07:00
Michael Schneider
5afce83241 Adjust indention of comment 2016-04-21 07:07:17 -07:00
Michael Schneider
87a37a283e Add a block API to provide an ASLayoutSpec without having to subclass ASDisplayNode 2016-04-20 19:16:54 -07:00