| 909 | } |
| 910 | |
| 911 | void Node::visitInner() { |
| 912 | if (_flags.isOff(Node::Visible)) { |
| 913 | return; |
| 914 | } |
| 915 | |
| 916 | /* get world matrix */ |
| 917 | getWorld(); |
| 918 | |
| 919 | auto& rendererManager = SharedRendererManager; |
| 920 | if (_children && !_children->isEmpty() && _flags.isOn(Node::ChildrenVisible)) { |
| 921 | sortAllChildren(); |
| 922 | |
| 923 | auto visitChildren = [&]() { |
| 924 | /* visit and render child whose order is less than 0 */ |
| 925 | size_t index = 0; |
| 926 | auto& data = _children->data(); |
| 927 | for (index = 0; index < data.size(); index++) { |
| 928 | Node* node = data[index]->to<Node>(); |
| 929 | if (node->getOrder() >= 0) break; |
| 930 | node->visit(); |
| 931 | } |
| 932 | |
| 933 | /* render self */ |
| 934 | if (_flags.isOn(Node::SelfVisible)) { |
| 935 | if (rendererManager.isGrouping() && _renderOrder != 0) { |
| 936 | rendererManager.pushGroupItem(this); |
| 937 | } else { |
| 938 | render(); |
| 939 | } |
| 940 | } |
| 941 | |
| 942 | /* visit and render child whose order is greater equal than 0 */ |
| 943 | for (; index < data.size(); index++) { |
| 944 | Node* node = data[index]->to<Node>(); |
| 945 | node->visit(); |
| 946 | } |
| 947 | }; |
| 948 | |
| 949 | if (_flags.isOn(Node::RenderGrouped)) { |
| 950 | rendererManager.pushGroup(getNodeCount(), visitChildren); |
| 951 | } else |
| 952 | visitChildren(); |
| 953 | } else if (_flags.isOn(Node::SelfVisible)) { |
| 954 | if (rendererManager.isGrouping() && _renderOrder != 0) { |
| 955 | rendererManager.pushGroupItem(this); |
| 956 | } else { |
| 957 | render(); |
| 958 | } |
| 959 | } |
| 960 | } |
| 961 | |
| 962 | void Node::visit() { |
| 963 | if (_grabber) { |
no test coverage detected