Main Page Class Hierarchy Compound List File List Compound Members File Members

XGraphicsSystem.h

Go to the documentation of this file.
00001 /*
00002 File: XGraphicsSystem.h
00003 
00004 Function: Provides an XWindows-based implementation of the
00005 Renderer object. See Renderer.h
00006 
00007 Author(s): Andrew Willmott
00008 
00009 Copyright: (c) 1995-2000, Andrew Willmott
00010 */
00011 
00012 #ifndef __XGraphicsSystem__
00013 #define __XGraphicsSystem__
00014 
00015 #include <iostream.h>
00016 #include <X11/Xlib.h>
00017 #include <X11/Xutil.h>
00018 
00019 #undef Bool 
00020 // The X cruft #defines Bool to be nothing(!), so we undef it.
00021 // Oh for a world without X Windows.
00022 
00023 #include "gcl/GCLConfig.h"
00024 #include "gcl/Image.h"
00025 #include "cl/PtrArray.h"
00026 
00027 class XPane;
00028 class XEventPane;
00029 class XOffscreenPane;
00030 
00031 
00032 // --- Graphics System class --------------------------------------------------
00033 
00034 // List of all panes under our control.
00035  typedef PtrArray<XEventPane> PaneList; 
00036 
00037  class XGraphicsSystem
00038 {
00039 public:
00040 XGraphicsSystem();
00041 virtual ~XGraphicsSystem();
00042 
00043 Void CreateWindow(XEventPane *xpane, 
00044 StrConst title = "OpenGL window", Int width = 400,
00045 Int height = 400);
00046 Void CreateSubwindow(XEventPane *xpane, 
00047 Window parent, Int x = 0,
00048 Int y = 0, Int width = 400, Int height = 400);
00049 Void CreateOffscreen(XOffscreenPane *xpane,
00050 Int width = 400, Int height = 400);
00051 
00052 virtual Void Spin();
00053 // non blocking event handler: returns after a pass through
00054 // the event queue
00055 virtual Void Run();
00056 // blocking event handler
00057 virtual Bool RunFor(Float time);
00058 // blocking event handler: returns after 'time' seconds.
00059 // returns true if the handler is done.
00060 virtual Void SignalDone();
00061 // tell blocking event handler to quit.
00062 
00063 
00064 virtual Void GetMouse(XEventPane *xpane, 
00065 Int *x, Int *y, UInt *keyState);
00066 
00067 Void DumpVisualInfo();
00068 
00069 
00070  PaneList paneList;
00071  Display *display;
00072  GC theGC;
00073 #ifdef GCL_XSHM
00074 Bool sharedOn;
00075 Bool remoteChecked;
00076 #endif
00077 
00078 protected:
00079  static Bool finished;
00080  Long itsEventsMask;
00081  Bool hasGC;
00082 };
00083 
00084 
00085 // --- X window panes ---------------------------------------------------------
00086 
00087  class XPane
00088 {
00089 public:
00090 XPane();
00091 virtual ~XPane();
00092 
00093 virtual Void Init();
00094 virtual XVisualInfo *GetVisualInfo();
00095 
00096 Void CopyFrom(XPane &from);
00097 Void PutImage(Image &img, Int x = 0, Int y = 0);
00098 
00099  XID paneXID;
00100  Int width, height;
00101  XGraphicsSystem *xgs;
00102  Bool doubleBuffered;
00103 
00104 protected:
00105 XImage *ImageToXImage(Image &img);
00106 
00107  static XVisualInfo *sVisualInfo;
00108 };
00109 
00110  class XOffscreenPane : public XPane
00111 {
00112 public:
00113 XOffscreenPane();
00114 ~XOffscreenPane();
00115 };
00116 
00117  enum WM_Modifier 
00118 {
00119 wmShift = 0x0001,
00120 wmControl = 0x0002,
00121 wmAlt = 0x0004,
00122 wmUndef1 = 0x0008,
00123 wmButton1 = 0x0010,
00124 wmButton2 = 0x0020,
00125 wmButton3 = 0x0040,
00126 wmButtons = 0x0070,
00127 wmAll = 0x00FF
00128 };
00129 
00130  class XEventPane : public XPane
00131 // can handle events...
00132 {
00133 public:
00134 
00135  XEventPane(Bool doubleBuffer = 0) : 
00136 XPane() {doubleBuffered = doubleBuffer;};
00137 
00138 ~XEventPane();
00139 
00140 virtual Void XHandleEvent(XEvent *event);
00141 Void XGetMouse(Int *x, Int *y, UInt *keyState);
00142 
00143 // nice interface
00144 
00145 virtual Void HandleKey(Char key);
00146 virtual Void TrackMouse(Int x, Int y, Int modifiers);
00147 virtual Void HandleExpose();
00148 Void GetMouse(Int &x, Int &y, Int &modifiers);
00149 
00150 Void Resize(Int x, Int y);
00151 Void Hide();
00152 Void Show();
00153 Void SetTitle(StrConst title);
00154 };
00155 
00156  class XBackedPane : public XEventPane
00157 // mirrors another pane, with screen update when expose events are received.
00158 {
00159 public:
00160 XBackedPane();
00161 
00162 Void HandleExpose();
00163 
00164 Void Attach(XPane *pane);
00165 
00166 protected:
00167  XPane *backPane;
00168 };
00169 
00170 #endif

Generated at Sat Aug 5 00:17:05 2000 for Graphics Class Library by doxygen 1.1.0 written by Dimitri van Heesch, © 1997-2000

AltStyle によって変換されたページ (->オリジナル) /