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