CComponentsHeader: ensure to have correct font instances after changed font

On possible changed font settings, font objects can be invalid and
we have a crash. With this fix it's possible, that
CNeutrinoApp::setupFont() method clean up header font object itself.
This commit is contained in:
2016-12-18 18:48:02 +01:00
parent 7e077bb7ee
commit 239496c207
2 changed files with 11 additions and 1 deletions

View File

@@ -97,6 +97,7 @@ void CComponentsHeader::initVarHeader( const int& x_pos, const int& y_pos, const
cch_font = NULL; cch_font = NULL;
cch_size_mode = CC_HEADER_SIZE_LARGE; cch_size_mode = CC_HEADER_SIZE_LARGE;
CNeutrinoApp::getInstance()->OnAfterSetupFonts.connect(sigc::mem_fun(this, &CComponentsHeader::resetFont));
shadow = shadow_mode; shadow = shadow_mode;
col_frame = col_frame_old = color_frame; col_frame = col_frame_old = color_frame;
@@ -161,6 +162,14 @@ void CComponentsHeader::setCaptionFont(Font* font)
cch_font = font; cch_font = font;
} }
void CComponentsHeader::resetFont()
{
if (cch_font){
cch_font = NULL;
dprintf(DEBUG_DEBUG, "\033[33m[CComponentsHeader][%s - %d] reset header font \033[0m\n", __func__, __LINE__);
}
}
void CComponentsHeader::initCaptionFont() void CComponentsHeader::initCaptionFont()
{ {
Font *l_font = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]; Font *l_font = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE];
@@ -168,7 +177,6 @@ void CComponentsHeader::initCaptionFont()
if (cch_font == NULL){ if (cch_font == NULL){
cch_font = (cch_size_mode == CC_HEADER_SIZE_LARGE? l_font : s_font); cch_font = (cch_size_mode == CC_HEADER_SIZE_LARGE? l_font : s_font);
//select matching height //select matching height
if (cch_size_mode == CC_HEADER_SIZE_LARGE) if (cch_size_mode == CC_HEADER_SIZE_LARGE)
height = std::max(height, l_font->getHeight()); height = std::max(height, l_font->getHeight());

View File

@@ -68,6 +68,8 @@ class CComponentsHeader : public CComponentsForm, public CCTextScreen
fb_pixel_t cch_col_text; fb_pixel_t cch_col_text;
///property: caption font, see also setCaptionFont() ///property: caption font, see also setCaptionFont()
Font* cch_font; Font* cch_font;
///reset font
void resetFont();
///property: internal y-position for all items ///property: internal y-position for all items
int cch_items_y; int cch_items_y;