static void measureNodes(enum LayoutType type, struct Node* node) { while (node) { measureNode(type, &node->properties, &node->element); if (node->firstChild) { measureNodes(node->element.layoutType, node->firstChild); } node = node->next; } }
static void measureNodes(enum LayoutType type, struct Node* node) { while(node) { // TODO(josh): Clear this flag during layout pass. node->flags &= ~FLAG_REQ_LAYOUT; if ((node->flags & FLAG_INVALID) == FLAG_INVALID) { node->flags &= ~FLAG_INVALID; measureNode(type, &node->properties, &node->element); } if (node->firstChild) { measureNodes(node->element._layoutType, node->firstChild); } node = node->next; } }
void nodeLayout(struct Node* root) { if (!root->firstChild) { return; } // Pass 1 - Measure any invalidated child nodes. measureNodes(root->element.layoutType, root->firstChild); // Pass 2 - Layout out children. layoutNode(&root->element, root->element.measuredWidth, root->element.measuredHeight, false, false); // Pass 3 - Invoke post layout callbacks. invokeLayoutCallback(root); }
void nodeLayout(struct Node* root) { // TODO(josh): remove once layout clears this flag. root->flags &= ~FLAG_REQ_LAYOUT; if (!root->firstChild) { return; } // Pass 1 - Measure any invalidated child nodes. measureNodes(root->element._layoutType, root->firstChild); // Pass 2 - Layout out children. layoutNode(&root->element, root->element._measuredWidth, root->element._measuredHeight, false, false); // Pass 3 - Invoke post layout callbacks. invokeLayoutCallback(root); }