summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/drawclipbegin.h
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-05-16 00:19:13 +0000
committerKarl Berry <karl@freefriends.org>2009-05-16 00:19:13 +0000
commitbab45528d65eaafe68a705dbb2a57075c7b7cbd8 (patch)
tree10b4ae2b5195c8dede153ab89359ec00f55f325f /Build/source/utils/asymptote/drawclipbegin.h
parent8643d90372e9c31e0f461c15c596b60a545bd7d3 (diff)
asymptote 1.72 sources (not integrated into build yet)
git-svn-id: svn://tug.org/texlive/trunk@13110 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/drawclipbegin.h')
-rw-r--r--Build/source/utils/asymptote/drawclipbegin.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/drawclipbegin.h b/Build/source/utils/asymptote/drawclipbegin.h
new file mode 100644
index 00000000000..5bc2d1f7c37
--- /dev/null
+++ b/Build/source/utils/asymptote/drawclipbegin.h
@@ -0,0 +1,90 @@
+/*****
+ * drawclipbegin.h
+ * John Bowman
+ *
+ * Begin clip of picture to specified path.
+ *****/
+
+#ifndef DRAWCLIPBEGIN_H
+#define DRAWCLIPBEGIN_H
+
+#include "drawelement.h"
+#include "path.h"
+#include "drawpath.h"
+
+namespace camp {
+
+class drawClipBegin : public drawSuperPathPenBase {
+ bool gsave;
+ bool stroke;
+public:
+ void noncyclic() {
+ reportError("cannot clip to non-cyclic path");
+ }
+
+ drawClipBegin(const vm::array& src, bool stroke, pen pentype, bool gsave=true)
+ : drawSuperPathPenBase(src,pentype), gsave(gsave), stroke(stroke) {
+ if(!stroke && !cyclic()) noncyclic();
+ }
+
+ virtual ~drawClipBegin() {}
+
+ void bounds(bbox& b, iopipestream& iopipe, boxvector& vbox,
+ bboxlist& bboxstack) {
+ bboxstack.push_back(b);
+ bbox bpath;
+ if(stroke) strokebounds(bpath);
+ else drawSuperPathPenBase::bounds(bpath,iopipe,vbox,bboxstack);
+ bboxstack.push_back(bpath);
+ }
+
+ bool begingroup() {return true;}
+
+ void save(bool b) {
+ gsave=b;
+ }
+
+ bool draw(psfile *out) {
+ if(gsave) out->gsave();
+ if(empty()) return true;
+
+ writepath(out);
+ if(stroke) strokepath(out);
+ out->clip(pentype);
+ return true;
+ }
+
+ bool write(texfile *out, const bbox& bpath) {
+ if(gsave) out->gsave();
+ if(empty()) return true;
+
+ out->verbatim(settings::beginpicture(out->texengine));
+ out->verbatim("(");
+ double width=bpath.right-bpath.left;
+ double height=bpath.top-bpath.bottom;
+ out->write(width*ps2tex);
+ out->verbatim(",");
+ out->write(height*ps2tex);
+ out->verbatimline(")%");
+
+ out->beginspecial();
+ out->beginraw();
+ writeshiftedpath(out);
+ if(stroke) strokepath(out);
+ out->clip(pentype);
+ out->endraw();
+ out->endspecial();
+
+ return true;
+ }
+
+ drawElement *transformed(const transform& t)
+ {
+ return new drawClipBegin(transpath(t),stroke,transpen(t));
+ }
+
+};
+
+}
+
+#endif