aaaa
This commit is contained in:
parent
72720d216d
commit
2423645222
2 changed files with 66 additions and 0 deletions
33
src/ScrollContainer.cpp
Normal file
33
src/ScrollContainer.cpp
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#include "ScrollContainer.hpp"
|
||||||
|
#include "src/Styles.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace Raven {
|
||||||
|
|
||||||
|
void ScrollContainer::on_layout() {
|
||||||
|
if (!m_target)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_target->rect().set_x(-m_scroll.x());
|
||||||
|
m_target->rect().set_y(-m_scroll.y());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<Widget> ScrollContainer::make_target() {
|
||||||
|
m_target = add<Raven::Widget>();
|
||||||
|
m_target->set_style(style());
|
||||||
|
m_target->rect().update();
|
||||||
|
|
||||||
|
return m_target;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScrollContainer::on_mouse_button(MouseButtonEvent &event) {
|
||||||
|
if (event.did_scroll_down()) {
|
||||||
|
set_scroll(Point(m_scroll.x(), m_scroll.y() + m_scroll_step));
|
||||||
|
} else if (event.did_scroll_up()) {
|
||||||
|
set_scroll(Point(m_scroll.x(), m_scroll.y() - m_scroll_step));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
33
src/ScrollContainer.hpp
Normal file
33
src/ScrollContainer.hpp
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Widget.hpp"
|
||||||
|
#include "src/Point.hpp"
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace Raven {
|
||||||
|
|
||||||
|
class ScrollContainer : public Widget {
|
||||||
|
public:
|
||||||
|
ScrollContainer()
|
||||||
|
: Widget() {}
|
||||||
|
|
||||||
|
void set_scroll(Point scroll) { m_scroll = scroll; reflow(); }
|
||||||
|
Point &scroll() { return m_scroll; }
|
||||||
|
|
||||||
|
std::shared_ptr<Widget> make_target();
|
||||||
|
void set_target(std::shared_ptr<Widget> target) { m_target = target; }
|
||||||
|
std::shared_ptr<Widget> target() { return m_target; }
|
||||||
|
|
||||||
|
void set_scroll_step(double scroll_step) { m_scroll_step = scroll_step; }
|
||||||
|
double scroll_step() { return m_scroll_step; }
|
||||||
|
protected:
|
||||||
|
void on_layout();
|
||||||
|
void on_mouse_button(MouseButtonEvent &event);
|
||||||
|
private:
|
||||||
|
double m_scroll_step { 5.0 };
|
||||||
|
Point m_scroll { 0, 0 };
|
||||||
|
std::shared_ptr<Widget> m_target { nullptr };
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue