gameui

annotate src/widget.cc @ 2:e5b1525084f7

boolanim
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 20 Mar 2014 07:03:58 +0200
parents 54ffb1765d39
children f1014234dece
rev   line source
nuclear@0 1 #include <string>
nuclear@2 2 #include <sstream>
nuclear@0 3 #include "widget.h"
nuclear@2 4 #include "boolanm.h"
nuclear@0 5
nuclear@0 6 using namespace gameui;
nuclear@0 7
nuclear@2 8 struct WidgetImpl {
nuclear@0 9 std::string name_prefix;
nuclear@0 10 std::string name;
nuclear@0 11 BBox box;
nuclear@0 12
nuclear@2 13 BoolAnim visible, active, press, hover;
nuclear@0 14 };
nuclear@0 15
nuclear@0 16
nuclear@0 17 Widget::Widget()
nuclear@0 18 : name_prefix("widget")
nuclear@0 19 {
nuclear@0 20 static int widget_count;
nuclear@0 21
nuclear@0 22 std::stringstream sstr;
nuclear@0 23 sstr << name_prefix << widget_count++;
nuclear@0 24 name = sstr.str();
nuclear@0 25
nuclear@0 26 box.bmin = Vec2(0, 0);
nuclear@0 27 box.bmax = Vec2(1, 1);
nuclear@0 28
nuclear@0 29 vis_st = VST_VISIBLE;
nuclear@0 30 act_st = AST_ACTIVE;
nuclear@0 31
nuclear@0 32 vis = act = 1.0;
nuclear@0 33 }
nuclear@0 34
nuclear@0 35 Widget::~Widget()
nuclear@0 36 {
nuclear@0 37 }
nuclear@0 38
nuclear@0 39 void Widget::show()
nuclear@0 40 {
nuclear@0 41 if(vis_st == VST_EASEVISIBLE || vis_st == VST_EASEIN) {
nuclear@0 42 return;
nuclear@0 43 }
nuclear@0 44
nuclear@0 45 vis_st = VST_EASEIN;
nuclear@0 46 vis_start_time = get_cur_time();
nuclear@0 47 }
nuclear@0 48
nuclear@0 49 void Widget::hide()
nuclear@0 50 {
nuclear@0 51 if(vis_st == VST_EASEHIDDEN || vis_st == VST_EASEOUT) {
nuclear@0 52 return;
nuclear@0 53 }
nuclear@0 54
nuclear@0 55 vis_st = VST_EASEOUT;
nuclear@0 56 vis_start_time = get_cur_time();
nuclear@0 57 }
nuclear@0 58
nuclear@0 59 float Widget::get_visibility() const
nuclear@0 60 {
nuclear@0 61 switch(vis_st) {
nuclear@0 62 case VST_EASEIN:
nuclear@0 63 vis = (get_cur_time() - vis_start_time) / gameui::ease_time;
nuclear@0 64 if(vis < 0.0) vis = 0.0;
nuclear@0 65 if(vis > 1.0) vis = 1.0;
nuclear@0 66 break;
nuclear@0 67
nuclear@0 68 case VST_EASEOUT:
nuclear@0 69 vis = 1.0 - (get_cur_time() - vis_start_time) / gameui::ease_time;
nuclear@0 70 if(vis < 0.0) vis = 0.0;
nuclear@0 71 if(vis > 1.0) vis = 1.0;
nuclear@0 72 break;
nuclear@0 73
nuclear@0 74 case VST_HIDDEN:
nuclear@0 75 vis = 0.0;
nuclear@0 76 break;
nuclear@0 77
nuclear@0 78 case VST_VISIBLE:
nuclear@0 79 vis = 1.0;
nuclear@0 80 break;
nuclear@0 81 }
nuclear@0 82
nuclear@0 83 return vis;
nuclear@0 84 }
nuclear@0 85
nuclear@1 86 void Widget::activate()
nuclear@1 87 {
nuclear@1 88 }
nuclear@1 89
nuclear@0 90 #ifdef WIN32
nuclear@0 91 long gameui::get_cur_time()
nuclear@0 92 {
nuclear@0 93 return GetTickCount();
nuclear@0 94 }
nuclear@0 95 #endif
nuclear@0 96
nuclear@0 97 #if defined(__unix__) || defined(__APPLE__)
nuclear@0 98 long gameui::get_cur_time()
nuclear@0 99 {
nuclear@0 100 struct timeval tv;
nuclear@0 101 static struct timeval tv0;
nuclear@0 102
nuclear@0 103 gettimeofday(&tv, 0);
nuclear@0 104 if(tv0.tv_sec == 0 && tv0.tv_msec == 0) {
nuclear@0 105 tv0 = tv;
nuclear@0 106 return 0;
nuclear@0 107 }
nuclear@0 108 return (tv.tv_sec - tv0.tv_sec) * 1000 + (tv.tv_usec - tv0.tv_usec) / 1000;
nuclear@0 109 }
nuclear@0 110 #endif