00001 #ifndef __RE_XWindow_h__
00002 #define __RE_XWindow_h__
00003
00004 #include "RE_API.h"
00005 #include <X11/Xlib.h>
00006 #include <X11/Xutil.h>
00007 #include <UT/UT_Pointers.h>
00008 #include "RE_Types.h"
00009 #include "RE_Window.h"
00010 #include "RE_XServer.h"
00011
00012 class RE_XVisual;
00013 class RE_XServer;
00014
00015 #ifdef WM_POSITION_BUG
00016 #define UserPosition PPosition
00017 #define ProgPosition USPosition
00018 #else
00019 #define UserPosition USPosition
00020 #define ProgPosition PPosition
00021 #endif
00022
00023 #define UserSize USSize
00024 #define ProgSize PBaseSize
00025
00026 #define ProgMaxSize PMaxSize
00027 #define ProgMinSize PMinSize
00028
00029 class RE_API RE_XWindow : public RE_Window
00030 {
00031 public:
00032 RE_XWindow(RE_Server *newserver,
00033 RE_WindowType wintype = RE_WINDOW_NORMAL,
00034 RE_VisualType visType = RE_NORMAL_VIS,
00035 RE_WindowVisibility doOffScreen = RE_WINDOW_VISIBLE);
00036
00037 virtual ~RE_XWindow();
00038
00039
00040 virtual OGLDrawable getGraphicsDrawable()
00041 {
00042 return static_cast<OGLDrawable>(windowID);
00043 }
00044 virtual OGLDrawable getAlternateDrawable()
00045 {
00046 return windowID
00047 ? static_cast<OGLDrawable>(windowID)
00048 : static_cast<OGLDrawable>(myXPbuffer);
00049 }
00050
00051 virtual RE_IDType getBufferID() const { return (RE_IDType)myXPbuffer; }
00052
00053 virtual void initMaxSize( short w, short h );
00054 virtual void initMinSize( short w, short h );
00055 virtual void initClass( char *name, char *rclass );
00056 virtual void setName(const char *name);
00057 virtual void setIconName(const char *name);
00058
00059 virtual void reparentWindow( RE_Window *newParent );
00060
00061
00062
00063 void setImmediateParent(RE_IDType pid)
00064 { myImmediateParent = pid; }
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 virtual void resizeWindow( short w, short h );
00079 void updateWindowPlacement(int x, int y);
00080 virtual void moveWindow( short x, short y, int force = 1 );
00081 virtual void sizeWindow( short w, short h, int force = 1 );
00082 virtual void moveAndSizeWindow(short x, short y, short w, short h,
00083 int force = 1);
00084
00085
00086
00087 virtual void maximizeWindow();
00088 virtual void restoreWindow();
00089
00090 virtual void fullscreenWindow(bool state);
00091
00092 virtual short getX() const { return sizeHints.x; }
00093 virtual short getY() const { return sizeHints.y; }
00094 virtual short getW() const { return sizeHints.base_width; }
00095 virtual short getH() const { return sizeHints.base_height; }
00096
00097 virtual void lowerWindow();
00098 virtual void raiseWindow();
00099
00100 virtual void findLocation(short *x, short *y, short *w, short *h,
00101 char topMostParent = 0);
00102
00103 virtual unsigned long openWindow( int isMain = 0, int show = 1);
00104 virtual void showWindow();
00105 virtual void closeWindow();
00106
00107 unsigned long openRealWindow(int show);
00108 unsigned long openPixmapWindow();
00109
00110 void closeRealWindow();
00111 void closePixmapWindow();
00112
00113 virtual bool makeCurrent(bool &needs_initialization);
00114 virtual void unmakeCurrent();
00115
00116 int isChild() const
00117 { return myWindowType == RE_WINDOW_CHILD; }
00118
00119 const RE_XServer *xServer() const
00120 { return static_cast<const RE_XServer *>(myServer); }
00121 RE_XServer *xServer()
00122 { return static_cast<RE_XServer *>(myServer); }
00123
00124 virtual void setWindowAlwaysOnTop(bool newstate);
00125
00126 static RE_IDType getWindowWithFocusLock();
00127 virtual void grabWindowFocusLock(bool pointer_too);
00128 virtual void releaseWindowFocusLock();
00129
00130 virtual RE_IDType getParentOfTransient();
00131 virtual void setParentOfTransient(RE_IDType transient);
00132
00133
00134
00135
00136 static void setDefaultWindowBorder(RE_WindowType type,
00137 int left, int right,
00138 int top, int bottom,
00139 bool initialize);
00140 protected:
00141
00142
00143
00144
00145
00146
00147
00148
00149 void sendEWMHStateEvent(const char *statename1,
00150 const char *statename2 = NULL,
00151 bool add = true);
00152
00153 void sendEWMHEvent(const char *eventype);
00154
00155
00156
00157
00158
00159
00160
00161
00162 void setEWMHAtoms(const char *atomname,
00163 const UT_StringArray &states);
00164
00165 void initBorders();
00166
00167 XSizeHints sizeHints;
00168 XSizeHints minSize;
00169 XClassHint classHints;
00170 XWMHints wmHints;
00171 XTextProperty iconNameProperty;
00172 XTextProperty windowNameProperty;
00173 Pixmap myXPixmap;
00174 GLXPbufferSGIX myXPbuffer;
00175 GLXContext myPbufferContext;
00176 RE_IDType myImmediateParent;
00177 };
00178
00179 #endif