mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 22:02:58 -06:00
107 lines
1.8 KiB
C++
107 lines
1.8 KiB
C++
#include "Painter.h"
|
|
|
|
NAMESPACE_UPP
|
|
|
|
bool Painter::ReadBool(CParser& p)
|
|
{
|
|
while(p.Char(','));
|
|
if(p.Char('1')) return true;
|
|
p.Char('0');
|
|
return false;
|
|
}
|
|
|
|
double Painter::ReadDouble(CParser& p)
|
|
{
|
|
while(p.Char(','));
|
|
return p.IsDouble() ? p.ReadDouble() : 0;
|
|
}
|
|
|
|
Pointf Painter::ReadPoint(CParser& p)
|
|
{
|
|
Pointf t;
|
|
t.x = ReadDouble(p);
|
|
t.y = ReadDouble(p);
|
|
return t;
|
|
}
|
|
|
|
Painter& Painter::Path(CParser& p)
|
|
{
|
|
while(!p.IsEof()) {
|
|
int c = p.GetChar();
|
|
p.Spaces();
|
|
bool rel = IsLower(c);
|
|
Pointf t, t1, t2;
|
|
switch(ToUpper(c)) {
|
|
case 'M':
|
|
t = ReadPoint(p);
|
|
Move(t, rel);
|
|
case 'L':
|
|
while(p.IsDouble()) {
|
|
t = ReadPoint(p);
|
|
Line(t, rel);
|
|
}
|
|
break;
|
|
case 'Z':
|
|
Close();
|
|
break;
|
|
case 'H':
|
|
while(p.IsDouble())
|
|
Line(p.ReadDouble(), Null, rel);
|
|
break;
|
|
case 'V':
|
|
while(p.IsDouble())
|
|
Line(Null, p.ReadDouble(), rel);
|
|
break;
|
|
case 'C':
|
|
while(p.IsDouble()) {
|
|
t1 = ReadPoint(p);
|
|
t2 = ReadPoint(p);
|
|
t = ReadPoint(p);
|
|
Cubic(t1, t2, t, rel);
|
|
}
|
|
break;
|
|
case 'S':
|
|
while(p.IsDouble()) {
|
|
t2 = ReadPoint(p);
|
|
t = ReadPoint(p);
|
|
Cubic(t2, t, rel);
|
|
}
|
|
break;
|
|
case 'Q':
|
|
while(p.IsDouble()) {
|
|
t1 = ReadPoint(p);
|
|
t = ReadPoint(p);
|
|
Quadratic(t1, t, rel);
|
|
}
|
|
break;
|
|
case 'T':
|
|
while(p.IsDouble()) {
|
|
t = ReadPoint(p);
|
|
Quadratic(t, rel);
|
|
}
|
|
break;
|
|
case 'A':
|
|
while(p.IsDouble()) {
|
|
t1 = ReadPoint(p);
|
|
double xangle = ReadDouble(p);
|
|
bool large = ReadBool(p);
|
|
bool sweep = ReadBool(p);
|
|
t = ReadPoint(p);
|
|
SvgArc(t1, xangle * M_PI / 180.0, large, sweep, t, rel);
|
|
}
|
|
break;
|
|
default:
|
|
return *this;
|
|
}
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
Painter& Painter::Path(const char *path)
|
|
{
|
|
CParser p(path);
|
|
Path(p);
|
|
return *this;
|
|
}
|
|
|
|
END_UPP_NAMESPACE
|