10#include "imgui/imgui.h"
21 handler(command, config);
73 if (ImVec2 drag_delta = ImGui::GetMouseDragDelta(ImGuiMouseButton_Right);
75 ImGui::OpenPopupOnItemClick(context_id.c_str(), ImGuiPopupFlags_MouseButtonRight);
79 if (ImGui::BeginPopup(context_id.c_str())) {
136 const ImVec2& content_size,
140 bool enable_hex_labels,
141 bool enable_custom_labels,
142 bool enable_context_menu,
145 const ImVec2& scrolling) {
165 ImGui::BeginDisabled();
170 if (ImGui::MenuItem(item.
label.c_str(),
176 if (ImGui::BeginMenu(item.
label.c_str())) {
177 for (
const auto& subitem : item.
subitems) {
185 ImGui::EndDisabled();
194 const std::vector<ContextMenuItem>& items) {
195 if (items.empty())
return;
197 ImGui::TextColored(ImVec4(0.7F, 0.7F, 0.7F, 1.0F),
"%s", title.c_str());
198 for (
const auto& item : items) {
212 ImGui::TextColored(usage_color,
"%s %s Mode",
ICON_MD_COLOR_LENS, usage_name.c_str());
215 for (
const auto& item : it->second) {
223 if (ImGui::BeginMenu(
"View Controls")) {
224 if (ImGui::MenuItem(
"Reset View",
"Ctrl+R")) {
227 if (ImGui::MenuItem(
"Zoom to Fit",
"Ctrl+F")) {
230 if (ImGui::MenuItem(
"Zoom In",
"Ctrl++")) {
235 if (ImGui::MenuItem(
"Zoom Out",
"Ctrl+-")) {
241 if (ImGui::MenuItem(
"Show Grid",
nullptr,
enable_grid_)) {
268 ImGui::Text(
"Mouse Position: %.0f x %.0f", 0.0F, 0.0F);
270 if (ImGui::MenuItem(
"Advanced Properties...")) {
293 ImGui::Text(
"Size: %d x %d", bitmap->
width(), bitmap->
height());
294 ImGui::Text(
"Pitch: %d", bitmap->
surface()->pitch);
295 ImGui::Text(
"BitsPerPixel: %d", bitmap->
surface()->format->BitsPerPixel);
296 ImGui::Text(
"BytesPerPixel: %d", bitmap->
surface()->format->BytesPerPixel);
298 if (ImGui::BeginMenu(
"Format")) {
299 if (ImGui::MenuItem(
"Indexed")) {
305 if (ImGui::MenuItem(
"4BPP")) {
311 if (ImGui::MenuItem(
"8BPP")) {
327 if (ImGui::MenuItem(
"Edit Palette...")) {
330 if (ImGui::MenuItem(
"Color Analysis...")) {
334 if (rom && ImGui::BeginMenu(
"ROM Palette Selection")) {
338 ImGui::Text(
"Group:"); ImGui::SameLine();
340 ImGui::Text(
"Palette:"); ImGui::SameLine();
343 if (ImGui::Button(
"Apply to Canvas")) {
349 if (ImGui::BeginMenu(
"View Palette")) {
365 if (ImGui::MenuItem(
"Format Analysis...")) {
368 if (ImGui::MenuItem(
"Convert Format...")) {
371 if (ImGui::MenuItem(
"Format Comparison...")) {
382 auto canvas_stats = profiler.GetStats(
"canvas_operations");
383 auto draw_stats = profiler.GetStats(
"canvas_draw");
385 ImGui::Text(
"Canvas Operations: %zu", canvas_stats.sample_count);
386 ImGui::Text(
"Average Time: %.2f ms", draw_stats.avg_time_us / 1000.0);
388 if (ImGui::MenuItem(
"Performance Dashboard...")) {
391 if (ImGui::MenuItem(
"Usage Report...")) {
403 const struct GridOption {
406 } options[] = {{
"8x8", 8.0F}, {
"16x16", 16.0F},
407 {
"32x32", 32.0F}, {
"64x64", 64.0F}};
409 for (
const auto& option : options) {
411 if (ImGui::MenuItem(option.label,
nullptr, selected)) {
426 const struct ScaleOption {
429 } options[] = {{
"0.25x", 0.25F}, {
"0.5x", 0.5F}, {
"1x", 1.0F},
430 {
"2x", 2.0F}, {
"4x", 4.0F}, {
"8x", 8.0F}};
432 for (
const auto& option : options) {
433 if (ImGui::MenuItem(option.label)) {
446 static std::unordered_map<std::string, const char*> icon_map = {
455 auto it = icon_map.find(icon_name);
456 if (it != icon_map.end()) {
457 ImGui::TextColored(color,
"%s", it->second);
472 default:
return "Unknown";
487 default:
return ImVec4(0.7F, 0.7F, 0.7F, 1.0F);
544 const std::string& icon,
545 std::function<
void()> callback) {
550 const std::string& icon,
551 std::function<
void()> callback) {
556 const std::string& icon,
557 std::function<
void()> callback) {
562 const std::string& icon,
563 std::function<
void()> callback) {
568 const std::string& icon,
569 std::function<
void()> callback) {
The Rom class is used to load, save, and modify Rom data.
void QueueTextureCommand(TextureCommandType type, Bitmap *bitmap)
Represents a bitmap image optimized for SNES ROM hacking.
void Reformat(int format)
Reformat the bitmap to use a different pixel format.
SnesPalette * mutable_palette()
SDL_Surface * surface() const
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
#define ICON_MD_FUNCTIONS
#define ICON_MD_FIT_SCREEN
#define ICON_MD_TRENDING_UP
#define ICON_MD_SWAP_HORIZ
#define ICON_MD_DRAG_INDICATOR
#define ICON_MD_VISIBILITY
#define ICON_MD_COLOR_LENS
CanvasUsage
Canvas usage patterns and tracking.
absl::Status DisplayEditablePalette(gfx::SnesPalette &palette, const std::string &title, bool show_color_picker, int colors_per_row, ImGuiColorEditFlags flags)
Main namespace for the application.
Canvas configuration options for modals.
bool enable_custom_labels