Ticket #71: redraw.diff
| File redraw.diff, 7.1 KB (added by rakshasa, 6 years ago) |
|---|
-
rtorrent/src/control.cc
92 92 display::Window::slot_unschedule(rak::make_mem_fun(m_display, &display::Manager::unschedule)); 93 93 display::Window::slot_adjust(rak::make_mem_fun(m_display, &display::Manager::adjust_layout)); 94 94 95 m_core->get_poll_manager()->signal_interrupted().connect(sigc::mem_fun(*m_inputStdin, &input::InputEvent::event_read));96 m_core->get_poll_manager()->signal_interrupted().connect(sigc::ptr_fun(display::Canvas::do_update));95 // m_core->get_poll_manager()->signal_interrupted().connect(sigc::mem_fun(*m_inputStdin, &input::InputEvent::event_read)); 96 // m_core->get_poll_manager()->signal_interrupted().connect(sigc::ptr_fun(display::Canvas::do_update)); 97 97 m_core->get_poll_manager()->get_http_stack()->set_user_agent(std::string(PACKAGE "/" VERSION "/") + torrent::version()); 98 98 99 99 m_core->initialize_second(); -
rtorrent/src/display/canvas.cc
36 36 37 37 #include "config.h" 38 38 39 #include <unistd.h> 40 #include <sys/ioctl.h> 41 39 42 #include "canvas.h" 40 43 41 44 namespace display { … … 74 77 endwin(); 75 78 } 76 79 80 std::pair<int, int> 81 Canvas::term_size() { 82 struct winsize ws; 83 84 if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) == 0) 85 return std::pair<int, int>(ws.ws_col, ws.ws_row); 86 else 87 return std::pair<int, int>(80, 24); 77 88 } 89 90 } -
rtorrent/src/display/manager.h
64 64 Manager(); 65 65 ~Manager(); 66 66 67 void force_redraw(); 68 67 69 iterator insert(iterator pos, Window* w); 68 70 iterator erase(iterator pos); 69 71 iterator erase(Window* w); … … 80 82 81 83 void schedule_update(); 82 84 85 bool m_forceRedraw; 83 86 rak::timer m_timeLastUpdate; 84 87 85 88 rak::priority_queue_default m_scheduler; -
rtorrent/src/display/canvas.h
51 51 void refresh() { wnoutrefresh(m_window); } 52 52 static void refresh_std() { wnoutrefresh(stdscr); } 53 53 void redraw() { redrawwin(m_window); } 54 static void redraw_std() { redrawwin(stdscr); } 54 55 55 56 void resize(int w, int h) { wresize(m_window, h, w); } 56 57 void resize(int x, int y, int w, int h); 57 58 59 static void resize_term(int x, int y) { resizeterm(y, x); } 60 static void resize_term(std::pair<int, int> dim) { resizeterm(dim.second, dim.first); } 61 58 62 int get_x() { int x, y; getyx(m_window, y, x); return x; } 59 63 int get_y() { int x, y; getyx(m_window, y, x); return y; } 60 64 int get_width() { int x, y; getmaxyx(m_window, y, x); return x; } … … 116 120 static int get_screen_width() { int x, y; getmaxyx(stdscr, y, x); return x; } 117 121 static int get_screen_height() { int x, y; getmaxyx(stdscr, y, x); return y; } 118 122 123 static std::pair<int, int> term_size(); 124 119 125 static void do_update() { doupdate(); } 120 126 121 127 private: -
rtorrent/src/display/manager.cc
47 47 48 48 namespace display { 49 49 50 Manager::Manager() { 50 Manager::Manager() : 51 m_forceRedraw(false) { 51 52 m_taskUpdate.set_slot(rak::mem_fn(this, &Manager::receive_update)); 52 53 } 53 54 … … 55 56 priority_queue_erase(&taskScheduler, &m_taskUpdate); 56 57 } 57 58 59 void 60 Manager::force_redraw() { 61 m_forceRedraw = true; 62 } 63 64 58 65 Manager::iterator 59 66 Manager::insert(iterator pos, Window* w) { 60 67 return Base::insert(pos, w); … … 125 132 h += (*itr)->get_min_height(); 126 133 127 134 (*itr)->resize(0, height, Canvas::get_screen_width(), h); 135 (*itr)->redraw(); 128 136 (*itr)->mark_dirty(); 129 137 } 130 138 } 131 139 132 140 void 133 141 Manager::receive_update() { 142 if (m_forceRedraw) { 143 m_forceRedraw = false; 144 145 display::Canvas::resize_term(display::Canvas::term_size()); 146 Canvas::redraw_std(); 147 adjust_layout(); 148 } 149 134 150 Canvas::refresh_std(); 135 151 136 152 rak::priority_queue_perform(&m_scheduler, cachedTime); -
rtorrent/src/main.cc
167 167 initialize_option_handler(control); 168 168 169 169 SignalHandler::set_ignore(SIGPIPE); 170 SignalHandler::set_handler(SIGINT, sigc::mem_fun(control, &Control::receive_shutdown)); 171 SignalHandler::set_handler(SIGSEGV, sigc::bind(sigc::ptr_fun(&do_panic), SIGSEGV)); 172 SignalHandler::set_handler(SIGBUS, sigc::bind(sigc::ptr_fun(&do_panic), SIGBUS)); 173 SignalHandler::set_handler(SIGFPE, sigc::bind(sigc::ptr_fun(&do_panic), SIGFPE)); 170 SignalHandler::set_handler(SIGINT, sigc::mem_fun(control, &Control::receive_shutdown)); 171 SignalHandler::set_handler(SIGWINCH, sigc::mem_fun(control->display(), &display::Manager::force_redraw)); 172 SignalHandler::set_handler(SIGSEGV, sigc::bind(sigc::ptr_fun(&do_panic), SIGSEGV)); 173 SignalHandler::set_handler(SIGBUS, sigc::bind(sigc::ptr_fun(&do_panic), SIGBUS)); 174 SignalHandler::set_handler(SIGFPE, sigc::bind(sigc::ptr_fun(&do_panic), SIGFPE)); 174 175 175 176 control->core()->initialize_first(); 176 177 -
rtorrent/src/ui/root.cc
108 108 m_bindings['D'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_down_throttle), 50); 109 109 m_bindings['C'] = sigc::bind(sigc::mem_fun(*this, &Root::adjust_down_throttle), -50); 110 110 111 m_bindings[KEY_RESIZE] = sigc::mem_fun(*m_control->display(), &display::Manager::adjust_layout); 112 m_bindings['\x11'] = sigc::mem_fun(*m_control, &Control::receive_shutdown); 111 //m_bindings[KEY_RESIZE] = sigc::mem_fun(*m_control->display(), &display::Manager::adjust_layout); 112 m_bindings['\x0C'] = sigc::mem_fun(m_control->display(), &display::Manager::force_redraw); 113 m_bindings['\x11'] = sigc::mem_fun(m_control, &Control::receive_shutdown); 113 114 } 114 115 115 116 void
