Blame demo/src/font.c

Ivan Mahonin b9c036
Ivan Mahonin b9c036
#include <math.h>
Ivan Mahonin b9c036
Ivan Mahonin b9c036
#include <helianthus.h>
Ivan Mahonin b9c036
Ivan Mahonin b9c036
#include "font.h"
Ivan Mahonin b9c036
Ivan Mahonin b9c036
Ivan Mahonin b9c036
Ivan Mahonin 28a314
static Font font;
Ivan Mahonin b9c036
Ivan Mahonin b9c036
Ivan Mahonin b9c036
void fontInit() {
Ivan Mahonin b9c036
	font = createFont("data/fonts/blackcry.ttf");
Ivan Mahonin b9c036
}
Ivan Mahonin b9c036
Ivan Mahonin b9c036
Ivan Mahonin b9c036
void fontDraw() {
Ivan Mahonin deef1d
	saveState();
Ivan Mahonin 3954ba
	
Ivan Mahonin b9c036
	double x = 512;
Ivan Mahonin b9c036
	double y = 256;
Ivan Mahonin b9c036
	
Ivan Mahonin d4e89f
	fill(colorByName("1 0 0 0.5"));
Ivan Mahonin d7d433
	textSize(64*(1+sin(windowGetSeconds()/4)));
Ivan Mahonin 5d2371
	text(x, y, "Here is the\nleft aligned\ntext. VAW.");
Ivan Mahonin b9c036
	
Ivan Mahonin da4619
	noFill();
Ivan Mahonin b9c036
	textFont(font);
Ivan Mahonin b9c036
	textAlign(HALIGN_RIGHT, VALIGN_TOP);
Ivan Mahonin 5d2371
	text(x, y, "Here is the\nright aligned\ntext. VAW.");
Ivan Mahonin b9c036
	
Ivan Mahonin 47ef74
	resetState();
Ivan Mahonin 20d197
	
Ivan Mahonin 47ef74
	x = 196;
Ivan Mahonin 47ef74
	y = 384;
Ivan Mahonin 47ef74
	double w = 128;
Ivan Mahonin 47ef74
	double h = 96;
Ivan Mahonin 47ef74
	int haligns[] = { HALIGN_LEFT, HALIGN_CENTER, HALIGN_RIGHT };
Ivan Mahonin 47ef74
	int valigns[] = { VALIGN_TOP, VALIGN_CENTER, VALIGN_BOTTOM };
Ivan Mahonin 47ef74
	const char *ht[] = { "left", "center I", "right" };
Ivan Mahonin 47ef74
	const char *vt[] = { "top", "center", "bottom q" };
Ivan Mahonin 47ef74
	for(int j = 0; j < 3; ++j) {
Ivan Mahonin 47ef74
		for(int i = 0; i < 3; ++i) {
Ivan Mahonin 47ef74
			double xx = x + (1-i)*w/2;
Ivan Mahonin 47ef74
			double yy = y + (1-j)*h/2;
Ivan Mahonin 47ef74
			textAlign(haligns[i], valigns[j]);
Ivan Mahonin 47ef74
			if (i == 1 && j == 1) {
Ivan Mahonin 7ebc4f
				TextLayout layout = createTextLayoutf("%s\n%s", ht[i], vt[j]);
Ivan Mahonin 7ebc4f
				textLayoutDraw(layout, xx, yy);
Ivan Mahonin 47ef74
				saveState();
Ivan Mahonin 47ef74
				strokeWidth(0.5);
Ivan Mahonin 47ef74
				double ex = 10;
Ivan Mahonin 47ef74
				double l = textLayoutGetLeft(layout);
Ivan Mahonin 47ef74
				double t = textLayoutGetTop(layout);
Ivan Mahonin 47ef74
				double w = textLayoutGetWidth(layout);
Ivan Mahonin 47ef74
				double h = textLayoutGetHeight(layout);
Ivan Mahonin 47ef74
				double a = textLayoutGetTopAscenderLine(layout);
Ivan Mahonin 47ef74
				double x = textLayoutGetTopXLine(layout);
Ivan Mahonin 47ef74
				double b = textLayoutGetBottomBaseline(layout);
Ivan Mahonin 47ef74
				line( xx+l-ex , yy+t    , xx+l+w+ex , yy+t      );
Ivan Mahonin 47ef74
				line( xx+l-ex , yy+t+h  , xx+l+w+ex , yy+t+h    );
Ivan Mahonin 47ef74
				line( xx+l    , yy+t-ex , xx+l      , yy+t+h+ex );
Ivan Mahonin 47ef74
				line( xx+l+w  , yy+t-ex , xx+l+w    , yy+t+h+ex );
Ivan Mahonin 47ef74
				line( xx+l-ex , yy+a    , xx+l+w+ex , yy+a      );
Ivan Mahonin 47ef74
				line( xx+l-ex , yy+x    , xx+l+w+ex , yy+x      );
Ivan Mahonin 47ef74
				line( xx+l-ex , yy+b    , xx+l+w+ex , yy+b      );
Ivan Mahonin 47ef74
				restoreState();
Ivan Mahonin 7ebc4f
				textLayoutDestroy(layout);
Ivan Mahonin 7ebc4f
			} else {
Ivan Mahonin 7ebc4f
				textf(xx, yy, "%s\n%s", ht[i], vt[j]);
Ivan Mahonin 47ef74
			}
Ivan Mahonin 47ef74
		}
Ivan Mahonin 47ef74
	}
Ivan Mahonin 47ef74
	line(x - 1.5*w, y - h/2, x + 1.5*w, y - h/2);
Ivan Mahonin 47ef74
	line(x - 1.5*w, y + h/2, x + 1.5*w, y + h/2);
Ivan Mahonin 47ef74
	line(x - w/2, y - 1.5*h, x - w/2, y + 1.5*h);
Ivan Mahonin 47ef74
	line(x + w/2, y - 1.5*h, x + w/2, y + 1.5*h);
Ivan Mahonin 47ef74
	
Ivan Mahonin 47ef74
	noFill();
Ivan Mahonin 47ef74
	textAlign(HALIGN_CENTER, VALIGN_CENTER);
Ivan Mahonin 47ef74
	const char *chars = "zlpvoxS";
Ivan Mahonin 47ef74
	for(int i = 0; i < 7; ++i)
Ivan Mahonin 47ef74
		textf(x - w/2 + (i + 1)/8.0*w, y + h/2, "%c", chars[i]);
Ivan Mahonin 47ef74
	
Ivan Mahonin deef1d
	restoreState();
Ivan Mahonin b9c036
}
Ivan Mahonin b9c036
Ivan Mahonin b9c036