209 lines · 3.7 KB · Brainfuck
RawDownload
##  %W% - %E%#implement AwtGraphics; include "sys.m";	sys : Sys; include "draw.m";        draw: Draw;        Screen, Display, Rect, Font, Point, Image: import draw; include "math.m";	math: Math;	Pi, atan, tan: import math; disp : ref Display;wimg, dimg, white, ones, icolor : ref Image; include "awt_Graphics.m"; init(img : ref Image, bufimg : ref Image){	sys = load Sys Sys->PATH;	draw = load Draw Draw->PATH;	math = load Math Math->PATH;	dimg = img;	wimg = bufimg;	disp = wimg.display;	ones = disp.ones;	icolor = disp.color(Draw->White);	white = disp.color(Draw->White);} undoClip(){	wimg.clipr = wimg.r;} dispose(){	dimg = nil;	wimg = nil;}setForeground(p0, p1, p2 : int){	icolor = disp.rgb(p0, p1, p2);} changeClip(p0, p1, p2, p3 : int){#	sys->print("=== Change Cliping Area\n");	wimg.clipr = ((p0, p1), (p0 + p2 - 1, p1 + p3 -1));} clearRect( p0 : int,p1 : int,p2 : int,p3 : int){	r := ((p0, p1), (p0 + p2 - 1, p1 + p3 - 1));	wimg.draw(r, white, ones, (0, 0));	} fillRect(ply: array of Point){	wimg.fillpoly(ply, 1, icolor, ply[0]);} drawRect(ply: array of Point){	wimg.poly(ply, 0, 0, 0, icolor, ply[0]);} drawStringWidth(txt : string, sp : Point, font : ref Font) : int{	ep := wimg.text(sp, icolor, sp, font, txt);	return(ep.x-sp.x); 	 } drawLine(sp, ep : Point){	wimg.line(sp, ep, 0, 0, 0, icolor, sp);} genDraw(r : Rect, data : array of byte){	wimg.writepixels(r, data);} copyArea(rect0, rect1 : Draw->Rect, data : array of byte){	wimg.readpixels(rect0, data);	wimg.writepixels(rect1, data);} drawRoundRect(p0 : int,p1 : int,p2 : int,p3 : int,p4 : int,p5 : int){} fillRoundRect(p0 : int,p1 : int,p2 : int,p3 : int,p4 : int,p5 : int){} drawPolygon(ply : array of Point){	wimg.poly(ply, 0, 0, 0, icolor, icolor.r.min);} drawPolyline(ply : array of Point){	wimg.poly(ply, 0, 0, 0, icolor, icolor.r.min);} fillPolygon(ply : array of Point){	wimg.fillpoly(ply, 1, icolor, icolor.r.min);} drawOval(p : Point, p2 : int,p3 : int){	p.x += p2 / 2;	p.y += p3 / 2;	wimg.ellipse(p, p2/2, p3/2, 0, icolor, p);} fillOval(p: Point, p2 : int,p3 : int){	p.x += p2 / 2;	p.y += p3 / 2;	wimg.fillellipse(p, p2/2, p3/2, icolor, p);} drawArc(p : Point, p2 : int,p3 : int,p4 : int,p5 : int){	p.x += p2 / 2;	p.y += p3 / 2;	(p4, p5) = adjustArcAngles(p2, p3, p4, p5);	wimg.arc(p, p2/2, p3/2, 0, icolor, p, p4, p5);} fillArc(p : Point, p2 : int,p3 : int,p4 : int,p5 : int){	p.x += p2 / 2;	p.y += p3 / 2;	(p4, p5) = adjustArcAngles(p2, p3, p4, p5);	wimg.fillarc(p, p2/2, p3/2, icolor, p, p4, p5);} adjustArcAngles(w, h, start, arc: int): (int, int){	laps, end: int; 	if (arc >= 360 || arc <= -360) {		start = 0;		arc = 360;	} else		start = start % 360; 	if (w != h && arc != 0 && arc != 360) {		laps = (start + arc) / 360;		end = (start + arc) % 360;		start = skewAngle(w, h, start);		end = skewAngle(w, h, end);		arc = end - start + (laps * 360);	}	return (start, arc);} skewAngle(width, height, angle: int): int{	if (width == 0 || height == 0)		return angle; 	normAngle := real angle * (2.0 * Pi) / 360.0; 	w := real width;	h := real height;	skewedAngle := h/w * tan(normAngle);	skewedAngle = atan(skewedAngle); 	if (normAngle > 1.5 * Pi)		skewedAngle += 2.0 * Pi;	else if (normAngle > 0.5 * Pi)		skewedAngle += Pi;	else if (normAngle < -1.5 * Pi)		skewedAngle -= 2.0 * Pi;	else if (normAngle < -0.5 * Pi)		skewedAngle -= Pi; 	skewedAngle = skewedAngle * 360.0 / (2.0 * Pi);	return int skewedAngle;} sendToDisplay(r : Draw->Rect){#	if (dimg == nil)#		sys->print("on screen image is nil\n");#	else	if (dimg != nil)	{		wimg.clipr=r;		dimg.draw(r, wimg, ones, r.min);#		dimg.draw(dimg.r, wimg, ones, dimg.r.min);	}} getDC(img: ref Draw->Image, bufimg : ref Draw->Image){	dimg = img;}