// C++ code Copyright (C) David R. Evans G4AMJ/NQ0I

// SUN colour manipulation classes

#include <DREstring.h>
#include <suntool/sunview.h>
#include <suntool/tty.h>
#include <suntool/textsw.h>
#include <suntool/canvas.h>
#include <suntool/panel.h>
#include <sunwindow/pixwin.h>
#include <colour.h>

// constructor
colour::colour(byte r, byte g, byte b) {red = r; green = g; blue = b; }

// dummy constructor
colourmap::colourmap(void)
{ pw = 0;
  cms_name = "";
}

// constructor
colourmap::colourmap(Window& window, DREstring& name, int size)
{ pw = (Pixwin*)window_get(window, WIN_PIXWIN);
  cms_name = name;
  pw_setcmsname(pw, (char*)cms_name);
// Sunview prog Guide p 107 -- this must be done immediately
  byte *red = new byte [size], *green = new byte [size], 
       *blue = new byte [size];
  for (int n = 0; n < size; n++)
    red[n] = green[n] = blue[n] = n;
  pw_putcolormap(pw, 0, size, red, green, blue);
}


/* constructor  -- use this one for canvases. Apparently window_get does
   not return the same address as canvas_pixwin */
colourmap::colourmap(Pixwin* pix, DREstring& name, int size)
{ pw = pix;
  cms_name = name;
  pw_setcmsname(pw, (char*)cms_name);
// Sunview prog Guide p 107 -- this must be done immediately
  byte *red = new byte [size], *green = new byte [size], *blue = new byte [size];
  for (int n = 0; n < size; n++)
    red[n] = green[n] = blue[n] = n;
  pw_putcolormap(pw, 0, size, red, green, blue);
}

// constructor
colourmap::colourmap(DREstring& name)
{ pw = 0;
  cms_name = name;
}

// colourmap << Pixwin*
void colourmap::operator<<(Pixwin *rhs) {pw = rhs; }

// set_colour(colourmap, index [wrt 0], colour)
void set_colour(colourmap& cmap, int index, colour clr)
{ pw_putcolormap(cmap.pw, index, 1, &clr.red, &clr.green, &clr.blue) ; }

