core/vgui/vgui_clear_tableau.h
Go to the documentation of this file.
00001 // This is core/vgui/vgui_clear_tableau.h
00002 #ifndef vgui_clear_tableau_h_
00003 #define vgui_clear_tableau_h_
00004 #ifdef VCL_NEEDS_PRAGMA_INTERFACE
00005 #pragma interface
00006 #endif
00007 //:
00008 // \file
00009 // \brief  Tableau performing OpenGL clearing.
00010 // \author Philip C. Pritchett, Robotics Research Group, University of Oxford
00011 // \date   11 Nov 99
00012 //
00013 //  Contains classes  vgui_clear tableau   vgui_clear_tableau_new
00014 //
00015 // \verbatim
00016 //  Modifications
00017 //   11-NOV-1999 P.Pritchett - Initial version.
00018 //   26-APR-2002 K.Y.McGaul - Added some doxygen style comments.
00019 // \endverbatim
00020 
00021 #include "vgui_clear_tableau_sptr.h"
00022 #include <vgui/vgui_gl.h>
00023 #include <vgui/vgui_tableau.h>
00024 class vgui_menu;
00025 
00026 //: Tableau performing OpenGL clearing.
00027 //
00028 //  vgui_clear_tableau is a tableau that performs OpenGL clearing upon
00029 //  receipt of a vgui_DRAW event. It has no child tableau.
00030 //
00031 //  This is provided by default if you use a vgui_shell_tableau.
00032 class vgui_clear_tableau : public vgui_tableau
00033 {
00034  public:
00035   //: Constructor - don't use this, use vgui_clear_tableau_new.
00036   //  A vgui_clear_tableau does not have any children.
00037   vgui_clear_tableau();
00038 
00039   //: Returns the type of this tableau ('vgui_clear_tableau').
00040   vcl_string type_name() const { return "vgui_clear_tableau"; }
00041 
00042   //: Set colour of clear_tableau to the given red, green, blue values.
00043   void set_colour(float r, float g, float b, float a=1);
00044 
00045   //: Set the given GLbitfield as the mask.
00046   void set_mask(GLbitfield m) { mask = m; }
00047 
00048   //: Toggle clearing on and off.
00049   void toggle_clearing();
00050 
00051   //: Make the given menu the default pop-up menu.
00052   void add_popup(vgui_menu &menu);
00053 
00054   //: Display a dialog box to get data (colour, etc) for the clear tableau.
00055   void config_dialog();
00056 
00057  protected:
00058   //: Destructor - called by vgui_clear_tableau_sptr.
00059   virtual ~vgui_clear_tableau() {}
00060 
00061   //: Handle events sent to this tableau - use draw to perform OpenGL clearing.
00062   virtual bool handle(const vgui_event&);
00063 
00064  private:
00065   GLbitfield mask;
00066 
00067   float colour[4]; // rgba
00068   float accum[4];  // rgba
00069   GLclampd depth;
00070   GLint stencil;
00071 
00072   bool clearing_;
00073 };
00074 
00075 //: Create a smart-pointer to a vgui_clear_tableau.
00076 struct vgui_clear_tableau_new : public vgui_clear_tableau_sptr
00077 {
00078   typedef vgui_clear_tableau_sptr base;
00079 
00080   //: Create a smart-pointer to a vgui_clear_tableau.
00081   vgui_clear_tableau_new() : base(new vgui_clear_tableau()) {}
00082 };
00083 
00084 #endif // vgui_clear_tableau_h_