103 lines
3.2 KiB
C++
103 lines
3.2 KiB
C++
// 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 <simgear/props/propsfwd.hxx>
|
|
#include <simgear/structure/subsystem_mgr.hxx>
|
|
|
|
#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 <FGPanelInstrument *> 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;
|
|
};
|