00001 #ifndef header_mousecursor_generic 00002 #define header_mousecursor_generic 00003 00004 #include "displaycard_generic.h" 00005 #include "API/Core/System/thread.h" 00006 #include "API/Core/System/mutex.h" 00007 #include "API/Display/Display/mousecursor.h" 00008 #include "API/Display/Display/surface.h" 00009 #include "mousecursor_provider_generic.h" 00010 00011 class CL_MouseCursor_Generic 00012 : public CL_DisplayCard_Generic::CL_FlipDisplayCallback_Generic 00013 , public CL_Runnable 00014 { 00015 public: 00016 CL_MouseCursor_Generic(); 00017 virtual ~CL_MouseCursor_Generic(); 00018 00019 void set_cursor( 00020 CL_MouseCursorProvider *provider, 00021 int frame=0); 00022 00023 void show(bool show_async=true); 00024 void hide(); 00025 00026 // CL_Runnable overrides 00027 virtual void run(); 00028 00029 // CL_DisplayCard_Generic::CL_FlipDisplayCallback_Generic overrides 00030 virtual void pre_flip(); 00031 virtual void post_flip(); 00032 00033 private: 00034 friend CL_MouseCursor; 00035 00036 void invalidate_region(); 00037 void save_region(CL_Target *source, const CL_ClipRect &r); 00038 void load_region(CL_Target *dest); 00039 void show_cursor(CL_Target *dest, bool load_saved); 00040 00041 CL_ClipRect m_rect; 00042 unsigned char *m_buffer; 00043 00044 bool volatile m_visible; 00045 bool volatile m_async; 00046 int volatile m_last_x; 00047 int volatile m_last_y; 00048 bool m_callback_added; 00049 00050 CL_MouseCursorProvider *m_provider; 00051 CL_Surface *m_cursor; 00052 unsigned int m_cur_frame; 00053 unsigned int m_frame_timer; 00054 00055 CL_Thread *m_thread; 00056 CL_Mutex *m_mux; 00057 00058 static CL_MouseCursor_Generic m_instance; 00059 }; 00060 00061 #endif
1.2.6 written by Dimitri van Heesch,
© 1997-2001