files
Table/SYSTEM/gui.c
Mikhail Frolov b3981d174a Table: All editor code files have been added from the flash drive.
The start date of development is September 12, 2024.
2025-03-30 22:56:32 +05:00

192 lines
5.4 KiB
C

/*
:dword MixColors(dword _base, _overlying, dword a)
{
_rgb rgb1, rgb2, rgb_final;
dword n_a;
rgb1.DwordToRgb(_base);
rgb2.DwordToRgb(_overlying);
n_a = 255 - a;
rgb_final.b = calc(rgb1.b*a/255) + calc(rgb2.b*n_a/255);
rgb_final.g = calc(rgb1.g*a/255) + calc(rgb2.g*n_a/255);
rgb_final.r = calc(rgb1.r*a/255) + calc(rgb2.r*n_a/255);
return rgb_final.RgbToDword();
}
:bool skin_is_dark()
{
ESI = #sc.work;
EDI = DSBYTE[ESI]*DSBYTE[ESI];
EDI += DSBYTE[ESI+1]*DSBYTE[ESI+1];
EDI += DSBYTE[ESI+2]*DSBYTE[ESI+2];
if (sqrt(EDI) / 3 < 65) {
return true;
} else {
return false;
}
}
unsigned int DrawTopPanelButton(dword _button_id, _x, _y, signed int _icon_n, bool pressed)
{
#define TSZE 25
static dword lightest, i16_mem, old_work_light;
dword i16_size;
if (!lightest) || (old_work_light != sc.light) {
old_work_light = sc.light;
lightest = MixColors(sc.light, 0xFFFfff, skin_is_dark()*155 + 20);
if (ESI = memopen("ICONS18", NULL, SHM_READ)) {
i16_size = EDX;
i16_mem = malloc(i16_size);
memmov(i16_mem, ESI, i16_size);
replace_2cols(i16_mem, i16_size, 0xffFFFfff, sc.light, 0xffCACBD6, sc.dark);
}
}
DrawWideRectangle(_x+1, _y+1, TSZE, TSZE, 5, sc.light);
DefineHiddenButton(_x, _y, TSZE+1, TSZE+1, _button_id);
if (_icon_n==-1) {
DrawBar(_x+6, _y+5, 16, 16, sc.light);
DrawBar(_x+6, _y+7, 15, 3, sc.line);
$add ecx,5*65536
$int 64
$add ecx,5*65536
$int 64
} else {
if (i16_mem) PutPaletteImage(18*18*4*_icon_n + i16_mem,
18, 18, TSZE/2-9+2+_x, TSZE/2-9+1+_y+pressed, 32, 0);
}
if (!pressed) {
DrawOvalBorder(_x, _y, TSZE, TSZE, lightest, sc.line, sc.light, sc.work);
} else {
DrawOvalBorder(_x, _y, TSZE, TSZE, sc.line, sc.light, sc.dark, sc.work);
PutShadow(_x+1, _y+1, TSZE, TSZE, true, 2);
}
return _x;
}
*/
#include <sys/ksys.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <system/utf8.h>
#define TSZE 25
extern ksys_colors_table_t color_table;
void replace_2cols(ksys_color_t* buff, uint32_t size, ksys_color_t col_in1, ksys_color_t col_out1,
ksys_color_t col_in2, ksys_color_t col_out2){
uint32_t end_ptr = size + (uint32_t)buff;
while ((uint32_t)buff < (uint32_t)end_ptr) {
if (*buff == col_in1) *buff = col_out1;
else if (*buff == col_in2) *buff = col_out1;
buff++;
};
return;
}
#define BT_HIDE 0x40000000
static void DefineHiddenButton(uint32_t _x, uint32_t _y, uint32_t _w, uint32_t _h, uint32_t _id)
{
_ksys_delete_button(_id);
_ksys_define_button(_x, _y, _w, _h, _id + BT_HIDE, 0);
return;
}
static void DrawWideRectangle(uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint32_t boder, ksys_color_t color1) {
_ksys_draw_bar(x, y, w, boder, color1);
_ksys_draw_bar(x, y+h-boder, w, boder, color1);
_ksys_draw_bar(x, y+boder, boder, h-boder-boder, color1);
_ksys_draw_bar(x+w-boder, y+boder, boder, h-boder-boder, color1);
return;
}
static void DrawOvalBorder(uint32_t x, uint32_t y, uint32_t w, uint32_t h,
ksys_color_t light, ksys_color_t dark,
ksys_color_t right, ksys_color_t dots) {
_ksys_draw_bar(x+1, y, w, 1, light);
_ksys_draw_bar(x+1, y+h+1, w, 1, dark);
_ksys_draw_bar(x, y+1, 1, h-1, light);
_ksys_draw_bar(x+w+1, y+2, 1, h-2, right);
_ksys_draw_pixel(x, y, dots);
_ksys_draw_pixel(x+w+1, y+h+1, dots);
_ksys_draw_pixel(x, y+h+1, dots);
_ksys_draw_pixel(x+w+1, y, dots);
_ksys_draw_pixel(x, y+h, dark);
_ksys_draw_pixel(x+w+1, y+1, light);
_ksys_draw_pixel(x+w+1, y+h, dark);
return;
}
ksys_color_t lightest = 0;
void* i16_mem = NULL;
void gui_draw_button_icon18(uint32_t button_id, uint16_t x, uint16_t y, uint32_t id_icon, int pressed){
uint32_t i16_size;
if ((!lightest) || (lightest != color_table.grab_button_text)) {
//old_work_light = sc.grab_button_text;
lightest = color_table.grab_button_text;//MixColors(sc.light, 0xFFFfff, skin_is_dark()*155 + 20);
void* buffer;
int shm_size = _ksys_shm_open("ICONS18", KSYS_SHM_READ, 0, (char**)&buffer);
if (shm_size) {
i16_size = shm_size;
if (i16_mem != 0) free(i16_mem);
i16_mem = malloc(i16_size);
memmove(i16_mem, buffer, i16_size);
replace_2cols(i16_mem, i16_size, 0xffFFFfff, color_table.grab_button_text, 0xffCACBD6,
color_table.grab_bar_button);
}
}
DrawWideRectangle(x+1, y+1, TSZE, TSZE, 5, color_table.grab_button_text);
DefineHiddenButton(x, y, TSZE+1, TSZE+1, button_id);
if (id_icon == -1) {
_ksys_draw_bar(x+6, y+5, 16, 16, color_table.grab_button_text);
_ksys_draw_bar(x+6, y+7, 15, 3, color_table.work_graph);
_ksys_draw_bar(x+6, y+7+5, 15, 3, color_table.work_graph);
_ksys_draw_bar(x+6, y+7+10, 15, 3, color_table.work_graph);
} else {
if (i16_mem)
ksys_draw_bitmap_palette(i16_mem + 18*18*4*id_icon, TSZE/2-9+2+x, TSZE/2-9+1+y+pressed, 18, 18,
32, NULL, 0);
}
if (!pressed) {
DrawOvalBorder(x, y, TSZE, TSZE, lightest, color_table.work_graph,
color_table.grab_button_text,
color_table.work_area);
} else {
DrawOvalBorder(x, y, TSZE, TSZE, color_table.work_graph,
color_table.grab_button_text,
color_table.grab_bar_button,
color_table.work_area);
//PutShadow(x+1, y+1, TSZE, TSZE, true, 2);
};
return ;
}
void write_text_utf8_center(uint32_t x, uint32_t y, int32_t w, const char* text, int32_t SSS) {
int32_t tmp = w - utf8len(text)*8*(SSS+1);
if (tmp < 0) tmp = 0;
_ksys_draw_text(text, x+tmp/2, y, 0, ((0xB0 + SSS)<< 24)+ color_table.work_text);
return;
}