Squashed 'deps/nostalgia/' changes from 430cae16..5e90f8d4
5e90f8d4 [studio] Move task runner to draw call fd4619bc [studio,turbine] Fix Turbine sleep logic, tweak Studio default sleep values 128ddb2c [turbine/gba] Fix ticksMs function signature f34704d8 [nostalgia/core/studio] Fix AddSubsheetCommand::undo to undo ID idx change fb5d3545 [nostalgia/core/studio] Cleanup 2180f7bf [nostalgia/core] Fix validateSubSheetIdx dcad4440 [keel] Make GBA AssetRef changeable git-subtree-dir: deps/nostalgia git-subtree-split: 5e90f8d45434fa36b6e113357cf05a6cf53bfae5
This commit is contained in:
		@@ -238,7 +238,7 @@ ox::Error resizeSubsheet(TileSheet::SubSheet &ss, int8_t pBpp, ox::Size const&sz
 | 
			
		||||
 * @return a valid version of idx
 | 
			
		||||
 */
 | 
			
		||||
[[nodiscard]]
 | 
			
		||||
TileSheet::SubSheetIdx validateSubSheetIdx(TileSheet const&ts, TileSheet::SubSheetIdx const&idx) noexcept;
 | 
			
		||||
TileSheet::SubSheetIdx validateSubSheetIdx(TileSheet const&ts, TileSheet::SubSheetIdx idx) noexcept;
 | 
			
		||||
 | 
			
		||||
[[nodiscard]]
 | 
			
		||||
TileSheet::SubSheet const&getSubSheet(
 | 
			
		||||
 
 | 
			
		||||
@@ -46,9 +46,11 @@ ox::Error AddSubSheetCommand::undo() noexcept {
 | 
			
		||||
		parent.columns = s.columns;
 | 
			
		||||
		parent.pixels = std::move(s.pixels);
 | 
			
		||||
		parent.subsheets.clear();
 | 
			
		||||
		--m_img.idIt;
 | 
			
		||||
	} else {
 | 
			
		||||
		for (auto idx = m_addedSheets.rbegin(); idx != m_addedSheets.rend(); ++idx) {
 | 
			
		||||
			oxReturnError(rmSubSheet(m_img, *idx));
 | 
			
		||||
			--m_img.idIt;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return {};
 | 
			
		||||
 
 | 
			
		||||
@@ -212,8 +212,8 @@ void TileSheetEditorImGui::draw(studio::StudioContext&) noexcept {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	auto const paneSize = ImGui::GetContentRegionAvail();
 | 
			
		||||
	auto const tileSheetParentSize = ImVec2(paneSize.x - m_palViewWidth, paneSize.y);
 | 
			
		||||
	auto const fbSize = ox::Vec2(tileSheetParentSize.x - 16, tileSheetParentSize.y - 16);
 | 
			
		||||
	auto const tileSheetParentSize = ImVec2{paneSize.x - m_palViewWidth, paneSize.y};
 | 
			
		||||
	auto const fbSize = ox::Vec2{tileSheetParentSize.x - 16, tileSheetParentSize.y - 16};
 | 
			
		||||
	ImGui::BeginChild("TileSheetView", tileSheetParentSize, true);
 | 
			
		||||
	{
 | 
			
		||||
		drawTileSheet(fbSize);
 | 
			
		||||
@@ -225,7 +225,7 @@ void TileSheetEditorImGui::draw(studio::StudioContext&) noexcept {
 | 
			
		||||
		auto const controlsSize = ImGui::GetContentRegionAvail();
 | 
			
		||||
		ImGui::BeginChild("ToolBox", {m_palViewWidth - 24, 30}, true);
 | 
			
		||||
		{
 | 
			
		||||
			auto const btnSz = ImVec2(45, 14);
 | 
			
		||||
			auto const btnSz = ImVec2{45, 14};
 | 
			
		||||
			if (ImGui::Selectable("Select", m_tool == TileSheetTool::Select, 0, btnSz)) {
 | 
			
		||||
				m_tool = TileSheetTool::Select;
 | 
			
		||||
			}
 | 
			
		||||
@@ -388,7 +388,7 @@ ox::Error TileSheetEditorImGui::exportSubhseetToPng(int scale) noexcept {
 | 
			
		||||
 | 
			
		||||
void TileSheetEditorImGui::drawTileSheet(ox::Vec2 const&fbSize) noexcept {
 | 
			
		||||
	auto const winPos = ImGui::GetWindowPos();
 | 
			
		||||
	auto const fbSizei = ox::Size(static_cast<int>(fbSize.x), static_cast<int>(fbSize.y));
 | 
			
		||||
	auto const fbSizei = ox::Size{static_cast<int>(fbSize.x), static_cast<int>(fbSize.y)};
 | 
			
		||||
	if (m_framebuffer.width != fbSizei.width || m_framebuffer.height != fbSizei.height) {
 | 
			
		||||
		glutils::resizeInitFrameBuffer(m_framebuffer, fbSizei.width, fbSizei.height);
 | 
			
		||||
		m_view.resizeView(fbSize);
 | 
			
		||||
@@ -404,11 +404,11 @@ void TileSheetEditorImGui::drawTileSheet(ox::Vec2 const&fbSize) noexcept {
 | 
			
		||||
	ImGui::Image(
 | 
			
		||||
		ig::toImTextureID(m_framebuffer.color.id),
 | 
			
		||||
		static_cast<ImVec2>(fbSize),
 | 
			
		||||
		ImVec2(0, 1),
 | 
			
		||||
		ImVec2(1, 0));
 | 
			
		||||
		{0, 1},
 | 
			
		||||
		{1, 0});
 | 
			
		||||
	// handle input, this must come after drawing
 | 
			
		||||
	auto const&io = ImGui::GetIO();
 | 
			
		||||
	auto const mousePos = ox::Vec2(ImGui::GetMousePos());
 | 
			
		||||
	auto const mousePos = ox::Vec2{ImGui::GetMousePos()};
 | 
			
		||||
	if (ImGui::IsItemHovered()) {
 | 
			
		||||
		auto const wheel = io.MouseWheel;
 | 
			
		||||
		auto const wheelh = io.MouseWheelH;
 | 
			
		||||
@@ -436,7 +436,7 @@ void TileSheetEditorImGui::drawTileSheet(ox::Vec2 const&fbSize) noexcept {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (ImGui::BeginPopupContextItem("TileMenu", ImGuiPopupFlags_MouseButtonRight)) {
 | 
			
		||||
		auto const popupPos = ox::Vec2(ImGui::GetWindowPos());
 | 
			
		||||
		auto const popupPos = ox::Vec2{ImGui::GetWindowPos()};
 | 
			
		||||
		if (ImGui::MenuItem("Insert Tile")) {
 | 
			
		||||
			m_view.insertTile(fbSize, clickPos(winPos, popupPos));
 | 
			
		||||
		}
 | 
			
		||||
@@ -504,8 +504,8 @@ void TileSheetEditorImGui::drawPaletteSelector() noexcept {
 | 
			
		||||
					auto ic = ImGui::GetColorU32(ImVec4(redf(c), greenf(c), bluef(c), 1));
 | 
			
		||||
					ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, ic);
 | 
			
		||||
					ImGui::TableNextColumn();
 | 
			
		||||
					auto const&name = pal.colorInfo[i].name;
 | 
			
		||||
					ImGui::Text("%s", name.c_str());
 | 
			
		||||
					auto const&name =  i < pal.colorInfo.size() ? pal.colorInfo[i].name.c_str() : "";
 | 
			
		||||
					ImGui::Text("%s", name);
 | 
			
		||||
					ImGui::TableNextColumn();
 | 
			
		||||
					ImGui::Text("(%02d, %02d, %02d)", red16(c), green16(c), blue16(c));
 | 
			
		||||
					ImGui::TableNextRow();
 | 
			
		||||
@@ -556,7 +556,7 @@ void TileSheetEditorImGui::SubSheetEditor::draw(turbine::Context &tctx) noexcept
 | 
			
		||||
	auto const modSize = m_cols > 0;
 | 
			
		||||
	auto constexpr popupWidth = 235.f;
 | 
			
		||||
	auto const popupHeight = modSize ? 130.f : 85.f;
 | 
			
		||||
	auto const popupSz = ImVec2(popupWidth, popupHeight);
 | 
			
		||||
	auto const popupSz = ImVec2{popupWidth, popupHeight};
 | 
			
		||||
	if (ig::BeginPopup(tctx, popupName, m_show, popupSz)) {
 | 
			
		||||
		ImGui::InputText("Name", m_name.data(), m_name.cap());
 | 
			
		||||
		if (modSize) {
 | 
			
		||||
@@ -581,7 +581,7 @@ void TileSheetEditorImGui::ExportMenu::draw(turbine::Context &tctx) noexcept {
 | 
			
		||||
	}
 | 
			
		||||
	constexpr auto popupWidth = 235.f;
 | 
			
		||||
	constexpr auto popupHeight = 85.f;
 | 
			
		||||
	constexpr auto popupSz = ImVec2(popupWidth, popupHeight);
 | 
			
		||||
	constexpr auto popupSz = ImVec2{popupWidth, popupHeight};
 | 
			
		||||
	if (ig::BeginPopup(tctx, popupName, m_show, popupSz)) {
 | 
			
		||||
		ImGui::InputInt("Scale", &m_scale);
 | 
			
		||||
		m_scale = ox::clamp(m_scale, 1, 50);
 | 
			
		||||
 
 | 
			
		||||
@@ -191,27 +191,28 @@ ox::Result<ox::StringView> getNameFor(TileSheet::SubSheet const&ss, SubSheetId p
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TileSheet::SubSheetIdx validateSubSheetIdx(
 | 
			
		||||
		TileSheet::SubSheetIdx const&pIdx,
 | 
			
		||||
		TileSheet::SubSheetIdx &&pIdx,
 | 
			
		||||
		std::size_t pIdxIt,
 | 
			
		||||
		TileSheet::SubSheet const&pSubsheet) noexcept {
 | 
			
		||||
	if (pIdxIt == pIdx.size()) {
 | 
			
		||||
		return pIdx;
 | 
			
		||||
	if (pIdxIt >= pIdx.size()) {
 | 
			
		||||
		return std::move(pIdx);
 | 
			
		||||
	}
 | 
			
		||||
	const auto currentIdx = pIdx[pIdxIt];
 | 
			
		||||
	auto ¤tIdx = pIdx[pIdxIt];
 | 
			
		||||
	if (pSubsheet.subsheets.size() <= currentIdx) {
 | 
			
		||||
		auto out = pIdx;
 | 
			
		||||
		if (!pSubsheet.subsheets.empty()) {
 | 
			
		||||
			*out.back().value = pSubsheet.subsheets.size() - 1;
 | 
			
		||||
		if (pSubsheet.subsheets.empty()) {
 | 
			
		||||
			// currentIdx could not be repaired, remove
 | 
			
		||||
			// this and all succeeding idxs and return
 | 
			
		||||
			pIdx.resize(pIdxIt);
 | 
			
		||||
			return std::move(pIdx);
 | 
			
		||||
		} else {
 | 
			
		||||
			out.pop_back();
 | 
			
		||||
			currentIdx = pSubsheet.subsheets.size() - 1;
 | 
			
		||||
		}
 | 
			
		||||
		return out;
 | 
			
		||||
	}
 | 
			
		||||
	return validateSubSheetIdx(pIdx, pIdxIt + 1, pSubsheet.subsheets[pIdx[pIdxIt]]);
 | 
			
		||||
	return validateSubSheetIdx(std::move(pIdx), pIdxIt + 1, pSubsheet.subsheets[currentIdx]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TileSheet::SubSheetIdx validateSubSheetIdx(TileSheet const&ts, TileSheet::SubSheetIdx const&idx) noexcept {
 | 
			
		||||
	return validateSubSheetIdx(idx, 0, ts.subsheet);
 | 
			
		||||
TileSheet::SubSheetIdx validateSubSheetIdx(TileSheet const&ts, TileSheet::SubSheetIdx idx) noexcept {
 | 
			
		||||
	return validateSubSheetIdx(std::move(idx), 0, ts.subsheet);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const TileSheet::SubSheet &getSubSheet(
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user