Blob Blame Raw
#ifndef HELI_DRAWING_H
#define HELI_DRAWING_H


#include "common.h"
#include "animation.h"


typedef enum _StateFlags {
	STATE_FILL_COLOR     = 1 << 0,
	STATE_FILL_TEXTURE   = 1 << 1,
	
	STATE_STROKE_COLOR   = 1 << 2,
	STATE_STROKE_TEXTURE = 1 << 3,
	STATE_STROKE_WIDTH   = 1 << 4,
	
	STATE_TEXT_ALIGN     = 1 << 5,
	STATE_TEXT_SIZE      = 1 << 6,
	STATE_TEXT_FONT      = 1 << 7,
	   
	STATE_TRANSFORM      = 1 << 8,
	STATE_CLIP           = 1 << 9,
	
	
	STATE_FILL   = STATE_FILL_COLOR
	             | STATE_FILL_TEXTURE,
	STATE_STROKE = STATE_STROKE_COLOR
	             | STATE_STROKE_TEXTURE
	             | STATE_STROKE_WIDTH,
	STATE_TEXT   = STATE_TEXT_ALIGN
	             | STATE_TEXT_SIZE
	             | STATE_TEXT_FONT,
	
	STATE_ALL    = STATE_FILL
	             | STATE_STROKE
	             | STATE_TEXT
	             | STATE_TRANSFORM
	             | STATE_CLIP,
} StateFlags;


void background(unsigned int colorCode);

void fill(unsigned int colorCode);
void fillTexture(Animation animation, double x, double y, double width, double height, int fixed);
void noFill();
void stroke(unsigned int colorCode);
void strokeTexture(Animation animation, double x, double y, double width, double height, int fixed);
void noStroke();
void strokeWidth(double width);

void translate(double x, double y);
void rotate(double angle);
void zoom(double z);
void scale(double x, double y);
void cliprect(double x, double y, double width, double height);
void noClip();

void saveState();
void saveStateEx(unsigned int flags);
void restoreState();

unsigned int colorByName(const char *colorName);
unsigned int colorByRGB(double r, double g, double b);
unsigned int colorByRGBA(double r, double g, double b, double a);

void rect(double x, double y, double width, double height);
void ellipse(double x, double y, double width, double height);
void arc(double x, double y, double w, double h, double start, double stop);
void arcPath(double x, double y, double w, double h, double start, double stop);
void line(double x1, double y1, double x2, double y2);
void point(double x, double y);
void regularPolygon(double x, double y, int sides, double size);

void moveTo(double x, double y);
void lineTo(double x, double y);
void resetPath();
void closePath();
void strokePath();


#endif