Files
armorpaint/paint/sources/ui/ui_sidebar.c
T

116 lines
4.4 KiB
C
Raw Normal View History

2026-03-09 13:17:15 +01:00
2026-06-04 11:00:05 +02:00
#include "../global.h"
2026-03-09 13:17:15 +01:00
2026-04-05 16:09:00 +02:00
i32 ui_sidebar_tabx = 0;
i32 ui_sidebar_last_tab = 0;
2026-03-06 12:56:38 +01:00
void ui_sidebar_render_ui() {
// Expand button
2026-04-05 16:41:00 +02:00
if (g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W] == 0) {
2026-06-08 15:35:04 +02:00
i32 width = math_floor(draw_string_width(g_font, g_ui->font_size, "<") + 25 * UI_SCALE());
2026-03-06 12:56:38 +01:00
if (ui_window(ui_sidebar_hminimized, iron_window_width() - width, -1, width, math_floor(UI_ELEMENT_H() + 4 * UI_SCALE()), false)) {
2026-06-08 15:35:04 +02:00
ui_fill(0, 0, g_ui->_window_w, g_ui->_window_h + 1, g_theme->SEPARATOR_COL);
g_ui->_w = width;
i32 _BUTTON_H = g_theme->BUTTON_H;
i32 _BUTTON_COL = g_theme->BUTTON_COL;
i32 _TEXT_COL = g_theme->TEXT_COL;
g_theme->BUTTON_H = g_theme->ELEMENT_H;
g_theme->BUTTON_COL = g_theme->SEPARATOR_COL;
g_theme->TEXT_COL = g_theme->HOVER_COL;
2026-03-06 12:56:38 +01:00
if (ui_button("<", UI_ALIGN_CENTER, "")) {
2026-03-11 15:24:56 +01:00
ui_sidebar_show(true);
2026-03-06 12:56:38 +01:00
}
2026-06-08 15:35:04 +02:00
g_theme->BUTTON_H = _BUTTON_H;
g_theme->BUTTON_COL = _BUTTON_COL;
g_theme->TEXT_COL = _TEXT_COL;
2026-03-06 12:56:38 +01:00
}
return;
}
// Tabs
2026-04-05 16:41:00 +02:00
bool mini = g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W] <= ui_sidebar_w_mini;
i32 expand_button_offset = g_config->touch_ui ? math_floor(UI_ELEMENT_H() + UI_ELEMENT_OFFSET()) : 0;
ui_sidebar_tabx = iron_window_width() - g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W];
2026-03-06 12:56:38 +01:00
2026-06-08 15:35:04 +02:00
i32 _SCROLL_W = g_theme->SCROLL_W;
2026-03-06 12:56:38 +01:00
if (mini) {
2026-06-08 15:35:04 +02:00
g_theme->SCROLL_W = g_theme->SCROLL_MINI_W;
2026-03-06 12:56:38 +01:00
}
i32 sidebar_y = 0;
2026-03-11 15:24:56 +01:00
#ifdef IRON_IOS
2026-03-06 12:56:38 +01:00
if (config_is_iphone()) {
sidebar_y += UI_ELEMENT_H() + UI_ELEMENT_OFFSET();
ui_end();
2026-03-07 21:12:59 +01:00
draw_begin(NULL, false, 0);
2026-06-08 15:35:04 +02:00
draw_set_color(g_theme->PRESSED_COL);
2026-04-05 16:41:00 +02:00
draw_filled_rect(ui_sidebar_tabx, 0, g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W], sidebar_y);
2026-03-06 12:56:38 +01:00
draw_end();
2026-06-08 11:42:44 +02:00
ui_begin(g_ui);
2026-03-06 12:56:38 +01:00
}
2026-03-11 15:24:56 +01:00
#endif
2026-03-06 12:56:38 +01:00
2026-04-05 16:41:00 +02:00
if (ui_window(ui_base_hwnds->buffer[TAB_AREA_SIDEBAR0], ui_sidebar_tabx, sidebar_y, g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W],
g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_H0] - sidebar_y, false)) {
2026-03-06 12:56:38 +01:00
tab_draw_t_array_t *tabs = ui_base_hwnd_tabs->buffer[TAB_AREA_SIDEBAR0];
for (i32 i = 0; i < (mini ? 1 : tabs->length); ++i) {
tabs->buffer[i]->f(ui_base_htabs->buffer[TAB_AREA_SIDEBAR0]);
}
if (ui_base_htabs->buffer[TAB_AREA_SIDEBAR0]->i < tabs->length) {
ui_sidebar_last_tab = ui_base_htabs->buffer[TAB_AREA_SIDEBAR0]->i;
}
2026-04-05 16:41:00 +02:00
if (!g_config->touch_ui && !mini) {
2026-03-06 12:56:38 +01:00
if (ui_tab(ui_base_htabs->buffer[TAB_AREA_SIDEBAR0], ">", false, -2, false)) {
2026-03-11 15:24:56 +01:00
ui_sidebar_show(false);
2026-03-06 12:56:38 +01:00
}
}
}
2026-04-05 16:41:00 +02:00
if (ui_window(ui_base_hwnds->buffer[TAB_AREA_SIDEBAR1], ui_sidebar_tabx, g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_H0],
g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W], g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_H1] - expand_button_offset, false)) {
2026-03-06 12:56:38 +01:00
tab_draw_t_array_t *tabs = ui_base_hwnd_tabs->buffer[TAB_AREA_SIDEBAR1];
for (i32 i = 0; i < (mini ? 1 : tabs->length); ++i) {
tabs->buffer[i]->f(ui_base_htabs->buffer[TAB_AREA_SIDEBAR1]);
}
}
ui_end_window();
2026-06-08 15:35:04 +02:00
g_theme->SCROLL_W = _SCROLL_W;
2026-03-06 12:56:38 +01:00
// Collapse / expand button for mini sidebar
2026-04-05 16:41:00 +02:00
if (g_config->touch_ui) {
i32 width = g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W];
2026-03-06 12:56:38 +01:00
i32 height = math_floor(UI_ELEMENT_H() + UI_ELEMENT_OFFSET());
if (ui_window(ui_handle(__ID__), iron_window_width() - width, iron_window_height() - height, width, height + 1, false)) {
2026-06-08 15:35:04 +02:00
g_ui->_w = width;
i32 _BUTTON_H = g_theme->BUTTON_H;
i32 _BUTTON_COL = g_theme->BUTTON_COL;
g_theme->BUTTON_H = g_theme->ELEMENT_H;
g_theme->BUTTON_COL = g_theme->WINDOW_BG_COL;
2026-03-06 12:56:38 +01:00
if (ui_button(mini ? "<" : ">", UI_ALIGN_CENTER, "")) {
2026-04-05 16:41:00 +02:00
g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W] = mini ? ui_sidebar_default_w_full : ui_sidebar_default_w_mini;
g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W] = math_floor(g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W] * UI_SCALE());
2026-03-06 12:56:38 +01:00
}
2026-06-08 15:35:04 +02:00
g_theme->BUTTON_H = _BUTTON_H;
g_theme->BUTTON_COL = _BUTTON_COL;
2026-03-06 12:56:38 +01:00
}
}
}
2026-03-11 15:24:56 +01:00
void ui_sidebar_show(bool b) {
if (b) {
2026-04-05 16:41:00 +02:00
g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W] =
g_context->maximized_sidebar_width != 0 ? g_context->maximized_sidebar_width : math_floor(ui_sidebar_default_w * g_config->window_scale);
2026-03-11 15:24:56 +01:00
}
else {
2026-04-21 10:52:27 +02:00
ui_base_htabs->buffer[TAB_AREA_SIDEBAR0]->i = ui_sidebar_last_tab;
2026-04-05 16:41:00 +02:00
g_config->layout_tabs->buffer[TAB_AREA_SIDEBAR0] = ui_sidebar_last_tab;
g_context->maximized_sidebar_width = g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W];
g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W] = 0;
2026-03-11 15:24:56 +01:00
}
}