| /* |
| * Copyright 2014 Google Inc. All Rights Reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef COBALT_RENDER_TREE_NODE_VISITOR_H_ |
| #define COBALT_RENDER_TREE_NODE_VISITOR_H_ |
| |
| namespace cobalt { |
| namespace render_tree { |
| |
| class CompositionNode; |
| class FilterNode; |
| class ImageNode; |
| class MatrixTransformNode; |
| class PunchThroughVideoNode; |
| class RectNode; |
| class RectShadowNode; |
| class TextNode; |
| |
| namespace animations { |
| class AnimateNode; |
| } // namespace animations |
| |
| // Type-safe branching on a class hierarchy of render tree nodes, |
| // implemented after a classical GoF pattern (see |
| // http://en.wikipedia.org/wiki/Visitor_pattern#Java_example). |
| class NodeVisitor { |
| public: |
| virtual void Visit(animations::AnimateNode* animate) = 0; |
| virtual void Visit(CompositionNode* composition) = 0; |
| virtual void Visit(FilterNode* text) = 0; |
| virtual void Visit(ImageNode* image) = 0; |
| virtual void Visit(MatrixTransformNode* transform) = 0; |
| virtual void Visit(PunchThroughVideoNode* punch_through) = 0; |
| virtual void Visit(RectNode* rect) = 0; |
| virtual void Visit(RectShadowNode* rect) = 0; |
| virtual void Visit(TextNode* text) = 0; |
| |
| protected: |
| ~NodeVisitor() {} |
| }; |
| |
| } // namespace render_tree |
| } // namespace cobalt |
| |
| #endif // COBALT_RENDER_TREE_NODE_VISITOR_H_ |