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 doxygen 1.5.6