nuclear@0: #include nuclear@2: #include nuclear@0: #include "widget.h" nuclear@2: #include "boolanm.h" nuclear@0: nuclear@0: using namespace gameui; nuclear@0: nuclear@2: struct WidgetImpl { nuclear@0: std::string name_prefix; nuclear@0: std::string name; nuclear@0: BBox box; nuclear@0: nuclear@2: BoolAnim visible, active, press, hover; nuclear@0: }; nuclear@0: nuclear@0: nuclear@0: Widget::Widget() nuclear@0: : name_prefix("widget") nuclear@0: { nuclear@0: static int widget_count; nuclear@0: nuclear@0: std::stringstream sstr; nuclear@0: sstr << name_prefix << widget_count++; nuclear@0: name = sstr.str(); nuclear@0: nuclear@0: box.bmin = Vec2(0, 0); nuclear@0: box.bmax = Vec2(1, 1); nuclear@0: nuclear@0: vis_st = VST_VISIBLE; nuclear@0: act_st = AST_ACTIVE; nuclear@0: nuclear@0: vis = act = 1.0; nuclear@0: } nuclear@0: nuclear@0: Widget::~Widget() nuclear@0: { nuclear@0: } nuclear@0: nuclear@0: void Widget::show() nuclear@0: { nuclear@0: if(vis_st == VST_EASEVISIBLE || vis_st == VST_EASEIN) { nuclear@0: return; nuclear@0: } nuclear@0: nuclear@0: vis_st = VST_EASEIN; nuclear@0: vis_start_time = get_cur_time(); nuclear@0: } nuclear@0: nuclear@0: void Widget::hide() nuclear@0: { nuclear@0: if(vis_st == VST_EASEHIDDEN || vis_st == VST_EASEOUT) { nuclear@0: return; nuclear@0: } nuclear@0: nuclear@0: vis_st = VST_EASEOUT; nuclear@0: vis_start_time = get_cur_time(); nuclear@0: } nuclear@0: nuclear@0: float Widget::get_visibility() const nuclear@0: { nuclear@0: switch(vis_st) { nuclear@0: case VST_EASEIN: nuclear@0: vis = (get_cur_time() - vis_start_time) / gameui::ease_time; nuclear@0: if(vis < 0.0) vis = 0.0; nuclear@0: if(vis > 1.0) vis = 1.0; nuclear@0: break; nuclear@0: nuclear@0: case VST_EASEOUT: nuclear@0: vis = 1.0 - (get_cur_time() - vis_start_time) / gameui::ease_time; nuclear@0: if(vis < 0.0) vis = 0.0; nuclear@0: if(vis > 1.0) vis = 1.0; nuclear@0: break; nuclear@0: nuclear@0: case VST_HIDDEN: nuclear@0: vis = 0.0; nuclear@0: break; nuclear@0: nuclear@0: case VST_VISIBLE: nuclear@0: vis = 1.0; nuclear@0: break; nuclear@0: } nuclear@0: nuclear@0: return vis; nuclear@0: } nuclear@0: nuclear@1: void Widget::activate() nuclear@1: { nuclear@1: } nuclear@1: nuclear@0: #ifdef WIN32 nuclear@0: long gameui::get_cur_time() nuclear@0: { nuclear@0: return GetTickCount(); nuclear@0: } nuclear@0: #endif nuclear@0: nuclear@0: #if defined(__unix__) || defined(__APPLE__) nuclear@0: long gameui::get_cur_time() nuclear@0: { nuclear@0: struct timeval tv; nuclear@0: static struct timeval tv0; nuclear@0: nuclear@0: gettimeofday(&tv, 0); nuclear@0: if(tv0.tv_sec == 0 && tv0.tv_msec == 0) { nuclear@0: tv0 = tv; nuclear@0: return 0; nuclear@0: } nuclear@0: return (tv.tv_sec - tv0.tv_sec) * 1000 + (tv.tv_usec - tv0.tv_usec) / 1000; nuclear@0: } nuclear@0: #endif