#include <stack>
#include <list>
-#include <lib/base/estring.h>
+#include <string>
#include <lib/base/ringbuffer.h>
#include <lib/base/elock.h>
#include <lib/gdi/erect.h>
#include <lib/gdi/gpixmap.h>
#include <lib/gdi/region.h>
+#include <lib/gdi/gfont.h>
class eTextPara;
renderPara,
setFont,
- fill, clear,
+ fill, fillRegion, clear,
blit,
setPalette,
setBackgroundColor,
setForegroundColor,
- setOffset, moveOffset,
+ setBackgroundColorRGB,
+ setForegroundColorRGB,
- addClip, popClip,
+ setOffset,
+
+ setClip, addClip, popClip,
+
+ flush,
end,shutdown
} opcode;
eRect area;
} *fill;
+ struct pfillRegion
+ {
+ gRegion region;
+ } *fillRegion;
+
struct prenderText
{
eRect area;
- eString text;
+ std::string text;
int flags;
} *renderText;
gPixmap *pixmap;
ePoint position;
int flags;
- gRegion *clip;
+ eRect clip;
} *blit;
struct pmergePalette
struct psetClip
{
- gRegion *region;
+ gRegion region;
} *clip;
struct psetColor
gColor color;
} *setColor;
+ struct psetColorRGB
+ {
+ gRGB color;
+ } *setColorRGB;
+
struct psetOffset
{
ePoint value;
};
/* gRC is the singleton which controls the fifo and dispatches commands */
-class gRC: public virtual iObject
+class gRC: public iObject
{
-DECLARE_REF;
+DECLARE_REF(gRC);
private:
static gRC *instance;
static int collected=0;
queue.enqueue(o);
collected++;
- if (o.opcode==gOpcode::end||o.opcode==gOpcode::shutdown)
+// if (o.opcode==gOpcode::end||o.opcode==gOpcode::shutdown)
{
queuelock.unlock(collected);
#ifdef SYNC_PAINT
void setBackgroundColor(const gColor &color);
void setForegroundColor(const gColor &color);
+ void setBackgroundColor(const gRGB &color);
+ void setForegroundColor(const gRGB &color);
+
void setFont(gFont *font);
+ /* flags only THESE: */
+ enum
+ {
+ // todo, make mask. you cannot align both right AND center AND block ;)
+ RT_HALIGN_LEFT = 0, /* default */
+ RT_HALIGN_RIGHT = 1,
+ RT_HALIGN_CENTER = 2,
+ RT_HALIGN_BLOCK = 4,
+
+ RT_VALIGN_TOP = 0, /* default */
+ RT_VALIGN_CENTER = 8,
+ RT_VALIGN_BOTTOM = 16,
+
+ RT_WRAP = 32
+ };
void renderText(const eRect &position, const std::string &string, int flags=0);
+
void renderPara(eTextPara *para, ePoint offset=ePoint(0, 0));
void fill(const eRect &area);
+ void fill(const gRegion &area);
void clear();
- void blit(gPixmap *pixmap, ePoint pos, gRegion *clip = 0, int flags=0);
+ void blit(gPixmap *pixmap, ePoint pos, const eRect &what=eRect(), int flags=0);
void setPalette(gRGB *colors, int start=0, int len=256);
+ void setPalette(gPixmap *source);
void mergePalette(gPixmap *target);
void line(ePoint start, ePoint end);
- void setLogicalZero(ePoint abs);
- void moveLogicalZero(ePoint rel);
- void resetLogicalZero();
+ void setOffset(ePoint abs);
+ void moveOffset(ePoint rel);
+ void resetOffset();
+ void resetClip(const gRegion &clip);
void clip(const gRegion &clip);
void clippop();
class gDC: public iObject
{
-DECLARE_REF;
+DECLARE_REF(gDC);
protected:
ePtr<gPixmap> m_pixmap;
- ePtr<gRegion> m_clip_region;
- gColor m_foregroundColor, m_backgroundColor;
+ gColor m_foreground_color, m_background_color;
ePtr<gFont> m_current_font;
ePoint m_current_offset;
+
+ std::stack<gRegion> m_clip_stack;
gRegion m_current_clip;
public:
- void exec(gOpcode *opcode);
+ virtual void exec(gOpcode *opcode);
gDC(gPixmap *pixmap);
gDC();
virtual ~gDC();
- gRegion &getClip() { return *m_clip_region; }
+ gRegion &getClip() { return m_current_clip; }
int getPixmap(ePtr<gPixmap> &pm) { pm = m_pixmap; return 0; }
gRGB getRGB(gColor col);
- virtual eSize getSize() { return m_pixmap->getSize(); }
+ virtual eSize size() { return m_pixmap->size(); }
};
#endif