make UserInterface unaware of Window, only of DisplayBuffer
This commit is contained in:
parent
48fe18ff0a
commit
a0cca31dc1
|
@ -657,12 +657,14 @@ public:
|
||||||
bool has_key_left() const { return m_pos < m_keys.size(); }
|
bool has_key_left() const { return m_pos < m_keys.size(); }
|
||||||
|
|
||||||
void print_status(const String& , CharCount) override {}
|
void print_status(const String& , CharCount) override {}
|
||||||
void draw_window(Window&) override {}
|
void draw(const DisplayBuffer&, const String&) override {}
|
||||||
void menu_show(const memoryview<String>&,
|
void menu_show(const memoryview<String>&,
|
||||||
const DisplayCoord&, MenuStyle) override {}
|
const DisplayCoord&, MenuStyle) override {}
|
||||||
void menu_select(int) override {}
|
void menu_select(int) override {}
|
||||||
void menu_hide() override {}
|
void menu_hide() override {}
|
||||||
|
|
||||||
|
DisplayCoord dimensions() override { return { 0, 0 }; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const KeyList& m_keys;
|
const KeyList& m_keys;
|
||||||
size_t m_pos;
|
size_t m_pos;
|
||||||
|
|
|
@ -94,7 +94,15 @@ struct Context
|
||||||
void draw_ifn() const
|
void draw_ifn() const
|
||||||
{
|
{
|
||||||
if (has_ui() and has_window())
|
if (has_ui() and has_window())
|
||||||
ui().draw_window(window());
|
{
|
||||||
|
DisplayCoord dimensions = ui().dimensions();
|
||||||
|
if (dimensions == DisplayCoord{0,0})
|
||||||
|
return;
|
||||||
|
window().set_dimensions(dimensions);
|
||||||
|
window().update_display_buffer();;
|
||||||
|
ui().draw(window().display_buffer(), window().status_line());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_status(const String& status) const
|
void print_status(const String& status) const
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "ncurses.hh"
|
#include "ncurses.hh"
|
||||||
|
|
||||||
#include "window.hh"
|
#include "display_buffer.hh"
|
||||||
#include "register_manager.hh"
|
#include "register_manager.hh"
|
||||||
|
|
||||||
#include "utf8_iterator.hh"
|
#include "utf8_iterator.hh"
|
||||||
|
@ -113,18 +113,16 @@ void addutf8str(Utf8Iterator begin, Utf8Iterator end)
|
||||||
addch(*begin++);
|
addch(*begin++);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NCursesUI::draw_window(Window& window)
|
void NCursesUI::draw(const DisplayBuffer& display_buffer,
|
||||||
|
const String& status_line)
|
||||||
{
|
{
|
||||||
int max_x,max_y;
|
int max_x,max_y;
|
||||||
getmaxyx(stdscr, max_y, max_x);
|
getmaxyx(stdscr, max_y, max_x);
|
||||||
max_y -= 1;
|
max_y -= 1;
|
||||||
int status_y = max_y;
|
int status_y = max_y;
|
||||||
|
|
||||||
window.set_dimensions(DisplayCoord(LineCount(max_y), max_x));
|
|
||||||
window.update_display_buffer();
|
|
||||||
|
|
||||||
int line_index = 0;
|
int line_index = 0;
|
||||||
for (const DisplayLine& line : window.display_buffer().lines())
|
for (const DisplayLine& line : display_buffer.lines())
|
||||||
{
|
{
|
||||||
move(line_index, 0);
|
move(line_index, 0);
|
||||||
clrtoeol();
|
clrtoeol();
|
||||||
|
@ -169,7 +167,6 @@ void NCursesUI::draw_window(Window& window)
|
||||||
}
|
}
|
||||||
|
|
||||||
set_color(Color::Cyan, Color::Black);
|
set_color(Color::Cyan, Color::Black);
|
||||||
String status_line = window.status_line();
|
|
||||||
static int last_status_length = 0;
|
static int last_status_length = 0;
|
||||||
move(status_y, max_x - last_status_length);
|
move(status_y, max_x - last_status_length);
|
||||||
clrtoeol();
|
clrtoeol();
|
||||||
|
@ -312,4 +309,11 @@ void NCursesUI::menu_hide()
|
||||||
m_items.clear();
|
m_items.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DisplayCoord NCursesUI::dimensions()
|
||||||
|
{
|
||||||
|
int max_x,max_y;
|
||||||
|
getmaxyx(stdscr, max_y, max_x);
|
||||||
|
return {max_y - 1, max_x};
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,8 @@ public:
|
||||||
NCursesUI(const NCursesUI&) = delete;
|
NCursesUI(const NCursesUI&) = delete;
|
||||||
NCursesUI& operator=(const NCursesUI&) = delete;
|
NCursesUI& operator=(const NCursesUI&) = delete;
|
||||||
|
|
||||||
void draw_window(Window& window) override;
|
void draw(const DisplayBuffer& display_buffer,
|
||||||
|
const String& status_line) override;
|
||||||
void print_status(const String& status, CharCount cursor_pos) override;
|
void print_status(const String& status, CharCount cursor_pos) override;
|
||||||
|
|
||||||
Key get_key() override;
|
Key get_key() override;
|
||||||
|
@ -28,6 +29,8 @@ public:
|
||||||
const DisplayCoord& anchor, MenuStyle style) override;
|
const DisplayCoord& anchor, MenuStyle style) override;
|
||||||
void menu_select(int selected) override;
|
void menu_select(int selected) override;
|
||||||
void menu_hide() override;
|
void menu_hide() override;
|
||||||
|
|
||||||
|
DisplayCoord dimensions() override;
|
||||||
private:
|
private:
|
||||||
MENU* m_menu = nullptr;
|
MENU* m_menu = nullptr;
|
||||||
WINDOW* m_menu_win = nullptr;
|
WINDOW* m_menu_win = nullptr;
|
||||||
|
|
|
@ -10,7 +10,7 @@ namespace Kakoune
|
||||||
{
|
{
|
||||||
|
|
||||||
class String;
|
class String;
|
||||||
class Window;
|
class DisplayBuffer;
|
||||||
class DisplayCoord;
|
class DisplayCoord;
|
||||||
|
|
||||||
enum class MenuStyle
|
enum class MenuStyle
|
||||||
|
@ -28,7 +28,9 @@ public:
|
||||||
const DisplayCoord& anchor, MenuStyle style) = 0;
|
const DisplayCoord& anchor, MenuStyle style) = 0;
|
||||||
virtual void menu_select(int selected) = 0;
|
virtual void menu_select(int selected) = 0;
|
||||||
virtual void menu_hide() = 0;
|
virtual void menu_hide() = 0;
|
||||||
virtual void draw_window(Window& window) = 0;
|
virtual void draw(const DisplayBuffer& display_buffer,
|
||||||
|
const String& status_line) = 0;
|
||||||
|
virtual DisplayCoord dimensions() = 0;
|
||||||
virtual Key get_key() = 0;
|
virtual Key get_key() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user