src/Menu/CCGui.cpp

Go to the documentation of this file.
00001 /* Crown and Cutlass
00002  * GUI Helper Monkies...I mean Functions
00003  */
00004 
00005 #include <guichan.hpp>
00006 #include <guichan/sdl.hpp>
00007 #include <guichan/opengl.hpp>
00008 #include "SDL.h"
00009 #include "../GLee.h"
00010 #include "../Log.h"
00011 #include "CCButton.h"
00012 #include "../Callback.h"
00013 #include "CCFont.h"
00014 #include "CCGui.h"
00015 
00016 using namespace std;
00017 
00018 CCGui *CCGui::s_CCGui = NULL;
00019 
00020 CCGui::CCGui(int width, int height) {
00021   m_imageLoader = new gcn::OpenGLImageLoader();
00022   m_hostImageLoader = new gcn::SDLImageLoader();
00023 
00024   // The OpenGL imageloader cant load images by itself, it needs
00025   // a host imageloader. So we give it an SDL imageloader.
00026   m_imageLoader->setHostImageLoader(m_hostImageLoader);
00027 
00028   // The ImageLoader in use is static and must be set to be
00029   // able to load images
00030   gcn::Image::setImageLoader(m_imageLoader);
00031   m_graphics = new gcn::OpenGLGraphics();
00032   // We need to tell OpenGL graphics how big the screen is.
00033   m_graphics->setTargetPlane(width, height);
00034 
00035   m_input = new gcn::SDLInput();
00036 
00037   m_globalFont.reset(new CCFont("systemWhite.png"));
00038 
00039   m_gui = new gcn::Gui();
00040   m_gui->setTabbingEnabled(false);
00041   m_gui->setInput(m_input);
00042   m_gui->setGraphics(m_graphics);
00043 
00044   gcn::Widget::setGlobalFont(m_globalFont->GetImageFont());
00045 
00046   m_width = width;
00047   m_height = height;
00048 }
00049 
00050 CCGui::~CCGui() {
00051   gcn::Widget::setGlobalFont(NULL);
00052   // This seems to have to happen before we delete m_gui...
00053   m_globalFont.reset(NULL);
00054   delete m_gui;
00055   delete m_hostImageLoader;
00056   delete m_imageLoader;
00057   delete m_graphics;
00058   delete m_input;
00059 
00060   Log::s_log->Message("CCGui destroyed.");
00061 }
00062 
00063 void CCGui::UpdateGui() {
00064   if (m_gui->getTop() != NULL) {
00065     m_gui->logic();
00066     m_gui->draw();
00067   }
00068 }
00069 
00070 
00071 void CCGui::SetTopContainer(gcn::Widget* top) {
00072   m_gui->setTop(top);
00073 }
00074 
00075 gcn::Widget* CCGui::GetTopContainer() {
00076   return m_gui->getTop();
00077 }
00078 
00079 bool CCGui::IsTopContainer(gcn::Widget* top) {
00080   return m_gui->getTop() == top;
00081 }
00082 
00083 void CCGui::CheckInputGlobal() {
00084   SDL_Event event;
00085   /*
00086    * Poll SDL events
00087    */
00088   while(SDL_PollEvent(&event))
00089   {
00090     m_input->pushInput(event);
00091     //globalInput->pushInput(event);
00092   }
00093 }
00094 
00095 bool CCGui::CreateGui(int width, int height) {
00096   if (s_CCGui != NULL) {
00097     Log::s_log->Message("Warning: Multiple calls to createGui()");
00098     return false;
00099   }
00100 
00101   try {
00102     s_CCGui = new CCGui(width, height);
00103   } catch (...) {
00104     return false;
00105   }
00106 
00107   return true;
00108 }
00109 
00110 bool CCGui::DestroyGui() {
00111   if (s_CCGui == NULL) {
00112     Log::s_log->Message("Warning: Call to destroyGui() with NULL gui pointer");
00113     return false;
00114   }
00115 
00116   delete s_CCGui;
00117   s_CCGui = NULL;
00118   return true;
00119 }

Generated on Mon Jan 8 22:34:12 2007 for CrownandCutlass by  doxygen 1.4.7