65 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "panel.hpp"
 | |
| #include "dbc.hpp"
 | |
| 
 | |
| void Panel::resize(int w, int h) {
 | |
|   $dirty = true;
 | |
|   width = w;
 | |
|   height = h;
 | |
|   $screen = Screen(width, height);
 | |
| }
 | |
| 
 | |
| void Panel::set_renderer(Component renderer) {
 | |
|   $dirty = true;
 | |
|   $component = renderer;
 | |
| }
 | |
| 
 | |
| void Panel::add(Component child) {
 | |
|   dbc::pre("must set_renderer first", $component != nullptr);
 | |
|   $dirty = true;
 | |
|   $component->Add(child);
 | |
| }
 | |
| 
 | |
| void Panel::render() {
 | |
|   $dirty = true;
 | |
|   if(must_clear) $screen.Clear();
 | |
|   Render($screen, $component->Render());
 | |
| }
 | |
| 
 | |
| const std::wstring& Panel::to_string() {
 | |
|   if($dirty) {
 | |
|     std::string as_text = $screen.ToString();
 | |
|     $screenout = $converter.from_bytes(as_text);
 | |
|     $dirty = false;
 | |
|   }
 | |
| 
 | |
|   return $screenout;
 | |
| }
 | |
| 
 | |
| void Panel::mouse_click(ftxui::Mouse::Button btn, Point pos) {
 | |
|   fmt::println("CLICK AT {},{}", pos.x, pos.y);
 | |
|   ftxui::Mouse mev{
 | |
|     .button=btn,
 | |
|     .motion=ftxui::Mouse::Motion::Pressed,
 | |
|     .x=int(pos.x), .y=int(pos.y)
 | |
|   };
 | |
| 
 | |
|   $component->OnEvent(ftxui::Event::Mouse("", mev));
 | |
| }
 | |
| 
 | |
| void Panel::mouse_release(ftxui::Mouse::Button btn, Point pos) {
 | |
|   ftxui::Mouse mev{
 | |
|     .button=btn,
 | |
|     .motion=ftxui::Mouse::Motion::Released,
 | |
|     .x=int(pos.x), .y=int(pos.y)
 | |
|   };
 | |
| 
 | |
|   $component->OnEvent(ftxui::Event::Mouse("", mev));
 | |
| }
 | |
| 
 | |
| const Screen& Panel::screen() {
 | |
|   return $screen;
 | |
| }
 | |
| 
 | |
| void Panel::key_press(ftxui::Event event) {
 | |
|   $component->OnEvent(event);
 | |
| }
 | 
