guiscrollable.h File Reference

Go to the documentation of this file. Source: include/ffw/gui/guiscrollable.h

/* This file is part of FineFramework project */
#ifndef FFW_GUI_SCROLLABLE
#define FFW_GUI_SCROLLABLE
#include "guiwidget.h"
#include "guiscrollbar.h"
#include "guilayout.h"
namespace ffw {
    class FFW_API GuiScrollable : public GuiWidget {
    public:
        struct Style {
            GuiScrollBar::Style scrollbarV;
            GuiScrollBar::Style scrollbarH;
            GuiWidget::Style self;
        };

        GuiScrollable(GuiWindow* context, GuiWidget* widget, bool hori, bool vert);
        virtual ~GuiScrollable() = default;
        ffw::Pointf getMinimumWrapSize() override;
        void setScrollbarThickness(float px);
        void setScrollValues(float hori, float vert);
        ffw::Pointf getScrollValues() const;
        inline float getScrollbarThickness() const {
            return thickness;
        }
        inline ffw::GuiScrollBar* getVscroll() {
            return vscroll;
        }
        inline const ffw::GuiScrollBar* getVscroll() const {
            return vscroll;
        }
        inline ffw::GuiScrollBar* getHscroll() {
            return hscroll;
        }
        inline const ffw::GuiScrollBar* getHscroll() const {
            return hscroll;
        }
        inline void setScrollIncrements(const float inc) {
            scrollInc = inc;
        }
        inline float getScrollIncrements() const {
            return scrollInc;
        }
        void setStyle(const GuiScrollable::Style* style, bool defaults = false);
    protected:
        inline ffw::GuiWidget* getInnerAsWidget() {
            return inner;
        }
        inline const ffw::GuiWidget* getInnerAsWidget() const {
            return inner;
        }
    private:
        void widgetEvent(GuiEvent e);
        void eventRender(const ffw::Pointf& contentoffset, const ffw::Pointf& contentsize) override;
        bool eventScroll(const ffw::Pointf& scroll) override;
        void eventSize(const ffw::Pointf& size) override;
        void eventThemeChanged(const GuiTheme* theme, bool defaults) override;
        ffw::GuiScrollBar* vscroll;
        ffw::GuiScrollBar* hscroll;
        ffw::GuiWidget* inner;
        float thickness;
        float scrollInc;
    };
    class FFW_API GuiScrollableLayout : public GuiScrollable {
    public:
        struct Style {
            GuiScrollable::Style self;
            GuiLayout::Style inner;
        };
        GuiScrollableLayout(GuiWindow* context, GuiOrientation orientation, bool hori, bool vert);
        virtual ~GuiScrollableLayout() = default;
        inline GuiLayout* getInner(){
            return dynamic_cast<ffw::GuiLayout*>(getInnerAsWidget());
        }
        inline const GuiLayout* getInner() const{
            return dynamic_cast<const ffw::GuiLayout*>(getInnerAsWidget());
        }
        void eventThemeChanged(const GuiTheme* theme, bool defaults) override;
        void setStyle(const GuiScrollableLayout::Style* style, bool defaults = false);
    };
}
#endif