- para->renderString(o->parm.renderText->text, o->parm.renderText->flags);
- para->blit(*this, ePoint(0, 0), getRGB(m_foreground_color), getRGB(m_background_color));
+ para->renderString(o->parm.renderText->text, (flags & gPainter::RT_WRAP) ? RS_WRAP : 0);
+ if (o->parm.renderText->text)
+ free(o->parm.renderText->text);
+ if (flags & gPainter::RT_HALIGN_RIGHT)
+ para->realign(eTextPara::dirRight);
+ else if (flags & gPainter::RT_HALIGN_CENTER)
+ para->realign(eTextPara::dirCenter);
+ else if (flags & gPainter::RT_HALIGN_BLOCK)
+ para->realign(eTextPara::dirBlock);
+
+ ePoint offset = m_current_offset;
+
+ if (o->parm.renderText->flags & gPainter::RT_VALIGN_CENTER)
+ {
+ eRect bbox = para->getBoundBox();
+ int vcentered_top = o->parm.renderText->area.top() + ((o->parm.renderText->area.height() - bbox.height()) / 2);
+ int correction = vcentered_top - bbox.top();
+ offset += ePoint(0, correction);
+ }
+
+ para->blit(*this, offset, m_background_color_rgb, m_foreground_color_rgb);