// @(#)root/gl:$Id$
// Author: Bertrand Bellenot 2008

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TGLOverlayButton
#define ROOT_TGLOverlayButton

#include "TGLOverlay.h"
#include "TGLFontManager.h"
#include "TGLViewerBase.h"
#include "TQObject.h"

class TString;

class TGLOverlayButton : public TGLOverlayElement,
                         public TQObject
{

private:
   TGLOverlayButton(const TGLOverlayButton&) = delete;
   TGLOverlayButton& operator=(const TGLOverlayButton&) = delete;

protected:

   TString           fText;         // button text
   Int_t             fActiveID;     // active item identifier
   Pixel_t           fBackColor;    // button background color
   Pixel_t           fTextColor;    // text color
   Float_t           fNormAlpha;    // button alpha value (transparency) in normal state
   Float_t           fHighAlpha;    // button alpha value (transparency) in highlight state

   Float_t           fPosX;         // button x position
   Float_t           fPosY;         // button y position
   Float_t           fWidth;        // button width
   Float_t           fHeight;       // button height

   mutable TGLFont   fFont;         // font used to render text

public:
   TGLOverlayButton(TGLViewerBase *parent, const char *text, Float_t posx,
                    Float_t posy, Float_t width, Float_t height);
   ~TGLOverlayButton() override { }

   Bool_t       MouseEnter(TGLOvlSelectRecord& selRec) override;
   Bool_t       Handle(TGLRnrCtx& rnrCtx, TGLOvlSelectRecord& selRec, Event_t* event) override;
   void         MouseLeave() override;

   void         Render(TGLRnrCtx& rnrCtx) override;
   virtual void         ResetState() { fActiveID = -1; }

   virtual const char  *GetText() const { return fText.Data(); }
   virtual Pixel_t      GetBackColor() const { return fBackColor; }
   virtual Pixel_t      GetTextColor() const { return fTextColor; }
   virtual void         SetText(const char *text) { fText = text; }
   virtual void         SetPosition(Float_t x, Float_t y) { fPosX = x; fPosY = y; }
   virtual void         SetSize(Float_t w, Float_t h) { fWidth = w; fHeight = h; }
   virtual void         SetAlphaValues(Float_t norm, Float_t high) { fNormAlpha = norm; fHighAlpha = high; }
   virtual void         SetBackColor(Pixel_t col) { fBackColor = col; }
   virtual void         SetTextColor(Pixel_t col) { fTextColor = col; }

   virtual void         Clicked(TGLViewerBase *viewer); // *SIGNAL*

   ClassDefOverride(TGLOverlayButton, 0); // GL-overlay button.
};

#endif

