refactor: Font index cleanup
This commit is contained in:
parent
8ef8900ca2
commit
c14c46b998
@ -33,7 +33,7 @@ class parser {
|
|||||||
size_t text(string&& data);
|
size_t text(string&& data);
|
||||||
|
|
||||||
uint32_t parse_color(const string& s, uint32_t fallback = 0);
|
uint32_t parse_color(const string& s, uint32_t fallback = 0);
|
||||||
int8_t parse_fontindex(const string& s);
|
uint8_t parse_fontindex(const string& s);
|
||||||
attribute parse_attr(const char attr);
|
attribute parse_attr(const char attr);
|
||||||
mousebtn parse_action_btn(const string& data);
|
mousebtn parse_action_btn(const string& data);
|
||||||
string parse_action_cmd(string&& data);
|
string parse_action_cmd(string&& data);
|
||||||
|
@ -47,7 +47,7 @@ class renderer
|
|||||||
void set_foreground(const uint32_t color);
|
void set_foreground(const uint32_t color);
|
||||||
void set_underline(const uint32_t color);
|
void set_underline(const uint32_t color);
|
||||||
void set_overline(const uint32_t color);
|
void set_overline(const uint32_t color);
|
||||||
void set_fontindex(const int8_t font);
|
void set_fontindex(const uint8_t font);
|
||||||
void set_alignment(const alignment align);
|
void set_alignment(const alignment align);
|
||||||
void set_attribute(const attribute attr, const bool state);
|
void set_attribute(const attribute attr, const bool state);
|
||||||
void toggle_attribute(const attribute attr);
|
void toggle_attribute(const attribute attr);
|
||||||
@ -123,7 +123,7 @@ class renderer
|
|||||||
alignment m_alignment{alignment::NONE};
|
alignment m_alignment{alignment::NONE};
|
||||||
map<gc, uint32_t> m_colors;
|
map<gc, uint32_t> m_colors;
|
||||||
uint8_t m_attributes{0U};
|
uint8_t m_attributes{0U};
|
||||||
int8_t m_fontindex{DEFAULT_FONT_INDEX};
|
uint8_t m_fontindex{0};
|
||||||
|
|
||||||
xcb_font_t m_gcfont{XCB_NONE};
|
xcb_font_t m_gcfont{XCB_NONE};
|
||||||
};
|
};
|
||||||
|
@ -61,7 +61,6 @@ static constexpr const char* PATH_MEMORY_INFO{"@SETTING_PATH_MEMORY_INFO@"};
|
|||||||
static constexpr const char* PATH_MESSAGING_FIFO{"@SETTING_PATH_MESSAGING_FIFO@"};
|
static constexpr const char* PATH_MESSAGING_FIFO{"@SETTING_PATH_MESSAGING_FIFO@"};
|
||||||
static constexpr const char* PATH_TEMPERATURE_INFO{"@SETTING_PATH_TEMPERATURE_INFO@"};
|
static constexpr const char* PATH_TEMPERATURE_INFO{"@SETTING_PATH_TEMPERATURE_INFO@"};
|
||||||
|
|
||||||
static const int8_t DEFAULT_FONT_INDEX{-1};
|
|
||||||
static constexpr const char* BUILDER_SPACE_TOKEN{"%__"};
|
static constexpr const char* BUILDER_SPACE_TOKEN{"%__"};
|
||||||
|
|
||||||
auto version_details = [](const std::vector<std::string>& args) {
|
auto version_details = [](const std::vector<std::string>& args) {
|
||||||
|
@ -117,7 +117,7 @@ namespace signals {
|
|||||||
DEFINE_VALUE_SIGNAL(71, change_foreground, uint32_t);
|
DEFINE_VALUE_SIGNAL(71, change_foreground, uint32_t);
|
||||||
DEFINE_VALUE_SIGNAL(72, change_underline, uint32_t);
|
DEFINE_VALUE_SIGNAL(72, change_underline, uint32_t);
|
||||||
DEFINE_VALUE_SIGNAL(73, change_overline, uint32_t);
|
DEFINE_VALUE_SIGNAL(73, change_overline, uint32_t);
|
||||||
DEFINE_VALUE_SIGNAL(74, change_font, int8_t);
|
DEFINE_VALUE_SIGNAL(74, change_font, uint8_t);
|
||||||
DEFINE_VALUE_SIGNAL(75, change_alignment, alignment);
|
DEFINE_VALUE_SIGNAL(75, change_alignment, alignment);
|
||||||
DEFINE_VALUE_SIGNAL(76, offset_pixel, int16_t);
|
DEFINE_VALUE_SIGNAL(76, offset_pixel, int16_t);
|
||||||
DEFINE_VALUE_SIGNAL(77, attribute_set, attribute);
|
DEFINE_VALUE_SIGNAL(77, attribute_set, attribute);
|
||||||
|
@ -58,8 +58,8 @@ class font_manager {
|
|||||||
void set_visual(shared_ptr<Visual>&& v);
|
void set_visual(shared_ptr<Visual>&& v);
|
||||||
|
|
||||||
void cleanup();
|
void cleanup();
|
||||||
bool load(const string& name, int8_t fontindex = DEFAULT_FONT_INDEX, int8_t offset_y = 0);
|
bool load(const string& name, uint8_t fontindex = 0, int8_t offset_y = 0);
|
||||||
void set_preferred_font(int8_t index);
|
void fontindex(uint8_t index);
|
||||||
shared_ptr<font_ref> match_char(const uint16_t chr);
|
shared_ptr<font_ref> match_char(const uint16_t chr);
|
||||||
uint8_t glyph_width(const shared_ptr<font_ref>& font, const uint16_t chr);
|
uint8_t glyph_width(const shared_ptr<font_ref>& font, const uint16_t chr);
|
||||||
void drawtext(const shared_ptr<font_ref>& font, xcb_pixmap_t pm, xcb_gcontext_t gc, int16_t x, int16_t y,
|
void drawtext(const shared_ptr<font_ref>& font, xcb_pixmap_t pm, xcb_gcontext_t gc, int16_t x, int16_t y,
|
||||||
@ -88,7 +88,7 @@ class font_manager {
|
|||||||
Colormap m_colormap;
|
Colormap m_colormap;
|
||||||
|
|
||||||
map<uint8_t, shared_ptr<font_ref>> m_fonts{};
|
map<uint8_t, shared_ptr<font_ref>> m_fonts{};
|
||||||
int8_t m_fontindex{DEFAULT_FONT_INDEX};
|
uint8_t m_fontindex{0};
|
||||||
|
|
||||||
XftDraw* m_xftdraw{nullptr};
|
XftDraw* m_xftdraw{nullptr};
|
||||||
XftColor m_xftcolor{};
|
XftColor m_xftcolor{};
|
||||||
|
@ -227,15 +227,15 @@ uint32_t parser::parse_color(const string& s, uint32_t fallback) {
|
|||||||
/**
|
/**
|
||||||
* Process font index and convert it to the correct value
|
* Process font index and convert it to the correct value
|
||||||
*/
|
*/
|
||||||
int8_t parser::parse_fontindex(const string& s) {
|
uint8_t parser::parse_fontindex(const string& s) {
|
||||||
if (s.empty() || s[0] == '-') {
|
if (s.empty() || s[0] == '-') {
|
||||||
return -1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return std::stoul(s, nullptr, 10);
|
return std::stoul(s, nullptr, 10);
|
||||||
} catch (const std::invalid_argument& err) {
|
} catch (const std::invalid_argument& err) {
|
||||||
return -1;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -566,13 +566,13 @@ bool renderer::on(const change_overline& evt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool renderer::on(const change_font& evt) {
|
bool renderer::on(const change_font& evt) {
|
||||||
int8_t font{*evt()};
|
uint8_t font{*evt()};
|
||||||
|
|
||||||
if (m_fontindex == font) {
|
if (m_fontindex == font) {
|
||||||
m_log.trace_x("renderer: ignoring unchanged font index(%i)", static_cast<int8_t>(font));
|
m_log.trace_x("renderer: ignoring unchanged font index(%i)", static_cast<uint8_t>(font));
|
||||||
} else {
|
} else {
|
||||||
m_log.trace_x("renderer: set_fontindex(%i)", static_cast<int8_t>(font));
|
m_log.trace_x("renderer: fontindex(%i)", static_cast<uint8_t>(font));
|
||||||
m_fontmanager->set_preferred_font(font);
|
m_fontmanager->fontindex(font);
|
||||||
m_fontindex = font;
|
m_fontindex = font;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,11 +67,11 @@ void font_manager::cleanup() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool font_manager::load(const string& name, int8_t fontindex, int8_t offset_y) {
|
bool font_manager::load(const string& name, uint8_t fontindex, int8_t offset_y) {
|
||||||
if (fontindex != DEFAULT_FONT_INDEX && m_fonts.find(fontindex) != m_fonts.end()) {
|
if (fontindex > 0 && m_fonts.find(fontindex) != m_fonts.end()) {
|
||||||
m_logger.warn("A font with index '%i' has already been loaded, skip...", fontindex);
|
m_logger.warn("A font with index '%i' has already been loaded, skip...", fontindex);
|
||||||
return false;
|
return false;
|
||||||
} else if (fontindex == DEFAULT_FONT_INDEX) {
|
} else if (fontindex == 0) {
|
||||||
fontindex = m_fonts.size();
|
fontindex = m_fonts.size();
|
||||||
m_logger.trace("font_manager: Assign font '%s' to index '%d'", name.c_str(), fontindex);
|
m_logger.trace("font_manager: Assign font '%s' to index '%d'", name.c_str(), fontindex);
|
||||||
} else {
|
} else {
|
||||||
@ -126,12 +126,8 @@ bool font_manager::load(const string& name, int8_t fontindex, int8_t offset_y) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void font_manager::set_preferred_font(int8_t index) {
|
void font_manager::fontindex(uint8_t index) {
|
||||||
if (index <= 0) {
|
if ((m_fontindex = index) > 0) {
|
||||||
m_fontindex = DEFAULT_FONT_INDEX;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto&& font : m_fonts) {
|
for (auto&& font : m_fonts) {
|
||||||
if (font.first == index) {
|
if (font.first == index) {
|
||||||
m_fontindex = index;
|
m_fontindex = index;
|
||||||
@ -139,32 +135,28 @@ void font_manager::set_preferred_font(int8_t index) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
shared_ptr<font_ref> font_manager::match_char(const uint16_t chr) {
|
|
||||||
if (m_fonts.empty()) {
|
|
||||||
return {};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_fontindex != DEFAULT_FONT_INDEX && static_cast<size_t>(m_fontindex) <= m_fonts.size()) {
|
shared_ptr<font_ref> font_manager::match_char(const uint16_t chr) {
|
||||||
|
if (!m_fonts.empty()) {
|
||||||
|
if (m_fontindex > 0 && static_cast<size_t>(m_fontindex) <= m_fonts.size()) {
|
||||||
auto iter = m_fonts.find(m_fontindex);
|
auto iter = m_fonts.find(m_fontindex);
|
||||||
if (iter == m_fonts.end() || !iter->second) {
|
if (iter != m_fonts.end() && iter->second) {
|
||||||
return {};
|
if (has_glyph_xft(iter->second, chr)) {
|
||||||
} else if (has_glyph_xft(iter->second, chr)) {
|
|
||||||
return iter->second;
|
return iter->second;
|
||||||
} else if (has_glyph_xcb(iter->second, chr)) {
|
} else if (has_glyph_xcb(iter->second, chr)) {
|
||||||
return iter->second;
|
return iter->second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
for (auto&& font : m_fonts) {
|
for (auto&& font : m_fonts) {
|
||||||
if (!font.second) {
|
if (font.second && has_glyph_xft(font.second, chr)) {
|
||||||
return {};
|
|
||||||
} else if (has_glyph_xft(font.second, chr)) {
|
|
||||||
return font.second;
|
return font.second;
|
||||||
} else if (has_glyph_xcb(font.second, chr)) {
|
} else if (font.second && has_glyph_xcb(font.second, chr)) {
|
||||||
return font.second;
|
return font.second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user