#include <X11/Xlib.h>
#include "xpm.h"
#include "win.h"
#include "image.h"

Image::Image(Win *w)
{
	win = w;
}

Image::~Image()
{
	XFreePixmap(win->display, pix);
	XFreePixmap(win->display, mask);
	XFreeGC(win->display, gc);
}

int Image::create(char **data)
{
	int status;
	XpmAttributes attributes;

	attributes.valuemask = XpmColormap | XpmCloseness;
	attributes.colormap = win->cmap;
	attributes.closeness = 65535;
	status = XpmCreatePixmapFromData(win->display, win->win, data, &pix, &mask, &attributes);
	if (status != XpmSuccess) return 0;

	width = attributes.width;
	height = attributes.height;
	gc = XCreateGC(win->display, win->win, 0, NULL);
	XSetFillStyle(win->display, gc, FillTiled);
	XSetTile(win->display, gc, pix);
	XSetClipMask(win->display, gc, mask);

	return 1;
}

void Image::draw(Drawable drw, int x, int y)
{
	xgcv.ts_y_origin = y;
	xgcv.ts_x_origin = x;
	xgcv.clip_y_origin = y;
	xgcv.clip_x_origin = x;
	XChangeGC(win->display, gc, GCClipXOrigin | GCClipYOrigin |
		GCTileStipXOrigin | GCTileStipYOrigin, &xgcv);
	XFillRectangle(win->display, drw, gc, x, y, width, height);
}


