void Console_State::perform_logic() {
    m_virtual_screen = std::make_pair(Point2f(0.0f, 0.0f), Point2f(float(get_Window().get_width() * 600.0f / get_Window().get_height()), 600.0f));
    m_projector = Projector2D(m_virtual_screen);

    if(m_bg.c.position.x != m_virtual_screen.second.x) {
      m_bg.c.position.x = m_virtual_screen.second.x;
      m_bg.d.position.x = m_virtual_screen.second.x;

      const float right = m_virtual_screen.second.x - 18.0f;
      m_log.set_lower_right(Point2f(right, m_log.get_lower_right().y));
      m_prompt.set_lower_right(Point2f(right, m_prompt.get_lower_right().y));
    }

    m_child->perform_logic();
  }
 void Widget_Gamestate::perform_logic() {
   m_projector = Projector2D(m_virtual_window, get_Video().get_viewport());
 }
  void Widget_Gamestate::perform_logic() {
    m_viewport = get_Video().calculate_viewport(m_virtual_window, std::make_pair(Point2i(), get_Window().get_size()), m_fix_aspect_ratio);
    m_projector = Projector2D(m_virtual_window, m_viewport);

    m_widgets.perform_logic();
  }