/*
* image.hh - Header for image class in Sapphire.
* Copyright (C) 1997-1999 by Brad Hughes, bhughes@tcac.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __Image_hh
#define __Image_hh
#include "sapphire.hh"
typedef struct BColor {
// this is a bad hack to get theme.cc
// from complaining because its code
// is messed up.
/*unsigned char*/ int red, green, blue;
unsigned long pixel;
};
// bevel options
#define BImage_Flat (1<<1)
#define BImage_Sunken (1<<2)
#define BImage_Raised (1<<3)
// textures
#define BImage_Solid (1<<4)
#define BImage_Gradient (1<<5)
// gradients
#define BImage_Horizontal (1<<6)
#define BImage_Vertical (1<<7)
#define BImage_Diagonal (1<<8)
// bevel types
#define BImage_Bevel1 (1<<9)
#define BImage_Bevel2 (1<<10)
// inverted image
#define BImage_Invert (1<<11)
class BImage {
private:
BImageControl *control;
XColor *colors;
BColor bg, from, to;
int roff, goff, boff, ncolors, cpc, cpccpc;
unsigned char *red, *green, *blue;
unsigned int width, height;
unsigned short *tr, *tg, *tb;
protected:
void invert(void);
void bevel1(Bool = True, Bool = False);
void bevel2(Bool = True, Bool = False);
void dgradient(void);
void hgradient(void);
void vgradient(void);
void background(const BColor &);
XImage *renderXImage(void);
Pixmap renderPixmap(void);
public:
BImage(BImageControl *, unsigned int, unsigned int);
~BImage(void);
Pixmap render(unsigned long, const BColor &, const BColor &);
Pixmap render_solid(unsigned long, const BColor &);
Pixmap render_gradient(unsigned long, const BColor &, const BColor &);
};
class BImageControl {
private:
Colormap root_colormap;
Display *display;
Window window; // == blackbox->Root();
XColor *colors;
int colors_per_channel, ncolors, screen_number, screen_depth,
bits_per_pixel, red_offset, green_offset, blue_offset;
unsigned short rmask_table[256], gmask_table[256], bmask_table[256],
rerr_table[256], gerr_table[256], berr_table[256];
unsigned int dither_buf_width;
short *red_err, *green_err, *blue_err, *next_red_err, *next_green_err,
*next_blue_err;
typedef struct Cache {
char *name;
Pixmap pixmap;
unsigned int count, width, height;
unsigned long pixel1, pixel2, texture;
} Cache;
LinkedList<Cache> *cache;
protected:
Pixmap searchCache(
//char* name,
unsigned int,
unsigned int,
unsigned long,
const BColor &,
const BColor &);
public:
BImageControl();
~BImageControl(void);
// user configurable information
Bool dither(void);
// details
Display *d(void) { return display; }
Visual *v(void);
Window drawable(void) { return window; }
int bpp(void) { return bits_per_pixel; }
int depth(void) { return screen_depth; }
int screen(void) { return screen_number; }
int colorsPerChannel(void) { return colors_per_channel; }
unsigned long getColor(const char *);
unsigned long getColor(const char *, unsigned char *, unsigned char *,
unsigned char *);
void installRootColormap(void);
// image cache/render requests
Pixmap renderImage(/*char* name,*/ unsigned int, unsigned int, unsigned long, const BColor &,
const BColor &);
void removeImage(Pixmap);
void removeAllImages();
// dither buffers
void getDitherBuffers(unsigned int,
short **, short **, short **,
short **, short **, short **,
unsigned short **, unsigned short **,
unsigned short **);
// rgb mask color lookup tables
void getMaskTables(unsigned short **, unsigned short **, unsigned short **,
int *, int *, int *);
// allocated colors
void getColorTable(XColor **, int *);
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1