#pragma once #include "lumacs/buffer.hpp" #include #include #include namespace lumacs { struct Viewport { int width = 0; int height = 0; int scroll_offset = 0; }; class Window { public: Window(std::shared_ptr buffer); void set_buffer(std::shared_ptr buffer); // Accessors std::shared_ptr buffer_ptr() const { return buffer_; } Buffer& buffer() { return *buffer_; } const Buffer& buffer() const { return *buffer_; } void set_cursor(Position pos); Position cursor() const { return cursor_; } // Movement void move_up(); void move_down(); void move_left(); void move_right(); void move_to_line_start(); void move_to_line_end(); // Viewport void set_viewport_size(int width, int height); const Viewport& viewport() const { return viewport_; } void adjust_scroll(); std::pair visible_line_range() const; private: void clamp_cursor(); std::shared_ptr buffer_; Position cursor_; Viewport viewport_; static constexpr int SCROLL_MARGIN = 3; }; } // namespace lumacs