+++ /dev/null
-\r
-#include "core.h"\r
-\r
-uint Sheet16_Internal_SetBuffer(UI_Sheet *sheet, void *vram, uint xsize, uint ysize, uint bpp)\r
-{\r
- if(xsize > SHEET_MAX_XSIZE){\r
- #ifdef CHNOSPROJECT_DEBUG_SHEET\r
- debug("Sheet16_Internal_SetBuffer:Too large xsize.\n");\r
- #endif\r
- return 1;\r
- }\r
- if(ysize > SHEET_MAX_YSIZE){\r
- #ifdef CHNOSPROJECT_DEBUG_SHEET\r
- debug("Sheet16_Internal_SetBuffer:Too large ysize.\n");\r
- #endif\r
- return 2;\r
- }\r
-\r
- sheet->size.x = xsize;\r
- sheet->size.y = ysize;\r
- sheet->bpp = bpp;\r
-\r
- if(sheet->flags.bit.vram_auto_allocated){\r
- System_Memory_Free(sheet->vram, sheet->vramsize);\r
- sheet->flags.bit.vram_auto_allocated = False;\r
- }\r
-\r
- if(vram == Null){\r
- sheet->vram = System_Memory_Allocate(xsize * ysize * 2);\r
- sheet->flags.bit.vram_auto_allocated = True;\r
- #ifdef CHNOSPROJECT_DEBUG_SHEET\r
- debug("Sheet16_Internal_SetBuffer:Auto Allocation.\n");\r
- #endif\r
- } else{\r
- sheet->vram = vram;\r
- }\r
-\r
- sheet->vramsize = xsize * ysize * 2;\r
- sheet->Config_Functions = &Sheet16_Config_Functions;\r
- sheet->IsVisiblePixel = &Sheet_Internal_IsVisiblePixel_Invalid;\r
- sheet->flags.bit.using_invcol = False;\r
-\r
- sheet->Drawing.Fill_Rectangle = &Sheet16_Drawing_Fill_Rectangle;\r
- sheet->Drawing.Put_String = &Sheet16_Drawing_Put_String;\r
- sheet->Drawing.Draw_Point = &Sheet16_Drawing_Draw_Point;\r
-\r
- sheet->flags.bit.buffer_configured = True;\r
-\r
- return 0;\r
-}\r
-\r
-//set function address from parent's bpp and own bpp.\r
-uint Sheet16_Config_Functions(UI_Sheet *sheet)\r
-{\r
- if(sheet == Null){\r
- #ifdef CHNOSPROJECT_DEBUG_SHEET\r
- debug("Sheet16_Config_Functions:Null sheet.\n");\r
- #endif\r
- return 0;\r
- }\r
- if(sheet->parent == Null){\r
- #ifdef CHNOSPROJECT_DEBUG_SHEET\r
- debug("Sheet16_Config_Functions:Null parent.\n");\r
- #endif\r
- return 1;\r
- }\r
-\r
- if(sheet->parent->bpp == 16){\r
- sheet->RefreshSheet = &Sheet16_Internal_RefreshSheet_To_16;\r
- } else if(sheet->parent->bpp == 8){\r
- sheet->RefreshSheet = &Sheet16_Internal_RefreshSheet_To_08;\r
- } else if(sheet->parent->bpp == 32){\r
- sheet->RefreshSheet = &Sheet16_Internal_RefreshSheet_To_32;\r
- } else{\r
- #ifdef CHNOSPROJECT_DEBUG_SHEET\r
- debug("Sheet16_Config_Functions:Not implemented refresh function to bpp %d.\n", sheet->parent->bpp);\r
- #endif\r
- }\r
- return 0;\r
-}\r
-\r
-uint Sheet16_Internal_RefreshSheet_To_16(UI_Sheet *sheet, int px0, int py0, int px1, int py1)\r
-{\r
- DATA_Location2D p, r;\r
- int x, y;\r
-\r
- if(sheet->parent->map == Null){\r
- #ifdef CHNOSPROJECT_DEBUG_SHEET\r
- debug("Sheet16_Internal_RefreshSheet_To_16:Null map.\n");\r
- #endif\r
- return 1;\r
- }\r
-\r
- Sheet_Internal_GetLocationP(sheet, &p);\r
- Sheet_Internal_GetLocationR(sheet, &r);\r
-\r
- if(p.x < px0){\r
- p.x = px0;\r
- }\r
- if(p.y < py0){\r
- p.y = py0;\r
- }\r
- if(r.x > px1){\r
- r.x = px1;\r
- }\r
- if(r.y > py1){\r
- r.y = py1;\r
- }\r
-\r
- if(p.x < 0){\r
- p.x = 0;\r
- }\r
- if(p.y < 0){\r
- p.y = 0;\r
- }\r
- if(r.x >= (int)sheet->parent->size.x){\r
- r.x = (int)sheet->parent->size.x - 1;\r
- }\r
- if(r.y >= (int)sheet->parent->size.y){\r
- r.y = (int)sheet->parent->size.y - 1;\r
- }\r
-\r
- for(y = p.y; y <= r.y; y++){\r
- for(x = p.x; x <= r.x; x++){\r
- if(sheet->parent->map[y * sheet->parent->size.x + x] == (uint)sheet){\r
- ((ushort *)sheet->parent->vram)[y * sheet->parent->size.x + x] = ((ushort *)sheet->vram)[(y - sheet->location.y) * sheet->size.x + (x - sheet->location.x)];\r
- }\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-uint Sheet16_Internal_RefreshSheet_To_08(UI_Sheet *sheet, int px0, int py0, int px1, int py1)\r
-{\r
- DATA_Location2D p, r;\r
- int x, y;\r
-\r
- if(sheet->parent->map == Null){\r
- #ifdef CHNOSPROJECT_DEBUG_SHEET\r
- debug("Sheet16_Internal_RefreshSheet_To_08:Null map.\n");\r
- #endif\r
- return 1;\r
- }\r
-\r
- Sheet_Internal_GetLocationP(sheet, &p);\r
- Sheet_Internal_GetLocationR(sheet, &r);\r
-\r
- if(p.x < px0){\r
- p.x = px0;\r
- }\r
- if(p.y < py0){\r
- p.y = py0;\r
- }\r
- if(r.x > px1){\r
- r.x = px1;\r
- }\r
- if(r.y > py1){\r
- r.y = py1;\r
- }\r
-\r
- if(p.x < 0){\r
- p.x = 0;\r
- }\r
- if(p.y < 0){\r
- p.y = 0;\r
- }\r
- if(r.x >= (int)sheet->parent->size.x){\r
- r.x = (int)sheet->parent->size.x - 1;\r
- }\r
- if(r.y >= (int)sheet->parent->size.y){\r
- r.y = (int)sheet->parent->size.y - 1;\r
- }\r
-\r
- for(y = p.y; y <= r.y; y++){\r
- for(x = p.x; x <= r.x; x++){\r
- if(sheet->parent->map[y * sheet->parent->size.x + x] == (uint)sheet){\r
- ((uchar *)sheet->parent->vram)[y * sheet->parent->size.x + x] = RGB_16_To_08(((ushort *)sheet->vram)[(y - sheet->location.y) * sheet->size.x + (x - sheet->location.x)]);\r
- }\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-uint Sheet16_Internal_RefreshSheet_To_32(UI_Sheet *sheet, int px0, int py0, int px1, int py1)\r
-{\r
- DATA_Location2D p, r;\r
- int x, y;\r
-\r
- if(sheet->parent->map == Null){\r
- #ifdef CHNOSPROJECT_DEBUG_SHEET\r
- debug("Sheet16_Internal_RefreshSheet_To_32:Null map.\n");\r
- #endif\r
- return 1;\r
- }\r
-\r
- Sheet_Internal_GetLocationP(sheet, &p);\r
- Sheet_Internal_GetLocationR(sheet, &r);\r
-\r
- if(p.x < px0){\r
- p.x = px0;\r
- }\r
- if(p.y < py0){\r
- p.y = py0;\r
- }\r
- if(r.x > px1){\r
- r.x = px1;\r
- }\r
- if(r.y > py1){\r
- r.y = py1;\r
- }\r
-\r
- if(p.x < 0){\r
- p.x = 0;\r
- }\r
- if(p.y < 0){\r
- p.y = 0;\r
- }\r
- if(r.x >= (int)sheet->parent->size.x){\r
- r.x = (int)sheet->parent->size.x - 1;\r
- }\r
- if(r.y >= (int)sheet->parent->size.y){\r
- r.y = (int)sheet->parent->size.y - 1;\r
- }\r
-\r
- for(y = p.y; y <= r.y; y++){\r
- for(x = p.x; x <= r.x; x++){\r
- if(sheet->parent->map[y * sheet->parent->size.x + x] == (uint)sheet){\r
- ((uint *)sheet->parent->vram)[y * sheet->parent->size.x + x] = RGB_16_To_32(((ushort *)sheet->vram)[(y - sheet->location.y) * sheet->size.x + (x - sheet->location.x)]);\r
- }\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-bool Sheet16_Internal_IsVisiblePixel(UI_Sheet *sheet, int px, int py)\r
-{\r
- if(((ushort *)(sheet->vram))[(py - sheet->location.y) * (int)sheet->size.x + (px - sheet->location.x)] == sheet->invcol){\r
- return False;\r
- }\r
-\r
- return True;\r
-}\r