// C++ code Copyright (C) David R. Evans G4AMJ/NQ0I // SUN colour manipulation classes #include #include #include #include #include #include #include #include // 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) ; }