From f9e8f2736c84a8ec12ee26ff2b2da11a4ee97b7f Mon Sep 17 00:00:00 2001 From: Yourtion Date: Fri, 15 Apr 2016 11:05:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=98=BE=E7=A4=BA=E7=AA=97=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 11_day/bootpack.c | 65 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/11_day/bootpack.c b/11_day/bootpack.c index c7ad530..377a2e6 100644 --- a/11_day/bootpack.c +++ b/11_day/bootpack.c @@ -12,8 +12,8 @@ void HariMain(void) struct MOUSE_DEC mdec; struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR; struct SHTCTL *shtctl; - struct SHEET *sht_back, *sht_mouse; - unsigned char *buf_back, buf_mouse[256]; + struct SHEET *sht_back, *sht_mouse, *sht_win; + unsigned char *buf_back, buf_mouse[256], *buf_win; init_gdtidt(); init_pic(); @@ -35,17 +35,25 @@ void HariMain(void) shtctl = shtctl_init(memman, binfo->vram, binfo->scrnx, binfo->scrny); sht_back = sheet_alloc(shtctl); sht_mouse = sheet_alloc(shtctl); + sht_win = sheet_alloc(shtctl); buf_back = (unsigned char *) memman_alloc_4k(memman, binfo->scrnx * binfo->scrny); + buf_win = (unsigned char *) memman_alloc_4k(memman, 160 * 68); sheet_setbuf(sht_back, buf_back, binfo->scrnx, binfo->scrny, -1); /* 没有透明色 */ sheet_setbuf(sht_mouse, buf_mouse, 16, 16, 99); /* 透明色号99 */ + sheet_setbuf(sht_win, buf_win, 160, 68, -1); /* 没有透明色 */ init_screen8(buf_back, binfo->scrnx, binfo->scrny); init_mouse_cursor8(buf_mouse, 99); /* 背景色号99 */ + make_window8(buf_win, 160, 68, "window"); + putfonts8_asc(buf_win, 160, 24, 28, COL8_000000, "Welcome to"); + putfonts8_asc(buf_win, 160, 24, 44, COL8_000000, " Haribote-OS!"); sheet_slide(sht_back, 0, 0); mx = (binfo->scrnx - 16) / 2; /* 按显示在画面中央来计算坐标 */ my = (binfo->scrny - 28 - 16) / 2; sheet_slide(sht_mouse, mx, my); + sheet_slide(sht_win, 80, 72); sheet_updown(sht_back, 0); - sheet_updown(sht_mouse, 1); + sheet_updown(sht_win, 1); + sheet_updown(sht_mouse, 2); sprintf(s, "(%3d, %3d)", mx, my); putfonts8_asc(buf_back, binfo->scrnx, 0, 0, COL8_FFFFFF, s); sprintf(s, "memory %dMB free : %dKB", memtotal / (1024 * 1024), memman_total(memman) / 1024); @@ -107,3 +115,54 @@ void HariMain(void) } } } + +void make_window8(unsigned char *buf, int xsize, int ysize, char *title) +{ + static char closebtn[14][16] = { + "OOOOOOOOOOOOOOO@", + "OQQQQQQQQQQQQQ$@", + "OQQQQQQQQQQQQQ$@", + "OQQQ@@QQQQ@@QQ$@", + "OQQQQ@@QQ@@QQQ$@", + "OQQQQQ@@@@QQQQ$@", + "OQQQQQQ@@QQQQQ$@", + "OQQQQQ@@@@QQQQ$@", + "OQQQQ@@QQ@@QQQ$@", + "OQQQ@@QQQQ@@QQ$@", + "OQQQQQQQQQQQQQ$@", + "OQQQQQQQQQQQQQ$@", + "O$$$$$$$$$$$$$$@", + "@@@@@@@@@@@@@@@@" + }; + + int x, y; + char c; + boxfill8(buf, xsize, COL8_C6C6C6, 0, 0, xsize - 1, 0 ); + boxfill8(buf, xsize, COL8_FFFFFF, 1, 1, xsize - 2, 1 ); + boxfill8(buf, xsize, COL8_C6C6C6, 0, 0, 0, ysize - 1); + boxfill8(buf, xsize, COL8_FFFFFF, 1, 1, 1, ysize - 2); + boxfill8(buf, xsize, COL8_848484, xsize - 2, 1, xsize - 2, ysize - 2); + boxfill8(buf, xsize, COL8_000000, xsize - 1, 0, xsize - 1, ysize - 1); + boxfill8(buf, xsize, COL8_C6C6C6, 2, 2, xsize - 3, ysize - 3); + boxfill8(buf, xsize, COL8_000084, 3, 3, xsize - 4, 20 ); + boxfill8(buf, xsize, COL8_848484, 1, ysize - 2, xsize - 2, ysize - 2); + boxfill8(buf, xsize, COL8_000000, 0, ysize - 1, xsize - 1, ysize - 1); + putfonts8_asc(buf, xsize, 24, 4, COL8_FFFFFF, title); + + for (y = 0; y < 14; y++) { + for (x = 0; x < 16; x++) { + c = closebtn[y][x]; + if (c == '@') { + c = COL8_000000; + } else if (c == '$') { + c = COL8_848484; + } else if (c == 'Q') { + c = COL8_C6C6C6; + } else { + c = COL8_FFFFFF; + } + buf[(5 + y) * xsize + (xsize - 21 + x)] = c; + } + } + return; +} \ No newline at end of file