Canvas.cpp
Go to the documentation of this file.00001 /**<!--------------------------------------------------------------------> 00002 @class Canvas.cpp 00003 @author Travis Fischer (fisch0920@gmail.com) 00004 @author Matthew Jacobs (jacobs.mh@gmail.com) 00005 @date Fall 2008 00006 00007 @brief 00008 Provides a generic Canvas interface, shared between OpenGL canvases 00009 and pixel-based canvases 00010 <!-------------------------------------------------------------------->**/ 00011 00012 #include "Canvas.h" 00013 #include "Gui.h" 00014 00015 #include <cameras/Camera.h> 00016 #include <core/Scene.h> 00017 00018 Canvas::Canvas(Gui *gui, unsigned width, unsigned height) 00019 : m_gui(gui), m_renderer(NULL), m_width(width), m_height(height), 00020 m_initted(false) 00021 { 00022 _init(); 00023 } 00024 00025 Canvas::~Canvas() { 00026 safeDelete(m_renderer); 00027 } 00028 00029 void Canvas::_init() { 00030 //ASSERT(m_gui != NULL); 00031 } 00032 00033 void Canvas::init() { 00034 if (!m_initted) { 00035 m_initted = true; 00036 00037 if (m_renderer) 00038 m_renderer->init(); 00039 00040 ListenerListIter iter; 00041 00042 for(iter = m_interactionListeners.begin(); iter != m_interactionListeners.end(); iter++) { 00043 (*iter)->init(); 00044 } 00045 } 00046 } 00047 00048 void Canvas::setRenderer(Renderer *renderer) { 00049 m_renderer = renderer; 00050 } 00051 00052 void Canvas::registerInteractionListener(InteractionListener *listener) { 00053 ListenerListIter iter; 00054 ASSERT(listener); 00055 00056 for(iter = m_interactionListeners.begin(); iter != m_interactionListeners.end(); iter++) { 00057 if (*iter == listener) 00058 return; 00059 } 00060 00061 // listener is not already registered 00062 m_interactionListeners.push_back(listener); 00063 } 00064 00065 void Canvas::unregisterInteractionListener(InteractionListener *listener) { 00066 ListenerListIter iter; 00067 ASSERT(listener); 00068 00069 for(iter = m_interactionListeners.begin(); iter != m_interactionListeners.end(); iter++) { 00070 if (*iter == listener) 00071 break; 00072 } 00073 00074 if (iter != m_interactionListeners.end()) { 00075 ASSERT(*iter == listener); 00076 m_interactionListeners.erase(iter); 00077 00078 safeDelete(listener); 00079 } 00080 } 00081 00082 void Canvas::mousePressed(QMouseEvent *event) { 00083 /* Notify all listeners of the event */ 00084 InteractionInfo info(event); 00085 ListenerListIter iter; 00086 00087 for(iter = m_interactionListeners.begin(); iter != m_interactionListeners.end(); iter++) { 00088 if (info.propogateEvent) 00089 (*iter)->mousePressEvent(info); 00090 } 00091 } 00092 00093 void Canvas::mouseReleased(QMouseEvent *event) { 00094 /* Notify all listeners of the event */ 00095 InteractionInfo info(event); 00096 ListenerListIter iter; 00097 00098 for(iter = m_interactionListeners.begin(); iter != m_interactionListeners.end(); iter++) { 00099 if (info.propogateEvent) 00100 (*iter)->mouseReleaseEvent(info); 00101 } 00102 } 00103 00104 void Canvas::mouseMoved(QMouseEvent *event) { 00105 /* Notify all listeners of the event */ 00106 InteractionInfo info(event); 00107 ListenerListIter iter; 00108 00109 for(iter = m_interactionListeners.begin(); iter != m_interactionListeners.end(); iter++) { 00110 if (info.propogateEvent) 00111 (*iter)->mouseMoveEvent(info); 00112 } 00113 } 00114 00115 void Canvas::keyPressed(QKeyEvent *event) { 00116 /* Notify all listeners of the event */ 00117 InteractionInfo info(event); 00118 ListenerListIter iter; 00119 00120 for(iter = m_interactionListeners.begin(); iter != m_interactionListeners.end(); iter++) { 00121 if (info.propogateEvent) 00122 (*iter)->keyPressEvent(info); 00123 } 00124 } 00125 00126 void Canvas::keyReleased(QKeyEvent *event) { 00127 /* Notify all listeners of the event */ 00128 InteractionInfo info(event); 00129 ListenerListIter iter; 00130 00131 for(iter = m_interactionListeners.begin(); iter != m_interactionListeners.end(); iter++) { 00132 if (info.propogateEvent) 00133 (*iter)->keyReleaseEvent(info); 00134 } 00135 } 00136
Generated on 28 Feb 2009 for Milton by
1.5.6