mirror of
https://github.com/eried/portapack-mayhem.git
synced 2025-02-22 23:59:57 -05:00
Notepad text zoom support 5x8 to 8x16 font (#1211)
* Zoom button 5/8 to 8/16 font * Zoom button 5/8 to 8/16 font * Clang & revert unintended change * Suggested improvements * Suggested code changes * Added char_width function * Added char_width function * Oops copy-paste error * Delete added blank line
This commit is contained in:
parent
e15a8ed2d8
commit
b28b96fb4a
@ -42,10 +42,9 @@ namespace ui {
|
|||||||
/* TextViewer *******************************************************/
|
/* TextViewer *******************************************************/
|
||||||
|
|
||||||
TextViewer::TextViewer(Rect parent_rect)
|
TextViewer::TextViewer(Rect parent_rect)
|
||||||
: Widget(parent_rect),
|
: Widget(parent_rect) {
|
||||||
max_line{static_cast<uint8_t>(parent_rect.height() / char_height)},
|
|
||||||
max_col{static_cast<uint8_t>(parent_rect.width() / char_width)} {
|
|
||||||
set_focusable(true);
|
set_focusable(true);
|
||||||
|
set_font_zoom(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextViewer::paint(Painter& painter) {
|
void TextViewer::paint(Painter& painter) {
|
||||||
@ -207,7 +206,7 @@ void TextViewer::paint_text(Painter& painter, uint32_t line, uint16_t col) {
|
|||||||
if (result && *result > 0)
|
if (result && *result > 0)
|
||||||
painter.draw_string(
|
painter.draw_string(
|
||||||
{0, r.top() + (int)i * char_height},
|
{0, r.top() + (int)i * char_height},
|
||||||
Styles::white_small, {buffer, *result});
|
style(), {buffer, *result});
|
||||||
|
|
||||||
// Clear empty line sections. This is less visually jarring than full clear.
|
// Clear empty line sections. This is less visually jarring than full clear.
|
||||||
int32_t clear_width = max_col - (result ? *result : 0);
|
int32_t clear_width = max_col - (result ? *result : 0);
|
||||||
@ -216,7 +215,7 @@ void TextViewer::paint_text(Painter& painter, uint32_t line, uint16_t col) {
|
|||||||
{(max_col - clear_width) * char_width,
|
{(max_col - clear_width) * char_width,
|
||||||
r.top() + (int)i * char_height,
|
r.top() + (int)i * char_height,
|
||||||
clear_width * char_width, char_height},
|
clear_width * char_width, char_height},
|
||||||
Styles::white_small.background);
|
style().background);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,8 +236,8 @@ void TextViewer::paint_cursor(Painter& painter) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Clear old cursor. CONSIDER: XOR cursor?
|
// Clear old cursor. CONSIDER: XOR cursor?
|
||||||
draw_cursor(paint_state_.line, paint_state_.col, Styles::white_small.background);
|
draw_cursor(paint_state_.line, paint_state_.col, style().background);
|
||||||
draw_cursor(cursor_.line, cursor_.col, Styles::white_small.foreground);
|
draw_cursor(cursor_.line, cursor_.col, style().foreground);
|
||||||
paint_state_.line = cursor_.line;
|
paint_state_.line = cursor_.line;
|
||||||
paint_state_.col = cursor_.col;
|
paint_state_.col = cursor_.col;
|
||||||
}
|
}
|
||||||
@ -261,7 +260,7 @@ TextEditorMenu::TextEditorMenu()
|
|||||||
&rect_frame,
|
&rect_frame,
|
||||||
&button_cut,
|
&button_cut,
|
||||||
&button_paste,
|
&button_paste,
|
||||||
&button_copy,
|
&button_zoom,
|
||||||
&button_delline,
|
&button_delline,
|
||||||
&button_edit,
|
&button_edit,
|
||||||
&button_addline,
|
&button_addline,
|
||||||
@ -316,8 +315,10 @@ TextEditorView::TextEditorView(NavigationView& nav)
|
|||||||
menu.on_paste() = [this]() {
|
menu.on_paste() = [this]() {
|
||||||
show_nyi();
|
show_nyi();
|
||||||
};
|
};
|
||||||
menu.on_copy() = [this]() {
|
menu.on_zoom() = [this]() {
|
||||||
show_nyi();
|
viewer.toggle_font_zoom();
|
||||||
|
refresh_ui();
|
||||||
|
hide_menu(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
menu.on_delete_line() = [this]() {
|
menu.on_delete_line() = [this]() {
|
||||||
|
@ -75,12 +75,26 @@ class TextViewer : public Widget {
|
|||||||
// Gets the length of the current line.
|
// Gets the length of the current line.
|
||||||
uint16_t line_length();
|
uint16_t line_length();
|
||||||
|
|
||||||
private:
|
const Style& style() { return *font_style; }
|
||||||
static constexpr int8_t char_width = 5;
|
|
||||||
static constexpr int8_t char_height = 8;
|
|
||||||
|
|
||||||
const uint8_t max_line = 32;
|
void set_font_zoom(bool zoom) {
|
||||||
const uint8_t max_col = 48;
|
font_zoom = zoom;
|
||||||
|
font_style = font_zoom ? &Styles::white : &Styles::white_small;
|
||||||
|
char_height = style().font.line_height();
|
||||||
|
char_width = style().font.char_width();
|
||||||
|
max_line = (uint8_t)(parent_rect().height() / char_height);
|
||||||
|
max_col = (uint8_t)(parent_rect().width() / char_width);
|
||||||
|
}
|
||||||
|
|
||||||
|
void toggle_font_zoom() { set_font_zoom(!font_zoom); };
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool font_zoom{};
|
||||||
|
const Style* font_style{};
|
||||||
|
int8_t char_width{};
|
||||||
|
int8_t char_height{};
|
||||||
|
uint8_t max_line{};
|
||||||
|
uint8_t max_col{};
|
||||||
|
|
||||||
/* Returns true if the cursor was updated. */
|
/* Returns true if the cursor was updated. */
|
||||||
bool apply_scrolling_constraints(
|
bool apply_scrolling_constraints(
|
||||||
@ -122,7 +136,7 @@ class TextEditorMenu : public View {
|
|||||||
|
|
||||||
std::function<void()>& on_cut() { return button_cut.on_select; }
|
std::function<void()>& on_cut() { return button_cut.on_select; }
|
||||||
std::function<void()>& on_paste() { return button_paste.on_select; }
|
std::function<void()>& on_paste() { return button_paste.on_select; }
|
||||||
std::function<void()>& on_copy() { return button_copy.on_select; }
|
std::function<void()>& on_zoom() { return button_zoom.on_select; }
|
||||||
|
|
||||||
std::function<void()>& on_delete_line() { return button_delline.on_select; }
|
std::function<void()>& on_delete_line() { return button_delline.on_select; }
|
||||||
std::function<void()>& on_edit_line() { return button_edit.on_select; }
|
std::function<void()>& on_edit_line() { return button_edit.on_select; }
|
||||||
@ -151,11 +165,11 @@ class TextEditorMenu : public View {
|
|||||||
&bitmap_icon_paste,
|
&bitmap_icon_paste,
|
||||||
Color::dark_grey()};
|
Color::dark_grey()};
|
||||||
|
|
||||||
NewButton button_copy{
|
NewButton button_zoom{
|
||||||
{15 * 8, 1 * 8, 7 * 8, 7 * 8},
|
{15 * 8, 1 * 8, 7 * 8, 7 * 8},
|
||||||
"Copy",
|
"Zoom",
|
||||||
&bitmap_icon_copy,
|
&bitmap_icon_search,
|
||||||
Color::dark_grey()};
|
Color::dark_green()};
|
||||||
|
|
||||||
NewButton button_delline{
|
NewButton button_delline{
|
||||||
{1 * 8, 8 * 8, 7 * 8, 7 * 8},
|
{1 * 8, 8 * 8, 7 * 8, 7 * 8},
|
||||||
@ -258,4 +272,4 @@ class TextEditorView : public View {
|
|||||||
|
|
||||||
} // namespace ui
|
} // namespace ui
|
||||||
|
|
||||||
#endif // __UI_TEXT_EDITOR_H__
|
#endif // __UI_TEXT_EDITOR_H__
|
||||||
|
@ -39,6 +39,10 @@ Dim Font::line_height() const {
|
|||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dim Font::char_width() const {
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
Size Font::size_of(const std::string s) const {
|
Size Font::size_of(const std::string s) const {
|
||||||
Size size;
|
Size size;
|
||||||
|
|
||||||
|
@ -86,6 +86,8 @@ class Font {
|
|||||||
Glyph glyph(const char c) const;
|
Glyph glyph(const char c) const;
|
||||||
|
|
||||||
Dim line_height() const;
|
Dim line_height() const;
|
||||||
|
Dim char_width() const;
|
||||||
|
|
||||||
Size size_of(const std::string s) const;
|
Size size_of(const std::string s) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user