mirror of
https://github.com/lihop/godot-xterm.git
synced 2024-11-22 09:40:25 +01:00
Handle multiple font styles
Adds support for font styles other than normal, such as bold, italics, and bold italics.
This commit is contained in:
parent
fb3fb6855c
commit
3f24fa9bf0
2 changed files with 30 additions and 10 deletions
|
@ -232,15 +232,16 @@ int Terminal::_draw_cb(struct tsm_screen *con,
|
||||||
// Erase any previous character in the cell.
|
// Erase any previous character in the cell.
|
||||||
term->rs->canvas_item_add_rect(term->char_canvas_item, cell_rect, Color(1, 1, 1, 0));
|
term->rs->canvas_item_add_rect(term->char_canvas_item, cell_rect, Color(1, 1, 1, 0));
|
||||||
|
|
||||||
term->font->draw_char(
|
FontType font_type = static_cast<FontType>((attr->bold ? 1 : 0) | (attr->italic ? 2 : 0));
|
||||||
|
Ref<Font> font = term->fonts[font_type];
|
||||||
|
|
||||||
|
font->draw_char(
|
||||||
term->char_canvas_item,
|
term->char_canvas_item,
|
||||||
Vector2i(cell_position.x, cell_position.y + term->font->get_height(
|
Vector2i(cell_position.x, cell_position.y + term->font_offset),
|
||||||
term->font_size /
|
|
||||||
1.25)),
|
|
||||||
String((char *)ch).unicode_at(0),
|
String((char *)ch).unicode_at(0),
|
||||||
term->font_size,
|
term->font_size,
|
||||||
fgcol
|
fgcol
|
||||||
);
|
);
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
@ -347,9 +348,14 @@ void Terminal::update_sizes(bool force)
|
||||||
uint prev_rows = rows;
|
uint prev_rows = rows;
|
||||||
|
|
||||||
size = get_size();
|
size = get_size();
|
||||||
|
|
||||||
|
Ref<Font> font = fonts[FontType::NORMAL];
|
||||||
font_size = get_theme_font_size("font_size");
|
font_size = get_theme_font_size("font_size");
|
||||||
cell_size = get_theme_font("normal_font")->get_string_size(
|
font_offset = font->get_height(font_size / 1.25);
|
||||||
"W", HORIZONTAL_ALIGNMENT_LEFT, -1, get_theme_font_size("font_size"));
|
|
||||||
|
cell_size = font->get_string_size(
|
||||||
|
"W", HORIZONTAL_ALIGNMENT_LEFT, -1, font_size);
|
||||||
|
|
||||||
cols = floor(size.x / cell_size.x);
|
cols = floor(size.x / cell_size.x);
|
||||||
rows = floor(size.y / cell_size.y);
|
rows = floor(size.y / cell_size.y);
|
||||||
|
|
||||||
|
@ -439,6 +445,7 @@ void Terminal::initialize_rendering() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Terminal::update_theme() {
|
void Terminal::update_theme() {
|
||||||
|
// Update colors.
|
||||||
palette.resize(TSM_COLOR_NUM);
|
palette.resize(TSM_COLOR_NUM);
|
||||||
for (int i = 0; i < TSM_COLOR_NUM; i++) {
|
for (int i = 0; i < TSM_COLOR_NUM; i++) {
|
||||||
tsm_vte_color color = static_cast<tsm_vte_color>(i);
|
tsm_vte_color color = static_cast<tsm_vte_color>(i);
|
||||||
|
@ -446,8 +453,11 @@ void Terminal::update_theme() {
|
||||||
}
|
}
|
||||||
back_material->set_shader_parameter("background_color", palette[TSM_COLOR_BACKGROUND]);
|
back_material->set_shader_parameter("background_color", palette[TSM_COLOR_BACKGROUND]);
|
||||||
|
|
||||||
// TODO: Default to mono font and handle other styles.
|
// Update fonts.
|
||||||
font = get_theme_font("normal_font");
|
for (int i = FontType::NORMAL; i <= FontType::BOLD_ITALICS; i++) {
|
||||||
|
FontType type = static_cast<FontType>(i);
|
||||||
|
fonts[type] = has_theme_font(FONT_TYPES[type]) ? get_theme_font(FONT_TYPES[type]) : get_theme_font(FONT_TYPES[FontType::NORMAL]);
|
||||||
|
}
|
||||||
|
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include<map>
|
||||||
|
|
||||||
#include <godot_cpp/classes/control.hpp>
|
#include <godot_cpp/classes/control.hpp>
|
||||||
#include <godot_cpp/classes/image_texture.hpp>
|
#include <godot_cpp/classes/image_texture.hpp>
|
||||||
#include <godot_cpp/classes/rendering_server.hpp>
|
#include <godot_cpp/classes/rendering_server.hpp>
|
||||||
|
@ -27,6 +29,13 @@ namespace godot
|
||||||
"normal_font", "bold_font", "italics_font", "bold_italics_font",
|
"normal_font", "bold_font", "italics_font", "bold_italics_font",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum FontType {
|
||||||
|
NORMAL,
|
||||||
|
BOLD,
|
||||||
|
ITALICS,
|
||||||
|
BOLD_ITALICS,
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum AttrFlag
|
enum AttrFlag
|
||||||
{
|
{
|
||||||
|
@ -92,8 +101,9 @@ namespace godot
|
||||||
tsm_age_t age, void *data);
|
tsm_age_t age, void *data);
|
||||||
|
|
||||||
PackedColorArray palette;
|
PackedColorArray palette;
|
||||||
Ref<Font> font;
|
std::map<FontType, Ref<Font>> fonts;
|
||||||
int32_t font_size;
|
int32_t font_size;
|
||||||
|
double font_offset;
|
||||||
Vector2 size;
|
Vector2 size;
|
||||||
Vector2 cell_size;
|
Vector2 cell_size;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue