forked from vectorgraphics/asymptote
-
Notifications
You must be signed in to change notification settings - Fork 0
/
drawclipend.h
66 lines (48 loc) · 1.18 KB
/
drawclipend.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*****
* drawclipend.h
* John Bowman
*
* End clip of picture to specified path.
*****/
#ifndef DRAWCLIPEND_H
#define DRAWCLIPEND_H
#include "drawclipbegin.h"
#include "path.h"
namespace camp {
class drawClipEnd : public drawElement {
bool grestore;
drawClipBegin *partner;
public:
drawClipEnd(bool grestore=true, drawClipBegin *partner=NULL) :
grestore(grestore), partner(partner) {}
virtual ~drawClipEnd() {}
bool endclip() {return true;}
void bounds(bbox& b, iopipestream&, boxvector&, bboxlist& bboxstack) {
if(bboxstack.size() < 2)
reportError("endclip without matching beginclip");
b.clip(bboxstack.back());
bboxstack.pop_back();
b += bboxstack.back();
bboxstack.pop_back();
}
bool endgroup() {return true;}
bool svg() {return true;}
void save(bool b) {
grestore=b;
if(partner) partner->save(b);
}
bool draw(psfile *out) {
if(grestore) out->grestore();
return true;
}
bool write(texfile *out, const bbox& bpath) {
out->endgroup();
if(out->toplevel())
out->endpicture(bpath);
if(grestore) out->grestore();
return true;
}
};
}
GC_DECLARE_PTRFREE(camp::drawClipEnd);
#endif