#pragma once #include "../GUIManager.hpp" #include "TextBoxHelpers.hpp" #include "../Elements/ColorPicker.hpp" namespace GUIStuff { namespace ElementHelpers { struct ColorPickerItemsOptions { bool hasAlpha = true; std::function onEdit; std::function onSelect; std::function onDeselect; }; template void color_picker_items(GUIManager& gui, const char* id, T* val, const ColorPickerItemsOptions& options = {}) { gui.new_id(id, [&] { auto fullOnEdit = [&gui, oE = options.onEdit]() { if(oE) oE(); gui.set_to_layout(); }; gui.element>("c", val, options.hasAlpha, ColorPickerData{ .onChange = fullOnEdit, .onHold = options.onSelect, .onRelease = options.onDeselect }); left_to_right_line_layout(gui, [&]() { text_label(gui, "R"); input_color_component_255(gui, "r", &(*val)[0], { .onEdit = fullOnEdit, .onSelect = options.onSelect, .onDeselect = options.onDeselect }); text_label(gui, "G"); input_color_component_255(gui, "g", &(*val)[1], { .onEdit = fullOnEdit, .onSelect = options.onSelect, .onDeselect = options.onDeselect }); text_label(gui, "B"); input_color_component_255(gui, "b", &(*val)[2], { .onEdit = fullOnEdit, .onSelect = options.onSelect, .onDeselect = options.onDeselect }); if(options.hasAlpha) { text_label(gui, "A"); input_color_component_255(gui, "a", &(*val)[3], { .onEdit = fullOnEdit, .onSelect = options.onSelect, .onDeselect = options.onDeselect }); } }); left_to_right_line_layout(gui, [&]() { text_label(gui, "Hex"); input_color_hex(gui, "h", val, { .hasAlpha = options.hasAlpha, .onEdit = fullOnEdit, .onSelect = options.onSelect, .onDeselect = options.onDeselect }); }); }); } } }