fix timers support; add timer example

This commit is contained in:
Vadim Lopatin 2015-01-28 15:46:11 +03:00
parent 1377556d92
commit e63a9b0b2a
2 changed files with 46 additions and 3 deletions

View File

@ -45,6 +45,42 @@ Widget createAboutWidget()
return res;
}
class TimerTest : HorizontalLayout {
ulong timerId;
TextWidget _counter;
int _value;
Button _start;
Button _stop;
override bool onTimer(ulong id) {
_value++;
_counter.text = to!dstring(_value);
return true;
}
this() {
addChild(new TextWidget(null, "Timer test."d));
_counter = new TextWidget(null, "0"d);
_counter.fontSize(32);
_start = new Button(null, "Start timer"d);
_stop = new Button(null, "Stop timer"d);
_stop.enabled = false;
_start.onClickListener = delegate(Widget src) {
_start.enabled = false;
_stop.enabled = true;
timerId = setTimer(1000);
return true;
};
_stop.onClickListener = delegate(Widget src) {
_start.enabled = true;
_stop.enabled = false;
cancelTimer(timerId);
return true;
};
addChild(_start);
addChild(_stop);
addChild(_counter);
}
}
class AnimatedDrawable : Drawable {
DrawableRef background;
this() {
@ -375,6 +411,7 @@ extern (C) int UIAppMain(string[] args) {
layout.addChild((new TextWidget()).textColor(0x00802000).text("Text widget 0"));
layout.addChild((new TextWidget()).textColor(0x40FF4000).text("Text widget"));
layout.addChild((new Button("BTN1")).textResource("EXIT")); //.textColor(0x40FF4000)
layout.addChild(new TimerTest());
static if (true) {

View File

@ -891,7 +891,9 @@ class Window {
}
/// cancel timer
void cancelTimer(ulong timerId) {
for (size_t i = _queue.length - 1; i >= 0; i--) {
if (!_queue.length)
return;
for (int i = cast(int)_queue.length - 1; i >= 0; i--) {
if (_queue[i].id == timerId) {
_queue[i].cancel();
break;
@ -908,9 +910,11 @@ class Window {
return delta;
}
private void cleanup() {
if (!_queue.length)
return;
sort(_queue);
size_t newsize = 0;
for (size_t i = _queue.length - 1; i >= 0; i--) {
size_t newsize = _queue.length;
for (int i = cast(int)_queue.length - 1; i >= 0; i--) {
if (!_queue[i].valid) {
newsize = i;
}
@ -919,6 +923,8 @@ class Window {
_queue.length = newsize;
}
private TimerInfo[] expired() {
if (!_queue.length)
return null;
long ts = currentTimeMillis;
TimerInfo[] res;
for (int i = 0; i < _queue.length; i++) {