#include "../stdafx.h"

// Graphicfunctions.h : interface of the GDE functions
//
// In diesem Header-File sind alle Grafikfunktionen, die der Benutzer
// zur Programmierung verwenden kann deklariert.
//
/////////////////////////////////////////////////////////////////////////////


// Koordinaten und Fenstergroesse
void set_windowpos(int x, int y, int b, int h); // Groesse und Position des Grafikfensters setzen.
void get_windowsize(int *b, int *h);			// Groesse des Grafikfensters ermitteln.
void set_drawarea(int b, int h);				// Setzen der Groesse des Zeichenbereiches.
void get_drawarea(int *b, int *h);				// Ermitteln der Groesse des Zeichenbereches.

// Farben
#define BLACK	0
#define WHITE	RGB(255,255,255)
#define RED		RGB(255,0,0)
#define GREEN	RGB(0,255,0)
#define BLUE	RGB(0,0,255)
#define YELLOW	RGB(255,255,0)
#define GREY	RGB(192,192,192)
#define BROWN	RGB(128,64,0)
#define TRANS	-1


// Bildpunkte und Bildschirmbereiche
void pixel(int x, int y, int color);				// Setzen eines einzenen Pixels.
void fill (int x, int y, int color1, int color2);	// Fuellt einen Bereich des Fensters mit einer Farbe.
	// color1: Fuellt den durch diese Farbe begrenzten Bereich.
	// color2: Fuefarbe

// Linien
void moveto(int x, int y);				// Setzt die Position des virtuellen Grafikcursors.
void lineto(int x, int y, int color);	// Zieht eine Linie von den Koordinaten des Grafikcursors aus.
void line(int x1, int y1, int x2, int y2, int color);	// Zeichnet eine Linie.

// Rechtecke
void rectangle(int x1, int y1, int x2, int y2, int cframe, int cfill = -1);
	// Zeichnet ein Rechteck (optional deckend).
	// x1, y1 : obere linke Ecke
	// x2, y2 : untere rechte Ecke
	// cframe : Rahmenfarbe
	// cfill  : Fuellfarbe

// Kreise und Ellipsen
void ellipse(int x1, int y1, int x2, int y2, int cframe, int cfill = -1);
		// Zeichnet eine Ellipse (optional deckend).
		// x1, y1 : obere linke Ecke
		// x2, y2 : untere rechte Ecke
		// cframe : Rahmenfarbe
		// cfill  : Fuellfarbe

// Text
#define LEFT_ALIGN		DT_LEFT
#define RIGHT_ALIGN		DT_RIGHT
#define CENTER_ALIGN	DT_CENTER
#define TOP_ALIGN		DT_TOP
#define BOTTOM_ALIGN	DT_BOTTOM
#define VCENTER_ALIGN	DT_VCENTER
#define BREAK_WORDS		DT_WORDBREAK
#define NO_CLIPPING		DT_NOCLIP
#define SINGLE_LINE		DT_SINGLELINE

void text(int x, int y, int size, int color, char *format, ...);
void text(int x, int y, int size, int color, int bkcolor, char *format, ...);
void text(int x, int y, int size, int color, int angle, int align, char *format, ...);
void text(int x, int y, int size, int color, int bkcolor, int angle, int align, char *format, ...);
	// Mehrzeilige (\n) Textausgabe (analog printf);
	// size  : Textgroesse
	// color : Textfarbe
	// bkcolor : Hintergrundfarbe wenn deckend, sonst transparent.
	// angle   : Winkel um dem der Text gedreht wird.
	// align   : Ausrichtung des Textes.
	// der hintere Teil funktioniert analog zu printf
void textbox(int x1, int y1, int x2, int y2, int size, int textcolor, 
			 int framecolor, int fillcolor, int flags, char *format, ...);
		// Einzeilige Textausgabe in einer Textbox.
		// size      : Textgroesse
		// textcolor : Textfarbe
		// framecolor: Randfarbe
		// fillcolor : Fuellfarbe des Rahmens
		// flags	 : Ausrichtung LEFT_ALIGN. RIGHT_ALIGN, CENTER_ALIGN, TOP_ALIGN, ...
		// der hintere Teil funktioniert analog zu printf

// Ablaufsteuerung (all Funktionen beinhalten ein neuzeichnen des Zeichenbereiches)
#define MBTN_LEFT			MK_LBUTTON
#define MBTN_MIDDLE			MK_MBUTTON
#define MBTN_RIGHT			MK_RBUTTON
#define MBTN_SHIFT			MK_SHIFT
#define MBTN_CONTROL		MK_CONTROL

int mouseclick(int *x, int *y);	// Wartet auf einen Mausklick und gibt dann button & key zurueck.
int checkmouse();				// Prueft ob zwischenzeitlich die Maus betaetigt wurde.
								// 0: nicht betaetigt, ...
void wait(unsigned int msecs);	// Wartet die vorgegebende Zeit in Millisekunden.

void clrscr();					// Loescht den gesamten Zeichenbereich.
void updatescr();				// Neuzeichnen des gesamten Zeichenbereiches.

bool stopProcess();				// Gibt an ob ein Stopflagg gesetzt wurde