Merge pull request #490 from naydef/master

Make buttons disableable for custom drawn buttons
This commit is contained in:
Adam D. Ruppe 2025-04-10 07:33:55 -04:00 committed by GitHub
commit a36955032d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 15 additions and 4 deletions

View File

@ -883,6 +883,7 @@ class Widget : ReflectableProperties {
EnableWindow(hwnd, yes); EnableWindow(hwnd, yes);
} }
setDynamicState(DynamicState.disabled, yes); setDynamicState(DynamicState.disabled, yes);
redraw();
} }
private string disabledReason_; private string disabledReason_;
@ -13019,6 +13020,8 @@ class MouseActivatedWidget : Widget {
super.defaultEventHandler_keyup(ev); super.defaultEventHandler_keyup(ev);
if(!(dynamicState & DynamicState.depressed)) if(!(dynamicState & DynamicState.depressed))
return; return;
if(!enabled)
return;
setDynamicState(DynamicState.depressed, false); setDynamicState(DynamicState.depressed, false);
setDynamicState(DynamicState.hover, false); setDynamicState(DynamicState.hover, false);
this.redraw(); this.redraw();
@ -13028,7 +13031,7 @@ class MouseActivatedWidget : Widget {
} }
override void defaultEventHandler_click(ClickEvent ev) { override void defaultEventHandler_click(ClickEvent ev) {
super.defaultEventHandler_click(ev); super.defaultEventHandler_click(ev);
if(ev.button == MouseButton.left) { if(ev.button == MouseButton.left && enabled) {
auto event = new Event(EventType.triggered, this); auto event = new Event(EventType.triggered, this);
event.sendDirectly(); event.sendDirectly();
} }
@ -13551,18 +13554,25 @@ class Button : MouseActivatedWidget {
auto cs = widget.getComputedStyle(); // FIXME: this is potentially recursive auto cs = widget.getComputedStyle(); // FIXME: this is potentially recursive
auto pressed = DynamicState.depressed | DynamicState.hover; auto pressed = DynamicState.depressed | DynamicState.hover;
if((widget.dynamicState & pressed) == pressed) { if((widget.dynamicState & pressed) == pressed && widget.enabled) {
return WidgetBackground(cs.depressedButtonColor()); return WidgetBackground(cs.depressedButtonColor());
} else if(widget.dynamicState & DynamicState.hover) { } else if(widget.dynamicState & DynamicState.hover && widget.enabled) {
return WidgetBackground(cs.hoveringColor()); return WidgetBackground(cs.hoveringColor());
} else { } else {
return WidgetBackground(cs.buttonColor()); return WidgetBackground(cs.buttonColor());
} }
} }
override Color foregroundColor() {
auto clr = super.foregroundColor();
if(widget.enabled) return clr;
return Color(clr.r, clr.g, clr.b, clr.a / 2);
}
override FrameStyle borderStyle() { override FrameStyle borderStyle() {
auto pressed = DynamicState.depressed | DynamicState.hover; auto pressed = DynamicState.depressed | DynamicState.hover;
if((widget.dynamicState & pressed) == pressed) { if((widget.dynamicState & pressed) == pressed && widget.enabled) {
return FrameStyle.sunk; return FrameStyle.sunk;
} else { } else {
return FrameStyle.risen; return FrameStyle.risen;
@ -13587,6 +13597,7 @@ class Button : MouseActivatedWidget {
Point pos = bounds.upperLeft; Point pos = bounds.upperLeft;
if(this.height == 16) if(this.height == 16)
pos.y -= 2; // total hack omg pos.y -= 2; // total hack omg
painter.drawText(pos, label, bounds.lowerRight, alignment | TextAlignment.VerticalCenter); painter.drawText(pos, label, bounds.lowerRight, alignment | TextAlignment.VerticalCenter);
} }
return bounds; return bounds;