summaryrefslogtreecommitdiffstats
path: root/scribus/pageitem_polyline.cpp
diff options
context:
space:
mode:
authorcraig <craig@11d20701-8431-0410-a711-e3c959e3b870>2012-01-01 11:40:09 +0000
committercraig <craig@11d20701-8431-0410-a711-e3c959e3b870>2012-01-01 11:40:09 +0000
commit7ed83b6c6666eb8b6b104c211ae7e52907350372 (patch)
tree4430b556abac0ad660a0aacf1887d77f85d8be02 /scribus/pageitem_polyline.cpp
downloadscribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.gz
scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.xz
scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.zip
Branch 1.3.5 tree to 1.4.x tree, goodbye 1.3.x
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17163 11d20701-8431-0410-a711-e3c959e3b870
Diffstat (limited to 'scribus/pageitem_polyline.cpp')
-rw-r--r--scribus/pageitem_polyline.cpp161
1 files changed, 161 insertions, 0 deletions
diff --git a/scribus/pageitem_polyline.cpp b/scribus/pageitem_polyline.cpp
new file mode 100644
index 0000000..0a55cf4
--- /dev/null
+++ b/scribus/pageitem_polyline.cpp
@@ -0,0 +1,161 @@
+/*
+For general Scribus (>=1.3.2) copyright and licensing information please refer
+to the COPYING file provided with the program. Following this notice may exist
+a copyright and/or license notice that predates the release of Scribus 1.3.2
+for which a new license (GPL+exception) is in place.
+*/
+/***************************************************************************
+ pageitem.cpp - description
+ -------------------
+ begin : Sat Apr 7 2001
+ copyright : (C) 2001 by Franz Schmid
+ email : Franz.Schmid@altmuehlnet.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include <cassert>
+
+#include "page.h"
+#include "pageitem.h"
+#include "pageitem_polyline.h"
+#include "prefsmanager.h"
+#include "scpainter.h"
+#include "scpaths.h"
+#include "scribus.h"
+#include "scribusstructs.h"
+#include "scribusdoc.h"
+#include "commonstrings.h"
+#include "undomanager.h"
+#include "undostate.h"
+#include "scconfig.h"
+
+#include "util.h"
+#include "util_math.h"
+
+using namespace std;
+
+PageItem_PolyLine::PageItem_PolyLine(ScribusDoc *pa, double x, double y, double w, double h, double w2, QString fill, QString outline)
+ : PageItem(pa, PageItem::PolyLine, x, y, w, h, w2, fill, outline)
+{
+}
+
+void PageItem_PolyLine::DrawObj_Item(ScPainter *p, QRectF /*e*/, double /*sc*/)
+{
+ if (!m_Doc->RePos && PoLine.size()>=4)
+ {
+ if (!m_Doc->layerOutline(LayerNr))
+ {
+ if ((fillColor() != CommonStrings::None) || (GrType != 0))
+ {
+ FPointArray cli;
+ FPoint Start;
+ bool firstp = true;
+ for (uint n = 0; n < PoLine.size()-3; n += 4)
+ {
+ if (firstp)
+ {
+ Start = PoLine.point(n);
+ firstp = false;
+ }
+ if (PoLine.point(n).x() > 900000)
+ {
+ cli.addPoint(PoLine.point(n-2));
+ cli.addPoint(PoLine.point(n-2));
+ cli.addPoint(Start);
+ cli.addPoint(Start);
+ cli.setMarker();
+ firstp = true;
+ continue;
+ }
+ cli.addPoint(PoLine.point(n));
+ cli.addPoint(PoLine.point(n+1));
+ cli.addPoint(PoLine.point(n+2));
+ cli.addPoint(PoLine.point(n+3));
+ }
+ if (cli.size() > 2)
+ {
+ FPoint l1 = cli.point(cli.size()-2);
+ cli.addPoint(l1);
+ cli.addPoint(l1);
+ cli.addPoint(Start);
+ cli.addPoint(Start);
+ }
+ p->setupPolygon(&cli);
+ p->fillPath();
+ }
+ p->setupPolygon(&PoLine, false);
+ if (NamedLStyle.isEmpty())
+ {
+ if (lineColor() != CommonStrings::None)
+ p->strokePath();
+ }
+ else
+ {
+ multiLine ml = m_Doc->MLineStyles[NamedLStyle];
+ QColor tmp;
+ for (int it = ml.size()-1; it > -1; it--)
+ {
+ if (ml[it].Color != CommonStrings::None) // && (ml[it].Width != 0))
+ {
+ SetQColor(&tmp, ml[it].Color, ml[it].Shade);
+ p->setPen(tmp, ml[it].Width, static_cast<Qt::PenStyle>(ml[it].Dash), static_cast<Qt::PenCapStyle>(ml[it].LineEnd), static_cast<Qt::PenJoinStyle>(ml[it].LineJoin));
+ p->strokePath();
+ }
+ }
+ }
+ }
+ if (m_startArrowIndex != 0)
+ {
+ FPoint Start = PoLine.point(0);
+ for (uint xx = 1; xx < PoLine.size(); xx += 2)
+ {
+ FPoint Vector = PoLine.point(xx);
+ if ((Start.x() != Vector.x()) || (Start.y() != Vector.y()))
+ {
+ double r = atan2(Start.y()-Vector.y(),Start.x()-Vector.x())*(180.0/M_PI);
+ QMatrix arrowTrans;
+ arrowTrans.translate(Start.x(), Start.y());
+ arrowTrans.rotate(r);
+ drawArrow(p, arrowTrans, m_startArrowIndex);
+ break;
+ }
+ }
+ }
+ if (m_endArrowIndex != 0)
+ {
+ FPoint End = PoLine.point(PoLine.size()-2);
+ for (uint xx = PoLine.size()-1; xx > 0; xx -= 2)
+ {
+ FPoint Vector = PoLine.point(xx);
+ if ((End.x() != Vector.x()) || (End.y() != Vector.y()))
+ {
+ double r = atan2(End.y()-Vector.y(),End.x()-Vector.x())*(180.0/M_PI);
+ QMatrix arrowTrans;
+ arrowTrans.translate(End.x(), End.y());
+ arrowTrans.rotate(r);
+ drawArrow(p, arrowTrans, m_endArrowIndex);
+ break;
+ }
+ }
+ }
+ }
+}
+
+void PageItem_PolyLine::applicableActions(QStringList & actionList)
+{
+ actionList << "itemConvertToPolygon";
+}
+
+QString PageItem_PolyLine::infoDescription()
+{
+ return QString();
+}
+