Made DIP body widget height dynamic, along with indicator sizes.
This commit is contained in:
@@ -2,10 +2,26 @@
|
|||||||
|
|
||||||
using namespace Bloom::Widgets::InsightTargetWidgets::Dip;
|
using namespace Bloom::Widgets::InsightTargetWidgets::Dip;
|
||||||
|
|
||||||
BodyWidget::BodyWidget(QWidget* parent): QWidget(parent) {
|
BodyWidget::BodyWidget(QWidget* parent, std::size_t pinCount): QWidget(parent) {
|
||||||
this->setObjectName("target-body");
|
this->setObjectName("target-body");
|
||||||
|
this->setFixedHeight(
|
||||||
|
std::min(
|
||||||
|
BodyWidget::MAXIMUM_BODY_HEIGHT,
|
||||||
|
std::max(
|
||||||
|
BodyWidget::MINIMUM_BODY_HEIGHT,
|
||||||
|
static_cast<int>(std::ceil(3.6 * static_cast<double>(pinCount)))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
this->setFixedHeight(BodyWidget::HEIGHT);
|
this->firstPinIndicatorDiameter = std::min(
|
||||||
|
BodyWidget::MAXIMUM_FIRST_PIN_INDICATOR_HEIGHT,
|
||||||
|
std::max(BodyWidget::MINIMUM_FIRST_PIN_INDICATOR_HEIGHT, static_cast<int>(std::floor(pinCount / 2)))
|
||||||
|
);
|
||||||
|
|
||||||
|
this->orientationIndicatorDiameter = this->firstPinIndicatorDiameter % 2 == 0 ?
|
||||||
|
this->firstPinIndicatorDiameter + 3
|
||||||
|
: this->firstPinIndicatorDiameter + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BodyWidget::paintEvent(QPaintEvent* event) {
|
void BodyWidget::paintEvent(QPaintEvent* event) {
|
||||||
@@ -15,10 +31,35 @@ void BodyWidget::paintEvent(QPaintEvent* event) {
|
|||||||
|
|
||||||
void BodyWidget::drawWidget(QPainter& painter) {
|
void BodyWidget::drawWidget(QPainter& painter) {
|
||||||
painter.setRenderHints(QPainter::RenderHint::Antialiasing | QPainter::RenderHint::SmoothPixmapTransform, true);
|
painter.setRenderHints(QPainter::RenderHint::Antialiasing | QPainter::RenderHint::SmoothPixmapTransform, true);
|
||||||
|
const auto bodyHeight = this->height();
|
||||||
|
const auto bodyRect = QRectF(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
this->width(),
|
||||||
|
bodyHeight
|
||||||
|
);
|
||||||
|
|
||||||
// Draw target body
|
// The first pin indicator is just a circle positioned close to the first pin
|
||||||
|
const auto firstPinIndicatorRect = QRectF(
|
||||||
|
6,
|
||||||
|
(bodyHeight - this->firstPinIndicatorDiameter - 6),
|
||||||
|
this->firstPinIndicatorDiameter,
|
||||||
|
this->firstPinIndicatorDiameter
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The orientation indicator is just a half-circle cut-out, positioned on the side of the DIP package closest to
|
||||||
|
* the first pin.
|
||||||
|
*/
|
||||||
|
const auto orientationIndicatorRect = QRectF(
|
||||||
|
- (this->orientationIndicatorDiameter / 2),
|
||||||
|
(bodyHeight / 2) - (this->orientationIndicatorDiameter / 2),
|
||||||
|
this->orientationIndicatorDiameter,
|
||||||
|
this->orientationIndicatorDiameter
|
||||||
|
);
|
||||||
|
|
||||||
|
static const auto backgroundColor = QColor(0x37, 0x38, 0x35);
|
||||||
auto targetBodyColor = this->getBodyColor();
|
auto targetBodyColor = this->getBodyColor();
|
||||||
auto backgroundColor = QColor(0x37, 0x38, 0x35);
|
|
||||||
|
|
||||||
if (!this->isEnabled()) {
|
if (!this->isEnabled()) {
|
||||||
targetBodyColor.setAlpha(this->getDisableAlphaLevel());
|
targetBodyColor.setAlpha(this->getDisableAlphaLevel());
|
||||||
@@ -26,32 +67,8 @@ void BodyWidget::drawWidget(QPainter& painter) {
|
|||||||
|
|
||||||
painter.setPen(Qt::PenStyle::NoPen);
|
painter.setPen(Qt::PenStyle::NoPen);
|
||||||
painter.setBrush(targetBodyColor);
|
painter.setBrush(targetBodyColor);
|
||||||
|
painter.drawRect(bodyRect);
|
||||||
auto targetBodyPoint = QPoint(
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
|
|
||||||
painter.drawRect(
|
|
||||||
targetBodyPoint.x(),
|
|
||||||
targetBodyPoint.y(),
|
|
||||||
this->width(),
|
|
||||||
BodyWidget::HEIGHT
|
|
||||||
);
|
|
||||||
|
|
||||||
painter.setPen(Qt::PenStyle::NoPen);
|
|
||||||
painter.setBrush(backgroundColor);
|
painter.setBrush(backgroundColor);
|
||||||
painter.drawEllipse(QRectF(
|
painter.drawEllipse(firstPinIndicatorRect);
|
||||||
targetBodyPoint.x() + 10,
|
painter.drawEllipse(orientationIndicatorRect);
|
||||||
targetBodyPoint.y() + (BodyWidget::HEIGHT - 30),
|
|
||||||
18,
|
|
||||||
18
|
|
||||||
));
|
|
||||||
|
|
||||||
painter.drawEllipse(QRectF(
|
|
||||||
targetBodyPoint.x() - 15,
|
|
||||||
targetBodyPoint.y() + (BodyWidget::HEIGHT / 2) - 15,
|
|
||||||
24,
|
|
||||||
24
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,9 +12,7 @@ namespace Bloom::Widgets::InsightTargetWidgets::Dip
|
|||||||
Q_PROPERTY(int disableAlphaLevel READ getDisableAlphaLevel WRITE setDisableAlphaLevel DESIGNABLE true)
|
Q_PROPERTY(int disableAlphaLevel READ getDisableAlphaLevel WRITE setDisableAlphaLevel DESIGNABLE true)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static constexpr int HEIGHT = 130;
|
explicit BodyWidget(QWidget* parent, std::size_t pinCount);
|
||||||
|
|
||||||
explicit BodyWidget(QWidget* parent);
|
|
||||||
|
|
||||||
[[nodiscard]] QColor getBodyColor() const {
|
[[nodiscard]] QColor getBodyColor() const {
|
||||||
return this->bodyColor;
|
return this->bodyColor;
|
||||||
@@ -37,8 +35,15 @@ namespace Bloom::Widgets::InsightTargetWidgets::Dip
|
|||||||
void drawWidget(QPainter& painter);
|
void drawWidget(QPainter& painter);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static constexpr int MAXIMUM_BODY_HEIGHT = 156;
|
||||||
|
static constexpr int MINIMUM_BODY_HEIGHT = 80;
|
||||||
|
static constexpr int MAXIMUM_FIRST_PIN_INDICATOR_HEIGHT = 16;
|
||||||
|
static constexpr int MINIMUM_FIRST_PIN_INDICATOR_HEIGHT = 12;
|
||||||
|
|
||||||
// These properties can be modified via Qt style sheets (see Stylesheets/DualInlinePackage.qss)
|
// These properties can be modified via Qt style sheets (see Stylesheets/DualInlinePackage.qss)
|
||||||
QColor bodyColor = QColor("#8E8B83");
|
QColor bodyColor = QColor("#8E8B83");
|
||||||
int disableAlphaLevel = 100;
|
int disableAlphaLevel = 100;
|
||||||
|
int firstPinIndicatorDiameter = 14;
|
||||||
|
int orientationIndicatorDiameter = 16;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,15 +52,24 @@ DualInlinePackageWidget::DualInlinePackageWidget(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->bodyWidget = new BodyWidget(this, targetVariant.pinDescriptorsByNumber.size());
|
||||||
|
|
||||||
this->layout->addLayout(this->topPinLayout);
|
this->layout->addLayout(this->topPinLayout);
|
||||||
this->bodyWidget = new BodyWidget(this);
|
|
||||||
this->layout->addWidget(this->bodyWidget, 0, Qt::AlignmentFlag::AlignVCenter);
|
this->layout->addWidget(this->bodyWidget, 0, Qt::AlignmentFlag::AlignVCenter);
|
||||||
this->layout->addLayout(this->bottomPinLayout);
|
this->layout->addLayout(this->bottomPinLayout);
|
||||||
this->setLayout(this->layout);
|
this->setLayout(this->layout);
|
||||||
|
|
||||||
|
const auto bodyWidgetHeight = this->bodyWidget->height();
|
||||||
const auto bodyWidgetWidth = ((PinWidget::MINIMUM_WIDTH + PinWidget::WIDTH_SPACING)
|
const auto bodyWidgetWidth = ((PinWidget::MINIMUM_WIDTH + PinWidget::WIDTH_SPACING)
|
||||||
* static_cast<int>(this->pinWidgets.size() / 2)) - PinWidget::WIDTH_SPACING + 46;
|
* static_cast<int>(this->pinWidgets.size() / 2)) - PinWidget::WIDTH_SPACING + 46;
|
||||||
|
|
||||||
|
this->bodyWidget->setGeometry(
|
||||||
|
0,
|
||||||
|
PinWidget::MAXIMUM_HEIGHT + PinWidget::WIDTH_SPACING,
|
||||||
|
bodyWidgetWidth,
|
||||||
|
bodyWidgetHeight
|
||||||
|
);
|
||||||
|
|
||||||
const auto width = bodyWidgetWidth;
|
const auto width = bodyWidgetWidth;
|
||||||
const auto height = (
|
const auto height = (
|
||||||
(
|
(
|
||||||
@@ -68,19 +77,13 @@ DualInlinePackageWidget::DualInlinePackageWidget(
|
|||||||
+ PinWidget::PIN_LABEL_SHORT_LINE_LENGTH + (
|
+ PinWidget::PIN_LABEL_SHORT_LINE_LENGTH + (
|
||||||
(PinWidget::LABEL_HEIGHT + PinWidget::PIN_LABEL_SPACING) * 2
|
(PinWidget::LABEL_HEIGHT + PinWidget::PIN_LABEL_SPACING) * 2
|
||||||
)
|
)
|
||||||
) * 2) + BodyWidget::HEIGHT;
|
) * 2) + bodyWidgetHeight;
|
||||||
|
|
||||||
this->bodyWidget->setGeometry(
|
|
||||||
0,
|
|
||||||
PinWidget::MAXIMUM_HEIGHT + PinWidget::WIDTH_SPACING,
|
|
||||||
width,
|
|
||||||
BodyWidget::HEIGHT
|
|
||||||
);
|
|
||||||
this->topPinLayout->setGeometry(QRect(0, 0, width, PinWidget::MAXIMUM_HEIGHT));
|
this->topPinLayout->setGeometry(QRect(0, 0, width, PinWidget::MAXIMUM_HEIGHT));
|
||||||
this->bottomPinLayout->setGeometry(
|
this->bottomPinLayout->setGeometry(
|
||||||
QRect(
|
QRect(
|
||||||
0,
|
0,
|
||||||
(PinWidget::MAXIMUM_HEIGHT + BodyWidget::HEIGHT + (PinWidget::WIDTH_SPACING * 2)),
|
(PinWidget::MAXIMUM_HEIGHT + bodyWidgetHeight + (PinWidget::WIDTH_SPACING * 2)),
|
||||||
width,
|
width,
|
||||||
PinWidget::MAXIMUM_HEIGHT
|
PinWidget::MAXIMUM_HEIGHT
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user