15 #include <QFontMetricsF>
19 #include <QStyleOptionGraphicsItem>
22 static const qreal sBaseline = 1;
24 qreal StandardGraphicsGate::sAlpha;
26 QPen StandardGraphicsGate::sPen;
30 QFont StandardGraphicsGate::sTextFont[2];
31 QFont StandardGraphicsGate::sPinFont;
33 qreal StandardGraphicsGate::sTextFontHeight[2];
35 qreal StandardGraphicsGate::sColorBarHeight = 30;
37 qreal StandardGraphicsGate::sPinInnerHorizontalSpacing = 12;
38 qreal StandardGraphicsGate::sPinOuterHorizontalSpacing = 2.4;
40 qreal StandardGraphicsGate::sPinInnerVerticalSpacing = 1.2;
41 qreal StandardGraphicsGate::sPinOuterVerticalSpacing = 0.6;
42 qreal StandardGraphicsGate::sPinUpperVerticalSpacing = 2;
43 qreal StandardGraphicsGate::sPinLowerVerticalSpacing = 1.8;
45 qreal StandardGraphicsGate::sPinFontHeight;
46 qreal StandardGraphicsGate::sPinFontAscent;
47 qreal StandardGraphicsGate::sPinFontDescent;
48 qreal StandardGraphicsGate::sPinFontBaseline;
50 qreal StandardGraphicsGate::sInnerNameTypeSpacing = 1.2;
51 qreal StandardGraphicsGate::sOuterNameTypeSpacing = 3;
53 qreal StandardGraphicsGate::sFirstPinY;
54 qreal StandardGraphicsGate::sPinYStride;
56 const int StandardGraphicsGate::sIconPadding = 3;
57 const QSize StandardGraphicsGate::sIconSize(sColorBarHeight - 2 * sIconPadding,
58 sColorBarHeight - 2 * sIconPadding);
59 QPixmap* StandardGraphicsGate::sIconInstance =
nullptr;
61 const QPixmap& StandardGraphicsGate::iconPixmap()
63 if (!sIconInstance) sIconInstance
65 return *sIconInstance;
79 for (
int iline=0; iline<2; iline++)
81 sTextFont[iline] = font;
83 sTextFontHeight[iline] = fmf.
height();
88 sPinFontHeight = pin_fm.
height();
89 sPinFontAscent = pin_fm.
ascent();
90 sPinFontDescent = pin_fm.
descent();
93 sFirstPinY = sColorBarHeight + sPinUpperVerticalSpacing + sPinFontHeight;
94 sPinYStride = sPinFontHeight + sPinInnerVerticalSpacing;
99 if (
sLod <= graph_widget_constants::sGateMaxLod)
100 sAlpha = 1 - (
sLod - graph_widget_constants::sGateMinLod) / (graph_widget_constants::sGateMaxLod - graph_widget_constants::sGateMinLod);
107 format(adjust_size_to_grid);
114 if (
sLod < graph_widget_constants::sGateMinLod)
133 for (
int iline=0; iline<2; iline++)
135 painter->
setFont(sTextFont[iline]);
148 int yFirstTextline = sColorBarHeight + sPinUpperVerticalSpacing + sPinFontAscent + sBaseline;
152 Q_ASSERT(i < inpNets.
size());
153 u32 inpNetId = inpNets.
at(i);
154 int yText = yFirstTextline + i * (sPinFontHeight + sPinInnerVerticalSpacing);
158 && i == subFocusIndex)
172 float wbox = mInputPinTextWidth.
at(i) > sPinFontHeight ? mInputPinTextWidth.
at(i) : sPinFontHeight;
176 painter->
drawRoundRect(sPinOuterHorizontalSpacing,yText-sPinFontAscent,wbox,sPinFontHeight,35,35);
178 pinTextColor = legibleColor(pinBackground);
190 Q_ASSERT(i < outNets.
size());
191 u32 outNetId = outNets.
at(i);
192 int yText = yFirstTextline + i * (sPinFontHeight + sPinInnerVerticalSpacing);
195 && i == subFocusIndex)
212 float wbox = sPinFontHeight;
213 float xbox =
mWidth - sPinOuterHorizontalSpacing - sPinFontHeight;
214 if (mOutputPinTextWidth.
at(i) > wbox)
216 xbox -= (mOutputPinTextWidth.
at(i) - wbox);
217 wbox = mOutputPinTextWidth.
at(i);
219 painter->
drawRoundRect(xbox,yText-sPinFontAscent,wbox,sPinFontHeight,35,35);
221 pinTextColor = legibleColor(pinBackground);
231 if (
sLod < graph_widget_constants::sGateMaxLod)
264 QColor StandardGraphicsGate::legibleColor(
const QColor& bgColor)
267 const static float kr = 0.229;
268 const static float kb = 0.114;
269 float y = kr*bgColor.
red() + (1-kr-kb)*bgColor.
green() + kb*bgColor.
blue();
297 return (sPinFontHeight + sPinInnerVerticalSpacing);
302 return (sColorBarHeight + sPinUpperVerticalSpacing + sPinFontHeight / 2);
311 void StandardGraphicsGate::format(
const bool& adjust_size_to_grid)
314 for (
int iline=0; iline<2; iline++)
317 textWidth[iline] = fmf.width(
mNodeText[iline]);
321 qreal max_pin_width = 0;
325 qreal
width = pin_fm.width(input_pin);
326 if (
width > max_pin_width)
327 max_pin_width =
width;
332 qreal
width = pin_fm.width(output_pin);
333 if (
width > max_pin_width)
334 max_pin_width =
width;
337 qreal total_input_pin_height = 0;
342 sPinUpperVerticalSpacing + sPinLowerVerticalSpacing;
344 qreal total_output_pin_height = 0;
349 sPinUpperVerticalSpacing + sPinLowerVerticalSpacing;
351 qreal max_pin_height = std::max(total_input_pin_height, total_output_pin_height);
352 qreal min_body_height = sInnerNameTypeSpacing + 2 * sOuterNameTypeSpacing;
354 qreal maxTextWidth = 0;
355 for (
int iline=0; iline<2; iline++)
357 min_body_height += sTextFontHeight[iline];
358 if (maxTextWidth < textWidth[iline]) maxTextWidth = textWidth[iline];
362 mWidth = max_pin_width * 2 + sPinInnerHorizontalSpacing * 2 + sPinOuterHorizontalSpacing * 2 + maxTextWidth;
363 mHeight = std::max(max_pin_height, min_body_height) + sColorBarHeight;
365 if (adjust_size_to_grid)
367 int floored_width =
static_cast<int>(
mWidth);
368 int quotient = floored_width / graph_widget_constants::sGridSize;
370 if (
mWidth > quotient * graph_widget_constants::sGridSize)
371 mWidth = (quotient + 1) * graph_widget_constants::sGridSize;
373 int floored_height =
static_cast<int>(
mHeight);
374 quotient = floored_height / graph_widget_constants::sGridSize;
376 if (
mHeight > quotient * graph_widget_constants::sGridSize)
377 mHeight = (quotient + 1) * graph_widget_constants::sGridSize;
380 mTextPosition[0].
setX(
mWidth / 2 - textWidth[0] / 2);
381 mTextPosition[0].
setY(std::max(
mHeight / 2 - sTextFontHeight[0] / 2 - sInnerNameTypeSpacing / 2,
382 sColorBarHeight + sOuterNameTypeSpacing + sTextFontHeight[0]));
384 mTextPosition[1].
setX(
mWidth / 2 - textWidth[1] / 2);
385 mTextPosition[1].
setY(mTextPosition[0].
y() + sTextFontHeight[1] + sInnerNameTypeSpacing / 2);
387 qreal
y = sColorBarHeight + sPinUpperVerticalSpacing + sPinFontAscent + sBaseline;
390 mInputPinTextWidth.
append(pin_fm.size(0, input_pin).rwidth());
393 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
virtual QRectF boundingRect() const override
QList< u32 > inputNets() const
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.1.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