fix press repeat of button

This commit is contained in:
Adam D. Ruppe 2022-07-09 10:28:51 -04:00
parent 7cf46ec976
commit 6ab96abdaa
1 changed files with 33 additions and 13 deletions

View File

@ -223,7 +223,7 @@ unittest {
auto hello = new TextLabel("Hello, world!", TextAlignment.Center, window); auto hello = new TextLabel("Hello, world!", TextAlignment.Center, window);
auto button = new Button("Close", window); auto button = new Button("Close", window);
button.addEventListener((scope ClickEvent ev) { button.addWhenTriggered({
window.close(); window.close();
}); });
@ -1300,6 +1300,21 @@ class Widget : ReflectableProperties {
}, useCapture); }, useCapture);
} }
/// ditto
EventListener addDirectEventListener(Handler)(Handler handler, bool useCapture = false) {
static if(is(Handler Fn == delegate)) {
static if(is(Fn Params == __parameters)) {
return addEventListener(EventString!(Params[0]), (Widget, Event e) {
if(e.srcElement !is this)
return;
auto ty = cast(Params[0]) e;
if(ty !is null)
handler(ty);
}, useCapture);
} else static assert(0);
} else static assert(0, "Your handler wasn't usable because it wasn't passed a delegate. Use the delegate keyword at the call site.");
}
/// ditto /// ditto
@scriptable @scriptable
EventListener addEventListener(string event, void delegate() handler, bool useCapture = false) { EventListener addEventListener(string event, void delegate() handler, bool useCapture = false) {
@ -2640,7 +2655,7 @@ void setClickRepeat(Widget w, int interval, int delay = 250) {
immutable originalDelayRemaining = delayRemaining; immutable originalDelayRemaining = delayRemaining;
w.addDirectEventListener("mousedown", (Event ev) { w.addDirectEventListener((scope MouseDownEvent ev) {
if(ev.srcElement !is w) if(ev.srcElement !is w)
return; return;
if(timer !is null) { if(timer !is null) {
@ -2652,13 +2667,13 @@ void setClickRepeat(Widget w, int interval, int delay = 250) {
if(delayRemaining > 0) if(delayRemaining > 0)
delayRemaining--; delayRemaining--;
else { else {
auto ev = new ClickEvent(w); auto ev = new Event("triggered", w);
ev.sendDirectly(); ev.sendDirectly();
} }
}); });
}); });
w.addDirectEventListener("mouseup", (Event ev) { w.addDirectEventListener((scope MouseUpEvent ev) {
if(ev.srcElement !is w) if(ev.srcElement !is w)
return; return;
if(timer !is null) { if(timer !is null) {
@ -2667,7 +2682,7 @@ void setClickRepeat(Widget w, int interval, int delay = 250) {
} }
}); });
w.addDirectEventListener("mouseleave", (Event ev) { w.addDirectEventListener((scope MouseLeaveEvent ev) {
if(ev.srcElement !is w) if(ev.srcElement !is w)
return; return;
if(timer !is null) { if(timer !is null) {
@ -8178,6 +8193,11 @@ class Window : Widget {
this(width, height, title); this(width, height, title);
} }
///
@property string title() { return parentWindow.win.title; }
///
@property void title(string title) { parentWindow.win.title = title; }
/// ///
@scriptable @scriptable
void close() { void close() {
@ -9636,18 +9656,18 @@ class MainWindow : Window {
} }
private StatusBar _statusBar; private StatusBar _statusBar;
/// /++
Returns the window's [StatusBar]. Be warned it may be `null`.
+/
@property StatusBar statusBar() { return _statusBar; } @property StatusBar statusBar() { return _statusBar; }
/// /// ditto
@property void statusBar(StatusBar bar) { @property void statusBar(StatusBar bar) {
if(_statusBar !is null)
_statusBar.removeWidget();
_statusBar = bar; _statusBar = bar;
super.addChild(_statusBar); if(bar !is null)
super.addChild(_statusBar);
} }
///
@property string title() { return parentWindow.win.title; }
///
@property void title(string title) { parentWindow.win.title = title; }
} }
/+ /+