/**********************************************************************
This file is part of Crack dot Com's free source code release of Golgotha.
for information about compiling & licensing issues visit this URL
 If that doesn't help, contact Jonathan Clark at 
  golgotha_source@usa.net (Subject should have "GOLG" in it) 
***********************************************************************/

#ifndef __X11_INPUT_HH
#define __X11_INPUT_HH

#include "device/device.hh"
#include "time/time.hh"
#include  
#include 

class i4_display_class;
class x11_shm_extension_class;
class i4_draw_context_class;

class x11_input_class : public i4_device_class 
{
public:
  Atom                    wm_delete_window, wm_protocols;
  XVisualInfo             *my_visual;
  Display                 *display;
  i4_bool                  mouse_locked;
  Window                   mainwin;
  GC                       gc;
  i4_display_class        *i4_display;
  Colormap                 xcolor_map;
  int                      screen_num;

  i4_draw_context_class   *context;
  w16                      modifier_state;            // keyboard shift state
  sw32                     mouse_x, mouse_y;
  i4_time_class            last_down[3], last_up[3];
  
  void get_x_time(w32 xtick, i4_time_class &t);

  i4_time_class i4_start_time;
  i4_bool need_first_time;
  sw32 first_time;
  i4_bool repeat_on;

  XVisualInfo *find_visual_with_depth(int depth);
  char *name() { return "X11 input"; } 

  i4_bool open_display();
  void close_display();

  i4_bool create_window(sw32 x, sw32 y, w32 w, w32 h, 
                        i4_display_class *i4_display,
                        i4_bool takeup_fullscreen,
                        XVisualInfo *visual);
  void destroy_window();

  virtual i4_bool process_events();

  virtual void resize(int w, int h) { ; }
  virtual void note_event(XEvent &xev) { ; }

  i4_bool lock_mouse_in_place(i4_bool yes_no)
  {
    mouse_locked=yes_no;
    return i4_T;
  }

  x11_input_class();
};




#endif