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);
}