]> git.mxchange.org Git - flightgear.git/blob - src/Canvas/elements/group.cxx
Expose character-aspect-ratio and do some clean up
[flightgear.git] / src / Canvas / elements / group.cxx
1 // A group of 2D canvas elements
2 //
3 // Copyright (C) 2012  Thomas Geymayer <tomgey@gmail.com>
4 //
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License as
7 // published by the Free Software Foundation; either version 2 of the
8 // License, or (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful, but
11 // WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 // General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18
19 #include "group.hxx"
20 #include "text.hxx"
21
22 namespace canvas
23 {
24
25   //----------------------------------------------------------------------------
26   Group::Group(SGPropertyNode_ptr node):
27     Element(node)
28   {
29
30   }
31
32   //----------------------------------------------------------------------------
33   Group::~Group()
34   {
35
36   }
37
38   //----------------------------------------------------------------------------
39   void Group::update(double dt)
40   {
41     for( size_t i = 0; i < _children.size(); ++i )
42     {
43       if( _children[i] )
44         _children[i]->update(dt);
45     }
46
47     Element::update(dt);
48   }
49
50   //----------------------------------------------------------------------------
51   void Group::childAdded(SGPropertyNode* child)
52   {
53     boost::shared_ptr<Element> element;
54
55     if( child->getNameString() == "text" )
56       element.reset( new Text(child) );
57     else if( child->getNameString() == "group" )
58       element.reset( new Group(child) );
59     else
60       SG_LOG
61       (
62         SG_GL,
63         SG_WARN,
64         "canvas::Group unknown child: " << child->getDisplayName()
65       );
66
67     if( !element )
68       return;
69
70     // Add to osg scene graph...
71     _transform->addChild( element->getMatrixTransform() );
72
73     // ...and build up canvas hierarchy
74     size_t index = child->getIndex();
75
76     if( index >= _children.size() )
77       _children.resize(index + 1);
78
79     _children[index] = element;
80   }
81
82   //----------------------------------------------------------------------------
83   void Group::childRemoved(SGPropertyNode* child)
84   {
85     if(    child->getNameString() == "text"
86         || child->getNameString() == "group" )
87     {
88       size_t index = child->getIndex();
89
90       if( index >= _children.size() )
91         SG_LOG
92         (
93           SG_GL,
94           SG_WARN,
95           "can't removed unknown child " << child->getDisplayName()
96         );
97       else
98       {
99         boost::shared_ptr<Element>& element = _children[index];
100         if( element )
101           _transform->removeChild(element->getMatrixTransform());
102         element.reset();
103       }
104     }
105   }
106
107 } // namespace canvas