// FGPanel.hxx - generic support classes for a 2D panel. // // Written by David Megginson, started January 2000. // Adopted for standalone fgpanel application by Torsten Dreyer, August 2009 // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation; either version 2 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id: FGPanel.hxx,v 1.1 2016/07/20 22:01:30 allaert Exp $ #pragma once #ifndef __cplusplus # error This library requires C++ #endif #include #include #include "FGCroppedTexture.hxx" #include "FGPanelInstrument.hxx" //////////////////////////////////////////////////////////////////////// // Top-level panel. //////////////////////////////////////////////////////////////////////// /** * Instrument panel class. * * The panel is a container that has a background texture and holds * zero or more instruments. The panel will order the instruments to * redraw themselves when necessary, and will pass mouse clicks on to * the appropriate instruments for processing. */ class FGPanel : public SGSubsystem { public: FGPanel (const SGPropertyNode_ptr root); virtual ~FGPanel (); // Subsystem API. void init() override; void bind() override; void unbind() override; void update(double dt) override; // Subsystem identification. static const char* staticSubsystemClassId() { return "panel"; } // transfer pointer ownership!!! virtual void addInstrument (FGPanelInstrument * const instrument); // Background texture. virtual void setBackground (const FGCroppedTexture_ptr texture); void setBackgroundWidth (const double d); void setBackgroundHeight (const double d); // Background multiple textures. virtual void setMultiBackground (const FGCroppedTexture_ptr texture , const int idx); // Full width of panel. virtual void setWidth (const int width); virtual int getWidth () const; // Full height of panel. virtual void setHeight (const int height); virtual int getHeight () const; private: typedef std::vector instrument_list_type; int m_width; int m_height; SGPropertyNode_ptr m_flipx; FGCroppedTexture_ptr m_bg; double m_bg_width; double m_bg_height; FGCroppedTexture_ptr m_mbg[8]; // List of instruments in panel. instrument_list_type m_instruments; void getInitDisplayList (); static GLuint Textured_Layer_Program_Object; static GLint Textured_Layer_Position_Loc; static GLint Textured_Layer_Tex_Coord_Loc; static GLint Textured_Layer_MVP_Loc; static GLint Textured_Layer_Sampler_Loc; };