summaryrefslogtreecommitdiff
path: root/src/libpcp_qed/src/qed_line.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libpcp_qed/src/qed_line.cpp')
-rw-r--r--src/libpcp_qed/src/qed_line.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/libpcp_qed/src/qed_line.cpp b/src/libpcp_qed/src/qed_line.cpp
new file mode 100644
index 0000000..51e8573
--- /dev/null
+++ b/src/libpcp_qed/src/qed_line.cpp
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2013-2014, Red Hat.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ */
+
+#include <QWidget>
+#include "qed_line.h"
+
+QedLine::QedLine(QWidget *parent, qreal length) : QedGadget(parent)
+{
+ setup();
+ my.box = QRect(0, 0, length, 1);
+ my.length = length * 1.0;
+}
+
+QedLine::QedLine(QWidget *parent, int x, int y, int w, int h) : QedGadget(parent)
+{
+ setup();
+ my.box = QRect(x, y, w, h);
+ my.length = QLineF(QLine(x, y, w, h)).length();
+}
+
+QedLine::QedLine(QWidget *parent, int length, Qt::Orientation oriented) : QedGadget(parent)
+{
+ setup();
+ my.oriented = oriented;
+ my.box = QRect(0, 0, length, 1);
+ my.length = 1.0 * length;
+}
+
+void
+QedLine::setup(void)
+{
+ const qreal baseBound = 32.0;
+ const int iBaseBound = (int)(baseBound+0.5);
+ my.oriented = Qt::Horizontal;
+ my.bound = baseBound;
+ setMinimumSize(iBaseBound, iBaseBound);
+ setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+}
+
+void
+QedLine::resizeEvent(QResizeEvent *event)
+{
+ QSize size = event->size();
+ my.bound = qMin(size.height(), size.width());
+}
+
+void
+QedLine::paintEvent(QPaintEvent *event)
+{
+ qreal lowerInset, upperInset, radius = my.bound / 16.0;
+ (void)event;
+
+ QPainterPath mainSquarePath;
+ lowerInset = 0.3 * my.bound;
+ upperInset = (my.bound * my.length) - (lowerInset * 2.0);
+ QRectF mainBox(lowerInset, lowerInset,
+ upperInset, my.bound - (lowerInset * 2.0));
+ mainSquarePath.addRoundedRect(mainBox, radius, radius);
+ mainSquarePath.closeSubpath();
+ QLinearGradient mainGradient(0, 0, 0, 1.0 * my.bound);
+ mainGradient.setColorAt(0.0, Qt::lightGray);
+ mainGradient.setColorAt(1.0, Qt::darkGray);
+
+ QPainterPath reflectSquarePath;
+ QRectF reflectBox(0.13538 * my.bound, 0.12969 * my.bound,
+ 0.73084 * my.bound, 0.48615 * my.bound);
+ reflectSquarePath.addRoundedRect(reflectBox, radius, radius);
+ reflectSquarePath.closeSubpath();
+ QLinearGradient reflectGradient(0, 0, 0, 1.22953 * my.bound);
+ reflectGradient.setColorAt(0.0, Qt::white);
+ reflectGradient.setColorAt(1.0, Qt::gray);
+
+ QPainter painter(this);
+ painter.setRenderHint(QPainter::Antialiasing);
+ painter.setPen(Qt::NoPen);
+
+ painter.setBrush(mainGradient);
+ painter.drawPath(mainSquarePath);
+ painter.setBrush(reflectGradient);
+ painter.drawPath(reflectSquarePath);
+}