ultimatepp/uppsrc/CtrlCore/SystemDraw.h
cxl 45599b5f26 CtrlCore: Massive fix of MT, Draw: Fixed DrawingDraw::Create for case when tehere are some data in DrawingDraw
git-svn-id: svn://ultimatepp.org/upp/trunk@1506 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2009-08-13 13:40:54 +00:00

116 lines
2.5 KiB
C++

#include <Draw/Draw.h>
#ifdef PLATFORM_WIN32
#include "DrawWin32.h"
#endif
#ifdef PLATFORM_X11
#include "DrawX11.h"
#endif
NAMESPACE_UPP
#ifdef _MULTITHREADED
void EnterGuiMutex();
void LeaveGuiMutex();
#else
inline void EnterGuiMutex() {}
inline void LeaveGuiMutex() {}
#endif
struct GuiLock {
GuiLock() { EnterGuiMutex(); }
~GuiLock() { LeaveGuiMutex(); }
};
bool ScreenInPaletteMode();
Size GetScreenSize();
class BackDraw : public SystemDraw {
public:
virtual bool IsPaintingOp(const Rect& r) const;
protected:
#ifdef PLATFORM_WIN32
HBITMAP hbmpold;
HBITMAP hbmp;
#endif
#ifdef PLATFORM_X11
Pixmap pixmap;
#endif
Size size;
Draw *painting;
Point painting_offset;
public:
void Put(SystemDraw& w, int x, int y);
void Put(SystemDraw& w, Point p) { Put(w, p.x, p.y); }
void Create(SystemDraw& w, int cx, int cy);
void Create(SystemDraw& w, Size sz) { Create(w, sz.cx, sz.cy); }
// void Create(int cx, int cy);
// void Create(Size sz) { Create(sz.cx, sz.cy); }
void Destroy();
void SetPaintingDraw(Draw& w, Point off) { painting = &w; painting_offset = off; }
BackDraw();
~BackDraw();
/*
// Deprecated:
void Put(Draw& w, int x, int y) { Put(*(SystemDraw*)&w, x, y); }
void Put(Draw& w, Point p) { Put(*(SystemDraw*)&w, p.x, p.y); }
void Create(Draw& w, int cx, int cy) { Create(*(SystemDraw*)&w, cx, cy); }
void Create(Draw& w, Size sz) { Create(*(SystemDraw*)&w, sz.cx, sz.cy); }*/
};
class ImageDraw : public SystemDraw {
Size size;
#ifdef PLATFORM_WIN32
struct Section {
HDC dc;
HBITMAP hbmp, hbmpOld;
RGBA *pixels;
void Init(int cx, int cy);
~Section();
};
Section rgb;
Section a;
SystemDraw alpha;
#endif
#ifdef PLATFORM_X11
SystemDraw alpha;
#endif
bool has_alpha;
void Init();
Image Get(bool pm) const;
public:
Draw& Alpha();
operator Image() const;
Image GetStraight() const;
ImageDraw(Size sz);
ImageDraw(int cx, int cy);
~ImageDraw();
};
typedef ImageDraw SystemImageDraw;
void DrawDragRect(SystemDraw& w, const Rect& rect1, const Rect& rect2, const Rect& clip, int n,
Color color, uint64 pattern);
void SetSurface(Draw& w, const Rect& dest, const RGBA *pixels, Size srcsz, Point poff);
void SetSurface(Draw& w, int x, int y, int cx, int cy, const RGBA *pixels);
END_UPP_NAMESPACE