#pragma once #include <QWidget> #include <boost/optional.hpp> #include <pajlada/signals/signal.hpp> #include <pajlada/signals/signalholder.hpp> namespace AB_NAMESPACE { class Theme; class BaseWindow; class BaseWidget : public QWidget { Q_OBJECT public: explicit BaseWidget(QWidget *parent, Qt::WindowFlags f = Qt::WindowFlags()); virtual float scale() const; pajlada::Signals::Signal<float> scaleChanged; boost::optional<float> overrideScale() const; void setOverrideScale(boost::optional<float>); QSize scaleIndependantSize() const; int scaleIndependantWidth() const; int scaleIndependantHeight() const; void setScaleIndependantSize(int width, int height); void setScaleIndependantSize(QSize); void setScaleIndependantWidth(int value); void setScaleIndependantHeight(int value); float qtFontScale() const; protected: virtual void childEvent(QChildEvent *) override; virtual void showEvent(QShowEvent *) override; virtual void scaleChangedEvent(float newScale); virtual void themeChangedEvent(); void setScale(float value); Theme *theme; private: float scale_{1.f}; boost::optional<float> overrideScale_; QSize scaleIndependantSize_; std::vector<BaseWidget *> widgets_; pajlada::Signals::SignalHolder signalHolder_; friend class BaseWindow; }; } // namespace AB_NAMESPACE