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 }
1.4.7