20 ImGuiColorEditFlags flags,
21 const ImVec2& size_arg) {
26 bool pressed = ImGui::ColorButton(
id.data(), displayColor, flags, size_arg);
28 if (ImGui::IsItemHovered()) {
29 ImGui::BeginTooltip();
30 ImGui::Text(
"SNES: $%04X", color.
snes());
51 static ImVec4 color = ImVec4(0, 0, 0, 255.f);
52 ImGuiColorEditFlags misc_flags = ImGuiColorEditFlags_AlphaPreview |
53 ImGuiColorEditFlags_NoDragDrop |
54 ImGuiColorEditFlags_NoOptions;
57 static bool init =
false;
58 static ImVec4 saved_palette[32] = {};
59 if (loaded && !init) {
60 for (
int n = 0; n < palette.
size(); n++) {
62 saved_palette[n].x = color.rgb().x / 255;
63 saved_palette[n].y = color.rgb().y / 255;
64 saved_palette[n].z = color.rgb().z / 255;
65 saved_palette[n].w = 255;
70 static ImVec4 backup_color;
71 ImGui::Text(
"Current ==>");
73 ImGui::Text(
"Previous");
77 ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf,
81 if (ImGui::ColorButton(
82 "##previous", backup_color,
83 ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf,
89 ImGui::Text(
"Palette");
90 for (
int n = 0; n < IM_ARRAYSIZE(saved_palette); n++) {
92 if ((n % 4) != 0) ImGui::SameLine(0.0f, ImGui::GetStyle().ItemSpacing.y);
94 ImGuiColorEditFlags palette_button_flags = ImGuiColorEditFlags_NoAlpha |
95 ImGuiColorEditFlags_NoPicker |
96 ImGuiColorEditFlags_NoTooltip;
97 if (ImGui::ColorButton(
"##palette", saved_palette[n], palette_button_flags,
99 color = ImVec4(saved_palette[n].x, saved_palette[n].y, saved_palette[n].z,
102 if (ImGui::BeginDragDropTarget()) {
103 if (
const ImGuiPayload* payload =
104 ImGui::AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F))
105 memcpy((
float*)&saved_palette[n], payload->Data,
sizeof(
float) * 3);
106 if (
const ImGuiPayload* payload =
107 ImGui::AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F))
108 memcpy((
float*)&saved_palette[n], payload->Data,
sizeof(
float) * 4);
109 ImGui::EndDragDropTarget();
117 ImGui::ColorPicker4(
"##picker", (
float*)&color,
118 misc_flags | ImGuiColorEditFlags_NoSidePreview |
119 ImGuiColorEditFlags_NoSmallPreview);
120 return absl::OkStatus();
125 const auto palette_row_size = 7;
126 if (ImGuiID child_id = ImGui::GetID((
void*)(intptr_t)100);
127 ImGui::BeginChild(child_id, ImGui::GetContentRegionAvail(),
true,
128 ImGuiWindowFlags_AlwaysVerticalScrollbar)) {
130 ImGui::Text(
"Palette");
131 for (
int n = 0; n < palette.
size(); n++) {
133 if ((n % palette_row_size) != 0)
134 ImGui::SameLine(0.0f, ImGui::GetStyle().ItemSpacing.y);
137 bool is_selected = (palette_id == n / palette_row_size);
141 ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(1.0f, 1.0f, 0.0f, 1.0f));
142 ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 2.0f);
146 ImGuiColorEditFlags_NoAlpha |
147 ImGuiColorEditFlags_NoPicker |
148 ImGuiColorEditFlags_NoTooltip,
150 palette_id = n / palette_row_size;
151 refresh_graphics =
true;
155 ImGui::PopStyleColor();
156 ImGui::PopStyleVar();