Files
armorpaint/paint/sources/ui/ui_sidebar.c
T
2026-06-08 15:35:04 +02:00

116 lines
4.4 KiB
C

#include "../global.h"
i32 ui_sidebar_tabx = 0;
i32 ui_sidebar_last_tab = 0;
void ui_sidebar_render_ui() {
// Expand button
if (g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W] == 0) {
i32 width = math_floor(draw_string_width(g_font, g_ui->font_size, "<") + 25 * UI_SCALE());
if (ui_window(ui_sidebar_hminimized, iron_window_width() - width, -1, width, math_floor(UI_ELEMENT_H() + 4 * UI_SCALE()), false)) {
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;
if (ui_button("<", UI_ALIGN_CENTER, "")) {
ui_sidebar_show(true);
}
g_theme->BUTTON_H = _BUTTON_H;
g_theme->BUTTON_COL = _BUTTON_COL;
g_theme->TEXT_COL = _TEXT_COL;
}
return;
}
// Tabs
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];
i32 _SCROLL_W = g_theme->SCROLL_W;
if (mini) {
g_theme->SCROLL_W = g_theme->SCROLL_MINI_W;
}
i32 sidebar_y = 0;
#ifdef IRON_IOS
if (config_is_iphone()) {
sidebar_y += UI_ELEMENT_H() + UI_ELEMENT_OFFSET();
ui_end();
draw_begin(NULL, false, 0);
draw_set_color(g_theme->PRESSED_COL);
draw_filled_rect(ui_sidebar_tabx, 0, g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W], sidebar_y);
draw_end();
ui_begin(g_ui);
}
#endif
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)) {
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;
}
if (!g_config->touch_ui && !mini) {
if (ui_tab(ui_base_htabs->buffer[TAB_AREA_SIDEBAR0], ">", false, -2, false)) {
ui_sidebar_show(false);
}
}
}
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)) {
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();
g_theme->SCROLL_W = _SCROLL_W;
// Collapse / expand button for mini sidebar
if (g_config->touch_ui) {
i32 width = g_config->layout->buffer[LAYOUT_SIZE_SIDEBAR_W];
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)) {
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;
if (ui_button(mini ? "<" : ">", UI_ALIGN_CENTER, "")) {
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());
}
g_theme->BUTTON_H = _BUTTON_H;
g_theme->BUTTON_COL = _BUTTON_COL;
}
}
}
void ui_sidebar_show(bool b) {
if (b) {
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);
}
else {
ui_base_htabs->buffer[TAB_AREA_SIDEBAR0]->i = ui_sidebar_last_tab;
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;
}
}