Hi,
hier mal der code wie man ein ein png in einem listbox entry rendert..
Code
class eListBoxEntryTextPixmap: public eListBoxEntryText
{
static gPixmap *pm; // class member !!! the same pixmap for all entries...
bool pm_visible;
public:
eListBoxEntryTextPixmap(eListBox<eListBoxEntryTextPixmap>* lb, const char* txt=0, void *key=0, bool pm_visible=false, int align=0, const eString &hlptxt="", int keytype = value )
const eString& redraw(gPainter *rc, const eRect& rect, gColor coActiveB, gColor coActiveF, gColor coNormalB, gColor coNormalF, int state );
};
eListBoxEntryTextPixmap::eListBoxEntryTextPixmap( eListBox<eListBoxEntryMenu> *lb, const char* text, void *key, bool pm_visible, int align, const eString& hlptxt, int keytype )
:eListBoxEntryText(lb, text, key, align, hlptxt, keytype )
,pm(eSkin::getActive()->queryImage("eListBoxEntryCheck"))
,pm_visible(false)
{
if (pm_visible && !pm)
{
// load pixmap here... with pm = eSkin::getActive()->queryImage("bla");
// or pm = loadPNG("full_path_and_name_of_png_file");
}
}
const eString &eListBoxEntryTextPixmap::redraw(gPainter *rc, const eRect& complete_rect, gColor coActiveB, gColor coActiveF, gColor coNormalB, gColor, int state)
{
bool b;
if ( (b = (state == 2)) )
state = 0;
drawEntryRect( rc, complete_rect, coActiveB, coActiveF, coNormalB, coNormalF, state );
eRect rect = complete_rect;
if (pm && pm_visible)
{
int yPos = rect.top()+((rect.height() - pm->y) / 2); // center pixmap
rc->blit(*pm, ePoint(rect.left(), yPos), rect, gPixmap::blitAlphaTest );
rect.setLeft( rect.left() + pm->x + 10 );
}
if (!para) // render text to render para
{
para = new eTextPara( eRect(0, 0, rect.width(), rect.height()) );
para->setFont(font);
para->renderString(text);
para->realign(align);
}
rc->renderPara(*para, ePoint(rect.left(), rect.top()) );
if (b)
drawEntryBorder( rc, complete_rect, coActiveB, coActiveF, coNormalB, coNormalF );
return text;
}
Alles anzeigen
Anstelle von eListBoxEntryText muss man nun halt eListBoxEntryTextPixmap benutzen..
cu