shithub: klondike

ref: 98a813c213705da4395e8f8b39d8cf785fd1a4a8
dir: klondike/draw.c

View raw version
#include <u.h>
#include <libc.h>
#include <draw.h>
#include "klondike.h"

void
drawcard(Card *c)
{
	draw(bb,  cardrect(c), c->img[c->up], nil,  ZP);
}

void
drawstack(Cardstack *cs)
{
	int i;
	Rectangle cr;
	
	if(cs->n == 0){
		cr = Rect(0, 0, Cwid, Cht);
		border(bb, rectaddpt(cr, cs->p), 1, display->black, ZP);
	}
	else{
		if(cs->dpad != 0 && cs->upad != 0)
			for(i = 0; i < cs->n; i++)
				drawcard(cs->c[i]);
		else
			drawcard(top(cs));
	}
}

void
drawtable(Image *img)
{
	int i;
	
	tablemath();
	draw(bb, bb->r, display->white, nil, ZP);
	drawstack(stock);
	drawstack(waste);
	for(i = 0; i < nelem(foundation); i++)
		drawstack(foundation[i]);
	for(i = 0; i < nelem(tableau); i++)
		drawstack(tableau[i]);
	draw(img, bb->r, bb, nil, bb->r.min);
}

void
translate(Card *ca[], Point dt)
{
	Rectangle cr;
	Card *c, **cp;

	cr = cardrect(ca[0]);
	for(cp = ca; *cp != nil; cp++)
		combinerect(&cr, cardrect(*cp));
	draw(bb, cr, bb2, nil, cr.min);
	for(cp = ca; (c = *cp); cp++) {
		c->p = addpt(c->p, dt);
		drawcard(c);
		combinerect(&cr, cardrect(c));
	}
	draw(screen, cr, bb, nil, cr.min);
}

Image*
openimage(char *path)
{
	int fd;
	Image *img;

	if((fd = open(path, OREAD)) < 0)
		sysfatal("open %s: %r", path);
	img = readimage(display, fd, 0);
	if(img == nil)
		sysfatal("readimage %s: %r", path);
	close(fd);
	return img;
}