[Scummvm-git-logs] scummvm master -> c3745698e2cd0c06df5d3d90458d2876e8815c74
sev-
noreply at scummvm.org
Fri May 3 19:24:12 UTC 2024
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
c3745698e2 BACKENDS: Add the ability to load ScummVM fonts in ImGui
Commit: c3745698e2cd0c06df5d3d90458d2876e8815c74
https://github.com/scummvm/scummvm/commit/c3745698e2cd0c06df5d3d90458d2876e8815c74
Author: scemino (scemino74 at gmail.com)
Date: 2024-05-03T21:24:08+02:00
Commit Message:
BACKENDS: Add the ability to load ScummVM fonts in ImGui
Changed paths:
A backends/imgui/imgui_fonts.cpp
A backends/imgui/imgui_fonts.h
backends/module.mk
diff --git a/backends/imgui/imgui_fonts.cpp b/backends/imgui/imgui_fonts.cpp
new file mode 100644
index 00000000000..34a7f2446d5
--- /dev/null
+++ b/backends/imgui/imgui_fonts.cpp
@@ -0,0 +1,98 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "common/file.h"
+#include "common/config-manager.h"
+#include "common/compression/unzip.h"
+#include "backends/imgui/imgui_fonts.h"
+
+namespace {
+
+class FontReader;
+
+class FontArchive {
+ friend class FontReader;
+
+public:
+ void openArchive(const char *archiveName) {
+ if (_archive)
+ delete _archive;
+
+ Common::SeekableReadStream *archiveStream = nullptr;
+ if (ConfMan.hasKey("extrapath")) {
+ Common::FSDirectory extrapath(ConfMan.getPath("extrapath"));
+ archiveStream = extrapath.createReadStreamForMember(archiveName);
+ }
+
+ if (!archiveStream) {
+ archiveStream = SearchMan.createReadStreamForMember(archiveName);
+ }
+
+ _archive = Common::makeZipArchive(archiveStream);
+ }
+
+ ~FontArchive() {
+ if (_archive)
+ delete _archive;
+ }
+
+private:
+ Common::Archive *_archive = nullptr;
+};
+
+class FontReader {
+public:
+ FontReader(FontArchive &archive) : _archive(archive) {}
+ bool openFile(Common::File &file, const char *fileName) {
+ if (!_archive._archive)
+ return false;
+ return file.open(Common::Path(fileName, Common::Path::kNoSeparator), *_archive._archive);
+ }
+
+private:
+ FontArchive &_archive;
+};
+
+} // namespace
+
+namespace ImGui {
+
+ImFont *addTTFFontFromArchive(const char *filename, float size_pixels, const ImFontConfig *font_cfg_template, const ImWchar *glyph_ranges) {
+ Common::File f;
+ FontArchive archive;
+ FontReader reader(archive);
+
+ archive.openArchive("fonts.dat");
+ if (!reader.openFile(f, filename)) {
+ archive.openArchive("fonts-cjk.dat");
+ if (!reader.openFile(f, filename)) {
+ return nullptr;
+ }
+ }
+
+ uint size = f.size();
+ uint8 *ttfFile = new uint8[size];
+ f.read(ttfFile, size);
+ ImGuiIO &io = ImGui::GetIO();
+ return io.Fonts->AddFontFromMemoryTTF(ttfFile, size, size_pixels, font_cfg_template, glyph_ranges);
+}
+
+} // namespace ImGui
diff --git a/backends/imgui/imgui_fonts.h b/backends/imgui/imgui_fonts.h
new file mode 100644
index 00000000000..7830286d8eb
--- /dev/null
+++ b/backends/imgui/imgui_fonts.h
@@ -0,0 +1,42 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef BACKENDS_IMGUI_FONTS_H
+#define BACKENDS_IMGUI_FONTS_H
+
+#include "backends/imgui/imgui.h"
+
+namespace ImGui {
+
+/**
+ * Loads and adds a TTF font file from the common fonts archive to ImGui .
+ *
+ * @param filename The name of the font to load.
+ * @param size_pixels The size of the font in pixels.
+ * @param font_cfg_template Configuration of the font.
+ * @param glyph_ranges Glyph ranges array terminated by 0, you need to make sure that your array persist up until the
+ * atlas is build (when calling GetTexData*** or Build()). We only copy the pointer, not the data.
+ * @return 0 in case loading fails, otherwise a pointer to the Font object.
+ */
+ImFont *addTTFFontFromArchive(const char *filename, float size_pixels, const ImFontConfig *font_cfg_template = NULL, const ImWchar *glyph_ranges = NULL);
+}
+
+#endif
diff --git a/backends/module.mk b/backends/module.mk
index 8acd0369f40..8361801ddcb 100644
--- a/backends/module.mk
+++ b/backends/module.mk
@@ -492,8 +492,9 @@ ifdef USE_IMGUI
MODULE_OBJS += \
imgui/imgui.o \
imgui/imgui_draw.o \
- imgui/imgui_widgets.o \
- imgui/imgui_tables.o
+ imgui/imgui_fonts.o \
+ imgui/imgui_tables.o \
+ imgui/imgui_widgets.o
endif
ifdef USE_SDL2
More information about the Scummvm-git-logs
mailing list