5 #define BUFSIZE(width, height) (width * height * 4)
6 #define STATUSBAR_HEIGHT 32
10 size_t canvas_width = 0;
11 size_t canvas_height = 0;
13 size_t cursor_pos_x = 0;
14 size_t cursor_pos_y = 0;
16 size_t current_color = 0x000000;
17 bool is_click =
false;
19 size_t buffer_size = 0;
20 size_t brush_size = 3;
25 bool change_coords =
false;
38 {400, 4, 25, 25, 0xFF0000},
39 {430, 4, 25, 25, 0x00FF00},
40 {460, 4, 25, 25, 0x0000FF},
41 {490, 4, 25, 25, 0x000000},
42 {520, 4, 25, 25, 0xFFFF00},
43 {550, 4, 25, 25, 0x00FFFF},
44 {580, 4, 25, 25, 0xFF00FF},
45 {610, 4, 25, 25, 0xFFFFFF}
48 char text_buffer[16] = {0};
51 canvas_width = getScreenWidth();
52 canvas_height = getScreenHeight() - STATUSBAR_HEIGHT;
54 buffer_size = BUFSIZE(canvas_width, canvas_height);
56 buffer = kmalloc(buffer_size);
58 memset(buffer, 0xFF, buffer_size);
62 memcpy((
char*)getFrameBufferAddr() + BUFSIZE(canvas_width, STATUSBAR_HEIGHT), buffer, buffer_size);
65 for(
int i = 0; i < COLORS; i++) {
86 drawRect(cursor_pos_x, cursor_pos_y, 16, 16, current_color);
94 set_cursor_enabled(
true);
100 for(
int i = 0; i < COLORS; i++) {
109 current_color = colors[i].color;
116 void mala_control() {
117 drawRect(0, 0, canvas_width, STATUSBAR_HEIGHT, 0x666666);
119 draw_vga_str(
"Mala v0.2", 9, 16, 10, 0);
121 itoh(current_color, text_buffer);
122 drawRect(100, 0, 2, STATUSBAR_HEIGHT, 0);
123 draw_vga_str(text_buffer, 6, 108, 10, 0);
125 memset(text_buffer, 0, 16);
126 itoa(cursor_pos_x, text_buffer);
127 drawRect(172, 0, 2, STATUSBAR_HEIGHT, 0);
128 draw_vga_str(text_buffer, 4, 180, 10, 0);
130 memset(text_buffer, 0, 16);
131 itoa(cursor_pos_y, text_buffer);
132 draw_vga_str(text_buffer, 4, 212, 10, 0);
134 cursor_pos_x = mouse_get_x();
135 cursor_pos_y = mouse_get_y();
137 is_click = (bool)mouse_get_b1();
139 bool in_canvas = point_in_rect(cursor_pos_x, cursor_pos_y, 0, STATUSBAR_HEIGHT, canvas_width - 1, canvas_height - 1);
150 old_y - STATUSBAR_HEIGHT,
152 cursor_pos_y - STATUSBAR_HEIGHT,
159 old_x = cursor_pos_x;
160 old_y = cursor_pos_y;
164 uint32_t mala_draw(uint32_t argc,
char* argv[]) {
169 set_cursor_enabled(
false);
172 if(getCharRaw() == 1) {
177 if(getCharRaw() == 48) {
178 memset(buffer, 0xFF, buffer_size);
void * memset(void *ptr, char value, size_t num)
Заполнение массива указанными символами
void * memcpy(void *restrict destination, const void *restrict source, size_t n)
Копирование непересекающихся массивов используя SSE.
size_t itoa(int32_t n, char *buffer)
Конвертируем число в символы
void drawRect(uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint32_t color)
Рисуем залитый прямоугольник