+++ /dev/null
-\r
-#include "core.h"\r
-\r
-void (*Drawing_Fill_Rectangle)(void *vram, uint xsize, uint c, uint x0, uint y0, uint x1, uint y1);\r
-void (*Drawing_Put_String)(void *vram, uint xsize, uint x, uint y, uint c, const uchar *s);\r
-void (*Drawing_Draw_Point)(void *vram, uint xsize, uint x, uint y, uint c);\r
-//Drawing\82É\8aÜ\82Ü\82ê\82é\92á\83\8c\83x\83\8b\95`\89æ\8aÖ\90\94\82Í\91S\82Ä\81A\8dÀ\95W\82Í\95\84\8d\86\82È\82µ\90®\90\94\82Å\82 \82è\81Avram\82Ì\8d¶\8fã\82Ì\8dÀ\95W\82ð\8c´\93_(0, 0)\82Æ\82µ\82Ä\81Ax\82Í\89E\95û\8cü\81Ay\82Í\89º\95û\8cü\82É\91\9d\89Á\82·\82é\81B\r
-//\82Ü\82½\81A\93ñ\93_\82Ì\8dÀ\95W\82ð\82Æ\82é\8aÖ\90\94\82Í\81A\81i\8aî\96{\93I\82É\81j\91S\82Ä\88ø\90\94\8d¶\91¤\82ªx\90¬\95ª\82Ì\8f¬\82³\82¢\91¤\81i\8c´\93_\82É\8bß\82¢\81j\82Å\82È\82¯\82ê\82Î\82È\82ç\82È\82¢\81B\r
-//\8d\82\83\8c\83x\83\8b\95`\89æ\8aÖ\90\94\82Å\82Í\81A\82»\82ê\82ç\82ð\8fã\8eè\82\83\89\83b\83v\82·\82×\82«\82Å\82 \82é\81B\r
-\r
-void Initialize_Drawing(void)\r
-{\r
- IO_DisplayControl *dispctrl;\r
-\r
- dispctrl = System_Display_Get_Controller();\r
-\r
- if(dispctrl->bpp == 8){\r
- Drawing_Fill_Rectangle = Drawing08_Fill_Rectangle;\r
- Drawing_Put_String = Drawing08_Put_String;\r
- Drawing_Draw_Point = Drawing08_Draw_Point;\r
- Drawing08_Initialize_Palette();\r
- } else if(dispctrl->bpp == 16){\r
- Drawing_Fill_Rectangle = Drawing16_Fill_Rectangle;\r
- Drawing_Put_String = Drawing16_Put_String;\r
- Drawing_Draw_Point = Drawing16_Draw_Point;\r
- } else if(dispctrl->bpp == 32){\r
- Drawing_Fill_Rectangle = Drawing32_Fill_Rectangle;\r
- Drawing_Put_String = Drawing32_Put_String;\r
- Drawing_Draw_Point = Drawing32_Draw_Point;\r
- } else{\r
- Drawing_Fill_Rectangle = Drawing_Invalid_Fill_Rectangle;\r
- Drawing_Put_String = Drawing_Invalid_Put_String;\r
- Drawing_Draw_Point = Drawing_Invalid_Draw_Point;\r
- #ifdef CHNOSPROJECT_DEBUG_DRAWING\r
- debug("Initalise_Drawing:Not implemented %d bpp.\n", dispctrl->bpp);\r
- #endif\r
- }\r
- return;\r
-}\r
-\r
-void Drawing_Invalid_Fill_Rectangle(void *vram, uint xsize, uint c, uint x0, uint y0, uint x1, uint y1)\r
-{\r
- #ifdef CHNOSPROJECT_DEBUG_DRAWING\r
- debug("Drawing_Invalid_Fill_Rectangle:[0x%X] xsize:%d color:0x%X\nDrawing_Invalid_Fill_Rectangle: (%d, %d) -> (%d, %d)\n", vram, xsize, c, x0, y0, x1, y1);\r
- #endif\r
- return;\r
-}\r
-\r
-void Drawing_Invalid_Put_String(void *vram, uint xsize, uint x, uint y, uint c, const uchar *s)\r
-{\r
- #ifdef CHNOSPROJECT_DEBUG_DRAWING\r
- debug("Drawing_Invalid_Put_String:[0x%X] xsize:%d (%d, %d) color:0x%X\nDrawing_Invalid_Put_String:>%s\n", vram, xsize, x, y, c, s);\r
- #endif\r
- return;\r
-}\r
-\r
-void Drawing_Invalid_Draw_Point(void *vram, uint xsize, uint x, uint y, uint c)\r
-{\r
- #ifdef CHNOSPROJECT_DEBUG_DRAWING\r
- debug("Drawing_Invalid_Draw_Point:[0x%X] xsize:%d (%d, %d) color:0x%X\n", vram, xsize, x, y, c);\r
- #endif\r
- return;\r
-}\r
-\r
-void Drawing_Draw_Line_PQ(void *vram, uint xsize, uint c, uint x0, uint y0, uint x1, uint y1)\r
-{\r
- uint lx;\r
- uint i;\r
- uint a;\r
-\r
-//if negative position\r
- if((x0 & 0x80000000) != 0 || (y0 & 0x80000000) != 0 || (x1 & 0x80000000) != 0 || (y1 & 0x80000000) != 0){\r
- return;\r
- }\r
-\r
- if(x1 < x0){\r
- lx = x0;\r
- x0 = x1;\r
- x1 = lx;\r
-\r
- lx = y0;\r
- y0 = y1;\r
- y1 = lx;\r
- } else if(x1 == x0){\r
- if(y0 <= y1){\r
- for(i = 0; i < y1 - y0 + 1; i++){\r
- Drawing_Draw_Point(vram, xsize, x0, y0 + i, c);\r
- }\r
- } else{\r
- for(i = 0; i < y0 - y1 + 1; i++){\r
- Drawing_Draw_Point(vram, xsize, x0, y1 + i, c);\r
- }\r
- }\r
- return;\r
- }\r
-\r
- lx = x1 - x0;\r
- if(lx == 0){\r
- lx = 1;\r
- }\r
-\r
- if(y0 <= y1){ //+a\r
- a = ((y1 - y0) << 10) / lx;\r
- for(i = 0; i < lx; i++){\r
- Drawing_Draw_Line_PQ(vram, xsize, c, x0 + i, y0 + ((i * a) >> 10), x0 + i, y0 + (((i + 1) * a) >> 10));\r
- }\r
- } else{ //-a\r
- a = ((y0 - y1) << 10) / lx;\r
- for(i = 0; i < lx; i++){\r
- Drawing_Draw_Line_PQ(vram, xsize, c, x0 + i, y0 - ((i * a) >> 10), x0 + i, y0 - (((i + 1) * a) >> 10));\r
- }\r
- }\r
-\r
- Drawing_Draw_Point(vram, xsize, x1, y1, c);\r
-\r
- return;\r
-}\r
-\r
-void Drawing_Draw_Circle(void *vram, uint xsize, uint x, uint y, uint c, uint r)\r
-{\r
- uint i, r2;\r
- uint py0, py1;\r
-\r
- if(r > 0xfff){\r
- return;\r
- }\r
-\r
- r2 = r * r;\r
-\r
- for(i = 0; i < r; i++){\r
- py0 = (isqrt((r2 - (i * i)) << 8) + (1 << 2)) >> 4;\r
- py1 = (isqrt((r2 - ((i + 1) * (i + 1))) << 8) + (1 << 2)) >> 4;\r
- Drawing_Draw_Line_PQ(vram, xsize, c, x + i, y + py0, x + i + 1, y + py1);\r
- Drawing_Draw_Line_PQ(vram, xsize, c, x - i, y + py0, x - i - 1, y + py1);\r
- Drawing_Draw_Line_PQ(vram, xsize, c, x - i, y - py0, x - i - 1, y - py1);\r
- Drawing_Draw_Line_PQ(vram, xsize, c, x + i, y - py0, x + i + 1, y - py1);\r
- }\r
- return;\r
-}\r
-\r
-void Drawing_Fill_Circle(void *vram, uint xsize, uint x, uint y, uint c, uint r)\r
-{\r
- uint i, r2;\r
- uint py0, py1;\r
-\r
- if(r > 0xfff){\r
- return;\r
- }\r
-\r
- r2 = r * r;\r
-\r
- for(i = 0; i < r; i ++){\r
- py0 = (isqrt((r2 - (i * i)) << 8) + (1 << 2)) >> 4;\r
- py1 = (isqrt((r2 - ((i + 1) * (i + 1))) << 8) + (1 << 2)) >> 4;\r
- Drawing_Draw_Line_PQ(vram, xsize, c, x + i + 1, y - py1, x + i + 1, y + py1);\r
- Drawing_Draw_Line_PQ(vram, xsize, c, x - i - 1, y - py1, x - i - 1, y + py1);\r
- }\r
- Drawing_Draw_Line_PQ(vram, xsize, c, x, y - r, x, y + r);\r
- return;\r
-}\r
-\r