~ubuntu-branches/ubuntu/edgy/pouetchess/edgy-updates

« back to all changes in this revision

Viewing changes to src/sxmlgui/GUIFrame.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Lionel Le Folgoc (mr_pouit)
  • Date: 2006-07-15 15:45:57 UTC
  • Revision ID: james.westby@ubuntu.com-20060715154557-3paxq02hx4od0wm4
Tags: upstream-0.2.0
ImportĀ upstreamĀ versionĀ 0.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "EasyGL.h"
 
2
 
 
3
GUIFrame::GUIFrame() : GUIPanel("GUI MAIN PANEL")
 
4
{
 
5
  listener = NULL;
 
6
  update   = true;
 
7
}
 
8
 
 
9
bool GUIFrame::loadXMLSettings(const TiXmlElement *element) 
 
10
{
 
11
  if(!XMLArbiter::inspectElementInfo(element, "Panel"))
 
12
    return Logger::writeErrorLog("Need a Panel node in the xml file");
 
13
 
 
14
  bool defaultFont = true;
 
15
 
 
16
  for(const TiXmlElement *child = element->FirstChildElement(); 
 
17
      child;
 
18
          child = child->NextSiblingElement() )
 
19
  {
 
20
    std::string elementName  = child->Value();
 
21
 
 
22
    if(!elementName.size())
 
23
      continue;
 
24
    
 
25
    if(elementName == "Font")
 
26
    {
 
27
      int fontIndex = GUIFontManager::addFont(child);
 
28
      if(defaultFont && fontIndex >= 0)
 
29
      {
 
30
        GUIFontManager::setDefaultFont(fontIndex);
 
31
        defaultFont = false;
 
32
      }
 
33
      continue;
 
34
    }
 
35
 
 
36
    if(elementName == "Texture")
 
37
    {
 
38
      if(elementsTexture.loadXMLSettings(child))
 
39
      {
 
40
        GUITexCoordDescriptor::setTextureHeight(elementsTexture.getHeight());
 
41
        GUITexCoordDescriptor::setTextureWidth(elementsTexture.getWidth());
 
42
      }
 
43
      continue;
 
44
    }
 
45
 
 
46
    if(elementName == "TexCoordsDesc")
 
47
    {
 
48
      GUITexCoordDescriptor descriptor;
 
49
      descriptor.loadXMLSettings(child);
 
50
      addOrReplaceTexCoordsInfo(descriptor);
 
51
      continue;
 
52
    }
 
53
  }
 
54
  return   GUIPanel::loadXMLSettings(element);
 
55
}
 
56
 
 
57
void  GUIFrame::render(float tick)
 
58
{
 
59
  if(!visible)
 
60
    return;
 
61
 
 
62
  size_t t = 0;
 
63
 
 
64
  while(updateCount)
 
65
  {
 
66
    for(t = 0; t < elements.size(); t++)
 
67
      elements[t]->forceUpdate(true);
 
68
    updateCount--;
 
69
  }
 
70
 
 
71
  for(t = 0; t < elements.size(); t++)
 
72
    elements[t]->render(tick);
 
73
}
 
74
 
 
75
void GUIFrame::addOrReplaceTexCoordsInfo(GUITexCoordDescriptor &info)
 
76
{
 
77
  for(size_t t = 0; t < texCoords.size(); t++)
 
78
    if(texCoords[t].getType() == info.getType())
 
79
    {
 
80
      texCoords[t].setTexCoords(info.getTexCoords());
 
81
      return;
 
82
    }
 
83
  texCoords.push_back(info);
 
84
}
 
85
 
 
86
GUITexCoordDescriptor *GUIFrame::getTexCoordsInfo(int type)
 
87
{
 
88
  for(size_t t = 0; t < texCoords.size(); t++)
 
89
    if(texCoords[t].getType() == type)
 
90
      return &texCoords[t];
 
91
  return NULL;
 
92
}
 
93
 
 
94
void  GUIFrame::setGUIEventListener(GUIEventListener *listener_)
 
95
{
 
96
  listener = listener_;
 
97
}
 
98
 
 
99
GUIEventListener *GUIFrame::getEventsListener()
 
100
{
 
101
  return listener;
 
102
}
 
103
 
 
104
void  GUIFrame::setElementsTexture(const char* texturePath)
 
105
{
 
106
  elementsTexture.load2D(texturePath);
 
107
}
 
108
 
 
109
void  GUIFrame::setElementsTexture(const Texture &texture)
 
110
{
 
111
  elementsTexture = texture;
 
112
}
 
113
 
 
114
Texture *GUIFrame::getElementsTexture()
 
115
{
 
116
  return !elementsTexture.getID() ? NULL : &elementsTexture;
 
117
}
 
118
 
 
119
void  GUIFrame::enableGUITexture()
 
120
{
 
121
  if(elementsTexture.getID())
 
122
    elementsTexture.activate();
 
123
}
 
124
 
 
125
void  GUIFrame::disableGUITexture()
 
126
{
 
127
  elementsTexture.deactivate();
 
128
}
 
129
 
 
130
void GUIFrame::forceUpdate(bool update)
 
131
{
 
132
  updateCount = update ? getTreeHeight() + 1 : 0;
 
133
}
 
134
 
 
135
void GUIFrame::clear()
 
136
{
 
137
  elementsTexture.destroy();
 
138
  texCoords.clear();
 
139
  GUIPanel::clear();
 
140
}
 
141
 
 
142
const Tuple4i &GUIFrame::getWindowBounds()
 
143
{
 
144
  windowBounds.set(0, 0, int(dimensions.x), int(dimensions.y));
 
145
  return windowBounds;
 
146
}
 
147
 
 
148
GUIFrame::~GUIFrame()
 
149
{
 
150
  clear();
 
151
}
 
152