[nostalgia/studio] Get save working
This commit is contained in:
@@ -45,19 +45,22 @@ else()
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(
|
||||
NostalgiaCore
|
||||
set(
|
||||
NOSTALGIA_CORE_GENERAL_SRC
|
||||
gfx.cpp
|
||||
media.cpp
|
||||
typeconv.cpp
|
||||
)
|
||||
|
||||
add_library(
|
||||
NostalgiaCore
|
||||
${NOSTALGIA_CORE_GENERAL_SRC}
|
||||
${NOSTALGIA_CORE_IMPL_SRC}
|
||||
)
|
||||
|
||||
add_library(
|
||||
NostalgiaCore-Headless
|
||||
gfx.cpp
|
||||
media.cpp
|
||||
typeconv.cpp
|
||||
${NOSTALGIA_CORE_GENERAL_SRC}
|
||||
headless/core.cpp
|
||||
headless/gfx.cpp
|
||||
headless/media.cpp
|
||||
@@ -75,7 +78,7 @@ target_link_libraries(
|
||||
)
|
||||
|
||||
target_link_libraries(
|
||||
NostalgiaCore-Headless PUBLIC
|
||||
NostalgiaCore-Headless PUBLIC
|
||||
OxClaw
|
||||
OxFS
|
||||
)
|
||||
|
||||
@@ -61,6 +61,12 @@ studio::UndoStack *TileSheetEditorImGui::undoStack() noexcept {
|
||||
}
|
||||
|
||||
void TileSheetEditorImGui::saveItem() {
|
||||
const auto err = m_tileSheetEditor.model()->saveFile();
|
||||
if (!err) {
|
||||
this->setUnsavedChanges(false);
|
||||
} else {
|
||||
oxErrorf("Could not save file {}: {}", m_itemPath, toStr(err));
|
||||
}
|
||||
}
|
||||
|
||||
void TileSheetEditorImGui::drawTileSheet(const geo::Vec2 &fbSize) noexcept {
|
||||
|
||||
@@ -76,6 +76,16 @@ class TileSheetEditor {
|
||||
[[nodiscard]]
|
||||
constexpr const Palette &pal() const noexcept;
|
||||
|
||||
[[nodiscard]]
|
||||
constexpr auto *model() noexcept {
|
||||
return &m_model;
|
||||
}
|
||||
|
||||
[[nodiscard]]
|
||||
constexpr auto *model() const noexcept {
|
||||
return &m_model;
|
||||
}
|
||||
|
||||
constexpr auto setPalIdx(auto palIdx) noexcept {
|
||||
m_palIdx = palIdx;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
* Copyright 2016 - 2022 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
||||
*/
|
||||
|
||||
#include <ox/claw/write.hpp>
|
||||
|
||||
#include <nostalgia/core/media.hpp>
|
||||
|
||||
#include "tilesheeteditormodel.hpp"
|
||||
@@ -9,6 +11,8 @@
|
||||
namespace nostalgia::core {
|
||||
|
||||
TileSheetEditorModel::TileSheetEditorModel(Context *ctx, const ox::String &path) {
|
||||
m_ctx = ctx;
|
||||
m_path = path;
|
||||
oxRequireT(img, readObj<TileSheet>(ctx, path.c_str()));
|
||||
m_img = *img;
|
||||
oxThrowError(readObj<Palette>(ctx, m_img.defaultPalette).moveTo(&m_pal));
|
||||
@@ -46,6 +50,12 @@ void TileSheetEditorModel::ackUpdate() noexcept {
|
||||
m_updated = false;
|
||||
}
|
||||
|
||||
ox::Error TileSheetEditorModel::saveFile() noexcept {
|
||||
oxRequire(buff, ox::writeClaw(&m_img));
|
||||
oxReturnError(m_ctx->rom->write(m_path.c_str(), buff.data(), buff.size()));
|
||||
return m_ctx->assetManager.setAsset(m_path, m_img).error;
|
||||
}
|
||||
|
||||
void TileSheetEditorModel::getFillPixels(bool *pixels, const geo::Point &pt, int oldColor) const noexcept {
|
||||
const auto tileIdx = [this](const geo::Point &pt) noexcept {
|
||||
return ptToIdx(pt, img().columns()) / PixelsPerTile;
|
||||
|
||||
@@ -119,6 +119,8 @@ class TileSheetEditorModel {
|
||||
studio::UndoStack m_undoStack;
|
||||
DrawCommand *m_ongoingDrawCommand = nullptr;
|
||||
bool m_updated = false;
|
||||
Context *m_ctx = nullptr;
|
||||
ox::String m_path;
|
||||
|
||||
public:
|
||||
TileSheetEditorModel(Context *ctx, const ox::String &path);
|
||||
@@ -149,6 +151,8 @@ class TileSheetEditorModel {
|
||||
|
||||
void ackUpdate() noexcept;
|
||||
|
||||
ox::Error saveFile() noexcept;
|
||||
|
||||
constexpr studio::UndoStack *undoStack() noexcept {
|
||||
return &m_undoStack;
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
* Copyright 2016 - 2022 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
||||
*/
|
||||
|
||||
#include <ox/std/defines.hpp>
|
||||
|
||||
#include <ox/claw/read.hpp>
|
||||
|
||||
#include "typeconv.hpp"
|
||||
@@ -40,6 +38,7 @@ struct TileSheetToCompactTileSheetConverter: public Converter<TileSheet, Compact
|
||||
};
|
||||
|
||||
#ifndef OX_BARE_METAL
|
||||
|
||||
static const auto converters = [] {
|
||||
ox::Vector<ox::UniquePtr<BaseConverter>, 3> converters;
|
||||
converters.emplace_back(new NostalgiaGraphicToTileSheetConverter());
|
||||
@@ -59,10 +58,12 @@ static auto findConverter(const ox::String &srcTypeName, int srcTypeVersion, con
|
||||
|
||||
ox::Result<ox::Buffer> convert(const ox::Buffer &srcBuffer, const ox::String &dstTypeName, int dstTypeVersion, ox::ClawFormat fmt) noexcept {
|
||||
oxRequire(hdr, ox::readClawHeader(srcBuffer));
|
||||
// look for direct converter
|
||||
auto [c, err] = findConverter(hdr.typeName, hdr.typeVersion, dstTypeName, dstTypeVersion);
|
||||
if (!err) { // try to chain multiple converters
|
||||
if (!err) {
|
||||
return c->convertBuffToBuff(srcBuffer);
|
||||
}
|
||||
// try to chain multiple converters
|
||||
for (const auto &subConverter : converters) {
|
||||
if (!subConverter->dstMatches(dstTypeName, dstTypeVersion)) {
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user