// for debugging use:
- #define SYNC_PAINT
+// #define SYNC_PAINT
#include <unistd.h>
#ifndef SYNC_PAINT
#include <pthread.h>
m_rc->submit(o);
}
+void gPainter::fill(const gRegion ®ion)
+{
+ gOpcode o;
+ o.opcode=gOpcode::fillRegion;
+
+ o.dc = m_dc.grabRef();
+ o.parm.fillRegion = new gOpcode::para::pfillRegion;
+ o.parm.fillRegion->region = region;
+ m_rc->submit(o);
+}
+
void gPainter::clear()
{
gOpcode o;
ePtr<eTextPara> para = new eTextPara(o->parm.renderText->area);
assert(m_current_font);
para->setFont(m_current_font);
- para->renderString(o->parm.renderText->text, o->parm.renderText->flags);
- para->blit(*this, m_current_offset, getRGB(m_foreground_color), getRGB(m_background_color));
+ para->renderString(o->parm.renderText->text, 0);
+
+ if (o->parm.renderText->flags & gPainter::RT_HALIGN_RIGHT)
+ para->realign(eTextPara::dirRight);
+ else if (o->parm.renderText->flags & gPainter::RT_HALIGN_CENTER)
+ para->realign(eTextPara::dirCenter);
+ else if (o->parm.renderText->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();
+ offset += ePoint(0, (o->parm.renderText->area.height() - bbox.height()) / 2);
+ }
+ para->blit(*this, offset, getRGB(m_background_color), getRGB(m_foreground_color));
delete o->parm.renderText;
break;
}
case gOpcode::renderPara:
{
- o->parm.renderPara->textpara->blit(*this, o->parm.renderPara->offset + m_current_offset, getRGB(m_foreground_color), getRGB(m_background_color));
+ o->parm.renderPara->textpara->blit(*this, o->parm.renderPara->offset + m_current_offset, getRGB(m_background_color), getRGB(m_foreground_color));
o->parm.renderPara->textpara->Release();
delete o->parm.renderPara;
break;
delete o->parm.fill;
break;
}
+ case gOpcode::fillRegion:
+ {
+ o->parm.fillRegion->region.moveBy(m_current_offset);
+ gRegion clip = m_current_clip & o->parm.fillRegion->region;
+ m_pixmap->fill(clip, m_foreground_color);
+ delete o->parm.fillRegion;
+ break;
+ }
case gOpcode::clear:
m_pixmap->fill(m_current_clip, m_background_color);
delete o->parm.fill;