Esempio n. 1
0
void draw_all(int mouse){
	unsigned char *buffer = (unsigned char *)0x1000000;

	for(int i = 0; i != SCREEN_HEIGHT * SCREEN_WIDTH; ++i){
		buffer[i] = CYAN;
	}

	render_task(buffer, head_task);
	render_symbol(buffer + mouse - (SYMBOL_HEIGHT / 2 * SCREEN_WIDTH + SYMBOL_WIDTH / 2), 'X', BLACK);

	for(int i = 0; i != SCREEN_HEIGHT * SCREEN_WIDTH; ++i){
		/* Now we write to real video memory */
		*(*(unsigned char *const *)(0x11028) + i) = buffer[i];
	}
}
Esempio n. 2
0
void render_content(unsigned char *buffer, const char *content)
{
  /* Frame */
  render_rectangle(buffer, TITLE_HEIGHT + 8, 4,            LINES * SYMBOL_HEIGHT + 3, COLUMNS * SYMBOL_WIDTH + 2, BLACK);

  /* Area */
  render_rectangle(buffer, CONTENT_TOP,      CONTENT_LEFT, LINES * SYMBOL_HEIGHT + 1, COLUMNS * SYMBOL_WIDTH,     WHITE);

  /* Text */
  for (int i = 0; i != LINES; ++i)
    {
      for (int j = 0; j != COLUMNS; ++j){
        render_symbol(buffer + (CONTENT_TOP + i * SYMBOL_HEIGHT) * SCREEN_WIDTH + CONTENT_LEFT + j * SYMBOL_WIDTH, content[i * COLUMNS + j], BLACK);
      }
    }
}
Esempio n. 3
0
/* Renders window `task' and all next windows recursively */
void render_task(unsigned char *buffer, struct task_t *task){
	if(task != 0){
		/* We render front task last */
		render_task(buffer, task->next);

		render_rectangle(buffer + task->begin, 0, 0, task->size / SCREEN_WIDTH + 1, task->size % SCREEN_WIDTH,     BLACK);
		render_rectangle(buffer + task->begin, 1, 1, task->size / SCREEN_WIDTH - 1, task->size % SCREEN_WIDTH - 2, LIGHT_GRAY);
		render_rectangle(buffer + task->begin, 2, 2, task->size / SCREEN_WIDTH - 2, task->size % SCREEN_WIDTH - 3, DARK_GRAY);
		render_rectangle(buffer + task->begin, 2, 2, task->size / SCREEN_WIDTH - 3, task->size % SCREEN_WIDTH - 4, GRAY);
		render_rectangle(buffer + task->begin, 4, 4, TITLE_HEIGHT,                  task->size % SCREEN_WIDTH - 8, BLUE);

		for(int i = 0; task->cmdline[i] != 0; ++i){
			render_symbol(buffer + task->begin + 5 * SCREEN_WIDTH + 6 + i * SYMBOL_WIDTH, task->cmdline[i], WHITE);
		}

		/* Render window content */
		(*task->handler)(task, msg_render, (int)buffer);
	}
}