diff --git a/ui/layers/box_content.cpp b/ui/layers/box_content.cpp index 6eeca0e..c2b765f 100644 --- a/ui/layers/box_content.cpp +++ b/ui/layers/box_content.cpp @@ -42,7 +42,7 @@ QPointer BoxContent::addLeftButton( } void BoxContent::setInner(object_ptr inner) { - setInner(std::move(inner), st::boxLayerScroll); + setInner(std::move(inner), st::boxScroll); } void BoxContent::setInner(object_ptr inner, const style::ScrollArea &st) { diff --git a/ui/layers/box_content.h b/ui/layers/box_content.h index 6551f87..6d49519 100644 --- a/ui/layers/box_content.h +++ b/ui/layers/box_content.h @@ -19,6 +19,7 @@ namespace style { struct RoundButton; struct IconButton; struct ScrollArea; +struct Box; } // namespace style namespace Ui { @@ -43,6 +44,7 @@ class BoxContent; class BoxContentDelegate { public: virtual void setLayerType(bool layerType) = 0; + virtual void setStyle(const style::Box &st) = 0; virtual void setTitle(rpl::producer title) = 0; virtual void setAdditionalTitle(rpl::producer additional) = 0; virtual void setCloseByOutsideClick(bool close) = 0; @@ -157,6 +159,9 @@ public: void updateButtonsGeometry() { getDelegate()->updateButtonsPositions(); } + void setStyle(const style::Box &st) { + getDelegate()->setStyle(st); + } virtual void setInnerFocus() { setFocus(); diff --git a/ui/layers/box_layer_widget.cpp b/ui/layers/box_layer_widget.cpp index a1e233b..d16a3b9 100644 --- a/ui/layers/box_layer_widget.cpp +++ b/ui/layers/box_layer_widget.cpp @@ -67,32 +67,36 @@ void BoxLayerWidget::setLayerType(bool layerType) { } int BoxLayerWidget::titleHeight() const { - return _layerType ? st::boxLayerTitleHeight : st::boxTitleHeight; + return st::boxTitleHeight; +} + +const style::Box &BoxLayerWidget::st() const { + return _st + ? *_st + : _layerType + ? st::layerBox + : st::defaultBox; +} + +void BoxLayerWidget::setStyle(const style::Box &st) { + _st = &st; } int BoxLayerWidget::buttonsHeight() const { - const auto padding = _layerType - ? st::boxLayerButtonPadding - : st::boxButtonPadding; - return padding.top() + st::defaultBoxButton.height + padding.bottom(); + const auto padding = st().buttonPadding; + return padding.top() + st().buttonHeight + padding.bottom(); } int BoxLayerWidget::buttonsTop() const { - const auto padding = _layerType - ? st::boxLayerButtonPadding - : st::boxButtonPadding; - return height() - padding.bottom() - st::defaultBoxButton.height; + const auto padding = st().buttonPadding; + return height() - padding.bottom() - st().buttonHeight; } QRect BoxLayerWidget::loadingRect() const { - const auto padding = _layerType - ? st::boxLayerButtonPadding - : st::boxButtonPadding; + const auto padding = st().buttonPadding; const auto size = st::boxLoadingSize; - const auto skipx = _layerType - ? st::boxLayerTitlePosition.x() - : st::boxTitlePosition.x(); - const auto skipy = (st::defaultBoxButton.height - size) / 2; + const auto skipx = st::boxTitlePosition.x(); + const auto skipy = (st().buttonHeight - size) / 2; return QRect( skipx, height() - padding.bottom() - skipy - size, @@ -132,9 +136,9 @@ void BoxLayerWidget::paintEvent(QPaintEvent *e) { } void BoxLayerWidget::paintAdditionalTitle(Painter &p) { - p.setFont(st::boxLayerTitleAdditionalFont); + p.setFont(st::boxTitleAdditionalFont); p.setPen(st::boxTitleAdditionalFg); - p.drawTextLeft(_titleLeft + (_title ? _title->width() : 0) + st::boxLayerTitleAdditionalSkip, _titleTop + st::boxTitleFont->ascent - st::boxLayerTitleAdditionalFont->ascent, width(), _additionalTitle.current()); + p.drawTextLeft(_titleLeft + (_title ? _title->width() : 0) + st::boxTitleAdditionalSkip, _titleTop + st::boxTitleFont->ascent - st::boxTitleAdditionalFont->ascent, width(), _additionalTitle.current()); } void BoxLayerWidget::parentResized() { @@ -193,7 +197,7 @@ void BoxLayerWidget::updateSize() { void BoxLayerWidget::updateButtonsPositions() { if (!_buttons.empty() || _leftButton) { - auto padding = _layerType ? st::boxLayerButtonPadding : st::boxButtonPadding; + auto padding = st().buttonPadding; auto right = padding.right(); auto top = buttonsTop(); if (_leftButton) { @@ -214,8 +218,8 @@ QPointer BoxLayerWidget::outerContainer() { } void BoxLayerWidget::updateTitlePosition() { - _titleLeft = _layerType ? st::boxLayerTitlePosition.x() : st::boxTitlePosition.x(); - _titleTop = _layerType ? st::boxLayerTitlePosition.y() : st::boxTitlePosition.y(); + _titleLeft = st::boxTitlePosition.x(); + _titleTop = st::boxTitlePosition.y(); if (_title) { _title->resizeToWidth(qMin(_title->naturalWidth(), width() - _titleLeft * 2)); _title->moveToLeft(_titleLeft, _titleTop); diff --git a/ui/layers/box_layer_widget.h b/ui/layers/box_layer_widget.h index f823d43..0313b66 100644 --- a/ui/layers/box_layer_widget.h +++ b/ui/layers/box_layer_widget.h @@ -23,6 +23,7 @@ namespace style { struct RoundButton; struct IconButton; struct ScrollArea; +struct Box; } // namespace style namespace Ui { @@ -43,6 +44,7 @@ public: void parentResized() override; void setLayerType(bool layerType) override; + void setStyle(const style::Box &st) override; void setTitle(rpl::producer title) override; void setAdditionalTitle(rpl::producer additional) override; void showBox( @@ -107,6 +109,7 @@ private: void paintAdditionalTitle(Painter &p); void updateTitlePosition(); + [[nodiscard]] const style::Box &st() const; [[nodiscard]] bool hasTitle() const; [[nodiscard]] int titleHeight() const; [[nodiscard]] int buttonsHeight() const; @@ -117,6 +120,7 @@ private: [[nodiscard]] QRect loadingRect() const; void updateSize(); + const style::Box *_st = nullptr; not_null _layer; int _fullHeight = 0; diff --git a/ui/layers/layers.style b/ui/layers/layers.style index a7cae08..0b22d9b 100644 --- a/ui/layers/layers.style +++ b/ui/layers/layers.style @@ -21,6 +21,11 @@ ServiceCheck { duration: int; } +Box { + buttonPadding: margins; + buttonHeight: pixels; +} + boxDuration: 200; boxRadius: 3px; @@ -82,11 +87,9 @@ boxTitle: FlatLabel(defaultFlatLabel) { } boxTitlePosition: point(23px, 16px); boxTitleHeight: 56px; -boxLayerTitlePosition: point(23px, 16px); -boxLayerTitleHeight: 56px; -boxLayerTitleAdditionalSkip: 9px; -boxLayerTitleAdditionalFont: normalFont; -boxLayerScroll: defaultSolidScroll; +boxTitleAdditionalSkip: 9px; +boxTitleAdditionalFont: normalFont; +boxScroll: defaultSolidScroll; boxRowPadding: margins(23px, 0px, 23px, 0px); @@ -123,8 +126,13 @@ boxMaxListHeight: 492px; boxLittleSkip: 10px; boxMediumSkip: 20px; -boxButtonPadding: margins(8px, 12px, 13px, 12px); -boxLayerButtonPadding: margins(8px, 8px, 8px, 8px); +defaultBox: Box { + buttonPadding: margins(8px, 12px, 13px, 12px); + buttonHeight: 36px; +} +layerBox: Box(defaultBox) { + buttonPadding: margins(8px, 8px, 8px, 8px); +} boxLabel: FlatLabel(defaultFlatLabel) { minWidth: 274px; align: align(topleft);