#ifndef CXSCREEN_H #define CXSCREEN_H #include "IScreen.h" #include class CXScreen : public IScreen { public: CXScreen(const CString& name); virtual ~CXScreen(); // IScreen overrides virtual void open(bool isPrimary); virtual void close(); virtual void enterScreen(SInt32 x, SInt32 y); virtual void leaveScreen(); virtual void warpCursor(SInt32 x, SInt32 y); virtual void setClipboard(const IClipboard*); virtual void onScreenSaver(bool); virtual void onKeyDown(KeyID, KeyModifierMask); virtual void onKeyRepeat(KeyID, KeyModifierMask, SInt32); virtual void onKeyUp(KeyID, KeyModifierMask); virtual void onMouseDown(ButtonID); virtual void onMouseUp(ButtonID); virtual void onMouseMove(SInt32, SInt32); virtual void onMouseWheel(SInt32); virtual void onClipboardChanged(); virtual CString getName() const; virtual void getSize(SInt32* width, SInt32* height) const; virtual void getClipboard(IClipboard*) const; protected: // primary screen implementations virtual void openPrimary(); virtual void closePrimary(); virtual void enterScreenPrimary(SInt32 x, SInt32 y); virtual void leaveScreenPrimary(); virtual void setClipboardPrimary(const IClipboard*); virtual void onScreenSaverPrimary(bool); // secondary screen implementations virtual void openSecondary(); virtual void closeSecondary(); virtual void enterScreenSecondary(SInt32 x, SInt32 y); virtual void leaveScreenSecondary(); virtual void setClipboardSecondary(const IClipboard*); virtual void onScreenSaverSecondary(bool); // get the display Display* getDisplay() const; // process X events from the display void onEvents(); // called by open() and close(). override to hook up and unhook the // display connection to the event queue. call onEvents() when events // are available. virtual void onOpen(bool isPrimary) = 0; virtual void onClose() = 0; private: void selectEvents(Window) const; KeyModifierMask mapModifierFromX(unsigned int) const; unsigned int mapModifierToX(KeyModifierMask) const; KeyID mapKeyFromX(KeyCode, KeyModifierMask) const; KeyCode mapKeyToX(KeyID) const; ButtonID mapButtonFromX(unsigned int button) const; unsigned int mapButtonToX(ButtonID) const; void onPrimaryEvents(); void onSecondaryEvents(); private: CString m_name; Display* m_display; int m_screen; bool m_primary; SInt32 m_w, m_h; // stuff for primary screens Window m_window; bool m_active; }; #endif