Rev 2097 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* button.cc
* DIN Is Noise is copyright (c) 2006-2025 Jagannathan Sampath
* DIN Is Noise is released under GNU Public License 2.0
* For more information, please visit https://dinisnoise.org/
*/
#include "button.h"
#include "font.h"
#include "chrono.h"
#include "input.h"
#include "log.h"
using std::string;
button::button () {
lsnr = 0;
start_time = 0;
click = 0;
click_repeat = 0;
first_repeat_time = 1. / 4;
subsequent_repeat_time = 1. / 16;
}
void button::draw () { label::draw (); }
int button::handle_input () {
widget::handle_input ();
if (lmb) {
if (hover) {
widget::focus = this;
if (click == 0) {
if (click_repeat) {
start_time = ui_clk ();
repeat_time = first_repeat_time;
}
click = 1;
call_listener ();
return click;
}
if (click_repeat) {
double now = ui_clk ();
double dt = now - start_time;
if (dt >= repeat_time) {
call_listener ();
repeat_time = subsequent_repeat_time;
start_time = now;
}
}
}
} else {
if (click) {
click = 0;
repeat_time = first_repeat_time;
defocus (this);
}
}
return click;
}
int button::call_listener () {
if (lsnr) {
lsnr->clicked (*this);
return 1;
}
return 0;
}