00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef MMSFBWINDOWMANAGER_H_
00034 #define MMSFBWINDOWMANAGER_H_
00035
00036 #include "mmstools/tools.h"
00037 #include "mmstools/mmslogger.h"
00038 #include "mmsgui/fb/mmsfblayer.h"
00039 #include "mmsgui/fb/mmsfbwindowmanagerthread.h"
00040
00041 typedef struct {
00042
00043 MMSFBWindow *window;
00044
00045 MMSFBRectangle vrect;
00046 } AVAILABLE_WINDOWS;
00047
00048 typedef struct {
00049
00050 MMSFBWindow *window;
00051
00052 MMSFBSurface *surface;
00053
00054 MMSFBRectangle vrect;
00055
00056 MMSFBRegion region;
00057
00058 bool alphachannel;
00059
00060 unsigned char opacity;
00061
00062 int lastflip;
00063
00064 bool islayersurface;
00065
00066 MMSFBSurface *saved_surface;
00067 } VISIBLE_WINDOWS;
00068
00069
00070
00071
00072
00073 class MMSFBWindowManager {
00074 private:
00075 MMSFBLayer *layer;
00076 MMSFBSurface *layer_surface;
00077 MMSFBSurfacePixelFormat layer_pixelformat;
00078
00079
00080 MMSFBSurface *dst_surface;
00081
00082 vector<AVAILABLE_WINDOWS> windows;
00083
00084 vector<VISIBLE_WINDOWS> vwins;
00085
00086 MMSFBSurface *high_freq_surface;
00087 MMSFBSurface *high_freq_saved_surface;
00088 MMSFBRegion high_freq_region;
00089 int high_freq_lastflip;
00090
00091 bool show_pointer;
00092 int pointer_posx;
00093 int pointer_posy;
00094 MMSFBRectangle pointer_rect;
00095 MMSFBRegion pointer_region;
00096 MMSFBSurface *pointer_surface;
00097 unsigned char pointer_opacity;
00098 bool button_pressed;
00099 int pointer_fadecnt;
00100
00101 MMSMutex lock;
00102
00103 MMSFBWindowManagerThread *mmsfbwinmanthread;
00104
00105 MMSFBSurfacePixelFormat pixelformat;
00106 bool usetaff;
00107 MMSTAFF_PF taffpf;
00108
00109
00110 bool ogl_mode;
00111
00112 void lockWM();
00113 void unlockWM();
00114
00115 bool addWindow(MMSFBWindow *window);
00116 bool removeWindow(MMSFBWindow *window);
00117
00118 bool raiseToTop(MMSFBWindow *window, int zlevel = 0);
00119 bool lowerToBottom(MMSFBWindow *window);
00120
00121 bool loadWindowConfig(MMSFBWindow *window, VISIBLE_WINDOWS *vwin);
00122
00123 bool showWindow(MMSFBWindow *window, bool locked = false, bool refresh = true);
00124 bool hideWindow(MMSFBWindow *window, bool locked = false, bool refresh = true);
00125
00126 bool flipSurface(MMSFBSurface *surface, MMSFBRegion *region = NULL,
00127 bool locked = false, bool refresh = true);
00128
00129 bool setWindowOpacity(MMSFBWindow *window);
00130 bool setWindowPosition(MMSFBWindow *window, MMSFBRectangle *vrect = NULL);
00131 bool setWindowSize(MMSFBWindow *window, int w, int h);
00132
00133 bool setWindowVisibleRectangle(MMSFBWindow *window, MMSFBRectangle *rect = NULL);
00134 bool getWindowVisibleRectangle(MMSFBWindow *window, MMSFBRectangle *rect);
00135 bool getScreenshot(MMSFBWindow *window);
00136
00137 bool loadPointer();
00138 void drawPointer(MMSFBRegion *region);
00139 unsigned char getPointerOpacity();
00140 void setPointerOpacity(unsigned char opacity);
00141 void fadePointer();
00142
00143 public:
00144 MMSFBWindowManager();
00145 virtual ~MMSFBWindowManager();
00146
00147 bool init(MMSFBLayer *layer, bool show_pointer = false);
00148 bool reset();
00149 bool getLayer(MMSFBLayer **layer);
00150
00151 void setPointerPosition(int pointer_posx, int pointer_posy, bool pressed = false);
00152 bool getPointerPosition(int &pointer_posx, int &pointer_posy);
00153
00154 friend class MMSFBLayer;
00155 friend class MMSFBSurface;
00156 friend class MMSFBWindow;
00157 friend class MMSFBWindowManagerThread;
00158 };
00159
00160
00161 extern MMSFBWindowManager *mmsfbwindowmanager;
00162
00163 #endif