Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 3 4 #ifndef toolx_X11_simple_dispatcher 5 #define toolx_X11_simple_dispatcher 6 7 #include "base_session" 8 9 #include <tools/saui> 10 11 namespace toolx { 12 namespace X11 { 13 14 class simple_dispatcher : public dispatcher { 15 typedef dispatcher parent; 16 public: 17 virtual void win_render() = 0; 18 virtual void set_size(unsigned int a_width,unsigned int a_height) = 0; 19 public: 20 virtual bool dispatch(XEvent& a_event) { 21 if(!m_win) return false; 22 if(a_event.xany.window!=m_win) return false; 23 if( (a_event.type==Expose) || (a_event.type==ConfigureNotify) ){ 24 int width,height; 25 m_session.window_size(m_win,width,height); 26 set_size(width,height); //viewer::set_size() 27 win_render(); 28 return true; 29 } else if(a_event.type==ClientMessage) { 30 if(a_event.xclient.data.l[0]==(long)m_session.WM_DELETE_WINDOW_atom()) { 31 m_session.post(m_win,m_session.SESSION_EXIT_STEER_atom()); 32 return true; 33 } 34 } 35 return false; 36 } 37 virtual Window window() const {return m_win;} 38 public: 39 simple_dispatcher(base_session& a_session,Window a_win) 40 :parent() 41 ,m_session(a_session) 42 ,m_win(a_win) 43 {} 44 virtual ~simple_dispatcher(){} 45 public: 46 simple_dispatcher(const simple_dispatcher& a_from) 47 :parent(a_from) 48 ,m_session(a_from.m_session) 49 ,m_win(a_from.m_win) 50 {} 51 simple_dispatcher& operator=(const simple_dispatcher& a_from) { 52 parent::operator=(a_from); 53 m_win = a_from.m_win; 54 return *this; 55 } 56 protected: 57 base_session& m_session; 58 Window m_win; 59 }; 60 61 }} 62 63 #endif