From 2fbc58ad0345070b6cc0e85188a45082064b09de Mon Sep 17 00:00:00 2001 From: Justin Scofield Date: Mon, 20 Jun 2022 13:02:33 -0400 Subject: [PATCH] added graphics sheet to the overworld editor section --- src/application/Data/OW/overworld.cc | 32 ++-- src/application/Data/OW/overworld.h | 2 +- src/application/Data/OW/overworld_map.cc | 2 +- src/application/Data/OW/overworld_map.h | 2 +- src/application/Data/rom.cc | 169 +++++++++++---------- src/application/Data/rom.h | 14 +- src/application/Editor/editor.cc | 9 +- src/application/Editor/editor.h | 6 +- src/application/Editor/overworld_editor.cc | 98 +++++++++++- src/application/Editor/overworld_editor.h | 26 ++-- 10 files changed, 235 insertions(+), 125 deletions(-) diff --git a/src/application/Data/OW/overworld.cc b/src/application/Data/OW/overworld.cc index 4e270c8d..95b06f5d 100644 --- a/src/application/Data/OW/overworld.cc +++ b/src/application/Data/OW/overworld.cc @@ -11,19 +11,18 @@ using namespace Graphics; Overworld::~Overworld() { if (isLoaded) { - for (int i = 0; i < (int) tiles32.size(); i++) { - free(allmapsTilesLW[i]); - free(allmapsTilesDW[i]); - free(allmapsTilesSP[i]); - } - free(allmapsTilesLW); - free(allmapsTilesDW); - free(allmapsTilesSP); + for (int i = 0; i < (int)tiles32.size(); i++) { + free(allmapsTilesLW[i]); + free(allmapsTilesDW[i]); + free(allmapsTilesSP[i]); + } + free(allmapsTilesLW); + free(allmapsTilesDW); + free(allmapsTilesSP); - delete[] overworldMapPointer; - delete[] owactualMapPointer; + delete[] overworldMapPointer; + delete[] owactualMapPointer; } - } static TileInfo GetTilesInfo(ushort tile) { @@ -41,14 +40,13 @@ static TileInfo GetTilesInfo(ushort tile) { return TileInfo(tid, p, v, h, o); } -void Overworld::Load(Data::ROM rom) { +void Overworld::Load(Data::ROM & rom) { rom_ = rom; for (int i = 0; i < 0x2B; i++) { - // tileLeftEntrance.push_back( - // rom_.ReadShort(Constants::overworldEntranceAllowedTilesLeft + (i * - // 2))); - // tileRightEntrance.push_back(rom_.ReadShort( - // Constants::overworldEntranceAllowedTilesRight + (i * 2))); + tileLeftEntrance.push_back(Constants::overworldEntranceAllowedTilesLeft + + (i * 2)); + tileRightEntrance.push_back(Constants::overworldEntranceAllowedTilesRight + + (i * 2)); } AssembleMap32Tiles(); diff --git a/src/application/Data/OW/overworld.h b/src/application/Data/OW/overworld.h index 18db9e59..241c0b7d 100644 --- a/src/application/Data/OW/overworld.h +++ b/src/application/Data/OW/overworld.h @@ -21,7 +21,7 @@ class Overworld { Overworld() = default; ~Overworld(); - void Load(Data::ROM rom); + void Load(Data::ROM & rom); char* overworldMapPointer = new char[0x40000]; Graphics::Bitmap* overworldMapBitmap; diff --git a/src/application/Data/OW/overworld_map.cc b/src/application/Data/OW/overworld_map.cc index adafaa7c..e37e463f 100644 --- a/src/application/Data/OW/overworld_map.cc +++ b/src/application/Data/OW/overworld_map.cc @@ -10,7 +10,7 @@ namespace Data { using namespace Core; using namespace Graphics; -OverworldMap::OverworldMap(Data::ROM rom, +OverworldMap::OverworldMap(Data::ROM & rom, const std::vector tiles16, uchar index) : rom_(rom), index(index), tiles16_(tiles16), parent(index) { diff --git a/src/application/Data/OW/overworld_map.h b/src/application/Data/OW/overworld_map.h index e95ebac6..6e7c5699 100644 --- a/src/application/Data/OW/overworld_map.h +++ b/src/application/Data/OW/overworld_map.h @@ -42,7 +42,7 @@ class OverworldMap { uchar* currentOWgfx16Ptr = new uchar[(128 * 512) / 2]; std::vector tiles16_; - OverworldMap(Data::ROM rom, const std::vector tiles16, + OverworldMap(Data::ROM & rom, const std::vector tiles16, uchar index); void BuildMap(uchar* mapParent, int count, int gameState, ushort** allmapsTilesLW, ushort** allmapsTilesDW, diff --git a/src/application/Data/rom.cc b/src/application/Data/rom.cc index e01ab88c..868854de 100644 --- a/src/application/Data/rom.cc +++ b/src/application/Data/rom.cc @@ -11,9 +11,19 @@ namespace Data { ROM::~ROM() { if (loaded) { delete[] current_rom_; + for (auto &each : decompressed_graphic_sheets_) { + free(each); + } + for (auto &each : converted_graphic_sheets_) { + free(each); + } } } +void ROM::SetupRenderer(std::shared_ptr renderer) { + sdl_renderer_ = renderer; +} + // TODO: check if the rom has a header on load void ROM::LoadFromFile(const std::string &path) { size_ = std::filesystem::file_size(path.c_str()); @@ -115,62 +125,10 @@ uint32_t ROM::GetRomPosition(int direct_addr, uint snes_addr) const { return filePos; } -uchar *ROM::SNES3bppTo8bppSheet(uchar *buffer_in, int sheet_id) // 128x32 -{ - // 8bpp sheet out - const uchar bitmask[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}; - uchar *sheet_buffer_out = (unsigned char *)malloc(0x1000); - int xx = 0; // positions where we are at on the sheet - int yy = 0; - int pos = 0; - int ypos = 0; - - if (sheet_id != 0) { - yy = sheet_id; - } - - for (int i = 0; i < 64; i++) // for each tiles //16 per lines - { - for (int y = 0; y < 8; y++) // for each lines - { - //[0] + [1] + [16] - for (int x = 0; x < 8; x++) { - unsigned char b1 = (unsigned char)(( - buffer_in[(y * 2) + (24 * pos)] & (bitmask[x]))); - unsigned char b2 = - (unsigned char)(buffer_in[((y * 2) + (24 * pos)) + 1] & - (bitmask[x])); - unsigned char b3 = - (unsigned char)(buffer_in[(16 + y) + (24 * pos)] & - (bitmask[x])); - unsigned char b = 0; - if (b1 != 0) { - b |= 1; - }; - if (b2 != 0) { - b |= 2; - }; - if (b3 != 0) { - b |= 4; - }; - sheet_buffer_out[x + (xx) + (y * 128) + (yy * 1024)] = b; - } - } - pos++; - ypos++; - xx += 8; - if (ypos >= 16) { - yy++; - xx = 0; - ypos = 0; - } - } - return sheet_buffer_out; -} - -char *ROM::Decompress(int pos, bool reversed) { - char *buffer = new char[0x800]; - for (int i = 0; i < 0x800; i++) { +char *ROM::Decompress(int pos, int size, bool reversed) { + char *buffer = new char[size]; + decompressed_graphic_sheets_.push_back(buffer); + for (int i = 0; i < size; i++) { buffer[i] = 0; } unsigned int bufferPos = 0; @@ -243,37 +201,90 @@ char *ROM::Decompress(int pos, bool reversed) { return buffer; } -SDL_Surface* ROM::GetGraphicsSheet(int num_sheets) { - int height = 32 * num_sheets; +uchar *ROM::SNES3bppTo8bppSheet(uchar *buffer_in, + int sheet_id) // 128x32 +{ + // 8bpp sheet out + const uchar bitmask[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}; + uchar *sheet_buffer_out = (uchar *)malloc(0x1000); + converted_graphic_sheets_.push_back(sheet_buffer_out); + int xx = 0; // positions where we are at on the sheet + int yy = 0; + int pos = 0; + int ypos = 0; + + if (sheet_id != 0) { + yy = sheet_id; + } + + for (int i = 0; i < 64; i++) // for each tiles //16 per lines + { + for (int y = 0; y < 8; y++) // for each lines + { + //[0] + [1] + [16] + for (int x = 0; x < 8; x++) { + unsigned char b1 = + (unsigned char)((buffer_in[(y * 2) + (24 * pos)] & (bitmask[x]))); + unsigned char b2 = + (unsigned char)(buffer_in[((y * 2) + (24 * pos)) + 1] & + (bitmask[x])); + unsigned char b3 = + (unsigned char)(buffer_in[(16 + y) + (24 * pos)] & (bitmask[x])); + unsigned char b = 0; + if (b1 != 0) { + b |= 1; + }; + if (b2 != 0) { + b |= 2; + }; + if (b3 != 0) { + b |= 4; + }; + sheet_buffer_out[x + (xx) + (y * 128) + (yy * 1024)] = b; + } + } + pos++; + ypos++; + xx += 8; + if (ypos >= 16) { + yy++; + xx = 0; + ypos = 0; + } + } + return sheet_buffer_out; +} + +SDL_Texture *ROM::DrawGraphicsSheet(int offset) { SDL_Surface *surface = - SDL_CreateRGBSurfaceWithFormat(0, 128, height, 8, SDL_PIXELFORMAT_INDEX8); - std::cout << "Drawing surface" << std::endl; + SDL_CreateRGBSurfaceWithFormat(0, 128, 32, 8, SDL_PIXELFORMAT_INDEX8); + std::cout << "Drawing surface #" << offset << std::endl; uchar *sheet_buffer = nullptr; for (int i = 0; i < 8; i++) { - surface->format->palette->colors[i].r = (unsigned char)(i * 31); - surface->format->palette->colors[i].g = (unsigned char)(i * 31); - surface->format->palette->colors[i].b = (unsigned char)(i * 31); + surface->format->palette->colors[i].r = i * 31; + surface->format->palette->colors[i].g = i * 31; + surface->format->palette->colors[i].b = i * 31; } unsigned int snesAddr = 0; unsigned int pcAddr = 0; - for (int i = 0; i < num_sheets; i++) { - snesAddr = - (unsigned int)((((unsigned char)(current_rom_[0x4F80 + i]) << - 16) | - ((unsigned char)(current_rom_[0x505F + i]) << 8) - | - ((unsigned char)(current_rom_[0x513E + i])))); - pcAddr = SnesToPc(snesAddr); - std::cout << "Decompressing..." << std::endl; - char *decomp = Decompress(pcAddr); - std::cout << "Converting to 8bpp sheet..." << std::endl; - sheet_buffer = SNES3bppTo8bppSheet((uchar *)decomp, i); - std::cout << "Assigning pixel data..." << std::endl; - } - + snesAddr = (unsigned int)((((uchar)(current_rom_[0x4F80 + offset]) << 16) | + ((uchar)(current_rom_[0x505F + offset]) << 8) | + ((uchar)(current_rom_[0x513E + offset])))); + pcAddr = SnesToPc(snesAddr); + std::cout << "Decompressing..." << std::endl; + char *decomp = Decompress(pcAddr); + std::cout << "Converting to 8bpp sheet..." << std::endl; + sheet_buffer = SNES3bppTo8bppSheet((uchar *)decomp); + std::cout << "Assigning pixel data..." << std::endl; surface->pixels = sheet_buffer; - return surface; + std::cout << "Creating texture from surface..." << std::endl; + SDL_Texture *sheet_texture = nullptr; + sheet_texture = SDL_CreateTextureFromSurface(sdl_renderer_.get(), surface); + if (sheet_texture == nullptr) { + std::cout << "Error: " << SDL_GetError() << std::endl; + } + return sheet_texture; } int AddressFromBytes(uchar addr1, uchar addr2, uchar addr3) { diff --git a/src/application/Data/rom.h b/src/application/Data/rom.h index 07e1ecff..ce0981d6 100644 --- a/src/application/Data/rom.h +++ b/src/application/Data/rom.h @@ -26,22 +26,21 @@ class ROM { public: ~ROM(); + void SetupRenderer(std::shared_ptr renderer); void LoadFromFile(const std::string& path); std::vector ExtractTiles(Graphics::TilePreset& preset); Graphics::SNESPalette ExtractPalette(Graphics::TilePreset& preset); - uint32_t GetRomPosition(int direct_addr, uint snes_addr) const; + char* Decompress(int pos, int size = 0x800, bool reversed = false); + uchar* SNES3bppTo8bppSheet(uchar* buffer_in, int sheet_id = 0); + SDL_Texture* DrawGraphicsSheet(int offset); + inline uchar* GetRawData() { return current_rom_; } const uchar* getTitle() const { return title; } long int getSize() const { return size_; } char getVersion() const { return version_; } bool isLoaded() const { return loaded; } - - uchar* SNES3bppTo8bppSheet(uchar* buffer_in, int sheet_id = 0); - char* Decompress(int pos, bool reversed = false); - SDL_Surface* GetGraphicsSheet(int num_sheets = 1); - unsigned int SnesToPc(unsigned int addr) { if (addr >= 0x808000) { addr -= 0x808000; @@ -63,7 +62,10 @@ class ROM { enum rom_type type_ = LoROM; std::shared_ptr rom_ptr_; + std::vector decompressed_graphic_sheets_; + std::vector converted_graphic_sheets_; std::vector surfaces_; + std::shared_ptr sdl_renderer_; }; } // namespace Data diff --git a/src/application/Editor/editor.cc b/src/application/Editor/editor.cc index 3aded6dc..9ec2c519 100644 --- a/src/application/Editor/editor.cc +++ b/src/application/Editor/editor.cc @@ -96,6 +96,7 @@ Editor::~Editor() { void Editor::SetupScreen(std::shared_ptr renderer) { sdl_renderer_ = renderer; + rom_.SetupRenderer(renderer); } void Editor::UpdateScreen() { @@ -139,6 +140,7 @@ void Editor::DrawYazeMenu() { std::string filePath = ImGuiFileDialog::Instance()->GetCurrentPath(); rom_.LoadFromFile(filePathName); rom_data_ = (void *)rom_.GetRawData(); + overworld_editor_.SetupROM(rom_); } ImGuiFileDialog::Instance()->Close(); } @@ -295,9 +297,9 @@ void Editor::DrawGraphicsSheet(int offset) { unsigned int snesAddr = 0; unsigned int pcAddr = 0; snesAddr = (unsigned int)(( - ((unsigned char)(rom_.GetRawData()[0x4F80 + offset]) << 16) | - ((unsigned char)(rom_.GetRawData()[0x505F + offset]) << 8) | - ((unsigned char)(rom_.GetRawData()[0x513E + offset])))); + ((uchar)(rom_.GetRawData()[0x4F80 + offset]) << 16) | + ((uchar)(rom_.GetRawData()[0x505F + offset]) << 8) | + ((uchar)(rom_.GetRawData()[0x513E + offset])))); pcAddr = rom_.SnesToPc(snesAddr); std::cout << "Decompressing..." << std::endl; char *decomp = rom_.Decompress(pcAddr); @@ -306,6 +308,7 @@ void Editor::DrawGraphicsSheet(int offset) { std::cout << "Assigning pixel data..." << std::endl; surface->pixels = sheet_buffer; std::cout << "Creating texture from surface..." << std::endl; + SDL_Texture *sheet_texture = nullptr; sheet_texture = SDL_CreateTextureFromSurface(sdl_renderer_.get(), surface); imagesCache[offset] = sheet_texture; if (sheet_texture == nullptr) { diff --git a/src/application/Editor/editor.h b/src/application/Editor/editor.h index 5af68e74..9beb5c78 100644 --- a/src/application/Editor/editor.h +++ b/src/application/Editor/editor.h @@ -49,7 +49,7 @@ class Editor { std::vector> arranged_tiles_; std::unordered_map> texture_cache_; std::unordered_map imagesCache; - SDL_Texture *sheet_texture = nullptr; + std::shared_ptr sdl_renderer_; Data::ROM rom_; @@ -62,8 +62,8 @@ class Editor { ImGuiWindowFlags main_editor_flags_ = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | - ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoScrollbar | - ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoTitleBar; + ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_MenuBar | + ImGuiWindowFlags_NoTitleBar; ImGuiTableFlags toolset_table_flags_ = ImGuiTableFlags_SizingFixedFit; }; diff --git a/src/application/Editor/overworld_editor.cc b/src/application/Editor/overworld_editor.cc index 13c66305..80227cb5 100644 --- a/src/application/Editor/overworld_editor.cc +++ b/src/application/Editor/overworld_editor.cc @@ -29,11 +29,15 @@ namespace yaze { namespace application { namespace Editor { + +void OverworldEditor::SetupROM(Data::ROM &rom) { rom_ = rom; } + void OverworldEditor::Update() { if (rom_.isLoaded()) { - if (!doneLoaded) { - // overworld.Load(rom_); - doneLoaded = true; + if (!all_graphics_loaded_) { + LoadGraphics(); + overworld_.Load(rom_); + all_graphics_loaded_ = true; } } @@ -44,7 +48,9 @@ void OverworldEditor::Update() { DrawToolset(); ImGui::Separator(); if (ImGui::BeginTable("#owEditTable", 2, ow_edit_flags, ImVec2(0, 0))) { - ImGui::TableSetupColumn("#overworldCanvas", ImGuiTableColumnFlags_WidthStretch, ImGui::GetContentRegionAvail().x); + ImGui::TableSetupColumn("#overworldCanvas", + ImGuiTableColumnFlags_WidthStretch, + ImGui::GetContentRegionAvail().x); ImGui::TableSetupColumn("#tileSelector"); ImGui::TableNextColumn(); DrawOverworldCanvas(); @@ -263,9 +269,23 @@ void OverworldEditor::DrawOverworldCanvas() { draw_list->PopClipRect(); } + void OverworldEditor::DrawTileSelector() { if (ImGui::BeginTabBar("##TabBar", ImGuiTabBarFlags_FittingPolicyScroll)) { if (ImGui::BeginTabItem("Tile8")) { + ImGuiStyle &style = ImGui::GetStyle(); + ImGuiID child_id = ImGui::GetID((void *)(intptr_t)1); + bool child_is_visible = ImGui::BeginChild( + child_id, ImGui::GetContentRegionAvail(), true, ImGuiWindowFlags_AlwaysVerticalScrollbar); + if (child_is_visible) // Avoid calling SetScrollHereY when running with + // culled items + { + DrawTile8Selector(); + } + float scroll_x = ImGui::GetScrollX(); + float scroll_max_x = ImGui::GetScrollMaxX(); + + ImGui::EndChild(); ImGui::EndTabItem(); } if (ImGui::BeginTabItem("Tile16")) { @@ -276,6 +296,70 @@ void OverworldEditor::DrawTileSelector() { } } +void OverworldEditor::DrawTile8Selector() { + static ImVec2 scrolling(0.0f, 0.0f); + ImVec2 canvas_p0 = ImGui::GetCursorScreenPos(); + ImVec2 canvas_sz = ImVec2(256 + 1, kNumSheetsToLoad * 64); + ImVec2 canvas_p1 = + ImVec2(canvas_p0.x + canvas_sz.x, canvas_p0.y + canvas_sz.y); + + // Draw border and background color + const ImGuiIO &io = ImGui::GetIO(); + ImDrawList *draw_list = ImGui::GetWindowDrawList(); + draw_list->AddRectFilled(canvas_p0, canvas_p1, IM_COL32(32, 32, 32, 255)); + draw_list->AddRect(canvas_p0, canvas_p1, IM_COL32(255, 255, 255, 255)); + + // This will catch our interactions + ImGui::InvisibleButton( + "Tile8SelectorCanvas", canvas_sz, + ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight); + const bool is_hovered = ImGui::IsItemHovered(); // Hovered + const bool is_active = ImGui::IsItemActive(); // Held + const ImVec2 origin(canvas_p0.x + scrolling.x, + canvas_p0.y + scrolling.y); // Lock scrolled origin + const ImVec2 mouse_pos_in_canvas(io.MousePos.x - origin.x, + io.MousePos.y - origin.y); + + // Context menu (under default mouse threshold) + ImVec2 drag_delta = ImGui::GetMouseDragDelta(ImGuiMouseButton_Right); + if (drag_delta.x == 0.0f && drag_delta.y == 0.0f) + ImGui::OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight); + if (ImGui::BeginPopup("context")) { + ImGui::EndPopup(); + } + + if (all_graphics_loaded_) { + for (const auto &[key, value] : all_texture_sheet_) { + int offset = 64 * (key + 1); + int top_left_y = canvas_p0.y + 2; + if (key >= 1) { + top_left_y = canvas_p0.y + 64 * key; + } + draw_list->AddImage((void *)(SDL_Texture *)value, + ImVec2(canvas_p0.x + 2, top_left_y), + ImVec2(canvas_p0.x + 256, canvas_p0.y + offset)); + } + } + + // Draw grid + all lines in the canvas + draw_list->PushClipRect(canvas_p0, canvas_p1, true); + if (opt_enable_grid) { + const float GRID_STEP = 16.0f; + for (float x = fmodf(scrolling.x, GRID_STEP); x < canvas_sz.x; + x += GRID_STEP) + draw_list->AddLine(ImVec2(canvas_p0.x + x, canvas_p0.y), + ImVec2(canvas_p0.x + x, canvas_p1.y), + IM_COL32(200, 200, 200, 40)); + for (float y = fmodf(scrolling.y, GRID_STEP); y < canvas_sz.y; + y += GRID_STEP) + draw_list->AddLine(ImVec2(canvas_p0.x, canvas_p0.y + y), + ImVec2(canvas_p1.x, canvas_p0.y + y), + IM_COL32(200, 200, 200, 40)); + } + + draw_list->PopClipRect(); +} + void OverworldEditor::DrawChangelist() { if (!ImGui::Begin("Changelist")) { ImGui::End(); @@ -285,6 +369,12 @@ void OverworldEditor::DrawChangelist() { ImGui::End(); } +void OverworldEditor::LoadGraphics() { + for (int i = 0; i < kNumSheetsToLoad; i++) { + all_texture_sheet_[i] = rom_.DrawGraphicsSheet(i); + } +} + } // namespace Editor } // namespace application } // namespace yaze \ No newline at end of file diff --git a/src/application/Editor/overworld_editor.h b/src/application/Editor/overworld_editor.h index 318b5629..bb5a3498 100644 --- a/src/application/Editor/overworld_editor.h +++ b/src/application/Editor/overworld_editor.h @@ -16,6 +16,7 @@ static constexpr unsigned int k4BPP = 4; class OverworldEditor { public: + void SetupROM(Data::ROM & rom); void Update(); private: @@ -23,16 +24,17 @@ class OverworldEditor { void DrawOverworldMapSettings(); void DrawOverworldCanvas(); void DrawTileSelector(); - + void DrawTile8Selector(); void DrawChangelist(); - bool show_changelist_ = false; + void LoadGraphics(); Data::ROM rom_; - Data::Overworld overworld; + Data::Overworld overworld_; Graphics::Bitmap allgfxBitmap; Graphics::SNESPalette palette_; Graphics::TilePreset current_set_; + std::unordered_map all_texture_sheet_; SDL_Texture *gfx_texture = nullptr; @@ -41,12 +43,6 @@ class OverworldEditor { uchar *allGfx16Ptr = new uchar[(128 * 7136) / 2]; - ImGuiTableFlags toolset_table_flags = ImGuiTableFlags_SizingFixedFit; - ImGuiTableFlags ow_map_settings_flags = ImGuiTableFlags_Borders; - ImGuiTableFlags ow_edit_flags = ImGuiTableFlags_Reorderable | - ImGuiTableFlags_Resizable | - ImGuiTableFlags_SizingStretchSame; - float canvas_table_ratio = 30.f; char map_gfx_[3] = ""; @@ -59,11 +55,21 @@ class OverworldEditor { bool isLoaded = false; bool doneLoaded = false; + bool opt_enable_grid = true; + bool show_changelist_ = false; + bool all_graphics_loaded_ = false; constexpr static int kByteSize = 3; constexpr static int kMessageIdSize = 5; constexpr static float kInputFieldSize = 30.f; - bool opt_enable_grid = true; + constexpr static int kNumSheetsToLoad = 50; + constexpr static int kTile8DisplayHeight = 64; + + ImGuiTableFlags toolset_table_flags = ImGuiTableFlags_SizingFixedFit; + ImGuiTableFlags ow_map_settings_flags = ImGuiTableFlags_Borders; + ImGuiTableFlags ow_edit_flags = ImGuiTableFlags_Reorderable | + ImGuiTableFlags_Resizable | + ImGuiTableFlags_SizingStretchSame; }; } // namespace Editor } // namespace application