Pixel-Composer/objects/o_dialog_gradient/Draw_64.gml

216 lines
7.2 KiB
Text
Raw Normal View History

2022-01-13 05:24:03 +01:00
/// @description init
if !ready exit;
#region dropper
2023-03-02 07:59:14 +01:00
selector.interactable = interactable;
2022-11-18 03:20:31 +01:00
if(selector.dropper_active) {
selector.drawDropper(self);
2022-01-13 05:24:03 +01:00
exit;
}
#endregion
#region base UI
var presets_x = dialog_x;
2022-11-03 11:44:49 +01:00
var presets_w = ui(240);
2022-01-13 05:24:03 +01:00
2022-11-03 11:44:49 +01:00
var content_x = dialog_x + presets_w + ui(16);
2023-01-17 08:11:55 +01:00
var content_w = ui(556);
var palette_x = content_x + content_w + ui(16);
2022-01-13 05:24:03 +01:00
2022-11-18 03:20:31 +01:00
draw_sprite_stretched(THEME.dialog_bg, 0, presets_x, dialog_y, presets_w, dialog_h);
if(sFOCUS) draw_sprite_stretched_ext(THEME.dialog_active, 0, presets_x, dialog_y, presets_w, dialog_h, COLORS._main_accent, 1);
2022-01-13 05:24:03 +01:00
2022-11-18 03:20:31 +01:00
draw_sprite_stretched(THEME.dialog_bg, 0, content_x, dialog_y, content_w, dialog_h);
if(sFOCUS) draw_sprite_stretched_ext(THEME.dialog_active, 0, content_x, dialog_y, content_w, dialog_h, COLORS._main_accent, 1);
2022-01-13 05:24:03 +01:00
2023-01-17 08:11:55 +01:00
draw_sprite_stretched(THEME.dialog_bg, 0, palette_x, dialog_y, presets_w, dialog_h);
if(sFOCUS) draw_sprite_stretched_ext(THEME.dialog_active, 0, palette_x, dialog_y, presets_w, dialog_h, COLORS._main_accent, 1);
2022-11-18 03:20:31 +01:00
draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text_title);
2023-02-14 13:44:46 +01:00
draw_text(presets_x + ui(24), dialog_y + ui(16), get_text("presets", "Presets"));
2023-03-02 07:59:14 +01:00
draw_text(content_x + (!interactable * ui(32)) + ui(24), dialog_y + ui(16), name);
if(!interactable)
draw_sprite_ui(THEME.lock, 0, content_x + ui(24 + 12), dialog_y + ui(16 + 12),,,, COLORS._main_icon);
2023-02-14 13:44:46 +01:00
draw_text(palette_x + ui(24), dialog_y + ui(16), get_text("palette", "Palettes"));
2022-01-13 05:24:03 +01:00
#endregion
#region presets
2022-11-18 03:20:31 +01:00
draw_sprite_stretched(THEME.ui_panel_bg, 0, presets_x + ui(16), dialog_y + ui(44), ui(240 - 32), dialog_h - ui(60));
2022-01-13 05:24:03 +01:00
2023-02-28 09:43:01 +01:00
sp_presets.setActiveFocus(sFOCUS, sHOVER);
2022-11-03 11:44:49 +01:00
sp_presets.draw(presets_x + ui(16 + 8), dialog_y + ui(44));
2022-01-13 05:24:03 +01:00
2022-11-03 11:44:49 +01:00
var bx = presets_x + presets_w - ui(44);
var by = dialog_y + ui(12);
2022-01-13 05:24:03 +01:00
2023-02-14 13:44:46 +01:00
var _b = buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, get_text("add_preset", "Add to preset"));
2022-01-13 05:24:03 +01:00
if(_b == 2) {
2022-11-03 11:44:49 +01:00
var dia = dialogCall(o_dialog_file_name, mouse_mx + ui(8), mouse_my + ui(8));
2022-01-13 05:24:03 +01:00
dia.onModify = function (txt) {
2022-11-18 03:20:31 +01:00
var gradStr = "";
2023-03-02 07:59:14 +01:00
for(var i = 0; i < array_length(gradient.keys); i++) {
var gr = gradient.keys[i];
2022-01-13 05:24:03 +01:00
var cc = gr.value;
var tt = gr.time;
2022-11-18 03:20:31 +01:00
gradStr += string(cc) + "," + string(tt) + "\n";
2022-01-13 05:24:03 +01:00
}
2022-11-18 03:20:31 +01:00
var file = file_text_open_write(txt + ".txt");
file_text_write_string(file, gradStr);
2022-01-13 05:24:03 +01:00
file_text_close(file);
presetCollect();
};
dia.path = DIRECTORY + "Gradients/"
}
2022-11-18 03:20:31 +01:00
draw_sprite_ui_uniform(THEME.add, 0, bx + ui(14), by + ui(14), 1, COLORS._main_icon);
2022-11-03 11:44:49 +01:00
bx -= ui(32);
2022-01-13 05:24:03 +01:00
2023-02-14 13:44:46 +01:00
if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, get_text("refresh", "Refresh"), THEME.refresh) == 2)
2022-01-13 05:24:03 +01:00
presetCollect();
2022-11-03 11:44:49 +01:00
bx -= ui(32);
2022-01-13 05:24:03 +01:00
2022-11-18 03:20:31 +01:00
if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, "Open gradient folder", THEME.folder) == 2) {
2023-03-08 12:14:01 +01:00
var _realpath = environment_get_variable("LOCALAPPDATA") + "/Pixels_Composer/Gradients";
var _windir = environment_get_variable("WINDIR") + "/explorer.exe";
2023-02-14 07:37:13 +01:00
execute_shell(_windir, _realpath);
2022-01-13 05:24:03 +01:00
}
2022-11-03 11:44:49 +01:00
bx -= ui(32);
2022-01-13 05:24:03 +01:00
#endregion
2023-01-17 08:11:55 +01:00
#region palette
draw_sprite_stretched(THEME.ui_panel_bg, 0, palette_x + ui(16), dialog_y + ui(44), ui(240 - 32), dialog_h - ui(60));
2023-02-28 09:43:01 +01:00
sp_palettes.setActiveFocus(sFOCUS, sHOVER);
2023-01-17 08:11:55 +01:00
sp_palettes.draw(palette_x + ui(16 + 8), dialog_y + ui(44));
#endregion
2022-01-13 05:24:03 +01:00
#region gradient
2022-11-03 11:44:49 +01:00
var gr_x = content_x + ui(22);
var gr_y = dialog_y + ui(54);
var gr_w = content_w - ui(44);
var gr_h = ui(20);
2022-01-13 05:24:03 +01:00
#region tools
2022-11-03 11:44:49 +01:00
var bx = content_x + content_w - ui(50);
var by = dialog_y + ui(16);
2022-01-13 05:24:03 +01:00
2023-02-28 09:43:01 +01:00
if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, interactable && sFOCUS, sHOVER, get_text("gradient_editor_key_blend", "Key blending"), THEME.grad_blend) == 2) {
2023-02-19 02:13:19 +01:00
menuCall( bx + ui(32), by, [
2023-03-02 07:59:14 +01:00
menuItem(get_text("gradient_editor_blend_RGB", "RGB blend"), function() { gradient.type = 0; onApply(gradient); }),
menuItem(get_text("gradient_editor_blend_HSV", "HSV blend"), function() { gradient.type = 2; onApply(gradient); }),
menuItem(get_text("gradient_editor_blend_hard", "Hard blend"), function() { gradient.type = 1; onApply(gradient); }),
2022-12-21 02:30:23 +01:00
]);
2022-01-13 05:24:03 +01:00
}
2022-11-03 11:44:49 +01:00
bx -= ui(32);
2022-01-13 05:24:03 +01:00
#endregion
2023-01-04 02:30:04 +01:00
draw_sprite_stretched(THEME.textbox, 3, gr_x - ui(6), gr_y - ui(6), gr_w + ui(12), gr_h + ui(12));
2022-11-18 03:20:31 +01:00
draw_sprite_stretched(THEME.textbox, 0, gr_x - ui(6), gr_y - ui(6), gr_w + ui(12), gr_h + ui(12));
2023-03-02 07:59:14 +01:00
gradient.draw(gr_x, gr_y, gr_w, gr_h);
2022-01-13 05:24:03 +01:00
var hover = noone;
2023-03-02 07:59:14 +01:00
for(var i = 0; i < array_length(gradient.keys); i++) {
var _k = gradient.keys[i];
2022-11-14 03:16:15 +01:00
var _c = _k.value;
2022-01-13 05:24:03 +01:00
var _kx = gr_x + _k.time * gr_w;
var _in = _k == key_selecting? 1 : 0;
2022-11-18 03:20:31 +01:00
draw_sprite_ui_uniform(THEME.prop_gradient, _in, _kx, gr_y + gr_h / 2, 1, _c);
2022-01-13 05:24:03 +01:00
2022-11-03 11:44:49 +01:00
if(sHOVER && point_in_rectangle(mouse_mx, mouse_my, _kx - ui(6), gr_y, _kx + ui(6), gr_y + gr_h)) {
2022-11-18 03:20:31 +01:00
draw_sprite_ui_uniform(THEME.prop_gradient, _in, _kx, gr_y + gr_h / 2, 1.2, _c);
2022-01-13 05:24:03 +01:00
hover = _k;
}
}
if(key_dragging) {
2023-01-25 06:49:00 +01:00
if(abs(mouse_mx - key_drag_mx) > 4)
key_drag_dead = false;
if(!key_drag_dead) {
var newT = key_drag_sx + (mouse_mx - key_drag_mx) / gr_w;
newT = clamp(newT, 0, 1);
setKeyPosition(key_dragging, newT);
}
2022-01-13 05:24:03 +01:00
2022-12-10 05:06:01 +01:00
if(mouse_release(mb_left)) {
2022-11-14 03:16:15 +01:00
removeKeyOverlap(key_dragging);
2022-01-13 05:24:03 +01:00
key_dragging = noone;
}
}
2022-11-18 03:20:31 +01:00
var _x0 = gr_x - ui(6);
var _x1 = gr_x + gr_w + ui(12);
var _y0 = gr_y - ui(6);
var _y1 = gr_y + gr_h + ui(12);
2022-12-10 05:06:01 +01:00
if(sHOVER && point_in_rectangle(mouse_mx, mouse_my, _x0, _y0, _x1, _y1)) {
if(mouse_press(mb_left, sFOCUS)) {
2023-01-25 06:49:00 +01:00
widget_clear();
2022-11-18 03:20:31 +01:00
if(hover) {
key_selecting = hover;
2023-02-28 09:43:01 +01:00
if(interactable) {
key_dragging = hover;
key_drag_sx = hover.time;
key_drag_mx = mouse_mx;
key_drag_dead = true;
}
2023-01-25 06:49:00 +01:00
2023-02-28 09:43:01 +01:00
selector.setColor(hover.value);
} else if(interactable) {
2022-11-18 03:20:31 +01:00
key_selecting = noone;
2022-01-13 05:24:03 +01:00
2022-11-18 03:20:31 +01:00
var tt = clamp((mouse_mx - gr_x) / gr_w, 0, 1);
2023-03-02 07:59:14 +01:00
var cc = gradient.eval(tt);
2023-02-14 13:44:46 +01:00
var _newkey = new gradientKey(tt, cc);
2023-03-02 07:59:14 +01:00
gradient.add(_newkey, true);
2022-01-13 05:24:03 +01:00
2022-11-18 03:20:31 +01:00
key_selecting = _newkey;
key_dragging = _newkey;
2023-01-25 06:49:00 +01:00
key_drag_sx = tt;
key_drag_mx = mouse_mx;
key_drag_dead = false;
2022-11-18 03:20:31 +01:00
selector.setColor(key_dragging.value);
2022-01-13 05:24:03 +01:00
}
2022-11-18 03:20:31 +01:00
}
2022-01-13 05:24:03 +01:00
2023-03-02 07:59:14 +01:00
if(mouse_press(mb_right, interactable && sFOCUS) && hover && array_length(gradient.keys) > 1)
array_remove(gradient.keys, hover);
2022-01-13 05:24:03 +01:00
}
2022-11-14 03:16:15 +01:00
var op_x = content_x + ui(20);
var op_y = gr_y + gr_h + ui(12);
2022-11-18 03:20:31 +01:00
draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text_sub);
2023-02-14 13:44:46 +01:00
draw_text(op_x, op_y + TEXTBOX_HEIGHT / 2, get_text("position", "Position"))
2022-11-14 03:16:15 +01:00
2023-02-14 13:44:46 +01:00
var txt = key_selecting? key_selecting.time * 100 : 0;
2023-02-28 09:43:01 +01:00
sl_position.setActiveFocus(sFOCUS, sHOVER);
2023-01-25 06:49:00 +01:00
sl_position.register();
2022-11-14 03:16:15 +01:00
sl_position.draw(op_x + ui(100), op_y, ui(content_w - 140), TEXTBOX_HEIGHT, txt, mouse_ui);
2022-01-13 05:24:03 +01:00
#endregion
2022-11-18 03:20:31 +01:00
#region selector
2022-11-03 11:44:49 +01:00
var col_x = content_x + ui(20);
2022-11-14 03:16:15 +01:00
var col_y = dialog_y + ui(136);
2022-01-13 05:24:03 +01:00
2022-11-18 03:20:31 +01:00
selector.draw(col_x, col_y, sFOCUS, sHOVER);
2022-01-13 05:24:03 +01:00
#endregion
#region controls
2022-11-03 11:44:49 +01:00
var bx = content_x + content_w - ui(36);
var by = dialog_y + dialog_h - ui(36);
2023-01-25 06:49:00 +01:00
b_apply.register();
2023-02-28 09:43:01 +01:00
b_apply.setActiveFocus(sFOCUS, sHOVER);
2023-01-25 06:49:00 +01:00
b_apply.draw(bx - ui(18), by - ui(18), ui(36), ui(36), mouse_ui, THEME.button_lime);
2023-02-14 13:44:46 +01:00
bx -= ui(48);
b_cancel.register();
2023-02-28 09:43:01 +01:00
b_cancel.setActiveFocus(sFOCUS, sHOVER);
2023-02-14 13:44:46 +01:00
b_cancel.draw(bx - ui(18), by - ui(18), ui(36), ui(36), mouse_ui, THEME.button_hide);
2022-01-13 05:24:03 +01:00
#endregion