コード例 #1
0
ファイル: fonttest.c プロジェクト: m1ch4ls/gfxprim
void event_loop(void)
{
	GP_Event ev;

	for (;;) {
		GP_BackendWaitEvent(win, &ev);

		switch (ev.type) {
		case GP_EV_KEY:
			if (ev.code != GP_EV_KEY_DOWN)
				continue;

			switch (ev.val.key.key) {
			case GP_KEY_SPACE:
				if (font)
					font_flag = (font_flag + 1) % 5;
				else
					font_flag = (font_flag + 1) % 4;

				redraw_screen();
				GP_BackendFlip(win);
			break;
			case GP_KEY_UP:
				tracking++;
				redraw_screen();
				GP_BackendFlip(win);
			break;
			case GP_KEY_DOWN:
				tracking--;
				redraw_screen();
				GP_BackendFlip(win);
			break;
			case GP_KEY_B:
				font_h++;
				if (font_path) {
					GP_FontFaceFree(font);
					font = GP_FontFaceLoad(font_path, 0, font_h);
					redraw_screen();
					GP_BackendFlip(win);
				}
			break;
			case GP_KEY_S:
				font_h--;
				if (font_path) {
					GP_FontFaceFree(font);
					font = GP_FontFaceLoad(font_path, 0, font_h);
					redraw_screen();
					GP_BackendFlip(win);
				}
			break;
			case GP_KEY_ESC:
				GP_BackendExit(win);
				exit(0);
			break;
			}
		}
	}
}
コード例 #2
0
int main(int argc, char *argv[])
{
	const char *backend_opts = "X11";

	if (argc > 1)
		font = GP_FontFaceLoad(argv[1], 0, 20);

	print_instructions();

	win = GP_BackendInit(backend_opts, "Font Align Test");

	if (win == NULL) {
		fprintf(stderr, "Failed to initalize backend '%s'\n",
		        backend_opts);
		return 1;
	}

	black_pixel    = GP_RGBToContextPixel(0x00, 0x00, 0x00, win->context);
	red_pixel      = GP_RGBToContextPixel(0xff, 0x00, 0x00, win->context);
	blue_pixel     = GP_RGBToContextPixel(0x00, 0x00, 0xff, win->context);
	green_pixel    = GP_RGBToContextPixel(0x00, 0xff, 0x00, win->context);
	yellow_pixel   = GP_RGBToContextPixel(0xff, 0xff, 0x00, win->context);
	white_pixel   = GP_RGBToContextPixel(0xff, 0xff, 0xff, win->context);
	darkgray_pixel = GP_RGBToContextPixel(0x7f, 0x7f, 0x7f, win->context);

	redraw_screen();
	GP_BackendFlip(win);
	event_loop();

	return 0;
}
コード例 #3
0
ファイル: randomshapetest.c プロジェクト: m1ch4ls/gfxprim
int main(void)
{
	const char *backend_opts = "X11";

	win = GP_BackendInit(backend_opts, "Random Shape Test", stderr);

	if (win == NULL) {
		fprintf(stderr, "Failed to initalize backend '%s'\n",
		        backend_opts);
		return 1;
	}

	white = GP_ColorToContextPixel(GP_COL_WHITE, win->context);
	black = GP_ColorToContextPixel(GP_COL_BLACK, win->context);

	for (;;) {
		GP_BackendPoll(win);
		event_loop();

		usleep(20000);

		if (pause_flag)
			continue;

		redraw_screen();
		GP_BackendFlip(win);
	}
}
コード例 #4
0
int main(int argc, char *argv[])
{
	const char *backend_opts = "X11";

	print_instructions();

	if (argc > 1) {
		font_path = argv[1];
		fprintf(stderr, "\nLoading font '%s'\n", argv[1]);
		font = GP_FontFaceLoad(argv[1], 0, font_h);
	}

	win = GP_BackendInit(backend_opts, "Font Test");

	if (win == NULL) {
		fprintf(stderr, "Failed to initalize backend '%s'\n",
		        backend_opts);
		return 1;
	}

	white_pixel     = GP_RGBToContextPixel(0xff, 0xff, 0xff, win->context);
	gray_pixel      = GP_RGBToContextPixel(0xbe, 0xbe, 0xbe, win->context);
	dark_gray_pixel = GP_RGBToContextPixel(0x7f, 0x7f, 0x7f, win->context);
	black_pixel     = GP_RGBToContextPixel(0x00, 0x00, 0x00, win->context);
	red_pixel       = GP_RGBToContextPixel(0xff, 0x00, 0x00, win->context);
	blue_pixel      = GP_RGBToContextPixel(0x00, 0x00, 0xff, win->context);

	redraw_screen();
	GP_BackendFlip(win);

	event_loop();

	return 0;
}
コード例 #5
0
int main(void)
{
	GP_Backend *win_1, *win_2;

	win_1 = GP_BackendX11Init(NULL, 0, 0, 300, 300, "win 1", 0);
	win_2 = GP_BackendX11Init(NULL, 0, 0, 300, 300, "win 2", 0);

	if (win_1 == NULL || win_2 == NULL) {
		GP_BackendExit(win_1);
		GP_BackendExit(win_2);
		return 1;
	}

	/* Update the backend screen */
	redraw(win_1->context);
	redraw(win_2->context);

	GP_BackendFlip(win_1);
	GP_BackendFlip(win_2);

	for (;;) {
		/*
		 * Wait for backend event.
		 *
		 * Either window is fine as they share connection.
		 */
		GP_Backend *b = win_1 ? win_1 : win_2;

		if (b == NULL)
			return 0;

		GP_BackendWait(b);

		if (ev_loop(win_1, "win 1"))
			win_1 = NULL;

		if (ev_loop(win_2, "win 2"))
			win_2 = NULL;
	}

	GP_BackendExit(win_1);
	GP_BackendExit(win_2);

	return 0;
}
コード例 #6
0
static void warp_down(int lines)
{
	while (lines-- > 0)
		if (first_line->next != NULL)
			first_line = first_line->next;

	redraw_screen();
	GP_BackendFlip(backend);
}
コード例 #7
0
static void warp_up(int lines)
{
	while (lines-- > 0)
		if (first_line->prev != NULL)
			first_line = first_line->prev;

	redraw_screen();
	GP_BackendFlip(backend);
}
コード例 #8
0
static void redraw(GP_Backend *backend)
{
	GP_Context *context = backend->context;

	/* Now draw some testing patters */
	black_pixel = GP_RGBToContextPixel(0x00, 0x00, 0x00, context);
	white_pixel = GP_RGBToContextPixel(0xff, 0xff, 0xff, context);
	red_pixel   = GP_RGBToContextPixel(0xff, 0x00, 0x00, context);
	blue_pixel  = GP_RGBToContextPixel(0x00, 0x00, 0xff, context);
	green_pixel = GP_RGBToContextPixel(0x00, 0xff, 0x00, context);

	GP_Fill(context, white_pixel);

	unsigned int i, j;
	for (i = 0; i < 40; i++) {
		GP_HLineXYW(context, 0, i, i, black_pixel);
		GP_HLineXYW(context, 1, i + 40, i, black_pixel);
		GP_HLineXYW(context, 2, i + 80, i, black_pixel);
		GP_HLineXYW(context, 3, i + 120, i, black_pixel);
		GP_HLineXYW(context, 4, i + 160, i, black_pixel);
		GP_HLineXYW(context, 5, i + 200, i, black_pixel);
		GP_HLineXYW(context, 6, i + 240, i, black_pixel);
		GP_HLineXYW(context, 7, i + 280, i, black_pixel);
	}

	for (i = 0; i < 256; i++) {
		for (j = 0; j < 256; j++) {
			uint8_t val = 1.00 * sqrt(i*i + j*j)/sqrt(2) + 0.5;

			GP_Pixel pix = GP_RGBToContextPixel(i, j, val, context);
			GP_PutPixel(context, i + 60, j + 10, pix);
		}
	}

	GP_Text(context, NULL, 60, 270, GP_VALIGN_BELOW|GP_ALIGN_RIGHT,
	        black_pixel, white_pixel, "Lorem Ipsum dolor sit...");

	GP_Text(context, NULL, 60, 290, GP_VALIGN_BELOW|GP_ALIGN_RIGHT,
	        red_pixel, white_pixel, "Lorem Ipsum dolor sit...");

	GP_Text(context, NULL, 60, 310, GP_VALIGN_BELOW|GP_ALIGN_RIGHT,
	        green_pixel, white_pixel, "Lorem Ipsum dolor sit...");

	GP_Text(context, NULL, 60, 330, GP_VALIGN_BELOW|GP_ALIGN_RIGHT,
	        blue_pixel, white_pixel, "Lorem Ipsum dolor sit...");

	/* Update the backend screen */
	GP_BackendFlip(backend);
}
コード例 #9
0
static void redraw(GP_Backend *self)
{
	GP_Context *context = self->context;
	GP_Pixel white_pixel, black_pixel;

	black_pixel = GP_RGBToContextPixel(0x00, 0x00, 0x00, context);
	white_pixel = GP_RGBToContextPixel(0xff, 0xff, 0xff, context);

	GP_Fill(context, black_pixel);
	GP_Line(context, 0, 0, context->w - 1, context->h - 1, white_pixel);
	GP_Line(context, 0, context->h - 1, context->w - 1, 0, white_pixel);

	/* Update the backend screen */
	GP_BackendFlip(self);
}
コード例 #10
0
ファイル: input_example.c プロジェクト: m1ch4ls/gfxprim
static void draw_event(GP_Event *ev)
{
	static GP_Size size = 0;

	if (ev->type != GP_EV_KEY)
		return;

	int align = GP_ALIGN_RIGHT|GP_VALIGN_BOTTOM;

	GP_TextClear(win, NULL, 20, 20, align, black, size);
	size = GP_Print(win, NULL, 20, 20, align,
	                white, black, "Key=%s",
			GP_EventKeyName(ev->val.key.key));

	GP_BackendFlip(backend);
}
コード例 #11
0
static int ev_loop(struct GP_Backend *backend, const char *name)
{
	GP_Event ev;

	if (backend == NULL)
		return 0;

	while (GP_BackendGetEvent(backend, &ev)) {

		printf("-------------------------- %s\n", name);

		GP_EventDump(&ev);

		switch (ev.type) {
		case GP_EV_KEY:
			switch (ev.val.val) {
			case GP_KEY_ESC:
			case GP_KEY_Q:
				GP_BackendExit(backend);
				return 1;
			break;
			}
		break;
		case GP_EV_SYS:
			switch (ev.code) {
			case GP_EV_SYS_RESIZE:
				GP_BackendResizeAck(backend);
				redraw(backend->context);
				GP_BackendFlip(backend);
			break;
			case GP_EV_SYS_QUIT:
				GP_BackendExit(backend);
				return 1;
			break;
			}
		break;
		}

		printf("-----------------------------\n");
	}

	return 0;
}
コード例 #12
0
ファイル: input_example.c プロジェクト: m1ch4ls/gfxprim
int main(int argc, char *argv[])
{
	const char *backend_opts = "X11";
	int opt;

	while ((opt = getopt(argc, argv, "b:h")) != -1) {
		switch (opt) {
		case 'b':
			backend_opts = optarg;
		break;
		case 'h':
			GP_BackendInit(NULL, NULL, stderr);
			return 0;
		break;
		default:
			fprintf(stderr, "Invalid paramter '%c'\n", opt);
			return 1;
		}
	}

	backend = GP_BackendInit(backend_opts, "Input Test", stderr);

	if (backend == NULL) {
		fprintf(stderr, "Failed to initalize backend '%s'\n",
		        backend_opts);
		return 1;
	}

	win = backend->context;

	red   = GP_ColorToContextPixel(GP_COL_RED, win);
	green = GP_ColorToContextPixel(GP_COL_GREEN, win);
	white = GP_ColorToContextPixel(GP_COL_WHITE, win);
	black = GP_ColorToContextPixel(GP_COL_BLACK, win);

	GP_Fill(win, black);
	GP_BackendFlip(backend);

	for (;;) {
		GP_BackendWait(backend);
		event_loop();
	}
}
コード例 #13
0
int main(int argc, char *argv[])
{
	const char *backend_opts = "X11";

	if (argc == 1) {
		fprintf(stderr, "No file specified\n");
		return 1;
	}

	if (argc > 2)
		font = GP_FontFaceLoad(argv[2], 0, 16);

	if (!read_file_head(argv[1]))
		return 1;

	backend = GP_BackendInit(backend_opts, "File View");

	if (backend == NULL) {
		fprintf(stderr, "Failed to initalize backend '%s'\n",
		        backend_opts);
		return 1;
	}

	win = backend->context;

	white_pixel     = GP_RGBToContextPixel(0xff, 0xff, 0xff, win);
	gray_pixel      = GP_RGBToContextPixel(0xbe, 0xbe, 0xbe, win);
	dark_gray_pixel = GP_RGBToContextPixel(0x7f, 0x7f, 0x7f, win);
	black_pixel     = GP_RGBToContextPixel(0x00, 0x00, 0x00, win);
	red_pixel       = GP_RGBToContextPixel(0xff, 0x00, 0x00, win);
	blue_pixel      = GP_RGBToContextPixel(0x00, 0x00, 0xff, win);

	redraw_screen();
	GP_BackendFlip(backend);

	event_loop();

	return 0;
}
コード例 #14
0
ファイル: spiv_help.c プロジェクト: m1ch4ls/gfxprim
static int redraw_help(GP_Backend *backend, unsigned int loff, GP_Coord xoff)
{
	GP_Context *c = backend->context;
	GP_Pixel black = GP_ColorToContextPixel(GP_COL_BLACK, c);
	GP_Pixel white = GP_ColorToContextPixel(GP_COL_WHITE, c);
	int i;

	GP_Fill(c, black);

	for (i = loff; i < keys_help_len; i++) {
		GP_Coord h = 2 + (i - loff) * 15;

		if (h + 2 >= (GP_Coord)c->h)
			goto out;

		GP_Print(c, NULL, 20 + 10 * xoff, h, GP_ALIGN_RIGHT|GP_VALIGN_BOTTOM,
		         white, black, "%s", keys_help[i]);
	}

out:
	GP_BackendFlip(backend);
	return i;
}
コード例 #15
0
ファイル: fonttest.c プロジェクト: m1ch4ls/gfxprim
int main(int argc, char *argv[])
{
	const char *backend_opts = "X11";

	print_instructions();

	GP_SetDebugLevel(10);

	if (argc > 1) {
		font_path = argv[1];
		fprintf(stderr, "\nLoading font '%s'\n", argv[1]);
		font = GP_FontFaceLoad(argv[1], 0, font_h);
	}

	win = GP_BackendInit(backend_opts, "Font Test", stderr);

	if (win == NULL) {
		fprintf(stderr, "Failed to initalize backend '%s'\n",
		        backend_opts);
		return 1;
	}

	white_pixel     = GP_ColorToContextPixel(GP_COL_WHITE, win->context);
	gray_pixel      = GP_ColorToContextPixel(GP_COL_GRAY_LIGHT, win->context);
	dark_gray_pixel = GP_ColorToContextPixel(GP_COL_GRAY_DARK, win->context);
	black_pixel     = GP_ColorToContextPixel(GP_COL_BLACK, win->context);
	red_pixel       = GP_ColorToContextPixel(GP_COL_RED, win->context);
	blue_pixel      = GP_ColorToContextPixel(GP_COL_BLUE, win->context);

	redraw_screen();
	GP_BackendFlip(win);

	event_loop();

	return 0;
}
コード例 #16
0
ファイル: particle_demo.c プロジェクト: m1ch4ls/gfxprim
int main(int argc, char *argv[])
{
	const char *backend_opts = "X11";
	int opt;
	int pause_flag = 0;

	while ((opt = getopt(argc, argv, "b:Ii:Ps:r:")) != -1) {
		switch (opt) {
		case 'b':
			backend_opts = optarg;
		break;
		default:
			fprintf(stderr, "Invalid paramter '%c'\n", opt);
		}
	}

//	GP_SetDebugLevel(10);

	signal(SIGINT, sighandler);
	signal(SIGSEGV, sighandler);
	signal(SIGBUS, sighandler);
	signal(SIGABRT, sighandler);

	init_backend(backend_opts);

	context = backend->context;

	black_pixel = GP_ColorToContextPixel(GP_COL_BLACK, context);
	white_pixel = GP_ColorToContextPixel(GP_COL_WHITE, context);

	GP_Fill(context, black_pixel);
	GP_BackendFlip(backend);

	struct space *space;
	space = space_create(160, 10<<8, 10<<8, (context->w - 10)<<8, (context->h - 10)<<8);

	for (;;) {
		if (backend->Poll)
			GP_BackendPoll(backend);

		usleep(1000);

		/* Read and parse events */
		GP_Event ev;

		while (GP_BackendGetEvent(backend, &ev)) {

			GP_EventDump(&ev);

			switch (ev.type) {
			case GP_EV_KEY:
				if (ev.code != GP_EV_KEY_DOWN)
					continue;

				switch (ev.val.key.key) {
				case GP_KEY_ESC:
				case GP_KEY_ENTER:
				case GP_KEY_Q:
					GP_BackendExit(backend);
					return 0;
				break;
				case GP_KEY_P:
					pause_flag = !pause_flag;
				break;
				case GP_KEY_G:
					space->gay = 1;
				break;
				case GP_KEY_T:
					space->gay = 0;
				break;
				}
			break;
			}
		}

		if (!pause_flag) {
			space_time_tick(space, 1);
			space_draw_particles(context, space);
			GP_BackendFlip(backend);
		}
	}

	GP_BackendExit(backend);

	return 0;
}
コード例 #17
0
static void event_loop(void)
{
	GP_Event ev;

	for (;;) {
		GP_BackendWaitEvent(win, &ev);

		switch (ev.type) {
		case GP_EV_KEY:
			if (ev.code != GP_EV_KEY_DOWN)
				continue;

			switch (ev.val.key.key) {
			case GP_KEY_X:
				win->context->x_swap = !win->context->x_swap;
			break;
			case GP_KEY_Y:
				win->context->y_swap = !win->context->y_swap;
			break;
			case GP_KEY_R:
				win->context->axes_swap = !win->context->axes_swap;
				GP_SWAP(X, Y);
			break;
			case GP_KEY_SPACE:
				font_flag++;

				if (font) {
					if (font_flag > 5)
						font_flag = 0;
				} else {
					if (font_flag > 4)
						font_flag = 0;
				}
			break;
			case GP_KEY_UP:
				style.pixel_xspace++;
				style.pixel_yspace++;
			break;
			case GP_KEY_DOWN:
				style.pixel_xspace--;
				style.pixel_yspace--;
			break;
			case GP_KEY_RIGHT:
				style.pixel_xmul++;
				style.pixel_ymul++;
			break;
			case GP_KEY_LEFT:
				style.pixel_xmul--;
				style.pixel_ymul--;
			break;
			case GP_KEY_ESC:
				GP_BackendExit(win);
				exit(0);
			break;
			}
		break;
		case GP_EV_SYS:
			switch(ev.code) {
			case GP_EV_SYS_QUIT:
				GP_BackendExit(win);
				exit(0);
			break;
			case GP_EV_SYS_RESIZE:
				GP_BackendResizeAck(win);
				X = win->context->w;
				Y = win->context->h;
			break;
			}
		break;
		}

		redraw_screen();
		GP_BackendFlip(win);
	}
}
コード例 #18
0
ファイル: input_example.c プロジェクト: m1ch4ls/gfxprim
static void event_loop(void)
{
	for (;;) {
		GP_BackendWait(backend);

		while (GP_BackendEventsQueued(backend)) {
			GP_Event ev;

			GP_BackendGetEvent(backend, &ev);
			GP_EventDump(&ev);

			switch (ev.type) {
			case GP_EV_KEY:
				draw_event(&ev);

				switch (ev.val.key.key) {
				case GP_KEY_ESC:
					GP_BackendExit(backend);
					exit(0);
				break;
				case GP_BTN_LEFT:
					GP_HLineXXY(win, ev.cursor_x - 3,
					            ev.cursor_x + 3,
						    ev.cursor_y, red);
					GP_VLineXYY(win, ev.cursor_x,
					            ev.cursor_y - 3,
						    ev.cursor_y + 3, red);
					GP_BackendFlip(backend);
				break;
				default:
				break;
				}
			break;
			case GP_EV_REL:
				switch (ev.code) {
				static int size = 0;
				case GP_EV_REL_POS:
					if (GP_EventGetKey(&ev, GP_BTN_LEFT)) {
						GP_PutPixel(win, ev.cursor_x,
						            ev.cursor_y, green);
					}
					int align = GP_ALIGN_RIGHT|GP_VALIGN_BOTTOM;

					GP_TextClear(win, NULL, 20, 40, align,
					             black, size);
					size = GP_Print(win, NULL, 20, 40, align,
					                white, black, "X=%3u Y=%3u dX=%3i dY=%3i",
						        ev.cursor_x, ev.cursor_y,
							ev.val.rel.rx, ev.val.rel.ry);
					GP_BackendFlip(backend);
				break;
				}
			break;
			case GP_EV_SYS:
				switch (ev.code) {
				case GP_EV_SYS_RESIZE:
					GP_BackendResizeAck(backend);
				break;
				case GP_EV_SYS_QUIT:
					GP_BackendExit(backend);
					exit(0);
				break;
				}
			break;
			}
		}
	}
}
コード例 #19
0
void event_loop(void)
{
	GP_Event ev;

	for (;;) {
		GP_BackendWaitEvent(backend, &ev);

		switch (ev.type) {
		case GP_EV_KEY:
			if (ev.code != GP_EV_KEY_DOWN)
				continue;

			switch (ev.val.key.key) {
			case GP_KEY_SPACE:
				if (font)
					font_flag = (font_flag + 1) % 6;
				else
					font_flag = (font_flag + 1) % 5;

				redraw_screen();
				GP_BackendFlip(backend);
			break;
			case GP_KEY_RIGHT:
				tracking++;
				redraw_screen();
				GP_BackendFlip(backend);
			break;
			case GP_KEY_LEFT:
				tracking--;
				redraw_screen();
				GP_BackendFlip(backend);
			break;
			case GP_KEY_UP:
				warp_up(1);
			break;
			case GP_KEY_DOWN:
				warp_down(1);
			break;
			case GP_KEY_DOT:
				space++;
				redraw_screen();
				GP_BackendFlip(backend);
			break;
			case GP_KEY_COMMA:
				space--;
				redraw_screen();
				GP_BackendFlip(backend);
			break;
			case GP_KEY_RIGHT_BRACE:
				mul++;
				redraw_screen();
				GP_BackendFlip(backend);
			break;
			case GP_KEY_LEFT_BRACE:
				if (mul > 0)
					mul--;
				redraw_screen();
				GP_BackendFlip(backend);
			break;
			case GP_KEY_PAGE_UP:
				warp_up(30);
			break;
			case GP_KEY_PAGE_DOWN:
				warp_down(30);
			break;
			case GP_KEY_ESC:
				GP_BackendExit(backend);
				exit(0);
			break;
			}
		break;
		case GP_EV_SYS:
			switch(ev.code) {
			case GP_EV_SYS_QUIT:
				GP_BackendExit(backend);
				exit(0);
			break;
			case GP_EV_SYS_RESIZE:
				GP_BackendResizeAck(backend);
				redraw_screen();
				GP_BackendFlip(backend);
			break;
			}
		break;
		}
	}
}
コード例 #20
0
ファイル: randomshapetest.c プロジェクト: m1ch4ls/gfxprim
void clear_screen(void)
{
	GP_Fill(win->context, black);
	GP_BackendFlip(win);
}