17 #include <QStyleOptionGraphicsItem>
20 static const qreal sBaseline = 1;
22 qreal StandardGraphicsGate::sAlpha;
24 QPen StandardGraphicsGate::sPen;
26 QFont StandardGraphicsGate::sPinFont;
28 qreal StandardGraphicsGate::sColorBarHeight = 30;
30 qreal StandardGraphicsGate::sPinInnerHorizontalSpacing = 12;
31 qreal StandardGraphicsGate::sPinOuterHorizontalSpacing = 2.4;
33 qreal StandardGraphicsGate::sPinInnerVerticalSpacing = 1.2;
34 qreal StandardGraphicsGate::sPinOuterVerticalSpacing = 0.6;
35 qreal StandardGraphicsGate::sPinUpperVerticalSpacing = 2;
36 qreal StandardGraphicsGate::sPinLowerVerticalSpacing = 1.8;
38 qreal StandardGraphicsGate::sPinFontHeight;
39 qreal StandardGraphicsGate::sPinFontAscent;
40 qreal StandardGraphicsGate::sPinFontDescent;
41 qreal StandardGraphicsGate::sPinFontBaseline;
43 qreal StandardGraphicsGate::sInnerNameTypeSpacing = 1.2;
44 qreal StandardGraphicsGate::sOuterNameTypeSpacing = 3;
46 qreal StandardGraphicsGate::sFirstPinY;
47 qreal StandardGraphicsGate::sPinYStride;
49 const int StandardGraphicsGate::sIconPadding = 3;
50 const QSize StandardGraphicsGate::sIconSize(sColorBarHeight - 2 * sIconPadding,
51 sColorBarHeight - 2 * sIconPadding);
52 QPixmap* StandardGraphicsGate::sIconInstance =
nullptr;
54 const QPixmap& StandardGraphicsGate::iconPixmap()
56 if (!sIconInstance) sIconInstance
58 return *sIconInstance;
74 sPinFontHeight = pin_fm.
height();
75 sPinFontAscent = pin_fm.
ascent();
76 sPinFontDescent = pin_fm.
descent();
79 sFirstPinY = sColorBarHeight + sPinUpperVerticalSpacing + sPinFontHeight;
80 sPinYStride = sPinFontHeight + sPinInnerVerticalSpacing;
85 if (
sLod <= graph_widget_constants::sGateMaxLod)
86 sAlpha = 1 - (
sLod - graph_widget_constants::sGateMinLod) / (graph_widget_constants::sGateMaxLod - graph_widget_constants::sGateMinLod);
93 format(adjust_size_to_grid);
100 if (
sLod < graph_widget_constants::sGateMinLod)
119 for (
int iline=0; iline<2; iline++)
134 int yFirstTextline = sColorBarHeight + sPinUpperVerticalSpacing + sPinFontAscent + sBaseline;
138 Q_ASSERT(i < inpNets.
size());
139 u32 inpNetId = inpNets.
at(i);
140 int yText = yFirstTextline + i * (sPinFontHeight + sPinInnerVerticalSpacing);
144 && i == subFocusIndex)
158 float wbox = mInputPinTextWidth.
at(i) > sPinFontHeight ? mInputPinTextWidth.
at(i) : sPinFontHeight;
162 painter->
drawRoundRect(sPinOuterHorizontalSpacing,yText-sPinFontAscent,wbox,sPinFontHeight,35,35);
164 pinTextColor = legibleColor(pinBackground);
176 Q_ASSERT(i < outNets.
size());
177 u32 outNetId = outNets.
at(i);
178 int yText = yFirstTextline + i * (sPinFontHeight + sPinInnerVerticalSpacing);
181 && i == subFocusIndex)
198 float wbox = sPinFontHeight;
199 float xbox =
mWidth - sPinOuterHorizontalSpacing - sPinFontHeight;
200 if (mOutputPinTextWidth.
at(i) > wbox)
202 xbox -= (mOutputPinTextWidth.
at(i) - wbox);
203 wbox = mOutputPinTextWidth.
at(i);
205 painter->
drawRoundRect(xbox,yText-sPinFontAscent,wbox,sPinFontHeight,35,35);
207 pinTextColor = legibleColor(pinBackground);
217 if (
sLod < graph_widget_constants::sGateMaxLod)
250 QColor StandardGraphicsGate::legibleColor(
const QColor& bgColor)
253 const static float kr = 0.229;
254 const static float kb = 0.114;
255 float y = kr*bgColor.
red() + (1-kr-kb)*bgColor.
green() + kb*bgColor.
blue();
283 return (sPinFontHeight + sPinInnerVerticalSpacing);
288 return (sColorBarHeight + sPinUpperVerticalSpacing + sPinFontHeight / 2);
297 void StandardGraphicsGate::format(
const bool& adjust_size_to_grid)
300 qreal max_pin_width = 0;
304 qreal
width = pin_fm.width(input_pin);
305 if (
width > max_pin_width)
306 max_pin_width =
width;
311 qreal
width = pin_fm.width(output_pin);
312 if (
width > max_pin_width)
313 max_pin_width =
width;
316 qreal total_input_pin_height = 0;
321 sPinUpperVerticalSpacing + sPinLowerVerticalSpacing;
323 qreal total_output_pin_height = 0;
328 sPinUpperVerticalSpacing + sPinLowerVerticalSpacing;
330 qreal max_pin_height = std::max(total_input_pin_height, total_output_pin_height);
331 qreal min_body_height = sInnerNameTypeSpacing + 2 * sOuterNameTypeSpacing;
333 for (
int iline=0; iline<2; iline++)
339 mWidth = max_pin_width * 2 + sPinInnerHorizontalSpacing * 2 + sPinOuterHorizontalSpacing * 2 +
mMaxTextWidth;
340 mHeight = std::max(max_pin_height, min_body_height) + sColorBarHeight;
342 if (adjust_size_to_grid)
344 int floored_width =
static_cast<int>(
mWidth);
345 int quotient = floored_width / graph_widget_constants::sGridSize;
347 if (
mWidth > quotient * graph_widget_constants::sGridSize)
348 mWidth = (quotient + 1) * graph_widget_constants::sGridSize;
350 int floored_height =
static_cast<int>(
mHeight);
351 quotient = floored_height / graph_widget_constants::sGridSize;
353 if (
mHeight > quotient * graph_widget_constants::sGridSize)
354 mHeight = (quotient + 1) * graph_widget_constants::sGridSize;
359 sColorBarHeight + sOuterNameTypeSpacing);
362 qreal
y = sColorBarHeight + sPinUpperVerticalSpacing + sPinFontAscent + sBaseline;
365 mInputPinTextWidth.
append(pin_fm.size(0, input_pin).rwidth());
368 mOutputPinTextWidth.
append(pin_fm.size(0, output_pin).rwidth());
GroupingManagerWidget * getGroupingManagerWidget()
static SettingsItemCheckbox * sSettingNetGroupingToPins
Abstract base class for gates.
QVector< QString > mOutputPins
QVector< QString > mInputPins
QColor selectionColor() const
QColor penColor(QStyle::State state, const QColor &colorHint=QColor()) const
QColor groupingColor() const
void initTextPosition(qreal y0, qreal spacing)
virtual QRectF boundingRect() const override
static QFont sTextFont[3]
QList< u32 > inputNets() const
static qreal sTextFontHeight[3]
QList< u32 > outputNets() const
static GraphicsQssAdapter * instance()
QColor colorForItem(ItemType itemType, u32 itemId) const
ItemType focusType() const
Subfocus subfocus() const
u32 subfocusIndex() const
virtual QVariant value() const override
float yTopPinDistance() const override
QPointF getOutputScenePosition(const u32 mNetId, const QString &pin_type) const override
static void updateAlpha()
float yEndpointDistance() const override
QPointF getInputScenePosition(const u32 mNetId, const QString &pin_type) const override
StandardGraphicsGate(Gate *g, const bool adjust_size_to_grid=true)
static void loadSettings()
QPointF endpointPositionByIndex(int index, bool isInput) const override
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=nullptr) override
ContentManager * gContentManager
GraphContextManager * gGraphContextManager
SelectionRelay * gSelectionRelay
option(PL_GUI "PL_GUI" ON) if(PL_GUI OR BUILD_ALL_PLUGINS) cmake_minimum_required(VERSION 3.5.0) if(APPLE AND CMAKE_HOST_APPLE AND NOT Qt5_DIR) set(Qt5_DIR "/usr/local/opt/qt@5/lib/cmake") endif(APPLE AND CMAKE_HOST_APPLE AND NOT Qt5_DIR) find_package(Qt5 COMPONENTS Core REQUIRED) find_package(Qt5 COMPONENTS Widgets REQUIRED) if(Qt5Widgets_FOUND) message(VERBOSE "Qt5Widgets_INCLUDE_DIRS
bool isValid() const const
void setAlphaF(qreal alpha)
void setPixelSize(int pixelSize)
qreal ascent() const const
qreal descent() const const
qreal height() const const
QPointF mapToScene(const QPointF &point) const const
const T & at(int i) const const
void drawRoundRect(const QRectF &r, int xRnd, int yRnd)
const QBrush & brush() const const
void drawRect(const QRectF &rectangle)
void drawText(const QPointF &position, const QString &text)
void fillRect(const QRectF &rectangle, const QBrush &brush)
QPainter::RenderHints renderHints() const const
void setBrush(const QBrush &brush)
void setFont(const QFont &font)
void setPen(const QColor &color)
void setRenderHint(QPainter::RenderHint hint, bool on)
void setColor(const QColor &color)
void setCosmetic(bool cosmetic)
void setJoinStyle(Qt::PenJoinStyle style)
QPixmap fromImage(const QImage &image, Qt::ImageConversionFlags flags)
bool toBool() const const
void append(const T &value)
const T & at(int i) const const
int indexOf(const T &value, int from) const const
bool isEmpty() const const