示例#1
0
  Console_State::Console_State()
    : m_virtual_screen(Point2f(0.0f, 0.0f), Point2f(float(get_Window().get_width() * 600.0f / get_Window().get_height()), 600.0f)),
    m_projector(m_virtual_screen),
    m_bg(Vertex2f_Color(Point2f(0.0f, 0.0f), get_Colors()["console_border"]),
         Vertex2f_Color(Point2f(0.0f, 54.0f + 7.0f * get_Fonts()["system_36_x600"].get_text_height()), get_Colors()["console_border"]),
         Vertex2f_Color(Point2f(m_virtual_screen.second.x, 54.0f + 7.0f * get_Fonts()["system_36_x600"].get_text_height()), get_Colors()["console_border"]),
         Vertex2f_Color(Point2f(m_virtual_screen.second.x, 0.0f), get_Colors()["console_border"])),
    m_log(Point2f(18.0f, 18.0f),
          Point2f(m_virtual_screen.second.x - 18.0f,
                  18.0f + 6.0f * get_Fonts()["system_36_x600"].get_text_height()),
          "system_36_x600",
          "",
          get_Colors()["console_foreground"],
          false),
    m_prompt(Point2f(18.0f, 36.0f + 6.0f * get_Fonts()["system_36_x600"].get_text_height()),
             Point2f(m_virtual_screen.second.x - 18.0f,
                     36.0f + 7.0f * get_Fonts()["system_36_x600"].get_text_height()),
             "system_36_x600",
             "",
             get_Colors()["console_foreground"],
             true),
    m_log_dirty(false),
    m_child(0)
  {
    m_functions["args"] = new Console_Function;

    m_log.give_BG_Renderer(new Widget_Renderer_Color(get_Colors()["console_background"]));
    m_prompt.give_BG_Renderer(new Widget_Renderer_Color(get_Colors()["console_background"]));
  }
 void Logo::create_thick_line(const Point2f &p0, const Point2f &p1, const float &thickness, const Color &color) {
   const Vector3f n = (vector_k % (Vector3f(p1.x, p1.y, 0.0f) - Vector3f(p0.x, p0.y, 0.0f))).normalized() * thickness;
   Quadrilateral<Vertex2f_Color> q( (Vertex2f_Color(Point2f(p0.x - n.x, p0.y - n.y), color)) ,
                                    (Vertex2f_Color(Point2f(p0.x + n.x, p0.y + n.y), color)) ,
                                    (Vertex2f_Color(Point2f(p1.x + n.x, p1.y + n.y), color)) ,
                                    (Vertex2f_Color(Point2f(p1.x - n.x, p1.y - n.y), color)) );
   Material m("", color);
   q.fax_Material(&m);
   m_vbo->fax_quadrilateral(&q);
 }
  void Logo::create_circle(const Point2f &p, const float &radius, const Color &color, const size_t &segments, const size_t &begin, const size_t &end) {
    const float arc = 2.0f * pi / segments;
    Triangle<Vertex2f_Color> t(Vertex2f_Color(p, color),
                               Vertex2f_Color(Point2f(), color),
                               Vertex2f_Color(Point2f(), color));
    Material m("", color);
    t.fax_Material(&m);

    for(size_t i = begin; i != segments && i != end; ++i) {
      t.b.position.x = p.x - radius * sin(arc * i);
      t.b.position.y = p.y - radius * cos(arc * i);
      t.c.position.x = p.x - radius * sin(arc * (i + 1));
      t.c.position.y = p.y - radius * cos(arc * (i + 1));
      m_vbo->fax_triangle(&t);
    }
  }
  void Logo::create_hollow_ellipse(const Point2f &p, const Point2f &inner_radius, const Point2f &outer_radius, const Color &color, const size_t &segments, const size_t &begin, const size_t &end) {
    const float arc = 2.0f * pi / segments;
    Quadrilateral<Vertex2f_Color> q(Vertex2f_Color(p, color),
                                    Vertex2f_Color(p, color),
                                    Vertex2f_Color(p, color),
                                    Vertex2f_Color(p, color));
    Material m("", color);
    q.fax_Material(&m);

    for(size_t i = begin; i != segments && i != end; ++i) {
      q.a.position.x = p.x - inner_radius.x * sin(arc * i);
      q.a.position.y = p.y - inner_radius.y * cos(arc * i);
      q.b.position.x = p.x - outer_radius.x * sin(arc * i);
      q.b.position.y = p.y - outer_radius.y * cos(arc * i);
      q.c.position.x = p.x - outer_radius.x * sin(arc * (i + 1));
      q.c.position.y = p.y - outer_radius.y * cos(arc * (i + 1));
      q.d.position.x = p.x - inner_radius.x * sin(arc * (i + 1));
      q.d.position.y = p.y - inner_radius.y * cos(arc * (i + 1));
      m_vbo->fax_quadrilateral(&q);
    }
  }