// Aseprite UI Library // Copyright (C) 2001-2017 David Capello // // This file is released under the terms of the MIT license. // Read LICENSE.txt for more information. #ifndef UI_SCROLL_BAR_H_INCLUDED #define UI_SCROLL_BAR_H_INCLUDED #pragma once #include "ui/widget.h" namespace ui { class ScrollableViewDelegate { public: virtual ~ScrollableViewDelegate() { } virtual gfx::Size visibleSize() const = 0; virtual gfx::Point viewScroll() const = 0; virtual void setViewScroll(const gfx::Point& pt) = 0; }; class ScrollBar : public Widget { public: ScrollBar(int align, ScrollableViewDelegate* delegate); Style* thumbStyle() { return m_thumbStyle; } void setThumbStyle(Style* style) { m_thumbStyle = style; } int getBarWidth() const { return m_barWidth; } void setBarWidth(int barWidth) { m_barWidth = barWidth; } int getPos() const { return m_pos; } void setPos(int pos); int size() const { return m_size; } void setSize(int size); // For themes void getScrollBarThemeInfo(int* pos, int* len); protected: // Events bool onProcessMessage(Message* msg) override; void onInitTheme(InitThemeEvent& ev) override; void onPaint(PaintEvent& ev) override; private: void getScrollBarInfo(int* _pos, int* _len, int* _bar_size, int* _viewport_size); ScrollableViewDelegate* m_delegate; Style* m_thumbStyle; int m_barWidth; int m_pos; int m_size; static int m_wherepos; static int m_whereclick; }; } // namespace ui #endif