Add load system fonts experiment flag
This commit is contained in:
@@ -44,6 +44,10 @@ class ExperimentFlags {
|
|||||||
|
|
||||||
// Use the new platform specific file dialog wrappers.
|
// Use the new platform specific file dialog wrappers.
|
||||||
bool kNewFileDialogWrapper = true;
|
bool kNewFileDialogWrapper = true;
|
||||||
|
|
||||||
|
// Platform specific loading of fonts from the system. Currently
|
||||||
|
// only supports macOS.
|
||||||
|
bool kLoadSystemFonts = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
ExperimentFlags() = default;
|
ExperimentFlags() = default;
|
||||||
|
|||||||
@@ -93,6 +93,9 @@
|
|||||||
ImGui::Text(text); \
|
ImGui::Text(text); \
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
|
#define TABLE_BORDERS_RESIZABLE \
|
||||||
|
ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable
|
||||||
|
|
||||||
#define CLEAR_AND_RETURN_STATUS(status) \
|
#define CLEAR_AND_RETURN_STATUS(status) \
|
||||||
if (!status.ok()) { \
|
if (!status.ok()) { \
|
||||||
auto temp = status; \
|
auto temp = status; \
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
#include "absl/status/status.h"
|
#include "absl/status/status.h"
|
||||||
#include "absl/strings/str_format.h"
|
#include "absl/strings/str_format.h"
|
||||||
|
#include "app/core/platform/font_loader.h"
|
||||||
#include "app/editor/master_editor.h"
|
#include "app/editor/master_editor.h"
|
||||||
#include "app/gui/icons.h"
|
#include "app/gui/icons.h"
|
||||||
#include "app/gui/style.h"
|
#include "app/gui/style.h"
|
||||||
@@ -212,7 +213,7 @@ absl::Status Controller::CreateRenderer() {
|
|||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
absl::Status Controller::CreateGuiContext() const {
|
absl::Status Controller::CreateGuiContext() {
|
||||||
IMGUI_CHECKVERSION();
|
IMGUI_CHECKVERSION();
|
||||||
ImGui::CreateContext();
|
ImGui::CreateContext();
|
||||||
|
|
||||||
@@ -228,6 +229,25 @@ absl::Status Controller::CreateGuiContext() const {
|
|||||||
ImGui_ImplSDL2_InitForSDLRenderer(window_.get(), renderer_.get());
|
ImGui_ImplSDL2_InitForSDLRenderer(window_.get(), renderer_.get());
|
||||||
ImGui_ImplSDLRenderer2_Init(renderer_.get());
|
ImGui_ImplSDLRenderer2_Init(renderer_.get());
|
||||||
|
|
||||||
|
if (flags()->kLoadSystemFonts) {
|
||||||
|
LoadSystemFonts();
|
||||||
|
} else {
|
||||||
|
LoadFontFamilies();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the default style
|
||||||
|
gui::ColorsYaze();
|
||||||
|
|
||||||
|
// Build a new ImGui frame
|
||||||
|
ImGui_ImplSDLRenderer2_NewFrame();
|
||||||
|
ImGui_ImplSDL2_NewFrame(window_.get());
|
||||||
|
|
||||||
|
return absl::OkStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
absl::Status Controller::LoadFontFamilies() const {
|
||||||
|
ImGuiIO &io = ImGui::GetIO();
|
||||||
|
|
||||||
// Define constants
|
// Define constants
|
||||||
static const char *KARLA_REGULAR = "assets/font/Karla-Regular.ttf";
|
static const char *KARLA_REGULAR = "assets/font/Karla-Regular.ttf";
|
||||||
static const char *ROBOTO_MEDIUM = "assets/font/Roboto-Medium.ttf";
|
static const char *ROBOTO_MEDIUM = "assets/font/Roboto-Medium.ttf";
|
||||||
@@ -277,13 +297,6 @@ absl::Status Controller::CreateGuiContext() const {
|
|||||||
io.Fonts->GetGlyphRangesJapanese());
|
io.Fonts->GetGlyphRangesJapanese());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the default style
|
|
||||||
gui::ColorsYaze();
|
|
||||||
|
|
||||||
// Build a new ImGui frame
|
|
||||||
ImGui_ImplSDLRenderer2_NewFrame();
|
|
||||||
ImGui_ImplSDL2_NewFrame(window_.get());
|
|
||||||
|
|
||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,8 @@ class Controller : public ExperimentFlags {
|
|||||||
|
|
||||||
absl::Status CreateWindow();
|
absl::Status CreateWindow();
|
||||||
absl::Status CreateRenderer();
|
absl::Status CreateRenderer();
|
||||||
absl::Status CreateGuiContext() const;
|
absl::Status CreateGuiContext();
|
||||||
|
absl::Status LoadFontFamilies() const;
|
||||||
void CloseWindow() { active_ = false; }
|
void CloseWindow() { active_ = false; }
|
||||||
|
|
||||||
friend int ::main(int argc, char **argv);
|
friend int ::main(int argc, char **argv);
|
||||||
|
|||||||
@@ -50,6 +50,45 @@ void AssemblyEditor::ChangeActiveFile(const std::string_view& filename) {
|
|||||||
current_file_ = filename;
|
current_file_ = filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AssemblyEditor::DrawFileView() {
|
||||||
|
ImGui::BeginTable("##table_view", 4,
|
||||||
|
ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg);
|
||||||
|
|
||||||
|
// Table headers
|
||||||
|
ImGui::TableSetupColumn("Files", ImGuiTableColumnFlags_WidthFixed, 150.0f);
|
||||||
|
ImGui::TableSetupColumn("Line", ImGuiTableColumnFlags_WidthFixed, 60.0f);
|
||||||
|
ImGui::TableSetupColumn("Address", ImGuiTableColumnFlags_WidthFixed, 100.0f);
|
||||||
|
ImGui::TableSetupColumn("Editor", ImGuiTableColumnFlags_WidthStretch);
|
||||||
|
|
||||||
|
ImGui::TableHeadersRow();
|
||||||
|
|
||||||
|
// Table data
|
||||||
|
ImGui::TableNextRow();
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
// TODO: Add tree view of files
|
||||||
|
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
// TODO: Add line number
|
||||||
|
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
// TODO: Add address per line
|
||||||
|
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
|
||||||
|
auto cpos = text_editor_.GetCursorPosition();
|
||||||
|
SetEditorText();
|
||||||
|
ImGui::Text("%6d/%-6d %6d lines | %s | %s | %s | %s", cpos.mLine + 1,
|
||||||
|
cpos.mColumn + 1, text_editor_.GetTotalLines(),
|
||||||
|
text_editor_.IsOverwrite() ? "Ovr" : "Ins",
|
||||||
|
text_editor_.CanUndo() ? "*" : " ",
|
||||||
|
text_editor_.GetLanguageDefinition().mName.c_str(),
|
||||||
|
current_file_.c_str());
|
||||||
|
|
||||||
|
text_editor_.Render("##asm_editor");
|
||||||
|
|
||||||
|
ImGui::EndTable();
|
||||||
|
}
|
||||||
|
|
||||||
void AssemblyEditor::DrawFileMenu() {
|
void AssemblyEditor::DrawFileMenu() {
|
||||||
if (ImGui::BeginMenu("File")) {
|
if (ImGui::BeginMenu("File")) {
|
||||||
if (ImGui::MenuItem("Open", "Ctrl+O")) {
|
if (ImGui::MenuItem("Open", "Ctrl+O")) {
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ class AssemblyEditor {
|
|||||||
private:
|
private:
|
||||||
void DrawFileMenu();
|
void DrawFileMenu();
|
||||||
void DrawEditMenu();
|
void DrawEditMenu();
|
||||||
|
|
||||||
|
void DrawFileView();
|
||||||
|
|
||||||
void SetEditorText();
|
void SetEditorText();
|
||||||
|
|
||||||
bool file_is_loaded_ = false;
|
bool file_is_loaded_ = false;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "absl/status/status.h"
|
#include "absl/status/status.h"
|
||||||
#include "absl/status/statusor.h"
|
#include "absl/status/statusor.h"
|
||||||
#include "absl/strings/str_format.h"
|
#include "absl/strings/str_format.h"
|
||||||
|
#include "app/core/common.h"
|
||||||
#include "app/core/pipeline.h"
|
#include "app/core/pipeline.h"
|
||||||
#include "app/editor/modules/palette_editor.h"
|
#include "app/editor/modules/palette_editor.h"
|
||||||
#include "app/gfx/bitmap.h"
|
#include "app/gfx/bitmap.h"
|
||||||
@@ -51,7 +52,6 @@ absl::Status OverworldEditor::Update() {
|
|||||||
// Draws the toolset for editing the Overworld.
|
// Draws the toolset for editing the Overworld.
|
||||||
RETURN_IF_ERROR(DrawToolset())
|
RETURN_IF_ERROR(DrawToolset())
|
||||||
|
|
||||||
|
|
||||||
if (ImGui::BeginTable(kOWEditTable.data(), 2, kOWEditFlags, ImVec2(0, 0))) {
|
if (ImGui::BeginTable(kOWEditTable.data(), 2, kOWEditFlags, ImVec2(0, 0))) {
|
||||||
TableSetupColumn("Canvas", ImGuiTableColumnFlags_WidthStretch,
|
TableSetupColumn("Canvas", ImGuiTableColumnFlags_WidthStretch,
|
||||||
ImGui::GetContentRegionAvail().x);
|
ImGui::GetContentRegionAvail().x);
|
||||||
@@ -127,8 +127,10 @@ absl::Status OverworldEditor::DrawToolset() {
|
|||||||
|
|
||||||
TableNextColumn(); // Palette
|
TableNextColumn(); // Palette
|
||||||
palette_editor_.DisplayPalette(palette_, overworld_.isLoaded());
|
palette_editor_.DisplayPalette(palette_, overworld_.isLoaded());
|
||||||
|
|
||||||
TEXT_COLUMN(ICON_MD_MORE_VERT) // Separator
|
TEXT_COLUMN(ICON_MD_MORE_VERT) // Separator
|
||||||
TableNextColumn(); // Experimental
|
|
||||||
|
TableNextColumn(); // Experimental
|
||||||
ImGui::Checkbox("Experimental", &show_experimental);
|
ImGui::Checkbox("Experimental", &show_experimental);
|
||||||
|
|
||||||
ImGui::EndTable();
|
ImGui::EndTable();
|
||||||
@@ -453,8 +455,8 @@ void OverworldEditor::DrawTileSelector() {
|
|||||||
ImGui::EndTabItem();
|
ImGui::EndTabItem();
|
||||||
}
|
}
|
||||||
if (ImGui::BeginTabItem("Tile8")) {
|
if (ImGui::BeginTabItem("Tile8")) {
|
||||||
if (ImGuiID child_id = ImGui::GetID((void *)(intptr_t)1);
|
if (ImGui::BeginChild(core::ImGuiIdIssuer::GetNewID(),
|
||||||
ImGui::BeginChild(child_id, ImGui::GetContentRegionAvail(), true,
|
ImGui::GetContentRegionAvail(), true,
|
||||||
ImGuiWindowFlags_AlwaysVerticalScrollbar)) {
|
ImGuiWindowFlags_AlwaysVerticalScrollbar)) {
|
||||||
DrawTile8Selector();
|
DrawTile8Selector();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user