// nUtil - An utility Library for gnurbs
// Copyright (C) 2008-2026 Eric Bechet
//
// See the LICENSE file for contributions and license information.
// Please report all bugs and problems to <bechet@cadxfem.org>.
//

#ifndef __FLTKDISPLAY_H
#define __FLTKDISPLAY_H

#include <vector>

#include "nutil.h"

class ngldraw
{
public: 
  virtual void draw_model(void)=0; // called by the opengl window at every refresh
  virtual int handle(int event) =0; // called by the opengl window at every event
  virtual ~ngldraw(){};
};

class fltkdisplay: public ngldraw ,public ndisplay_base
{
protected :

public:
  fltkdisplay(color _c=color(25, 51, 102,255),char *_name=NULL); // constructor
  virtual ~fltkdisplay(); // destructor
  virtual void init_data(data_container &data);   // all
  virtual void init_data_vertices(data_container & data);    //only vertices
  virtual void init_data_lines(data_container & data);    // only lines
  virtual void init_data_triangles(data_container & data);    // only triangles
  virtual void init_data_quads(data_container & data);    // only quads
  virtual void init_data_textes(data_container & data);
  virtual void display(bool perspectiveon=0);   // display loop
  virtual void draw_model(void); // called by the opengl window at every refresh
  virtual int handle(int event) {return 0;} // called by the opengl window at every event
private :
  virtual void draw_model(bool transparent); // draw either solid faces or transparent ones w/o depth update
  virtual void compute_bb();
  virtual void reset_bb();
  data_container *dv;
  data_container *dl;
  data_container *dt;
  data_container *dq;
  data_container *dtext;
  color c;
  char *name;
  npoint3 llf,urb;//bounding box
};


#endif// __FLTKDISPLAY_H
