10 #include <QFontMetricsF>
15 #include <QStyleOptionGraphicsItem>
19 static const qreal sBaseline = 1;
21 qreal StandardGraphicsModule::sAlpha;
23 QPen StandardGraphicsModule::sPen;
27 QFont StandardGraphicsModule::sTextFont[3];
28 QFont StandardGraphicsModule::sPinFont;
30 qreal StandardGraphicsModule::sTextFontHeight[3] = {0, 0, 0};
32 qreal StandardGraphicsModule::sColorBarHeight = 30;
34 qreal StandardGraphicsModule::sPinInnerHorizontalSpacing = 12;
35 qreal StandardGraphicsModule::sPinOuterHorizontalSpacing = 2.4;
37 qreal StandardGraphicsModule::sPinInnerVerticalSpacing = 1.2;
38 qreal StandardGraphicsModule::sPinOuterVerticalSpacing = 0.6;
39 qreal StandardGraphicsModule::sPinUpperVerticalSpacing = 0.6;
40 qreal StandardGraphicsModule::sPinLowerVerticalSpacing = 1.8;
42 qreal StandardGraphicsModule::sPinFontHeight;
43 qreal StandardGraphicsModule::sPinFontAscent;
44 qreal StandardGraphicsModule::sPinFontDescent;
45 qreal StandardGraphicsModule::sPinFontBaseline;
47 qreal StandardGraphicsModule::sInnerNameTypeSpacing = 1.2;
48 qreal StandardGraphicsModule::sOuterNameTypeSpacing = 3;
50 const int StandardGraphicsModule::sIconPadding = 3;
51 const QSize StandardGraphicsModule::sIconSize(sColorBarHeight - 2 * sIconPadding, sColorBarHeight - 2 * sIconPadding);
52 QPixmap* StandardGraphicsModule::sIconInstance =
nullptr;
54 const QPixmap& StandardGraphicsModule::iconPixmap()
58 return *sIconInstance;
71 for (
int iline = 0; iline < 3; iline++)
73 sTextFont[iline] = font;
75 sTextFontHeight[iline] = fmf.
height();
81 sPinFontHeight = pin_fm.
height();
82 sPinFontAscent = pin_fm.
ascent();
83 sPinFontDescent = pin_fm.
descent();
92 if (
sLod <= graph_widget_constants::sGateMaxLod)
93 sAlpha = 1 - (
sLod - graph_widget_constants::sGateMinLod) / (graph_widget_constants::sGateMaxLod - graph_widget_constants::sGateMinLod);
100 format(adjust_size_to_grid);
107 if (
sLod < graph_widget_constants::sGateMinLod)
125 for (
int iline = 0; iline < 3; iline++)
129 painter->
setFont(sTextFont[iline]);
137 QPointF text_pos(sPinOuterHorizontalSpacing, sColorBarHeight + sPinUpperVerticalSpacing + sPinFontAscent + sBaseline);
150 text_pos.
setY(text_pos.
y() + sPinFontHeight + sPinInnerVerticalSpacing);
166 if (
sLod < graph_widget_constants::sGateMaxLod)
230 return (sPinFontHeight + sPinInnerVerticalSpacing);
235 return (sColorBarHeight + sPinUpperVerticalSpacing + sPinFontHeight / 2);
244 void StandardGraphicsModule::format(
const bool& adjust_size_to_grid)
246 qreal textWidth[3] = {0, 0, 0};
247 for (
int iline = 0; iline < 3; iline++)
250 textWidth[iline] = fmf.width(
mNodeText[iline]);
254 qreal max_pin_width = 0;
258 qreal
width = pin_fm.width(input_pin.name);
259 if (
width > max_pin_width)
260 max_pin_width =
width;
265 qreal
width = pin_fm.width(output_pin.name);
266 if (
width > max_pin_width)
267 max_pin_width =
width;
270 qreal total_input_pin_height = 0;
273 total_input_pin_height =
mInputPins.size() * sPinFontHeight + (
mInputPins.size() - 1) * sPinInnerVerticalSpacing + sPinUpperVerticalSpacing + sPinLowerVerticalSpacing;
275 qreal total_output_pin_height = 0;
278 total_output_pin_height =
279 mOutputPins.size() * sPinFontHeight + (
mOutputPins.size() - 1) * sPinInnerVerticalSpacing + sPinUpperVerticalSpacing + sPinLowerVerticalSpacing;
281 qreal max_pin_height = std::max(total_input_pin_height, total_output_pin_height);
282 qreal min_body_height = sInnerNameTypeSpacing + 2 * sOuterNameTypeSpacing;
283 qreal maxTextWidth = 0;
284 for (
int iline = 0; iline < 3; iline++)
286 if (iline != 2 || !
mNodeText[iline].isEmpty())
287 min_body_height += sTextFontHeight[iline];
288 if (maxTextWidth < textWidth[iline])
289 maxTextWidth = textWidth[iline];
292 mWidth = max_pin_width * 2 + sPinInnerHorizontalSpacing * 2 + sPinOuterHorizontalSpacing * 2 + maxTextWidth;
293 mHeight = std::max(max_pin_height, min_body_height) + sColorBarHeight;
295 if (adjust_size_to_grid)
297 int floored_width =
static_cast<int>(
mWidth);
298 int quotient = floored_width / graph_widget_constants::sGridSize;
300 if (
mWidth > quotient * graph_widget_constants::sGridSize)
301 mWidth = (quotient + 1) * graph_widget_constants::sGridSize;
303 int floored_height =
static_cast<int>(
mHeight);
304 quotient = floored_height / graph_widget_constants::sGridSize;
306 if (
mHeight > quotient * graph_widget_constants::sGridSize)
307 mHeight = (quotient + 1) * graph_widget_constants::sGridSize;
310 qreal ytext = std::max(
mHeight / 2 - sTextFontHeight[0] * 3 / 2 - sInnerNameTypeSpacing / 2, sColorBarHeight + sOuterNameTypeSpacing);
312 for (
int iline = 0; iline < 3; iline++)
314 ytext += sTextFontHeight[iline];
315 mTextPosition[iline].
setX(
mWidth / 2 - textWidth[iline] / 2);
316 mTextPosition[iline].
setY(ytext);
317 ytext += sInnerNameTypeSpacing / 2;
320 qreal
y = sColorBarHeight + sPinUpperVerticalSpacing + sPinFontAscent + sBaseline;
324 qreal
x =
mWidth - (pin_fm.size(0, output_pin.name).rwidth() + sPinOuterHorizontalSpacing);
326 y += (sPinFontHeight + sPinInnerVerticalSpacing);
static QColor sSelectionColor
QColor selectionColor() const
static QColor sHighlightColor
QColor penColor(QStyle::State state, const QColor &colorHint=QColor()) const
QColor groupingColor() const
Abstract base class for modules.
QVector< ModulePin > mOutputPins
QVector< ModulePin > mInputPins
virtual QRectF boundingRect() const override
static GraphicsQssAdapter * instance()
ItemType focusType() const
Subfocus subfocus() const
u32 subfocusIndex() const
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=nullptr) override
QPointF getOutputScenePosition(const u32 mNetId, const QString &pin_type) const override
float yEndpointDistance() const override
float yTopPinDistance() const override
QPointF endpointPositionByIndex(int index, bool isInput) const override
QPointF getInputScenePosition(const u32 mNetId, const QString &pin_type) const override
static void loadSettings()
StandardGraphicsModule(Module *m, bool adjust_size_to_grid=true)
static void updateAlpha()
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
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)
void append(const T &value)
const T & at(int i) const const