diff options
author | Karel Kočí <cynerd@email.cz> | 2018-01-08 21:43:58 +0100 |
---|---|---|
committer | Karel Kočí <cynerd@email.cz> | 2018-01-08 21:43:58 +0100 |
commit | 506174a8266eb9842ff9e50a89ddf86cb975be30 (patch) | |
tree | cd1c2905d48c172d2b83e4230b1f76dc46e8f3d3 /qtmips_gui/coreview/adder.cpp | |
parent | bcdd7c87b1eda7dc6b294cfa0796ce7e36f12b23 (diff) | |
download | qtmips-506174a8266eb9842ff9e50a89ddf86cb975be30.tar.gz qtmips-506174a8266eb9842ff9e50a89ddf86cb975be30.tar.bz2 qtmips-506174a8266eb9842ff9e50a89ddf86cb975be30.zip |
Add coreview progress
Diffstat (limited to 'qtmips_gui/coreview/adder.cpp')
-rw-r--r-- | qtmips_gui/coreview/adder.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/qtmips_gui/coreview/adder.cpp b/qtmips_gui/coreview/adder.cpp new file mode 100644 index 0000000..cd227ab --- /dev/null +++ b/qtmips_gui/coreview/adder.cpp @@ -0,0 +1,69 @@ +#include "adder.h" +#include <cmath> + +using namespace coreview; + +////////////////////// +#define WIDTH 13 +#define HEIGHT 40 +#define DENT 3 +#define PENW 1 +////////////////////// + +Adder::Adder() : QGraphicsItem(nullptr), plus("+", this) { + QFont font; + font.setPointSize(7); + plus.setFont(font); + QRectF plus_box = plus.boundingRect(); + plus.setPos(DENT + (WIDTH-DENT)/2 - plus_box.width()/2, HEIGHT/2 - plus_box.height()/2); + + con_in_a = new Connector(0); + con_in_b = new Connector(0); + con_out = new Connector(M_PI); + + setPos(x(), y()); // set connector's position +} + +Adder::~Adder() { + delete con_in_a; + delete con_in_b; + delete con_out; +} + +QRectF Adder::boundingRect() const { + return QRectF(-PENW / 2, -PENW / 2, WIDTH + PENW, HEIGHT + PENW); +} + +void Adder::paint(QPainter *painter, const QStyleOptionGraphicsItem *option __attribute__((unused)), QWidget *widget __attribute__((unused))) { + const QPointF poly[] = { + QPointF(0, 0), + QPointF(WIDTH, WIDTH), + QPointF(WIDTH, HEIGHT - WIDTH), + QPointF(0, HEIGHT), + QPointF(0, (HEIGHT/2) + DENT), + QPointF(DENT, HEIGHT / 2), + QPointF(0, (HEIGHT / 2) - DENT) + }; + painter->drawPolygon(poly, sizeof(poly) / sizeof(QPointF)); +} + +void Adder::setPos(qreal x, qreal y) { + QGraphicsItem::setPos(x, y); + + qreal off = ((HEIGHT/2) - DENT) / 2; + con_in_a->setPos(x, y + off); + con_in_b->setPos(x, y + HEIGHT - off); + con_out->setPos(x + WIDTH, y + HEIGHT/2); +} + +const Connector *Adder::connector_in_a() const { + return con_in_a; +} + +const Connector *Adder::connector_in_b() const { + return con_in_b; +} + +const Connector *Adder::connector_out() const { + return con_out; +} |