diff --git a/ui/effects/cross_animation.cpp b/ui/effects/cross_animation.cpp index 61084d7..4b6f7f9 100644 --- a/ui/effects/cross_animation.cpp +++ b/ui/effects/cross_animation.cpp @@ -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 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); diff --git a/ui/style/style_core_scale.h b/ui/style/style_core_scale.h index a92c786..93ac4da 100644 --- a/ui/style/style_core_scale.h +++ b/ui/style/style_core_scale.h @@ -44,6 +44,18 @@ template return ConvertScale(value, Scale()); } +template +[[nodiscard]] inline T ConvertScaleExact(T value, int scale) { + return (value < 0.) + ? (-ConvertScale(-value, scale)) + : T(double(value) * scale / 100.); +} + +template +[[nodiscard]] inline T ConvertScaleExact(T value) { + return ConvertScaleExact(value, Scale()); +} + [[nodiscard]] inline QSize ConvertScale(QSize size) { return QSize(ConvertScale(size.width()), ConvertScale(size.height())); } diff --git a/ui/widgets/widgets.style b/ui/widgets/widgets.style index 8e236b8..173bc1b 100644 --- a/ui/widgets/widgets.style +++ b/ui/widgets/widgets.style @@ -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;