mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-21 06:45:39 -06:00
Painting, PaintingPainter, Painter::Paint(Painting)
git-svn-id: svn://ultimatepp.org/upp/trunk@747 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
287236ae96
commit
76bf9232b0
5 changed files with 597 additions and 1 deletions
226
uppsrc/Painter/PaintPainting.cpp
Normal file
226
uppsrc/Painter/PaintPainting.cpp
Normal file
|
|
@ -0,0 +1,226 @@
|
|||
#include "Painter.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
template <class T>
|
||||
void sGet(T& r, StringStream& ss)
|
||||
{
|
||||
ss.Get(&r, sizeof(T));
|
||||
}
|
||||
|
||||
|
||||
template <class T>
|
||||
T sGet(StringStream& ss)
|
||||
{
|
||||
T r;
|
||||
ss.Get(&r, sizeof(T));
|
||||
return r;
|
||||
}
|
||||
|
||||
inline
|
||||
Pointf sGetPoint(StringStream& ss)
|
||||
{
|
||||
Pointf p;
|
||||
p.x = sGet<double>(ss);
|
||||
p.y = sGet<double>(ss);
|
||||
return p;
|
||||
}
|
||||
|
||||
void Painter::Paint(const Painting& pic)
|
||||
{
|
||||
StringStream ss(pic.cmd);
|
||||
Pointf p, p1, p2;
|
||||
Color c, c1;
|
||||
Value v;
|
||||
int f, ch, n, hasdx;
|
||||
Matrix2D m;
|
||||
double r, w;
|
||||
Font fnt;
|
||||
int ii = 0;
|
||||
for(;;) {
|
||||
int cmd = ss.Get();
|
||||
if(cmd < 0)
|
||||
return;
|
||||
bool rel = cmd & 1;
|
||||
switch(cmd) {
|
||||
case PAINTING_CLEAR:
|
||||
Clear(sGet<RGBA>(ss));
|
||||
break;
|
||||
case PAINTING_MOVE:
|
||||
case PAINTING_MOVE_REL:
|
||||
p = sGetPoint(ss);
|
||||
Move(p.x, p.y, rel);
|
||||
break;
|
||||
case PAINTING_LINE:
|
||||
case PAINTING_LINE_REL:
|
||||
p = sGetPoint(ss);
|
||||
Line(p.x, p.y, rel);
|
||||
break;
|
||||
case PAINTING_QUADRATIC:
|
||||
case PAINTING_QUADRATIC_REL:
|
||||
p1 = sGetPoint(ss);
|
||||
p = sGetPoint(ss);
|
||||
Quadratic(p1.x, p1.y, p.x, p.y, rel);
|
||||
break;
|
||||
case PAINTING_QUADRATIC_S:
|
||||
case PAINTING_QUADRATIC_S_REL:
|
||||
p = sGetPoint(ss);
|
||||
Quadratic(p.x, p.y, rel);
|
||||
break;
|
||||
case PAINTING_CUBIC:
|
||||
case PAINTING_CUBIC_REL:
|
||||
p1 = sGetPoint(ss);
|
||||
p2 = sGetPoint(ss);
|
||||
p = sGetPoint(ss);
|
||||
Cubic(p1.x, p1.y, p2.x, p2.y, p.x, p.y, rel);
|
||||
break;
|
||||
case PAINTING_CUBIC_S:
|
||||
case PAINTING_CUBIC_S_REL:
|
||||
p2 = sGetPoint(ss);
|
||||
p = sGetPoint(ss);
|
||||
Cubic(p2.x, p2.y, p.x, p.y, rel);
|
||||
break;
|
||||
case PAINTING_CLOSE:
|
||||
Close();
|
||||
break;
|
||||
case PAINTING_FILL_SOLID:
|
||||
Fill(sGet<RGBA>(ss));
|
||||
break;
|
||||
case PAINTING_FILL_IMAGE:
|
||||
sGet(m, ss);
|
||||
f = ss.Get();
|
||||
if(ii >= pic.data.GetCount())
|
||||
return;
|
||||
v = pic.data[ii++];
|
||||
if(!v.Is<Image>())
|
||||
return;
|
||||
Fill((Image)v, m, f);
|
||||
break;
|
||||
case PAINTING_FILL_GRADIENT:
|
||||
p = sGetPoint(ss);
|
||||
sGet(c, ss);
|
||||
p1 = sGetPoint(ss);
|
||||
sGet(c1, ss);
|
||||
f = ss.Get();
|
||||
Fill(p.x, p.y, c, p1.x, p1.y, c1, f);
|
||||
break;
|
||||
case PAINTING_FILL_RADIAL:
|
||||
p = sGetPoint(ss);
|
||||
sGet(c, ss);
|
||||
p1 = sGetPoint(ss);
|
||||
sGet(r, ss);
|
||||
sGet(c1, ss);
|
||||
f = ss.Get();
|
||||
Fill(p.x, p.y, c, p1.x, p1.y, r, c1, f);
|
||||
break;
|
||||
case PAINTING_STROKE_SOLID:
|
||||
sGet(w, ss);
|
||||
sGet(c, ss);
|
||||
Stroke(w, c);
|
||||
break;
|
||||
case PAINTING_STROKE_IMAGE:
|
||||
sGet(w, ss);
|
||||
sGet(m, ss);
|
||||
f = ss.Get();
|
||||
if(ii >= pic.data.GetCount())
|
||||
return;
|
||||
v = pic.data[ii++];
|
||||
if(!v.Is<Image>())
|
||||
return;
|
||||
Stroke(w, (Image)v, m, f);
|
||||
break;
|
||||
case PAINTING_STROKE_GRADIENT:
|
||||
sGet(w, ss);
|
||||
p = sGetPoint(ss);
|
||||
sGet(c, ss);
|
||||
p1 = sGetPoint(ss);
|
||||
sGet(c1, ss);
|
||||
f = ss.Get();
|
||||
Stroke(w, p.x, p.y, c, p1.x, p1.y, c1, f);
|
||||
break;
|
||||
case PAINTING_STROKE_RADIAL:
|
||||
sGet(w, ss);
|
||||
p = sGetPoint(ss);
|
||||
sGet(c, ss);
|
||||
p1 = sGetPoint(ss);
|
||||
sGet(r, ss);
|
||||
sGet(c1, ss);
|
||||
f = ss.Get();
|
||||
Stroke(w, p.x, p.y, c, p1.x, p1.y, r, c1, f);
|
||||
break;
|
||||
case PAINTING_CLIP:
|
||||
Clip();
|
||||
break;
|
||||
case PAINTING_CHARACTER:
|
||||
p = sGetPoint(ss);
|
||||
ch = ss.Get32();
|
||||
sGet(fnt, ss);
|
||||
Character(p.x, p.y, ch, fnt);
|
||||
break;
|
||||
case PAINTING_TEXT:
|
||||
{
|
||||
p = sGetPoint(ss);
|
||||
n = ss.Get32();
|
||||
hasdx = ss.Get();
|
||||
sGet(fnt, ss);
|
||||
Buffer<wchar> txt(n);
|
||||
Buffer<double> dx(hasdx * n);
|
||||
for(int i = 0; i < n; i++) {
|
||||
txt[i] = ss.Get32();
|
||||
if(hasdx)
|
||||
sGet(dx[i], ss);
|
||||
}
|
||||
Text(p.x, p.y, txt, fnt, n, hasdx ? ~dx : NULL);
|
||||
}
|
||||
break;
|
||||
case PAINTING_COLORSTOP:
|
||||
sGet(r, ss);
|
||||
sGet(c, ss);
|
||||
ColorStop(r, c);
|
||||
break;
|
||||
case PAINTING_CLEARSTOPS:
|
||||
ClearStops();
|
||||
break;
|
||||
case PAINTING_OPACITY:
|
||||
Opacity(sGet<double>(ss));
|
||||
break;
|
||||
case PAINTING_LINECAP:
|
||||
LineCap(ss.Get());
|
||||
break;
|
||||
case PAINTING_LINEJOIN:
|
||||
LineJoin(ss.Get());
|
||||
break;
|
||||
case PAINTING_MITERLIMIT:
|
||||
MiterLimit(ss.Get());
|
||||
break;
|
||||
case PAINTING_EVENODD:
|
||||
EvenOdd(ss.Get());
|
||||
break;
|
||||
case PAINTING_DASH:
|
||||
{
|
||||
n = ss.Get32();
|
||||
Vector<double> dash;
|
||||
for(int i = 0; i < n; i++)
|
||||
dash.Add(sGet<double>(ss));
|
||||
r = sGet<double>(ss);
|
||||
Dash(dash, r);
|
||||
}
|
||||
break;
|
||||
case PAINTING_TRANSFORM:
|
||||
sGet(m, ss);
|
||||
Transform(m);
|
||||
break;
|
||||
case PAINTING_BEGIN:
|
||||
Begin();
|
||||
break;
|
||||
case PAINTING_END:
|
||||
End();
|
||||
break;
|
||||
case PAINTING_BEGINMASK:
|
||||
BeginMask();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
|
@ -66,13 +66,15 @@ enum {
|
|||
FILL_REPEAT = FILL_HREPEAT|FILL_VREPEAT,
|
||||
FILL_REFLECT = FILL_HREFLECT|FILL_VREFLECT,
|
||||
|
||||
FILL_FAST = 256,
|
||||
FILL_FAST = 128,
|
||||
|
||||
GRADIENT_PAD = 0,
|
||||
GRADIENT_REPEAT = 1,
|
||||
GRADIENT_REFLECT = 2,
|
||||
};
|
||||
|
||||
class Painting;
|
||||
|
||||
class Painter : public Draw {
|
||||
protected:
|
||||
virtual void OffsetOp(Point p);
|
||||
|
|
@ -159,6 +161,8 @@ private:
|
|||
void RectPath(int x, int y, int cx, int cy);
|
||||
void RectPath(const Rect& r);
|
||||
|
||||
static RGBA GetRGBA(StringStream& ss);
|
||||
|
||||
public:
|
||||
void Clear(const RGBA& color);
|
||||
|
||||
|
|
@ -244,9 +248,12 @@ public:
|
|||
void Rotate(double a);
|
||||
void Scale(double scalex, double scaley);
|
||||
void Scale(double scale);
|
||||
|
||||
void Paint(const Painting& p);
|
||||
};
|
||||
|
||||
#include "BufferPainter.h"
|
||||
#include "Painting.h"
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,9 @@ file
|
|||
Stroke.cpp,
|
||||
Clip.cpp,
|
||||
Mask.cpp,
|
||||
Painting.h,
|
||||
Painting.cpp,
|
||||
PaintPainting.cpp,
|
||||
agg readonly separator,
|
||||
agg_array.h,
|
||||
agg_alpha_mask_u8.h,
|
||||
|
|
|
|||
236
uppsrc/Painter/Painting.cpp
Normal file
236
uppsrc/Painter/Painting.cpp
Normal file
|
|
@ -0,0 +1,236 @@
|
|||
#include "Painter.h"
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
void PaintingPainter::ClearOp(const RGBA& color)
|
||||
{
|
||||
Put(PAINTING_CLEAR);
|
||||
Put(color);
|
||||
}
|
||||
|
||||
void PaintingPainter::MoveOp(double x, double y, bool rel)
|
||||
{
|
||||
Put(PAINTING_MOVE + rel);
|
||||
Putf(x, y);
|
||||
}
|
||||
|
||||
void PaintingPainter::LineOp(double x, double y, bool rel)
|
||||
{
|
||||
Put(PAINTING_LINE + rel);
|
||||
Putf(x, y);
|
||||
}
|
||||
|
||||
void PaintingPainter::QuadraticOp(double x1, double y1, double x, double y, bool rel)
|
||||
{
|
||||
Put(PAINTING_QUADRATIC + rel);
|
||||
Putf(x1, y1);
|
||||
Putf(x, y);
|
||||
}
|
||||
|
||||
void PaintingPainter::QuadraticOp(double x, double y, bool rel)
|
||||
{
|
||||
Put(PAINTING_QUADRATIC_S + rel);
|
||||
Putf(x, y);
|
||||
}
|
||||
|
||||
void PaintingPainter::CubicOp(double x1, double y1, double x2, double y2, double x, double y, bool rel)
|
||||
{
|
||||
Put(PAINTING_CUBIC + rel);
|
||||
Putf(x1, y1);
|
||||
Putf(x2, y2);
|
||||
Putf(x, y);
|
||||
}
|
||||
|
||||
void PaintingPainter::CubicOp(double x2, double y2, double x, double y, bool rel)
|
||||
{
|
||||
Put(PAINTING_CUBIC_S + rel);
|
||||
Putf(x2, y2);
|
||||
Putf(x, y);
|
||||
}
|
||||
|
||||
void PaintingPainter::CloseOp()
|
||||
{
|
||||
Put(PAINTING_CLOSE);
|
||||
}
|
||||
|
||||
void PaintingPainter::FillOp(const RGBA& color)
|
||||
{
|
||||
Put(PAINTING_FILL_SOLID);
|
||||
Put(color);
|
||||
}
|
||||
|
||||
void PaintingPainter::FillOp(const Image& image, const Matrix2D& transsrc, dword flags)
|
||||
{
|
||||
Put(PAINTING_FILL_IMAGE);
|
||||
Putf(transsrc);
|
||||
Put(flags);
|
||||
data.Add(image);
|
||||
}
|
||||
|
||||
void PaintingPainter::FillOp(double x1, double y1, const RGBA& color1, double x2, double y2, const RGBA& color2, int style)
|
||||
{
|
||||
Put(PAINTING_FILL_GRADIENT);
|
||||
Putf(x1, y1);
|
||||
Put(color1);
|
||||
Putf(x2, y2);
|
||||
Put(color2);
|
||||
Put(style);
|
||||
}
|
||||
|
||||
void PaintingPainter::FillOp(double fx, double fy, const RGBA& color1, double x, double y, double r, const RGBA& color2, int style)
|
||||
{
|
||||
Put(PAINTING_FILL_RADIAL);
|
||||
Putf(fx, fy);
|
||||
Put(color1);
|
||||
Putf(x, y);
|
||||
Putf(r);
|
||||
Put(color2);
|
||||
Put(style);
|
||||
}
|
||||
|
||||
void PaintingPainter::StrokeOp(double width, const RGBA& color)
|
||||
{
|
||||
Put(PAINTING_STROKE_SOLID);
|
||||
Putf(width);
|
||||
Put(color);
|
||||
}
|
||||
|
||||
void PaintingPainter::StrokeOp(double width, const Image& image, const Matrix2D& transsrc, dword flags)
|
||||
{
|
||||
Put(PAINTING_STROKE_IMAGE);
|
||||
Putf(width);
|
||||
Putf(transsrc);
|
||||
Put(flags);
|
||||
data.Add(image);
|
||||
}
|
||||
|
||||
void PaintingPainter::StrokeOp(double width, double x1, double y1, const RGBA& color1, double x2, double y2, const RGBA& color2, int style)
|
||||
{
|
||||
Put(PAINTING_STROKE_GRADIENT);
|
||||
Put(color1);
|
||||
Put(color2);
|
||||
Put(style);
|
||||
Putf(width);
|
||||
Putf(x1, y1);
|
||||
Putf(x2, y2);
|
||||
}
|
||||
|
||||
void PaintingPainter::StrokeOp(double width, double fx, double fy, const RGBA& color1, double x, double y, double r, const RGBA& color2, int style)
|
||||
{
|
||||
Put(PAINTING_STROKE_RADIAL);
|
||||
Put(color1);
|
||||
Put(color2);
|
||||
Put(style);
|
||||
Putf(width);
|
||||
Putf(fx, fy);
|
||||
Putf(x, y);
|
||||
Putf(r);
|
||||
}
|
||||
|
||||
void PaintingPainter::ClipOp()
|
||||
{
|
||||
Put(PAINTING_CLIP);
|
||||
}
|
||||
|
||||
void PaintingPainter::CharacterOp(double x, double y, int ch, Font fnt)
|
||||
{
|
||||
Put(PAINTING_CHARACTER);
|
||||
Put32(ch);
|
||||
Put(fnt);
|
||||
}
|
||||
|
||||
void PaintingPainter::TextOp(double x, double y, const wchar *text, Font fnt, int n, double *dx)
|
||||
{
|
||||
Put(PAINTING_TEXT);
|
||||
Putf(x, y);
|
||||
Put32(n);
|
||||
Put((bool)dx);
|
||||
Put(fnt);
|
||||
for(int i = 0; i < n; i++) {
|
||||
Put32(text[i]);
|
||||
if(dx)
|
||||
Putf(dx[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void PaintingPainter::ColorStopOp(double pos, const RGBA& color)
|
||||
{
|
||||
Put(PAINTING_COLORSTOP);
|
||||
Putf(pos);
|
||||
Put(color);
|
||||
}
|
||||
|
||||
void PaintingPainter::ClearStopsOp()
|
||||
{
|
||||
Put(PAINTING_CLEARSTOPS);
|
||||
}
|
||||
|
||||
void PaintingPainter::OpacityOp(double o)
|
||||
{
|
||||
Put(PAINTING_OPACITY);
|
||||
Putf(o);
|
||||
}
|
||||
|
||||
void PaintingPainter::LineCapOp(int linecap)
|
||||
{
|
||||
Put(PAINTING_LINECAP);
|
||||
Put(linecap);
|
||||
}
|
||||
|
||||
void PaintingPainter::LineJoinOp(int linejoin)
|
||||
{
|
||||
Put(PAINTING_LINEJOIN);
|
||||
Put(linejoin);
|
||||
}
|
||||
|
||||
void PaintingPainter::MiterLimitOp(double l)
|
||||
{
|
||||
Put(PAINTING_MITERLIMIT);
|
||||
Putf(l);
|
||||
}
|
||||
|
||||
void PaintingPainter::EvenOddOp(bool evenodd)
|
||||
{
|
||||
Put(PAINTING_EVENODD);
|
||||
Put(evenodd);
|
||||
}
|
||||
|
||||
void PaintingPainter::DashOp(const Vector<double>& dash, double start)
|
||||
{
|
||||
Put(PAINTING_DASH);
|
||||
Put32(dash.GetCount());
|
||||
for(int i = 0; i < dash.GetCount(); i++)
|
||||
Putf(dash[i]);
|
||||
Putf(start);
|
||||
}
|
||||
|
||||
void PaintingPainter::TransformOp(const Matrix2D& m)
|
||||
{
|
||||
Put(PAINTING_TRANSFORM);
|
||||
Putf(m);
|
||||
}
|
||||
|
||||
void PaintingPainter::BeginOp()
|
||||
{
|
||||
Put(PAINTING_BEGIN);
|
||||
}
|
||||
|
||||
void PaintingPainter::EndOp()
|
||||
{
|
||||
Put(PAINTING_END);
|
||||
}
|
||||
|
||||
void PaintingPainter::BeginMaskOp()
|
||||
{
|
||||
Put(PAINTING_BEGINMASK);
|
||||
}
|
||||
|
||||
Painting PaintingPainter::GetResult()
|
||||
{
|
||||
Painting p;
|
||||
p.cmd = cmd.GetResult();
|
||||
p.data = data;
|
||||
return p;
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
124
uppsrc/Painter/Painting.h
Normal file
124
uppsrc/Painter/Painting.h
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
class Painting {
|
||||
String cmd;
|
||||
ValueArray data;
|
||||
|
||||
friend class PaintingPainter;
|
||||
friend class Painter;
|
||||
};
|
||||
|
||||
enum {
|
||||
PAINTING_EOF,
|
||||
PAINTING_CLEAR,
|
||||
|
||||
PAINTING_MOVE,
|
||||
PAINTING_MOVE_REL,
|
||||
PAINTING_LINE,
|
||||
PAINTING_LINE_REL,
|
||||
PAINTING_QUADRATIC,
|
||||
PAINTING_QUADRATIC_REL,
|
||||
PAINTING_QUADRATIC_S,
|
||||
PAINTING_QUADRATIC_S_REL,
|
||||
PAINTING_CUBIC,
|
||||
PAINTING_CUBIC_REL,
|
||||
PAINTING_CUBIC_S,
|
||||
PAINTING_CUBIC_S_REL,
|
||||
PAINTING_CLOSE,
|
||||
|
||||
PAINTING_FILL_SOLID,
|
||||
PAINTING_FILL_IMAGE,
|
||||
PAINTING_FILL_GRADIENT,
|
||||
PAINTING_FILL_RADIAL,
|
||||
|
||||
PAINTING_STROKE_SOLID,
|
||||
PAINTING_STROKE_IMAGE,
|
||||
PAINTING_STROKE_GRADIENT,
|
||||
PAINTING_STROKE_RADIAL,
|
||||
|
||||
PAINTING_CLIP,
|
||||
|
||||
PAINTING_CHARACTER,
|
||||
PAINTING_TEXT,
|
||||
|
||||
PAINTING_COLORSTOP,
|
||||
PAINTING_CLEARSTOPS,
|
||||
PAINTING_OPACITY,
|
||||
PAINTING_LINECAP,
|
||||
PAINTING_LINEJOIN,
|
||||
PAINTING_MITERLIMIT,
|
||||
PAINTING_EVENODD,
|
||||
PAINTING_DASH,
|
||||
|
||||
PAINTING_TRANSFORM,
|
||||
PAINTING_BEGIN,
|
||||
PAINTING_END,
|
||||
PAINTING_BEGINMASK,
|
||||
};
|
||||
|
||||
class PaintingPainter : public Painter {
|
||||
StringStream cmd;
|
||||
ValueArray data;
|
||||
|
||||
void Put(int c) { cmd.Put(c); }
|
||||
void Put32(int c) { cmd.Put32(c); }
|
||||
void Put(const RGBA& c) { cmd.Put(&c, sizeof(RGBA)); }
|
||||
void Putf(double d) { cmd.Put(&d, sizeof(double)); }
|
||||
void Putf(double x, double y) { Putf(x); Putf(y); }
|
||||
void Putf(const Matrix2D& m) { cmd.Put(&m, sizeof(Matrix2D)); }
|
||||
void Put(const Font& f) { cmd.Put(&f, sizeof(Font)); }
|
||||
|
||||
protected:
|
||||
virtual void ClearOp(const RGBA& color);
|
||||
|
||||
virtual void MoveOp(double x, double y, bool rel);
|
||||
virtual void LineOp(double x, double y, bool rel);
|
||||
virtual void QuadraticOp(double x1, double y1, double x, double y, bool rel);
|
||||
virtual void QuadraticOp(double x, double y, bool rel);
|
||||
virtual void CubicOp(double x1, double y1, double x2, double y2, double x, double y, bool rel);
|
||||
virtual void CubicOp(double x2, double y2, double x, double y, bool rel);
|
||||
virtual void CloseOp();
|
||||
|
||||
virtual void FillOp(const RGBA& color);
|
||||
virtual void FillOp(const Image& image, const Matrix2D& transsrc, dword flags);
|
||||
virtual void FillOp(double x1, double y1, const RGBA& color1,
|
||||
double x2, double y2, const RGBA& color2,
|
||||
int style);
|
||||
virtual void FillOp(double fx, double fy, const RGBA& color1,
|
||||
double x1, double y1, double r, const RGBA& color2,
|
||||
int style);
|
||||
|
||||
virtual void StrokeOp(double width, const RGBA& rgba);
|
||||
virtual void StrokeOp(double width, const Image& image, const Matrix2D& transsrc,
|
||||
dword flags);
|
||||
virtual void StrokeOp(double width, double x1, double y1, const RGBA& color1,
|
||||
double x2, double y2, const RGBA& color2,
|
||||
int style);
|
||||
virtual void StrokeOp(double width, double fx, double fy, const RGBA& color1,
|
||||
double x, double y, double r, const RGBA& color2,
|
||||
int style);
|
||||
|
||||
virtual void ClipOp();
|
||||
|
||||
virtual void CharacterOp(double x, double y, int ch, Font fnt);
|
||||
virtual void TextOp(double x, double y, const wchar *text, Font fnt, int n = -1, double *dx = NULL);
|
||||
|
||||
virtual void ColorStopOp(double pos, const RGBA& color);
|
||||
virtual void ClearStopsOp();
|
||||
|
||||
virtual void OpacityOp(double o);
|
||||
virtual void LineCapOp(int linecap);
|
||||
virtual void LineJoinOp(int linejoin);
|
||||
virtual void MiterLimitOp(double l);
|
||||
virtual void EvenOddOp(bool evenodd);
|
||||
virtual void DashOp(const Vector<double>& dash, double start);
|
||||
|
||||
virtual void TransformOp(const Matrix2D& m);
|
||||
|
||||
virtual void BeginOp();
|
||||
virtual void EndOp();
|
||||
|
||||
virtual void BeginMaskOp();
|
||||
|
||||
public:
|
||||
Painting GetResult();
|
||||
operator Painting() { return GetResult(); }
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue