Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/graphics/text_engine/text_engine.cc @ 5780

Last change on this file since 5780 was 5780, checked in by bensch, 18 years ago

orxonox/trunk: no more segfault in the Shell

File size: 4.0 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   ### File Specific:
12   main-programmer: Benjamin Grauer
13   co-programmer: ...
14
15   for some fonts and licenses visit: =http://www.dafont.com/en/font.php=
16
17   !! IMPORTANT !! When using ttf fonts clear the license issues prior to
18   adding them to orxonox. This is really important, because we do not
19   want to offend anyone.
20*/
21
22#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_GRAPHICS
23
24#include "text_engine.h"
25#include "text.h"
26#include "font.h"
27
28using namespace std;
29
30#include <stdlib.h>
31#include <stdio.h>
32#include <string.h>
33
34#include "graphics_engine.h"
35#include "resource_manager.h"
36#include "class_list.h"
37
38#include "debug.h"
39#include "list.h"
40
41///////////////////
42/// TEXT-ENGINE ///
43///////////////////
44/**
45 *  standard constructor
46*/
47TextEngine::TextEngine ()
48{
49   this->setClassID(CL_TEXT_ENGINE, "TextEngine");
50   this->setName("TextEngine");
51   this->enableFonts();
52}
53
54/**
55 *  the singleton reference to this class
56*/
57TextEngine* TextEngine::singletonRef = NULL;
58
59/**
60 *  standard deconstructor
61
62*/
63TextEngine::~TextEngine ()
64{
65  // first remove all the remaining Texts (if any).
66  std::list<BaseObject*>* textList = ClassList::getList(CL_TEXT);
67  if (textList != NULL)
68  {
69    while(textList->size() > 0)
70      delete dynamic_cast<Text*>(textList->front());
71  }
72  // delete all remaining fonts (There should not be Anything to do here)
73  std::list<BaseObject*>* fontList = ClassList::getList(CL_FONT);
74  if (fontList != NULL)
75  {
76    ///FIXME
77//    while (fontList->size() > 0)
78    {
79      Font* font = dynamic_cast<Font*>(fontList->back());
80      if (likely(font != Font::getDefaultFont()))
81        ResourceManager::getInstance()->unload(font, RP_GAME);
82    }
83  }
84  this->disableFonts();
85
86  TextEngine::singletonRef = NULL;
87}
88
89/**
90 *  function to enable TTF_Fonts
91*/
92void TextEngine::enableFonts()
93{
94  if (!TTF_WasInit())
95    {
96      if(TTF_Init()==-1)
97        PRINTF(1)("TTF_Init: %s\n", TTF_GetError());
98
99      TextEngine::checkVersion();
100    }
101  else
102    PRINTF(4)("Fonts already initialized\n");
103}
104
105/**
106 *  function to disable TTF_fonts
107*/
108void TextEngine::disableFonts()
109{
110  if (TTF_WasInit())
111    {
112      Font::removeDefaultFont();
113      TTF_Quit();
114    }
115  else
116    PRINTF(4)("Fonts were not initialized.\n");
117}
118
119/**
120 *  outputs some nice Debug information
121 *
122 * @todo there should also be something outputted about Font
123 */
124void TextEngine::debug() const
125{
126  list<BaseObject*>* textList = ClassList::getList(CL_TEXT);
127  if (textList != NULL)
128  {
129    PRINT(0)("+-------------------------------+\n");
130    PRINT(0)("+ TEXT ENGINE DEBUG INFORMATION +\n");
131    PRINT(0)("+-------------------------------+\n");
132    PRINT(0)("Reference: %p; Text Counts: %d\n", this, textList->size());
133
134    list<BaseObject*>::iterator text;
135    for ( text = textList->begin(); text != textList->end(); text++)
136      dynamic_cast<Text*>(*text)->debug();
137    PRINT(0)("+---------------------------TE--+\n");
138  }
139}
140
141
142/**
143 *  checks if the compiled version and the local version of SDL_ttf match.
144 * @returns true if match, false otherwise
145*/
146bool TextEngine::checkVersion()
147{
148  SDL_version compile_version;
149  SDL_version link_version;
150  TTF_VERSION(&compile_version);
151  link_version = *TTF_Linked_Version();
152
153  if (compile_version.major == link_version.major &&
154      compile_version.minor == link_version.minor &&
155      compile_version.patch == link_version.patch)
156    {
157      return true;
158    }
159  else
160    {
161      PRINTF(2)("compiled with SDL_ttf version: %d.%d.%d\n",
162                compile_version.major,
163                compile_version.minor,
164                compile_version.patch);
165
166      PRINTF(2)("running with SDL_ttf version: %d.%d.%d\n",
167                link_version.major,
168                link_version.minor,
169                link_version.patch);
170      return false;
171    }
172}
Note: See TracBrowser for help on using the repository browser.