Pixel-Composer/scripts/panel_palette/panel_palette.gml

149 lines
4.5 KiB
Plaintext
Raw Normal View History

2023-03-25 12:26:45 +01:00
function Panel_Palette() : PanelContent() constructor {
2023-06-04 18:28:29 +02:00
title = __txt("Palettes");
2024-04-12 11:45:21 +02:00
padding = 8;
2023-03-25 12:26:45 +01:00
w = ui(320);
h = ui(480);
2024-05-20 09:24:46 +02:00
grid_size = ui(16);
grid_size_to = ui(16);
2023-03-25 12:26:45 +01:00
color_dragging = noone;
2024-05-22 04:46:29 +02:00
drag_from_self = false;
__save_palette_data = [];
2023-03-25 12:26:45 +01:00
function onResize() {
2024-04-12 11:45:21 +02:00
sp_palettes.resize(w - ui(padding + padding), h - ui(padding + padding));
2023-03-25 12:26:45 +01:00
}
2024-04-12 11:45:21 +02:00
sp_palettes = new scrollPane(w - ui(padding + padding), h - ui(padding + padding), function(_y, _m) {
2023-03-25 12:26:45 +01:00
draw_clear_alpha(COLORS.panel_bg_clear, 0);
var ww = sp_palettes.surface_w;
var hh = ui(28);
2024-05-18 13:46:01 +02:00
var _gs = grid_size;
2023-03-25 12:26:45 +01:00
var _height;
2024-04-16 10:34:05 +02:00
var yy = _y;
2024-05-15 12:42:54 +02:00
var cur = CURRENT_COLOR;
2023-03-25 12:26:45 +01:00
2024-05-18 13:46:01 +02:00
if(pHOVER && key_mod_press(CTRL)) {
2024-05-20 09:24:46 +02:00
if(mouse_wheel_down()) grid_size_to = clamp(grid_size_to - ui(4), ui(8), ui(32));
if(mouse_wheel_up()) grid_size_to = clamp(grid_size_to + ui(4), ui(8), ui(32));
2024-05-18 13:46:01 +02:00
}
2024-05-20 09:24:46 +02:00
grid_size = lerp_float(grid_size, grid_size_to, 3);
2024-05-18 13:46:01 +02:00
2024-05-22 04:46:29 +02:00
if(DRAGGING && DRAGGING.type == "Palette" && !drag_from_self) {
var _add_h = ui(28);
var _hov = pHOVER && point_in_rectangle(_m[0], _m[1], 0, yy, ww, yy + _add_h);
draw_sprite_stretched_ext(THEME.timeline_node, 0, 0, yy, ww, _add_h, COLORS._main_value_positive, .4);
draw_sprite_stretched_ext(THEME.timeline_node, 1, 0, yy, ww, _add_h, COLORS._main_value_positive, .7 + _hov * .25);
draw_set_text(f_p2, fa_center, fa_center, COLORS._main_value_positive);
draw_text_add(ww / 2, yy + _add_h / 2, __txt("New palette"));
if(_hov && mouse_release(mb_left)) {
__save_palette_data = DRAGGING.data;
fileNameCall($"{DIRECTORY}Palettes", function (_path) {
if(filename_ext(_path) != ".hex") _path += ".hex";
var _str = palette_string_hex(__save_palette_data, false);
file_text_write_all(_path, _str);
__initPalette();
});
}
yy += _add_h + ui(8);
hh += _add_h + ui(8);
}
if(mouse_release(mb_left)) drag_from_self = false;
for(var i = 0; i < array_length(PALETTES); i++) {
var preset = PALETTES[i];
2023-03-25 12:26:45 +01:00
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, 3, 0, yy, ww, _height);
2023-03-25 12:26:45 +01:00
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);
2024-04-16 10:34:05 +02:00
drawPaletteGrid(preset.palette, ui(10), yy + ui(24), ww - ui(20), _gs, cur);
2023-03-25 12:26:45 +01:00
2024-04-12 11:45:21 +02:00
if(isHover) {
if(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));
2024-05-22 04:46:29 +02:00
2024-04-12 11:45:21 +02:00
var m_gx = floor(m_ax / _gs);
var m_gy = floor(m_ay / _gs);
2023-03-25 12:26:45 +01:00
2024-04-12 11:45:21 +02:00
var _index = m_gy * col + m_gx;
if(_index < pre_amo && _index >= 0) {
2024-05-15 12:42:54 +02:00
CURRENT_COLOR = array_safe_get_fast(preset.palette, _index);
2024-04-12 11:45:21 +02:00
2024-05-15 12:42:54 +02:00
DRAGGING = {
type: "Color",
data: array_safe_get_fast(preset.palette, _index)
2024-04-12 11:45:21 +02:00
}
2024-05-15 12:42:54 +02:00
MESSAGE = DRAGGING;
2024-04-12 11:45:21 +02:00
}
} else if(point_in_rectangle(_m[0], _m[1], ui(10), yy, ww - ui(10), yy + ui(24))) {
2023-03-25 12:26:45 +01:00
DRAGGING = {
2024-04-12 11:45:21 +02:00
type: "Palette",
data: preset.palette
2023-03-25 12:26:45 +01:00
}
2023-10-04 09:49:31 +02:00
MESSAGE = DRAGGING;
2024-05-22 04:46:29 +02:00
drag_from_self = true;
2023-10-04 09:49:31 +02:00
}
2024-04-12 11:45:21 +02:00
}
if(mouse_press(mb_right, pFOCUS)) {
hovering = preset;
menuCall("palette_window_preset_menu",,, [
menuItem(__txt("Refresh"), function() {
__initPalette();
}),
-1,
menuItem(__txtx("palette_editor_set_default", "Set as default"), function() {
2024-05-16 15:28:45 +02:00
PROJECT.setPalette(array_clone(hovering.palette));
2024-04-12 11:45:21 +02:00
}),
menuItem(__txtx("palette_editor_delete", "Delete palette"), function() {
file_delete(hovering.path);
__initPalette();
}),
]);
2023-10-04 09:49:31 +02:00
}
2023-03-25 12:26:45 +01:00
}
yy += _height + ui(8);
hh += _height + ui(8);
}
return hh;
});
function drawContent(panel) {
2023-06-10 13:59:45 +02:00
draw_clear_alpha(COLORS.panel_bg_clear, 0);
2023-03-25 12:26:45 +01:00
var px = ui(padding);
2024-04-12 11:45:21 +02:00
var py = ui(padding);
2023-03-25 12:26:45 +01:00
var pw = w - ui(padding + padding);
2024-04-12 11:45:21 +02:00
var ph = h - ui(padding + padding);
2023-03-25 12:26:45 +01:00
draw_sprite_stretched(THEME.ui_panel_bg, 1, px - ui(8), py - ui(8), pw + ui(16), ph + ui(16));
2023-03-25 12:26:45 +01:00
2023-06-21 20:36:53 +02:00
sp_palettes.setFocusHover(pFOCUS, pHOVER);
2023-03-25 12:26:45 +01:00
sp_palettes.draw(px, py, mx - px, my - py);
}
}