mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2024-12-13 19:54:39 +00:00
Revived Fonts Viewer as an External app (in Utilities menu) (#1484)
* Add files via upload * Moved Font Viewer to external app
This commit is contained in:
parent
264b1b38ba
commit
29a36c8658
@ -400,7 +400,6 @@ DebugMenuView::DebugMenuView(NavigationView& nav) {
|
|||||||
add_items({
|
add_items({
|
||||||
{"Buttons Test", ui::Color::dark_cyan(), &bitmap_icon_controls, [&nav]() { nav.push<DebugControlsView>(); }},
|
{"Buttons Test", ui::Color::dark_cyan(), &bitmap_icon_controls, [&nav]() { nav.push<DebugControlsView>(); }},
|
||||||
{"Debug Dump", ui::Color::dark_cyan(), &bitmap_icon_memory, [&nav]() { portapack::persistent_memory::debug_dump(); }},
|
{"Debug Dump", ui::Color::dark_cyan(), &bitmap_icon_memory, [&nav]() { portapack::persistent_memory::debug_dump(); }},
|
||||||
//{"Fonts Viewer", ui::Color::dark_cyan(), &bitmap_icon_notepad, [&nav]() { nav.push<DebugFontsView>(); }}, // temporarily disabled to conserve ROM space
|
|
||||||
{"M0 Stack Dump", ui::Color::dark_cyan(), &bitmap_icon_memory, [&nav]() { stack_dump(); }},
|
{"M0 Stack Dump", ui::Color::dark_cyan(), &bitmap_icon_memory, [&nav]() { stack_dump(); }},
|
||||||
{"Memory", ui::Color::dark_cyan(), &bitmap_icon_memory, [&nav]() { nav.push<DebugMemoryView>(); }},
|
{"Memory", ui::Color::dark_cyan(), &bitmap_icon_memory, [&nav]() { nav.push<DebugMemoryView>(); }},
|
||||||
{"P.Memory", ui::Color::dark_cyan(), &bitmap_icon_memory, [&nav]() { nav.push<DebugPmemView>(); }},
|
{"P.Memory", ui::Color::dark_cyan(), &bitmap_icon_memory, [&nav]() { nav.push<DebugPmemView>(); }},
|
||||||
@ -469,41 +468,6 @@ uint32_t DebugPmemView::registers_widget_feed(const size_t register_number) {
|
|||||||
return data.regfile[(page_size * page + register_number) / 4] >> (register_number % 4 * 8);
|
return data.regfile[(page_size * page + register_number) / 4] >> (register_number % 4 * 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DebugFontsView *******************************************************/
|
|
||||||
|
|
||||||
uint16_t DebugFontsView::display_font(Painter& painter, uint16_t y_offset, const Style* font_style, std::string_view font_name) {
|
|
||||||
auto char_width{font_style->font.char_width()};
|
|
||||||
auto char_height{font_style->font.line_height()};
|
|
||||||
auto cpl{((screen_width / char_width) - 6) & 0xF8}; // Display a multiple of 8 characters per line
|
|
||||||
uint16_t line_pos{y_offset};
|
|
||||||
|
|
||||||
painter.draw_string({0, y_offset}, *font_style, font_name);
|
|
||||||
|
|
||||||
// Displaying ASCII+extended characters from 0x20 to 0xFF
|
|
||||||
for (uint8_t c = 0; c <= 0xDF; c++) {
|
|
||||||
line_pos = y_offset + ((c / cpl) + 2) * char_height;
|
|
||||||
|
|
||||||
if ((c % cpl) == 0)
|
|
||||||
painter.draw_string({0, line_pos}, *font_style, "Ox" + to_string_hex(c + 0x20, 2));
|
|
||||||
|
|
||||||
painter.draw_char({((c % cpl) + 5) * char_width, line_pos}, *font_style, (char)(c + 0x20));
|
|
||||||
}
|
|
||||||
|
|
||||||
return line_pos + char_height;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DebugFontsView::paint(Painter& painter) {
|
|
||||||
int16_t line_pos;
|
|
||||||
|
|
||||||
line_pos = display_font(painter, 32, &Styles::white, "Fixed 8x16");
|
|
||||||
display_font(painter, line_pos + 16, &Styles::white_small, "Fixed 5x8");
|
|
||||||
}
|
|
||||||
|
|
||||||
DebugFontsView::DebugFontsView(NavigationView& nav)
|
|
||||||
: nav_{nav} {
|
|
||||||
set_focusable(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* DebugScreenTest ****************************************************/
|
/* DebugScreenTest ****************************************************/
|
||||||
|
|
||||||
DebugScreenTest::DebugScreenTest(NavigationView& nav)
|
DebugScreenTest::DebugScreenTest(NavigationView& nav)
|
||||||
|
@ -310,17 +310,6 @@ class DebugPmemView : public View {
|
|||||||
uint32_t registers_widget_feed(const size_t register_number);
|
uint32_t registers_widget_feed(const size_t register_number);
|
||||||
};
|
};
|
||||||
|
|
||||||
class DebugFontsView : public View {
|
|
||||||
public:
|
|
||||||
DebugFontsView(NavigationView& nav);
|
|
||||||
void paint(Painter& painter) override;
|
|
||||||
std::string title() const override { return "Fonts"; };
|
|
||||||
|
|
||||||
private:
|
|
||||||
uint16_t display_font(Painter& painter, uint16_t y_offset, const Style* font_style, std::string_view font_name);
|
|
||||||
NavigationView& nav_;
|
|
||||||
};
|
|
||||||
|
|
||||||
class DebugScreenTest : public View {
|
class DebugScreenTest : public View {
|
||||||
public:
|
public:
|
||||||
DebugScreenTest(NavigationView& nav);
|
DebugScreenTest(NavigationView& nav);
|
||||||
|
5
firmware/application/external/external.cmake
vendored
5
firmware/application/external/external.cmake
vendored
@ -11,10 +11,15 @@ set(EXTCPPSRC
|
|||||||
#calculator
|
#calculator
|
||||||
external/calculator/main.cpp
|
external/calculator/main.cpp
|
||||||
external/calculator/ui_calculator.cpp
|
external/calculator/ui_calculator.cpp
|
||||||
|
|
||||||
|
#font_viewer
|
||||||
|
external/font_viewer/main.cpp
|
||||||
|
external/font_viewer/ui_font_viewer.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set(EXTAPPLIST
|
set(EXTAPPLIST
|
||||||
pacman
|
pacman
|
||||||
afsk_rx
|
afsk_rx
|
||||||
calculator
|
calculator
|
||||||
|
font_viewer
|
||||||
)
|
)
|
||||||
|
7
firmware/application/external/external.ld
vendored
7
firmware/application/external/external.ld
vendored
@ -20,6 +20,7 @@ MEMORY
|
|||||||
ram_external_app_pacman (rwx) : org = 0xEEE90000, len = 32k
|
ram_external_app_pacman (rwx) : org = 0xEEE90000, len = 32k
|
||||||
ram_external_app_afsk_rx (rwx) : org = 0xEEEA0000, len = 32k
|
ram_external_app_afsk_rx (rwx) : org = 0xEEEA0000, len = 32k
|
||||||
ram_external_app_calculator (rwx) : org = 0xEEEB0000, len = 32k
|
ram_external_app_calculator (rwx) : org = 0xEEEB0000, len = 32k
|
||||||
|
ram_external_app_font_viewer(rwx) : org = 0xEEEC0000, len = 32k
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
@ -41,4 +42,10 @@ SECTIONS
|
|||||||
KEEP(*(.external_app.app_calculator.application_information));
|
KEEP(*(.external_app.app_calculator.application_information));
|
||||||
*(*ui*external_app*calculator*);
|
*(*ui*external_app*calculator*);
|
||||||
} > ram_external_app_calculator
|
} > ram_external_app_calculator
|
||||||
|
|
||||||
|
.external_app_font_viewer : ALIGN(4) SUBALIGN(4)
|
||||||
|
{
|
||||||
|
KEEP(*(.external_app.app_font_viewer.application_information));
|
||||||
|
*(*ui*external_app*font_viewer*);
|
||||||
|
} > ram_external_app_font_viewer
|
||||||
}
|
}
|
||||||
|
82
firmware/application/external/font_viewer/main.cpp
vendored
Normal file
82
firmware/application/external/font_viewer/main.cpp
vendored
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2023 Mark Thompson
|
||||||
|
*
|
||||||
|
* This file is part of PortaPack.
|
||||||
|
*
|
||||||
|
* 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 2, 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; see the file COPYING. If not, write to
|
||||||
|
* the Free Software Foundation, Inc., 51 Franklin Street,
|
||||||
|
* Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ui.hpp"
|
||||||
|
#include "ui_font_viewer.hpp"
|
||||||
|
#include "ui_navigation.hpp"
|
||||||
|
#include "external_app.hpp"
|
||||||
|
|
||||||
|
namespace ui::external_app::font_viewer {
|
||||||
|
void initialize_app(ui::NavigationView& nav) {
|
||||||
|
nav.push<DebugFontsView>();
|
||||||
|
}
|
||||||
|
} // namespace ui::external_app::font_viewer
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
__attribute__((section(".external_app.app_font_viewer.application_information"), used)) application_information_t _application_information_font_viewer = {
|
||||||
|
/*.memory_location = */ (uint8_t*)0x00000000,
|
||||||
|
/*.externalAppEntry = */ ui::external_app::font_viewer::initialize_app,
|
||||||
|
/*.header_version = */ CURRENT_HEADER_VERSION,
|
||||||
|
/*.app_version = */ VERSION_MD5,
|
||||||
|
|
||||||
|
/*.app_name = */ "Font Viewer",
|
||||||
|
/*.bitmap_data = */ {
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x10,
|
||||||
|
0x08,
|
||||||
|
0x10,
|
||||||
|
0x08,
|
||||||
|
0x38,
|
||||||
|
0x08,
|
||||||
|
0x28,
|
||||||
|
0x08,
|
||||||
|
0x6C,
|
||||||
|
0x08,
|
||||||
|
0x44,
|
||||||
|
0x08,
|
||||||
|
0xFE,
|
||||||
|
0x78,
|
||||||
|
0x82,
|
||||||
|
0x88,
|
||||||
|
0x83,
|
||||||
|
0x89,
|
||||||
|
0x01,
|
||||||
|
0x89,
|
||||||
|
0x01,
|
||||||
|
0x79,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
},
|
||||||
|
/*.icon_color = */ ui::Color::yellow().v,
|
||||||
|
/*.menu_location = */ app_location_t::UTILITIES,
|
||||||
|
|
||||||
|
/*.m4_app_tag = portapack::spi_flash::image_tag_noop */ {'\0', '\0', '\0', '\0'},
|
||||||
|
/*.m4_app_offset = */ 0x00000000, // will be filled at compile time
|
||||||
|
};
|
||||||
|
}
|
69
firmware/application/external/font_viewer/ui_font_viewer.cpp
vendored
Normal file
69
firmware/application/external/font_viewer/ui_font_viewer.cpp
vendored
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2023 Mark Thompson
|
||||||
|
*
|
||||||
|
* This file is part of PortaPack.
|
||||||
|
*
|
||||||
|
* 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 2, 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; see the file COPYING. If not, write to
|
||||||
|
* the Free Software Foundation, Inc., 51 Franklin Street,
|
||||||
|
* Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ui_font_viewer.hpp"
|
||||||
|
|
||||||
|
#include "ui_font_fixed_8x16.hpp"
|
||||||
|
#include "ui_styles.hpp"
|
||||||
|
#include "ui_painter.hpp"
|
||||||
|
|
||||||
|
#include "portapack.hpp"
|
||||||
|
using namespace portapack;
|
||||||
|
using namespace ui;
|
||||||
|
|
||||||
|
namespace ui::external_app::font_viewer {
|
||||||
|
|
||||||
|
/* DebugFontsView *******************************************************/
|
||||||
|
|
||||||
|
uint16_t DebugFontsView::display_font(Painter& painter, uint16_t y_offset, const Style* font_style, std::string_view font_name) {
|
||||||
|
auto char_width{font_style->font.char_width()};
|
||||||
|
auto char_height{font_style->font.line_height()};
|
||||||
|
auto cpl{((screen_width / char_width) - 6) & 0xF8}; // Display a multiple of 8 characters per line
|
||||||
|
uint16_t line_pos{y_offset};
|
||||||
|
|
||||||
|
painter.draw_string({0, y_offset}, *font_style, font_name);
|
||||||
|
|
||||||
|
// Displaying ASCII+extended characters from 0x20 to 0xFF
|
||||||
|
for (uint8_t c = 0; c <= 0xDF; c++) {
|
||||||
|
line_pos = y_offset + ((c / cpl) + 2) * char_height;
|
||||||
|
|
||||||
|
if ((c % cpl) == 0)
|
||||||
|
painter.draw_string({0, line_pos}, *font_style, "Ox" + to_string_hex(c + 0x20, 2));
|
||||||
|
|
||||||
|
painter.draw_char({((c % cpl) + 5) * char_width, line_pos}, *font_style, (char)(c + 0x20));
|
||||||
|
}
|
||||||
|
|
||||||
|
return line_pos + char_height;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DebugFontsView::paint(Painter& painter) {
|
||||||
|
int16_t line_pos;
|
||||||
|
|
||||||
|
line_pos = display_font(painter, 32, &Styles::white, "Fixed 8x16");
|
||||||
|
display_font(painter, line_pos + 16, &Styles::white_small, "Fixed 5x8");
|
||||||
|
}
|
||||||
|
|
||||||
|
DebugFontsView::DebugFontsView(NavigationView& nav)
|
||||||
|
: nav_{nav} {
|
||||||
|
set_focusable(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* namespace ui::external_app::font_viewer */
|
51
firmware/application/external/font_viewer/ui_font_viewer.hpp
vendored
Normal file
51
firmware/application/external/font_viewer/ui_font_viewer.hpp
vendored
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2023 Mark Thompson
|
||||||
|
*
|
||||||
|
* This file is part of PortaPack.
|
||||||
|
*
|
||||||
|
* 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 2, 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; see the file COPYING. If not, write to
|
||||||
|
* the Free Software Foundation, Inc., 51 Franklin Street,
|
||||||
|
* Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __UI_DEBUG_H__
|
||||||
|
#define __UI_DEBUG_H__
|
||||||
|
|
||||||
|
#include "ui.hpp"
|
||||||
|
#include "ui_widget.hpp"
|
||||||
|
#include "ui_painter.hpp"
|
||||||
|
#include "ui_menu.hpp"
|
||||||
|
#include "ui_navigation.hpp"
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
using namespace ui;
|
||||||
|
|
||||||
|
namespace ui::external_app::font_viewer {
|
||||||
|
|
||||||
|
class DebugFontsView : public View {
|
||||||
|
public:
|
||||||
|
DebugFontsView(NavigationView& nav);
|
||||||
|
void paint(Painter& painter) override;
|
||||||
|
std::string title() const override { return "Fonts"; };
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint16_t display_font(Painter& painter, uint16_t y_offset, const Style* font_style, std::string_view font_name);
|
||||||
|
NavigationView& nav_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} /* namespace ui::external_app::font_viewer */
|
||||||
|
|
||||||
|
#endif /*__UI_FONT_VIEWER_H__*/
|
BIN
firmware/graphics/icon_font_viewer.png
Normal file
BIN
firmware/graphics/icon_font_viewer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 166 B |
Loading…
Reference in New Issue
Block a user