+++ /dev/null
-#include "core.h"\r
-\r
-void scrool_win_8(UI_Window *winfo, uchar *vram);\r
-void scrool_win_16(UI_Window *winfo, ushort *vram);\r
-void scrool_win_32(UI_Window *winfo, uint *vram);\r
-\r
-char closebtn[16][40] = {\r
- "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",\r
- "OQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ$@",\r
- "OQQQQQQQQQQQQQJJQQQQQQQQJJQQQQQQQQQQQQ$@",\r
- "OQQQQQQQQQQQQQJJJQQQQQQJJJQQQQQQQQQQQQ$@",\r
- "OQQQQQQQQQQQQQQJJJQQQQJJJQQQQQQQQQQQQQ$@",\r
- "OQQQQQQQQQQQQQQQJJJQQJJJQQQQQQQQQQQQQQ$@",\r
- "OQQQQQQQQQQQQQQQQJJJJJJQQQQQQQQQQQQQQQ$@",\r
- "OQQQQQQQQQQQQQQQQQJJJJQQQQQQQQQQQQQQQQ$@",\r
- "OQQQQQQQQQQQQQQQQQJJJJQQQQQQQQQQQQQQQQ$@",\r
- "OQQQQQQQQQQQQQQQQJJJJJJQQQQQQQQQQQQQQQ$@",\r
- "OQQQQQQQQQQQQQQQJJJQQJJJQQQQQQQQQQQQQQ$@",\r
- "OQQQQQQQQQQQQQQJJJQQQQJJJQQQQQQQQQQQQQ$@",\r
- "OQQQQQQQQQQQQQJJJQQQQQQJJJQQQQQQQQQQQQ$@",\r
- "OQQQQQQQQQQQQQJJQQQQQQQQJJQQQQQQQQQQQQ$@",\r
- "OQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ$@",\r
- "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"\r
-};\r
-\r
-void init_windows(void)\r
-{\r
- int i;\r
-\r
- for(i = 0;i < MAX_WINDOWS;i++){\r
- system.ui.window.ctrl.winfos[i].flags = initialized;\r
- system.ui.window.ctrl.winfos[i].buf = (void *)0x00000000;\r
- system.ui.window.ctrl.winfos[i].app_buf = (void *)0x00000000;\r
- system.ui.window.ctrl.winfos[i].app_buf_bits = 0;\r
- system.ui.window.ctrl.winfos[i].task = (UI_Task *)0;\r
- }\r
- return;\r
-}\r
-\r
-UI_Window *window_alloc(void)\r
-{\r
- UI_Window *win;\r
- int i;\r
-\r
- for(i = 0;i < MAX_WINDOWS;i++){\r
- if(system.ui.window.ctrl.winfos[i].flags == initialized){\r
- win = &system.ui.window.ctrl.winfos[i];\r
- win->flags = allocated;\r
- win->buf = (void *)0x00000000;\r
- win->app_buf = (void *)0x00000000;\r
- win->app_buf_bits = 0;\r
- win->task = (UI_Task *)0;\r
- return win;\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-void window_free(UI_Window *winfo)\r
-{\r
- winfo->flags = initialized;\r
- winfo->task = (UI_Task *)0;\r
- return;\r
-}\r
-\r
-UI_Window *make_window(uchar *title, int xsize, int ysize, int px, int py, int height, bool active)\r
-{\r
- UI_Window *winfo = window_alloc();\r
-\r
- if(winfo == 0) goto err;\r
- winfo->winxsize = xsize + 8;\r
- winfo->winysize = ysize + 28;\r
- winfo->xsize = xsize;\r
- winfo->ysize = ysize;\r
- winfo->position.x = px;\r
- winfo->position.y = py;\r
- winfo->origin.x = 4;\r
- winfo->origin.y = 24;\r
- winfo->win = sheet_alloc();\r
- winfo->buf = (uint *)sys_memman_alloc((winfo->winxsize * winfo->winysize) * (system.data.info.vesa.BitsPerPixel >> 2));\r
-\r
- sheet_setbuf(winfo->win, winfo->buf, winfo->winxsize, winfo->winysize,INV_COL32); \r
-\r
- change_window(winfo, title, active);\r
- boxfill_win(winfo, 0xFFFFFF, 0, 0, winfo->xsize, winfo->ysize);\r
-\r
- sheet_slide(winfo->win, px, py);\r
- sheet_updown(winfo->win, height); \r
-err:\r
- return winfo;\r
-}\r
-\r
-UI_Window *make_window_app(uchar *title, int xsize, int ysize, int px, int py, int height, bool active, uint *buf, UI_Task *task)\r
-{\r
- UI_Window *winfo = window_alloc();\r
-\r
- if(winfo == 0) goto err;\r
- winfo->winxsize = xsize + 8;\r
- winfo->winysize = ysize + 28;\r
- winfo->xsize = xsize;\r
- winfo->ysize = ysize;\r
- winfo->position.x = px;\r
- winfo->position.y = py;\r
- winfo->origin.x = 4;\r
- winfo->origin.y = 24;\r
- winfo->win = sheet_alloc();\r
- winfo->buf = buf;\r
- winfo->task = task;\r
-\r
- sheet_setbuf(winfo->win, winfo->buf, winfo->winxsize, winfo->winysize,INV_COL32); \r
-\r
- change_window(winfo, title, active);\r
- boxfill_win(winfo, 0xFFFFFF, 0, 0, winfo->xsize, winfo->ysize);\r
-\r
- sheet_slide(winfo->win, px, py);\r
- sheet_updown(winfo->win, height); \r
-err:\r
- return winfo;\r
-}\r
-\r
-UI_Window *make_window_app_compatible_hrb(uchar *title, int xsize, int ysize, int px, int py, int height, bool active, uint *buf, UI_Task *task)\r
-{\r
- xsize = xsize - 8;\r
- ysize = ysize - 28;\r
- return make_window_app(title, xsize, ysize, px, py, height, active, buf, task);\r
-}\r
-\r
-void free_window_app(UI_Window *winfo)\r
-{\r
- sheet_free(winfo->win);\r
- window_free(winfo);\r
- return;\r
-}\r
-\r
-void change_window(UI_Window *winfo, uchar *title, bool active)\r
-{\r
- uint color = 0;\r
- int x = 0, y = 0;\r
- char c;\r
-\r
- for (; *title != 0x00; title++) {\r
- winfo->title[x] = *title; \r
- x++;\r
- }\r
- winfo->title[x] = 0x00;\r
- winfo->active = active; \r
-\r
- if(system.data.info.vesa.BitsPerPixel == 8){\r
- if(active) color = WIN_COL8_ACTIVE;\r
- else color = WIN_COL8_INACTIVE;\r
- } else if(system.data.info.vesa.BitsPerPixel == 16){\r
- if(active) color = WIN_COL16_ACTIVE;\r
- else color = WIN_COL16_INACTIVE;\r
- } else if(system.data.info.vesa.BitsPerPixel == 32){\r
- if(active) color = WIN_COL32_ACTIVE;\r
- else color = WIN_COL32_INACTIVE;\r
- }\r
-\r
- boxfill_i(winfo->buf, winfo->winxsize, color, 0, 0, winfo->winxsize, 24); \r
- boxfill_i(winfo->buf, winfo->winxsize, color, 0, 0, 4, winfo->winysize);\r
- boxfill_i(winfo->buf, winfo->winxsize, color, winfo->winxsize - 4, 0, winfo->winxsize, winfo->winysize);\r
- boxfill_i(winfo->buf, winfo->winxsize, color, 0, winfo->winysize - 4, winfo->winxsize, winfo->winysize);\r
-\r
-\r
- line_i(winfo->buf, winfo->winxsize, 0, 0, winfo->winxsize - 1, 0, 0xFFFFFF);\r
- line_i(winfo->buf, winfo->winxsize, 0, 0, 0, winfo->winysize - 1, 0xFFFFFF);\r
- line_i(winfo->buf, winfo->winxsize, winfo->winxsize - 1, 0, winfo->winxsize - 1, winfo->winysize - 1, 0x000000);\r
- line_i(winfo->buf, winfo->winxsize, 0, winfo->winysize - 1, winfo->winxsize - 1, winfo->winysize - 1, 0x000000);\r
-\r
- putfonts_asc_sht_i(winfo->win, 4, 4, 0xFFFFFF, color, winfo->title);\r
-\r
- for(y = 0; y < 16; y++){\r
- for(x = 0; x < 40; x++){\r
- c = closebtn[y][x];\r
- if(c == '@') color = 0xFF0000;\r
- else if(c == '$') color = 0xFF0000;\r
- else if(c == 'Q') color = 0xFF0000;\r
- else if(c == 'J') color = 0xFFFFFF;\r
- else if(c == 'O') color = 0xFFFFFF;\r
- point_i(winfo->buf, winfo->winxsize - 44 + x, y, color, winfo->winxsize);\r
- }\r
- }\r
- refresh_window(winfo);\r
- return;\r
-}\r
-\r
-void change_window_title(UI_Window *winfo, uchar *title)\r
-{\r
- change_window(winfo, title, winfo->active);\r
-}\r
-\r
-void change_window_active(UI_Window *winfo, bool active)\r
-{\r
- change_window(winfo, winfo->title, active);\r
-}\r
-\r
-void slide_window(UI_Window *winfo, int px, int py)\r
-{\r
- winfo->position.x = px;\r
- winfo->position.y = py;\r
-\r
- sheet_slide(winfo->win, winfo->position.x, winfo->position.y);\r
- return;\r
-}\r
-\r
-void refresh_window(UI_Window *winfo)\r
-{\r
- sheet_refresh_full(winfo->win);\r
- return;\r
-}\r
-\r
-void refresh_window_alpha(UI_Window *winfo)\r
-{\r
- sheet_refresh_full_alpha(winfo->win);\r
- return;\r
-}\r
-\r
-void boxfill_win(UI_Window *winfo, uint c, int x0, int y0, int x1, int y1)\r
-{\r
- if(x0 < 0 || y0 < 0 || x1 > winfo->xsize || y1 > winfo->ysize) goto err;\r
-\r
- boxfill_i(winfo->buf, winfo->winxsize, c, winfo->origin.x + x0, winfo->origin.y + y0, winfo->origin.x + x1, winfo->origin.y + y1);\r
- sheet_refresh(winfo->win, x0 + winfo->origin.x, y0 + winfo->origin.y, x1 + winfo->origin.x, y1 + winfo->origin.y);\r
-err:\r
- return;\r
-}\r
-\r
-void point_win(UI_Window *winfo, uint c, int x, int y)\r
-{\r
- point_i(winfo->buf, x + winfo->origin.x, y + winfo->origin.y, c, winfo->winxsize);\r
- return;\r
-}\r
-\r
-void putfonts_win(UI_Window *winfo, int x, int y, uint c, uint bc, const uchar *s)\r
-{\r
- if(x < 0 || y < 0 || x > winfo->xsize || y > winfo->ysize) goto err;\r
- putfonts_asc_sht_i(winfo->win, x + winfo->origin.x, y + winfo->origin.y, c, bc, s);\r
-err:\r
- return;\r
-}\r
-\r
-void putfonts_win_no_bc(UI_Window *winfo, int x, int y, uint c, const uchar *s)\r
-{\r
- if(x < 0 || y < 0 || x > winfo->xsize || y > winfo->ysize) goto err;\r
- putfonts_asc_sht_i_no_bc(winfo->win, x + winfo->origin.x, y + winfo->origin.y, c, s);\r
-err:\r
- return;\r
-}\r
-\r
-void scrool_win(UI_Window *winfo)\r
-{\r
- if(system.data.info.vesa.BitsPerPixel == 8) scrool_win_8(winfo, winfo->buf);\r
- else if(system.data.info.vesa.BitsPerPixel == 16) scrool_win_16(winfo, winfo->buf);\r
- else if(system.data.info.vesa.BitsPerPixel == 32) scrool_win_32(winfo, winfo->buf);\r
- boxfill_win(winfo, 0x000000, 0, winfo->ysize - 16, winfo->xsize, winfo->ysize);\r
- return;\r
-}\r
-\r
-void scrool_win_32(UI_Window *winfo, uint *vram)\r
-{\r
- int x, y;\r
- for (y = winfo->origin.y; y < winfo->ysize + winfo->origin.y - 16; y++) {\r
- for (x = winfo->origin.x; x < winfo->xsize + winfo->origin.x; x++) {\r
- vram[x + y * winfo->winxsize] = vram[x + (y + 16) * winfo->winxsize];\r
- }\r
- }\r
- return;\r
-}\r
-\r
-void scrool_win_16(UI_Window *winfo, ushort *vram)\r
-{\r
- int x, y;\r
-\r
- for (y = winfo->origin.y; y < winfo->ysize + winfo->origin.y - 16; y++) {\r
- for (x = winfo->origin.x; x < winfo->xsize + winfo->origin.x; x++) {\r
- vram[x + y * winfo->winxsize] = vram[x + (y + 16) * winfo->winxsize];\r
- }\r
- }\r
- return;\r
-}\r
-\r
-void scrool_win_8(UI_Window *winfo, uchar *vram)\r
-{\r
- int x, y;\r
-\r
- for (y = winfo->origin.y; y < winfo->ysize + winfo->origin.y - 16; y++) {\r
- for (x = winfo->origin.x; x < winfo->xsize + winfo->origin.x; x++) {\r
- vram[x + y * winfo->winxsize] = vram[x + (y + 16) * winfo->winxsize];\r
- }\r
- }\r
- return;\r
-}\r
-\r
-void line_win(UI_Window *winfo, int x0, int y0, int x1, int y1, uint c)\r
-{\r
- line_i(winfo->buf, winfo->winxsize, x0 + winfo->origin.x, y0 + winfo->origin.y, x1 + winfo->origin.x, y1 + winfo->origin.y, c);\r
- return;\r
-}\r
-\r
-void draw_hexagon_win(UI_Window *winfo, int a, int x, int y, uint c)\r
-{\r
- draw_hexagon_i(winfo->buf, winfo->winxsize, a, x + winfo->origin.x, y + winfo->origin.y, c);\r
- return;\r
-}\r
-\r
-\r
-\r