From 45daf12ab13a07479c83244ee34069eb7d26d22b Mon Sep 17 00:00:00 2001 From: naydef Date: Tue, 8 Apr 2025 13:58:32 +0000 Subject: [PATCH 1/2] Make buttons disableable --- minigui.d | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/minigui.d b/minigui.d index 0274c5d..7f695a6 100644 --- a/minigui.d +++ b/minigui.d @@ -13019,6 +13019,8 @@ class MouseActivatedWidget : Widget { super.defaultEventHandler_keyup(ev); if(!(dynamicState & DynamicState.depressed)) return; + if(!enabled) + return; setDynamicState(DynamicState.depressed, false); setDynamicState(DynamicState.hover, false); this.redraw(); @@ -13028,7 +13030,7 @@ class MouseActivatedWidget : Widget { } override void defaultEventHandler_click(ClickEvent ev) { super.defaultEventHandler_click(ev); - if(ev.button == MouseButton.left) { + if(ev.button == MouseButton.left && enabled) { auto event = new Event(EventType.triggered, this); event.sendDirectly(); } @@ -13551,18 +13553,25 @@ class Button : MouseActivatedWidget { auto cs = widget.getComputedStyle(); // FIXME: this is potentially recursive auto pressed = DynamicState.depressed | DynamicState.hover; - if((widget.dynamicState & pressed) == pressed) { + if((widget.dynamicState & pressed) == pressed && widget.enabled) { return WidgetBackground(cs.depressedButtonColor()); - } else if(widget.dynamicState & DynamicState.hover) { + } else if(widget.dynamicState & DynamicState.hover && widget.enabled) { return WidgetBackground(cs.hoveringColor()); } else { 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() { auto pressed = DynamicState.depressed | DynamicState.hover; - if((widget.dynamicState & pressed) == pressed) { + if((widget.dynamicState & pressed) == pressed && widget.enabled) { return FrameStyle.sunk; } else { return FrameStyle.risen; @@ -13587,6 +13596,7 @@ class Button : MouseActivatedWidget { Point pos = bounds.upperLeft; if(this.height == 16) pos.y -= 2; // total hack omg + painter.drawText(pos, label, bounds.lowerRight, alignment | TextAlignment.VerticalCenter); } return bounds; From bd91ca8b01c699654c29c9a5133731a2b0f9cdba Mon Sep 17 00:00:00 2001 From: naydef Date: Tue, 8 Apr 2025 18:05:45 +0000 Subject: [PATCH 2/2] Method 1 for redrawing --- minigui.d | 1 + 1 file changed, 1 insertion(+) diff --git a/minigui.d b/minigui.d index 7f695a6..4d4b7b4 100644 --- a/minigui.d +++ b/minigui.d @@ -883,6 +883,7 @@ class Widget : ReflectableProperties { EnableWindow(hwnd, yes); } setDynamicState(DynamicState.disabled, yes); + redraw(); } private string disabledReason_;