Compare commits
	
		
			4 Commits
		
	
	
		
			release-d2
			...
			a18c5d9294
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| a18c5d9294 | |||
| c753881747 | |||
| ba1bf950a8 | |||
| 95950441d1 | 
							
								
								
									
										8
									
								
								deps/ox/src/ox/std/string.hpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								deps/ox/src/ox/std/string.hpp
									
									
									
									
										vendored
									
									
								
							| @@ -392,7 +392,7 @@ template<std::size_t SmallStringSize_v> | |||||||
| constexpr BasicString<SmallStringSize_v> BasicString<SmallStringSize_v>::operator+(const char *str) const noexcept { | constexpr BasicString<SmallStringSize_v> BasicString<SmallStringSize_v>::operator+(const char *str) const noexcept { | ||||||
| 	const std::size_t strLen = ox::strlen(str); | 	const std::size_t strLen = ox::strlen(str); | ||||||
| 	const auto currentLen = len(); | 	const auto currentLen = len(); | ||||||
| 	BasicString<SmallStringSize_v> cpy(currentLen + strLen); | 	BasicString<SmallStringSize_v> cpy; | ||||||
| 	cpy.m_buff.resize(m_buff.size() + strLen); | 	cpy.m_buff.resize(m_buff.size() + strLen); | ||||||
| 	ox::listcpy(&cpy.m_buff[0], m_buff.data(), currentLen); | 	ox::listcpy(&cpy.m_buff[0], m_buff.data(), currentLen); | ||||||
| 	ox::listcpy(&cpy.m_buff[currentLen], str, strLen); | 	ox::listcpy(&cpy.m_buff[currentLen], str, strLen); | ||||||
| @@ -425,7 +425,8 @@ constexpr BasicString<SmallStringSize_v> BasicString<SmallStringSize_v>::operato | |||||||
| 	BasicString<SmallStringSize_v> cpy(currentLen + strLen); | 	BasicString<SmallStringSize_v> cpy(currentLen + strLen); | ||||||
| 	cpy.m_buff.resize(m_buff.size() + strLen); | 	cpy.m_buff.resize(m_buff.size() + strLen); | ||||||
| 	ox::listcpy(&cpy.m_buff[0], m_buff.data(), currentLen); | 	ox::listcpy(&cpy.m_buff[0], m_buff.data(), currentLen); | ||||||
| 	ox::listcpy(&cpy.m_buff[currentLen], src.data(), strLen + 1); | 	ox::listcpy(&cpy.m_buff[currentLen], src.data(), strLen); | ||||||
|  | 	cpy.m_buff[cpy.m_buff.size() - 1] = 0; | ||||||
| 	return cpy; | 	return cpy; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -436,7 +437,8 @@ constexpr BasicString<SmallStringSize_v> BasicString<SmallStringSize_v>::operato | |||||||
| 	BasicString<SmallStringSize_v> cpy(currentLen + strLen); | 	BasicString<SmallStringSize_v> cpy(currentLen + strLen); | ||||||
| 	cpy.m_buff.resize(m_buff.size() + strLen); | 	cpy.m_buff.resize(m_buff.size() + strLen); | ||||||
| 	ox::listcpy(&cpy.m_buff[0], m_buff.data(), currentLen); | 	ox::listcpy(&cpy.m_buff[0], m_buff.data(), currentLen); | ||||||
| 	ox::listcpy(&cpy.m_buff[currentLen], src.data(), strLen + 1); | 	ox::listcpy(&cpy.m_buff[currentLen], src.data(), strLen); | ||||||
|  | 	cpy.m_buff[cpy.m_buff.size() - 1] = 0; | ||||||
| 	return cpy; | 	return cpy; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| target_sources( | target_sources( | ||||||
| 	NostalgiaCore-Studio PRIVATE | 	NostalgiaCore-Studio PRIVATE | ||||||
| 		commands/addcolorcommand.cpp | 		commands/addcolorcommand.cpp | ||||||
|  | 		commands/addpagecommand.cpp | ||||||
| 		commands/applycolorallpagescommand.cpp | 		commands/applycolorallpagescommand.cpp | ||||||
| 		commands/duplicatepagecommand.cpp | 		commands/duplicatepagecommand.cpp | ||||||
| 		commands/movecolorcommand.cpp | 		commands/movecolorcommand.cpp | ||||||
|   | |||||||
| @@ -0,0 +1,28 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright 2016 - 2025 Gary Talent (gary@drinkingtea.net). All rights reserved. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include "commands.hpp" | ||||||
|  |  | ||||||
|  | #include "addpagecommand.hpp" | ||||||
|  |  | ||||||
|  | namespace nostalgia::core { | ||||||
|  |  | ||||||
|  | AddPageCommand::AddPageCommand(Palette &pal) noexcept: | ||||||
|  | 		m_pal(pal) {} | ||||||
|  |  | ||||||
|  | int AddPageCommand::commandId() const noexcept { | ||||||
|  | 	return static_cast<int>(PaletteEditorCommandId::AddPage); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ox::Error AddPageCommand::redo() noexcept { | ||||||
|  | 	m_pal.pages.emplace_back(ox::sfmt("Page {}", m_pal.pages.size() + 1), ox::Vector<PaletteColor>{}); | ||||||
|  | 	return {}; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ox::Error AddPageCommand::undo() noexcept { | ||||||
|  | 	m_pal.pages.pop_back(); | ||||||
|  | 	return {}; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -0,0 +1,31 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright 2016 - 2025 Gary Talent (gary@drinkingtea.net). All rights reserved. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include <studio/studio.hpp> | ||||||
|  |  | ||||||
|  | #include <nostalgia/core/palette.hpp> | ||||||
|  |  | ||||||
|  | namespace nostalgia::core { | ||||||
|  |  | ||||||
|  | class AddPageCommand: public studio::UndoCommand { | ||||||
|  | 	private: | ||||||
|  | 		Palette &m_pal; | ||||||
|  |  | ||||||
|  | 	public: | ||||||
|  | 		explicit AddPageCommand(Palette &pal) noexcept; | ||||||
|  |  | ||||||
|  | 		~AddPageCommand() noexcept override = default; | ||||||
|  |  | ||||||
|  | 		[[nodiscard]] | ||||||
|  | 		int commandId() const noexcept final; | ||||||
|  |  | ||||||
|  | 		ox::Error redo() noexcept final; | ||||||
|  |  | ||||||
|  | 		ox::Error undo() noexcept final; | ||||||
|  |  | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -9,6 +9,7 @@ namespace nostalgia::core { | |||||||
| enum class PaletteEditorCommandId { | enum class PaletteEditorCommandId { | ||||||
| 	ApplyColorAllPages, | 	ApplyColorAllPages, | ||||||
| 	RenamePage, | 	RenamePage, | ||||||
|  | 	AddPage, | ||||||
| 	DuplicatePage, | 	DuplicatePage, | ||||||
| 	RemovePage, | 	RemovePage, | ||||||
| 	AddColor, | 	AddColor, | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ int DuplicatePageCommand::commandId() const noexcept { | |||||||
| } | } | ||||||
|  |  | ||||||
| ox::Error DuplicatePageCommand::redo() noexcept { | ox::Error DuplicatePageCommand::redo() noexcept { | ||||||
| 	m_pal.pages.emplace(m_dstIdx, "", std::move(m_page)); | 	m_pal.pages.emplace(m_dstIdx, ox::sfmt("Page {}", m_pal.pages.size() + 1), std::move(m_page)); | ||||||
| 	return {}; | 	return {}; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ | |||||||
| #include <keel/media.hpp> | #include <keel/media.hpp> | ||||||
|  |  | ||||||
| #include "commands/addcolorcommand.hpp" | #include "commands/addcolorcommand.hpp" | ||||||
|  | #include "commands/addpagecommand.hpp" | ||||||
| #include "commands/applycolorallpagescommand.hpp" | #include "commands/applycolorallpagescommand.hpp" | ||||||
| #include "commands/duplicatepagecommand.hpp" | #include "commands/duplicatepagecommand.hpp" | ||||||
| #include "commands/movecolorcommand.hpp" | #include "commands/movecolorcommand.hpp" | ||||||
| @@ -196,7 +197,11 @@ void PaletteEditorImGui::drawPagesEditor() noexcept { | |||||||
| 	constexpr auto toolbarHeight = 40; | 	constexpr auto toolbarHeight = 40; | ||||||
| 	auto const btnSz = ImVec2{paneSz.x / 4 - 5.5f, 24}; | 	auto const btnSz = ImVec2{paneSz.x / 4 - 5.5f, 24}; | ||||||
| 	if (ImGui::Button("Add", btnSz)) { | 	if (ImGui::Button("Add", btnSz)) { | ||||||
|  | 		if (m_pal.pages.empty()) { | ||||||
|  | 			std::ignore = pushCommand<AddPageCommand>(m_pal); | ||||||
|  | 		} else { | ||||||
| 			std::ignore = pushCommand<DuplicatePageCommand>(m_pal, 0u, m_pal.pages.size()); | 			std::ignore = pushCommand<DuplicatePageCommand>(m_pal, 0u, m_pal.pages.size()); | ||||||
|  | 		} | ||||||
| 		m_page = m_pal.pages.size() - 1; | 		m_page = m_pal.pages.size() - 1; | ||||||
| 	} | 	} | ||||||
| 	ImGui::SameLine(); | 	ImGui::SameLine(); | ||||||
|   | |||||||
| @@ -234,7 +234,7 @@ void TileSheetEditorImGui::draw(studio::StudioContext&) noexcept { | |||||||
| 		ImGui::BeginChild("SubSheets", {s_palViewWidth - 24, ySize / 2.f}, true); | 		ImGui::BeginChild("SubSheets", {s_palViewWidth - 24, ySize / 2.f}, true); | ||||||
| 		{ | 		{ | ||||||
| 			static constexpr auto btnHeight = ig::BtnSz.y; | 			static constexpr auto btnHeight = ig::BtnSz.y; | ||||||
| 			auto const btnSize = ImVec2{btnHeight, btnHeight}; | 			auto constexpr btnSize = ImVec2{btnHeight, btnHeight}; | ||||||
| 			if (ig::PushButton("+", btnSize)) { | 			if (ig::PushButton("+", btnSize)) { | ||||||
| 				auto insertOnIdx = m_model.activeSubSheetIdx(); | 				auto insertOnIdx = m_model.activeSubSheetIdx(); | ||||||
| 				auto const&parent = m_model.activeSubSheet(); | 				auto const&parent = m_model.activeSubSheet(); | ||||||
| @@ -258,7 +258,10 @@ void TileSheetEditorImGui::draw(studio::StudioContext&) noexcept { | |||||||
| 				m_exportMenu.show(); | 				m_exportMenu.show(); | ||||||
| 			} | 			} | ||||||
| 			TileSheet::SubSheetIdx path; | 			TileSheet::SubSheetIdx path; | ||||||
| 			static constexpr auto flags = ImGuiTableFlags_RowBg | ImGuiTableFlags_NoBordersInBody; | 			static constexpr auto flags = | ||||||
|  | 				ImGuiTableFlags_RowBg | | ||||||
|  |                 ImGuiTableFlags_NoBordersInBody | | ||||||
|  |                 ImGuiTableFlags_ScrollY; | ||||||
|             if (ImGui::BeginTable("Subsheets", 4, flags)) { |             if (ImGui::BeginTable("Subsheets", 4, flags)) { | ||||||
|                 ImGui::TableSetupColumn("Subsheet", ImGuiTableColumnFlags_NoHide); |                 ImGui::TableSetupColumn("Subsheet", ImGuiTableColumnFlags_NoHide); | ||||||
|                 ImGui::TableSetupColumn("ID", ImGuiTableColumnFlags_WidthFixed, 25); |                 ImGui::TableSetupColumn("ID", ImGuiTableColumnFlags_WidthFixed, 25); | ||||||
| @@ -462,8 +465,12 @@ void TileSheetEditorImGui::drawPaletteMenu() noexcept { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	// header | 	// header | ||||||
|  | 	auto constexpr palTblFlags = | ||||||
|  | 		ImGuiTableFlags_RowBg | | ||||||
|  |         ImGuiTableFlags_SizingStretchProp | | ||||||
|  |         ImGuiTableFlags_ScrollY; | ||||||
| 	if (ImGui::BeginTable( | 	if (ImGui::BeginTable( | ||||||
| 			"PaletteTable", 4, ImGuiTableFlags_RowBg | ImGuiTableFlags_SizingStretchProp)) { | 			"PaletteTable", 4, palTblFlags)) { | ||||||
| 		ImGui::TableSetupColumn("Idx", 0, 0.6f); | 		ImGui::TableSetupColumn("Idx", 0, 0.6f); | ||||||
| 		ImGui::TableSetupColumn("", 0, 0.22f); | 		ImGui::TableSetupColumn("", 0, 0.22f); | ||||||
| 		ImGui::TableSetupColumn("Name", 0, 3); | 		ImGui::TableSetupColumn("Name", 0, 3); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user