예제 #1
0
int vg_draw_circle(unsigned long x0, unsigned long y0, unsigned long radius, unsigned long color)
{
	// Midpoint circle algorithm

	int x = radius;
	int y = 0;
	int error = 1 - x;

	while (x >= y)
	{
		vg_draw_line(-x + x0, y + y0, x + x0, y + y0, color);
		vg_draw_line(-y + x0, x + y0, y + x0, x + y0, color);
		vg_draw_line(-x + x0, -y + y0, x + x0, -y + y0, color);
		vg_draw_line(-y + x0, -x + y0, y + x0, -x + y0, color);
		y++;
		if (error < 0)
		{
			error += 2 * y + 1;
		}
		else
		{
			x--;
			error += 2 * (y - x + 1);
		}
	}

	return 0;
}
예제 #2
0
int test_line(unsigned short xi, unsigned short yi, unsigned short xf,
		unsigned short yf, unsigned long color) {
	if (vg_init(VBE_VIDEO_MODE) == NULL)
		return 1;

	if(xi > xf && yi > yf){
		unsigned short tmp = xf;
		xf = xi;
		xi = tmp;

		tmp = yf;
		yf = yi;
		yi = tmp;
	}

	if (vg_draw_line(xi, yi, xf, yf, color) != 0) {
		vg_exit();
		return 1;
	}

	vg_update_screen();

	kbd_test_scan(0);

	return vg_exit();
}
예제 #3
0
long vg_get_pixel(unsigned long x, unsigned long y) {

	char *write_address = video_mem;

	if((x < 0) || (x > h_res) || (y < 0) || (y > v_res)){
		vg_draw_line(1,1,200,200,0xF4C3);
		return 1;
	}

	write_address += (bits_per_pixel/8)*((y-1)*h_res+x);

	return (long)*write_address;
}
예제 #4
0
파일: main.c 프로젝트: JoEsteves/lcm
int vg_draw_square(unsigned int xi, unsigned int yi, unsigned int xf, unsigned int yf, unsigned int color)
{
	vg_draw_line(xi,yi, xf, yi, color);
	vg_draw_line(xi,yi, xi, yf, color);
	vg_draw_line(xi,yf, xf, yf, color);
	vg_draw_line(xf,yf, xf, yi, color);

	int i;
	int j;
	int xi2 = xi, yi2 = yi;

	for (i = 0; i < (yf-yi); i++)
	{
		for (j = 0; j < (xf-xi); j++)
		{
			vg_set_pixel(xi2,yi2, color);
			xi2++;
		}
		yi2++;
		xi2 = xi;
	}
}
예제 #5
0
int test_line(unsigned short xi, unsigned short yi, 
		           unsigned short xf, unsigned short yf, unsigned long color) {
	vg_init(GRAPHIC_MODE);

	int ipc_status;
	message msg;
	int request;
	int irq_set;

	irq_set = subscribe_kbd();

	while (scanCode != EXIT_MAKE_CODE) {
		request = driver_receive(ANY, &msg, &ipc_status);
		if (request != 0) {
			printf("driver_receive failed with: %d", request);
			continue;
		}
		if (is_ipc_notify(ipc_status)) {
			switch (_ENDPOINT_P(msg.m_source)) {
			case HARDWARE:
				if (msg.NOTIFY_ARG & irq_set) {
					kbd_handler();
				}
				vg_draw_line(xi,xf,yi,yf,color);
				break;
			default:
				break;
			}
		}
		else {
		}
	}
	unsubscribe_kbd();
	vg_exit();
	return 0;
	
}