Allow fractional stroke values in CrossAnimation.
This commit is contained in:
parent
ec7af74351
commit
bd7c4ee06d
3 changed files with 30 additions and 14 deletions
|
|
@ -120,14 +120,18 @@ void CrossAnimation::paint(
|
|||
float64 loading) {
|
||||
PainterHighQualityEnabler hq(p);
|
||||
|
||||
auto sqrt2 = sqrt(2.);
|
||||
auto deleteScale = shown + st.minScale * (1. - shown);
|
||||
auto deleteSkip = (deleteScale * st.skip) + (1. - deleteScale) * (st.size / 2);
|
||||
auto deleteLeft = style::rtlpoint(x + deleteSkip, 0, outerWidth).x() + 0.;
|
||||
auto deleteTop = y + deleteSkip + 0.;
|
||||
auto deleteWidth = st.size - 2 * deleteSkip;
|
||||
auto deleteHeight = st.size - 2 * deleteSkip;
|
||||
auto deleteStroke = st.stroke / sqrt2;
|
||||
const auto stroke = style::ConvertScaleExact(st.stroke);
|
||||
|
||||
const auto sqrt2 = sqrt(2.);
|
||||
const auto deleteScale = shown + st.minScale * (1. - shown);
|
||||
const auto deleteSkip = (deleteScale * st.skip)
|
||||
+ (1. - deleteScale) * (st.size / 2);
|
||||
const auto deleteLeft = 0.
|
||||
+ style::rtlpoint(x + deleteSkip, 0, outerWidth).x();
|
||||
const auto deleteTop = y + deleteSkip + 0.;
|
||||
const auto deleteWidth = st.size - 2 * deleteSkip;
|
||||
const auto deleteHeight = st.size - 2 * deleteSkip;
|
||||
const auto deleteStroke = stroke / sqrt2;
|
||||
std::array<QPointF, kPointCount> pathDelete = { {
|
||||
{ deleteLeft, deleteTop + deleteStroke },
|
||||
{ deleteLeft + deleteStroke, deleteTop },
|
||||
|
|
@ -176,10 +180,10 @@ void CrossAnimation::paint(
|
|||
p.fillPath(path, color);
|
||||
}
|
||||
if (loadingArcLength != 0) {
|
||||
auto roundSkip = (st.size * (1 - sqrt2) + 2 * sqrt2 * deleteSkip + st.stroke) / 2;
|
||||
auto roundSkip = (st.size * (1 - sqrt2) + 2 * sqrt2 * deleteSkip + stroke) / 2;
|
||||
auto roundPart = QRectF(x + roundSkip, y + roundSkip, st.size - 2 * roundSkip, st.size - 2 * roundSkip);
|
||||
if (staticLoading) {
|
||||
anim::DrawStaticLoading(p, roundPart, st.stroke, color);
|
||||
anim::DrawStaticLoading(p, roundPart, stroke, color);
|
||||
} else {
|
||||
auto loadingArcStart = kFullArcLength / 8;
|
||||
if (shown < 1.) {
|
||||
|
|
@ -192,7 +196,7 @@ void CrossAnimation::paint(
|
|||
|
||||
p.setBrush(Qt::NoBrush);
|
||||
auto pen = color->p;
|
||||
pen.setWidthF(st.stroke);
|
||||
pen.setWidthF(stroke);
|
||||
pen.setCapStyle(Qt::RoundCap);
|
||||
p.setPen(pen);
|
||||
p.drawArc(roundPart, loadingArcStart, loadingArcLength);
|
||||
|
|
|
|||
|
|
@ -44,6 +44,18 @@ template <typename T>
|
|||
return ConvertScale(value, Scale());
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
[[nodiscard]] inline T ConvertScaleExact(T value, int scale) {
|
||||
return (value < 0.)
|
||||
? (-ConvertScale(-value, scale))
|
||||
: T(double(value) * scale / 100.);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
[[nodiscard]] inline T ConvertScaleExact(T value) {
|
||||
return ConvertScaleExact(value, Scale());
|
||||
}
|
||||
|
||||
[[nodiscard]] inline QSize ConvertScale(QSize size) {
|
||||
return QSize(ConvertScale(size.width()), ConvertScale(size.height()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -386,7 +386,7 @@ CrossAnimation {
|
|||
fg: color;
|
||||
size: pixels;
|
||||
skip: pixels;
|
||||
stroke: pixels;
|
||||
stroke: double;
|
||||
minScale: double;
|
||||
}
|
||||
|
||||
|
|
@ -923,7 +923,7 @@ defaultMultiSelectItem: MultiSelectItem {
|
|||
deleteCross: CrossAnimation {
|
||||
size: 32px;
|
||||
skip: 10px;
|
||||
stroke: 2px;
|
||||
stroke: 1.5;
|
||||
minScale: 0.3;
|
||||
}
|
||||
duration: 150;
|
||||
|
|
@ -959,7 +959,7 @@ defaultMultiSelectSearchCancel: CrossButton {
|
|||
cross: CrossAnimation {
|
||||
size: 36px;
|
||||
skip: 12px;
|
||||
stroke: 2px;
|
||||
stroke: 1.5;
|
||||
minScale: 0.3;
|
||||
}
|
||||
crossFg: boxTitleCloseFg;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue