mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-31 01:11:12 +02:00
CNeutrinoFonts: Add 'getDynFontExt()' for create custom fonts...
...in external plugins
This commit is contained in:
@@ -69,17 +69,22 @@ CNeutrinoFonts::CNeutrinoFonts()
|
|||||||
InitDynFonts();
|
InitDynFonts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CNeutrinoFonts::clearDynFontStruct(dyn_font_t* f)
|
||||||
|
{
|
||||||
|
f->dx = 0;
|
||||||
|
f->dy = 0;
|
||||||
|
f->size = 0;
|
||||||
|
f->style = 0;
|
||||||
|
f->text = "";
|
||||||
|
f->font = NULL;
|
||||||
|
f->useDigitOffset = false;
|
||||||
|
}
|
||||||
|
|
||||||
void CNeutrinoFonts::InitDynFonts()
|
void CNeutrinoFonts::InitDynFonts()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < FONT_ID_MAX; i++) {
|
for (int i = 0; i < FONT_ID_MAX; i++) {
|
||||||
dyn_font_t dyn_font;
|
dyn_font_t dyn_font;
|
||||||
dyn_font.dx = 0;
|
clearDynFontStruct(&dyn_font);
|
||||||
dyn_font.dy = 0;
|
|
||||||
dyn_font.size = 0;
|
|
||||||
dyn_font.style = 0;
|
|
||||||
dyn_font.text = "";
|
|
||||||
dyn_font.font = NULL;
|
|
||||||
dyn_font.useDigitOffset = false;
|
|
||||||
v_dyn_fonts.push_back(dyn_font);
|
v_dyn_fonts.push_back(dyn_font);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -97,6 +102,8 @@ CNeutrinoFonts::~CNeutrinoFonts()
|
|||||||
delete v_dyn_fonts[i].font;
|
delete v_dyn_fonts[i].font;
|
||||||
v_dyn_fonts.clear();
|
v_dyn_fonts.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deleteDynFontExtAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
CNeutrinoFonts* CNeutrinoFonts::getInstance()
|
CNeutrinoFonts* CNeutrinoFonts::getInstance()
|
||||||
@@ -344,6 +351,66 @@ Font **CNeutrinoFonts::getDynFontWithID(int &dx, int &dy, std::string text, int
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CNeutrinoFonts::initDynFontExt()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < DYNFONTEXT_MAX; i++) {
|
||||||
|
dyn_font_t dyn_font;
|
||||||
|
clearDynFontStruct(&dyn_font);
|
||||||
|
v_dyn_fonts_ext.push_back(dyn_font);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNeutrinoFonts::deleteDynFontExtAll()
|
||||||
|
{
|
||||||
|
if (!v_dyn_fonts_ext.empty()) {
|
||||||
|
for (size_t i = 0; i < v_dyn_fonts_ext.size(); ++i) {
|
||||||
|
if (v_dyn_fonts_ext[i].font != NULL)
|
||||||
|
delete v_dyn_fonts_ext[i].font;
|
||||||
|
}
|
||||||
|
v_dyn_fonts_ext.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Font *CNeutrinoFonts::getDynFontExt(int &dx, int &dy, unsigned int f_id, std::string text/*=""*/, int style/*=FONT_STYLE_REGULAR*/)
|
||||||
|
{
|
||||||
|
if ((dx <= 0) && (dy <= 0))
|
||||||
|
return NULL;
|
||||||
|
if ((fontDescr.name.empty()) || (fontDescr.filename.empty()))
|
||||||
|
SetupNeutrinoFonts();
|
||||||
|
if (g_dynFontRenderer == NULL)
|
||||||
|
SetupDynamicFonts();
|
||||||
|
if (v_dyn_fonts_ext.empty())
|
||||||
|
initDynFontExt();
|
||||||
|
|
||||||
|
int dynSize = getDynFontSize(dx, dy, text, style);
|
||||||
|
Font *dynFont = NULL;
|
||||||
|
Font *ret = NULL;
|
||||||
|
|
||||||
|
if (f_id < v_dyn_fonts_ext.size()) {
|
||||||
|
dynFont = g_dynFontRenderer->getFont(fontDescr.name.c_str(), dynFontStyle[style].c_str(), dynSize);
|
||||||
|
if (v_dyn_fonts_ext[f_id].font != NULL)
|
||||||
|
delete v_dyn_fonts_ext[f_id].font;
|
||||||
|
v_dyn_fonts_ext[f_id].dx = dx;
|
||||||
|
v_dyn_fonts_ext[f_id].dy = dy;
|
||||||
|
v_dyn_fonts_ext[f_id].size = dynSize;
|
||||||
|
v_dyn_fonts_ext[f_id].style = style;
|
||||||
|
v_dyn_fonts_ext[f_id].text = text;
|
||||||
|
v_dyn_fonts_ext[f_id].font = dynFont;
|
||||||
|
v_dyn_fonts_ext[f_id].useDigitOffset = useDigitOffset;
|
||||||
|
ret = v_dyn_fonts_ext[f_id].font;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
dy = ret->getHeight();
|
||||||
|
if (!text.empty())
|
||||||
|
dx = ret->getRenderWidth(text);
|
||||||
|
#ifdef DEBUG_NFONTS
|
||||||
|
printf("##### [%s] dx: %d, dy: %d, dynSize: %d, dynFont: %p, ret: %p, FontID: %d\n", __FUNCTION__, dx, dy, dynSize, *ret, ret, f_id);
|
||||||
|
#endif
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
Font **CNeutrinoFonts::getDynFontShare(int &dx, int &dy, std::string text, int style)
|
Font **CNeutrinoFonts::getDynFontShare(int &dx, int &dy, std::string text, int style)
|
||||||
{
|
{
|
||||||
if ((dx <= 0) && (dy <= 0))
|
if ((dx <= 0) && (dy <= 0))
|
||||||
|
@@ -70,6 +70,7 @@ class CNeutrinoFonts
|
|||||||
typedef std::vector<dyn_font_t> v_dyn_fonts_t;
|
typedef std::vector<dyn_font_t> v_dyn_fonts_t;
|
||||||
v_dyn_fonts_t v_share_fonts;
|
v_dyn_fonts_t v_share_fonts;
|
||||||
v_dyn_fonts_t v_dyn_fonts;
|
v_dyn_fonts_t v_dyn_fonts;
|
||||||
|
v_dyn_fonts_t v_dyn_fonts_ext;
|
||||||
bool useDigitOffset;
|
bool useDigitOffset;
|
||||||
|
|
||||||
void InitDynFonts();
|
void InitDynFonts();
|
||||||
@@ -78,6 +79,8 @@ class CNeutrinoFonts
|
|||||||
int getDynFontSize(int dx, int dy, std::string text, int style);
|
int getDynFontSize(int dx, int dy, std::string text, int style);
|
||||||
Font **getDynFontShare(int &dx, int &dy, std::string text, int style);
|
Font **getDynFontShare(int &dx, int &dy, std::string text, int style);
|
||||||
Font **getDynFontWithID(int &dx, int &dy, std::string text, int style, unsigned int f_id);
|
Font **getDynFontWithID(int &dx, int &dy, std::string text, int style, unsigned int f_id);
|
||||||
|
void clearDynFontStruct(dyn_font_t* f);
|
||||||
|
void initDynFontExt();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum {
|
enum {
|
||||||
@@ -104,6 +107,10 @@ class CNeutrinoFonts
|
|||||||
FONTSETUP_ALL = FONTSETUP_NEUTRINO_FONT | FONTSETUP_NEUTRINO_FONT_INST | FONTSETUP_DYN_FONT | FONTSETUP_DYN_FONT_INST
|
FONTSETUP_ALL = FONTSETUP_NEUTRINO_FONT | FONTSETUP_NEUTRINO_FONT_INST | FONTSETUP_DYN_FONT | FONTSETUP_DYN_FONT_INST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
DYNFONTEXT_MAX = 16
|
||||||
|
};
|
||||||
|
|
||||||
CNeutrinoFonts();
|
CNeutrinoFonts();
|
||||||
~CNeutrinoFonts();
|
~CNeutrinoFonts();
|
||||||
static CNeutrinoFonts* getInstance();
|
static CNeutrinoFonts* getInstance();
|
||||||
@@ -116,6 +123,9 @@ class CNeutrinoFonts
|
|||||||
void refreshDynFonts();
|
void refreshDynFonts();
|
||||||
Font **getDynFont(int &dx, int &dy, std::string text="", int style=FONT_STYLE_REGULAR, int share=FONT_ID_SHARE);
|
Font **getDynFont(int &dx, int &dy, std::string text="", int style=FONT_STYLE_REGULAR, int share=FONT_ID_SHARE);
|
||||||
void setFontUseDigitHeight(bool set=true) {useDigitOffset = set;}
|
void setFontUseDigitHeight(bool set=true) {useDigitOffset = set;}
|
||||||
|
|
||||||
|
Font *getDynFontExt(int &dx, int &dy, unsigned int f_id, std::string text="", int style=FONT_STYLE_REGULAR);
|
||||||
|
void deleteDynFontExtAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user