[nostalgia/gfx/studio/palette] Add RGB key shortcuts for focusing color channels
All checks were successful
Build / build (push) Successful in 1m15s

This commit is contained in:
Gary Talent 2025-05-14 01:12:28 -05:00
parent 56eeb24900
commit efec6eb3c8
3 changed files with 39 additions and 11 deletions

View File

@ -1,3 +1,7 @@
# d2025.06.0
* PaletteEditor: Add RGB key shortcuts for focusing color channels
# d2025.05.0
* Add app icon for both window and file

View File

@ -118,12 +118,12 @@ void PaletteEditorImGui::navigateTo(ox::StringViewCR arg) noexcept {
}
}
void PaletteEditorImGui::drawColumnLeftAlign(ox::CStringView txt) noexcept {
void PaletteEditorImGui::drawColumnLeftAlign(ox::CStringViewCR txt) noexcept {
ImGui::TableNextColumn();
ImGui::Text("%s", txt.c_str());
}
void PaletteEditorImGui::drawColumn(ox::CStringView txt) noexcept {
void PaletteEditorImGui::drawColumn(ox::CStringViewCR txt) noexcept {
ImGui::TableNextColumn();
ImGui::SetCursorPosX(
ImGui::GetCursorPosX() + ImGui::GetColumnWidth() - ImGui::CalcTextSize(txt.data()).x);
@ -143,7 +143,15 @@ void PaletteEditorImGui::numShortcuts(size_t &val, size_t const sizeRange) noexc
}
}
void PaletteEditorImGui::colorInput(ox::CStringView label, int &v, bool &inputFocused) noexcept {
void PaletteEditorImGui::colorInput(
ox::CStringViewCR label,
int &v,
bool &inputFocused,
FocusCmd const colorChannel) noexcept {
if (colorChannel == m_focusCmd) [[unlikely]] {
ImGui::SetKeyboardFocusHere();
m_focusCmd = FocusCmd::None;
}
ImGui::InputInt(label.c_str(), &v, 1, 5);
inputFocused = inputFocused || ImGui::IsItemFocused();
v = ox::max(v, 0);
@ -296,9 +304,9 @@ void PaletteEditorImGui::drawColorEditor() noexcept {
"Name", m_pal.colorNames[m_selectedColorRow]);
bool inputFocused = ImGui::IsItemFocused();
ImGui::Separator();
colorInput("Red", r, inputFocused);
colorInput("Green", g, inputFocused);
colorInput("Blue", b, inputFocused);
colorInput("Red", r, inputFocused, FocusCmd::Red);
colorInput("Green", g, inputFocused, FocusCmd::Green);
colorInput("Blue", b, inputFocused, FocusCmd::Blue);
if (ig::PushButton("Apply to all pages", {-1, ig::BtnSz.y})) {
std::ignore = pushCommand<ApplyColorAllPagesCommand>(
m_pal, m_page, m_selectedColorRow);
@ -309,6 +317,15 @@ void PaletteEditorImGui::drawColorEditor() noexcept {
} else {
numShortcuts(m_page, m_pal.pages.size());
}
if (ImGui::IsKeyDown(ImGuiKey_R)) {
m_focusCmd = FocusCmd::Red;
}
if (ImGui::IsKeyDown(ImGuiKey_G)) {
m_focusCmd = FocusCmd::Green;
}
if (ImGui::IsKeyDown(ImGuiKey_B)) {
m_focusCmd = FocusCmd::Blue;
}
}
auto const newColor = color16(r, g, b, a);
if (c != newColor) {
@ -320,7 +337,7 @@ void PaletteEditorImGui::drawColorEditor() noexcept {
}
}
ox::Error PaletteEditorImGui::renamePage(ox::StringView name) noexcept {
ox::Error PaletteEditorImGui::renamePage(ox::StringViewCR name) noexcept {
return pushCommand<RenamePageCommand>(m_pal, m_page, name);
}

View File

@ -36,6 +36,13 @@ class PaletteEditorImGui: public studio::Editor {
Palette m_pal;
size_t m_selectedColorRow = 0;
size_t m_page = 0;
enum class FocusCmd {
None,
Red,
Green,
Blue,
};
FocusCmd m_focusCmd;
public:
PaletteEditorImGui(studio::Context &sctx, ox::StringParam path);
@ -48,9 +55,9 @@ class PaletteEditorImGui: public studio::Editor {
void navigateTo(ox::StringViewCR arg) noexcept override;
private:
static void drawColumnLeftAlign(ox::CStringView txt) noexcept;
static void drawColumnLeftAlign(ox::CStringViewCR txt) noexcept;
static void drawColumn(ox::CStringView txt) noexcept;
static void drawColumn(ox::CStringViewCR txt) noexcept;
static void drawColumn(ox::Integer_c auto i) noexcept {
drawColumn(ox::intToStr(i));
@ -58,7 +65,7 @@ class PaletteEditorImGui: public studio::Editor {
static void numShortcuts(size_t &val, size_t sizeRange) noexcept;
static void colorInput(ox::CStringView label, int &v, bool &inputFocused) noexcept;
void colorInput(ox::CStringViewCR label, int &v, bool &inputFocused, FocusCmd colorChannel) noexcept;
void drawColorsEditor() noexcept;
@ -66,7 +73,7 @@ class PaletteEditorImGui: public studio::Editor {
void drawColorEditor() noexcept;
ox::Error renamePage(ox::StringView name) noexcept;
ox::Error renamePage(ox::StringViewCR name) noexcept;
ox::Error handleCommand(studio::UndoCommand const*) noexcept;
};