2023-03-25 12:26:45 +01:00
|
|
|
function Panel_Palette() : PanelContent() constructor {
|
|
|
|
title = "Palette";
|
|
|
|
showHeader = false;
|
|
|
|
title_height = 64;
|
|
|
|
padding = 24;
|
|
|
|
|
|
|
|
w = ui(320);
|
|
|
|
h = ui(480);
|
|
|
|
|
|
|
|
presets = [];
|
|
|
|
view_mode = 0;
|
|
|
|
|
|
|
|
color_dragging = noone;
|
|
|
|
|
|
|
|
static presetCollect = function() {
|
|
|
|
presets = [];
|
|
|
|
|
|
|
|
var path = DIRECTORY + "Palettes/"
|
|
|
|
var file = file_find_first(path + "*", 0);
|
|
|
|
while(file != "") {
|
|
|
|
array_push(presets, {
|
|
|
|
name: filename_name(file),
|
|
|
|
palette: loadPalette(path + file)
|
|
|
|
});
|
|
|
|
|
|
|
|
file = file_find_next();
|
|
|
|
}
|
|
|
|
file_find_close();
|
|
|
|
}
|
|
|
|
presetCollect()
|
|
|
|
|
|
|
|
function onResize() {
|
|
|
|
PANEL_PADDING
|
|
|
|
|
|
|
|
sp_palettes.resize(w - ui(padding + padding), h - ui(title_height + padding));
|
|
|
|
}
|
|
|
|
|
|
|
|
sp_palettes = new scrollPane(w - ui(padding + padding), h - ui(title_height + padding), function(_y, _m) {
|
|
|
|
draw_clear_alpha(COLORS.panel_bg_clear, 0);
|
|
|
|
var ww = sp_palettes.surface_w;
|
|
|
|
var hh = ui(28);
|
|
|
|
var _gs = ui(24);
|
|
|
|
switch(view_mode) {
|
|
|
|
case 0 : _gs = ui(24); break;
|
|
|
|
case 1 : _gs = ui(32); break;
|
|
|
|
case 2 : _gs = ui(16); break;
|
|
|
|
}
|
|
|
|
var yy = _y;
|
|
|
|
var _height;
|
|
|
|
|
|
|
|
for(var i = 0; i < array_length(presets); i++) {
|
|
|
|
var preset = presets[i];
|
|
|
|
var pre_amo = array_length(preset.palette);
|
|
|
|
var col = floor((ww - ui(20)) / _gs);
|
|
|
|
var row = ceil(pre_amo / col);
|
|
|
|
|
|
|
|
_height = ui(34) + row * _gs;
|
|
|
|
|
|
|
|
var isHover = pHOVER && point_in_rectangle(_m[0], _m[1], 0, max(0, yy), ww, min(sp_palettes.h, yy + _height));
|
|
|
|
|
|
|
|
draw_sprite_stretched(THEME.ui_panel_bg, in_dialog, 0, yy, ww, _height);
|
|
|
|
if(isHover)
|
|
|
|
draw_sprite_stretched_ext(THEME.node_active, 1, 0, yy, ww, _height, COLORS._main_accent, 1);
|
|
|
|
|
|
|
|
draw_set_text(f_p2, fa_left, fa_top, COLORS._main_text_sub);
|
|
|
|
draw_text(ui(10), yy + ui(2), preset.name);
|
|
|
|
drawPaletteGrid(preset.palette, ui(10), yy + ui(24), ww - ui(20), _gs);
|
|
|
|
|
|
|
|
if(isHover && mouse_press(mb_left, pFOCUS)) {
|
|
|
|
if(point_in_rectangle(_m[0], _m[1], ui(10), yy + ui(24), ww - ui(10), yy + ui(24) + _height)) {
|
|
|
|
var m_ax = _m[0] - ui(10);
|
|
|
|
var m_ay = _m[1] - (yy + ui(24));
|
|
|
|
|
|
|
|
var m_gx = floor(m_ax / _gs);
|
|
|
|
var m_gy = floor(m_ay / _gs);
|
|
|
|
|
|
|
|
var _index = m_gy * col + m_gx;
|
|
|
|
if(_index < pre_amo && _index >= 0)
|
|
|
|
DRAGGING = {
|
|
|
|
type: "Color",
|
|
|
|
data: array_safe_get(preset.palette, _index)
|
|
|
|
}
|
|
|
|
} else if(point_in_rectangle(_m[0], _m[1], ui(10), yy, ww - ui(10), yy + ui(24)))
|
|
|
|
DRAGGING = {
|
|
|
|
type: "Palette",
|
|
|
|
data: preset.palette
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
yy += _height + ui(8);
|
|
|
|
hh += _height + ui(8);
|
|
|
|
}
|
|
|
|
|
|
|
|
return hh;
|
|
|
|
});
|
|
|
|
|
|
|
|
function drawContent(panel) {
|
|
|
|
PANEL_PADDING
|
|
|
|
PANEL_TITLE
|
|
|
|
|
|
|
|
var px = ui(padding);
|
|
|
|
var py = ui(title_height);
|
|
|
|
var pw = w - ui(padding + padding);
|
|
|
|
var ph = h - ui(title_height + padding);
|
|
|
|
|
|
|
|
draw_sprite_stretched(THEME.ui_panel_bg, !in_dialog, px - ui(8), py - ui(8), pw + ui(16), ph + ui(16));
|
|
|
|
|
|
|
|
sp_palettes.setActiveFocus(pFOCUS, pHOVER);
|
|
|
|
sp_palettes.draw(px, py, mx - px, my - py);
|
|
|
|
|
|
|
|
var bx = w - ui(32 + 16);
|
|
|
|
var by = title_height / 2 - ui(16 + !in_dialog * 2);
|
|
|
|
|
|
|
|
if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, "Refresh", THEME.refresh, 1, COLORS._main_icon) == 2)
|
|
|
|
presetCollect();
|
|
|
|
|
|
|
|
bx -= ui(32)
|
2023-03-26 07:13:36 +02:00
|
|
|
if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, "Change preview size", THEME.icon_visibility, 1, COLORS._main_icon) == 2)
|
2023-03-25 12:26:45 +01:00
|
|
|
view_mode = (view_mode + 1) % 3;
|
|
|
|
}
|
|
|
|
}
|