diff --git a/src/openrct2-ui/interface/Window.cpp b/src/openrct2-ui/interface/Window.cpp index f18bef82ec..2752f254eb 100644 --- a/src/openrct2-ui/interface/Window.cpp +++ b/src/openrct2-ui/interface/Window.cpp @@ -737,6 +737,16 @@ void Window::SetWidgetDisabled(WidgetIndex widgetIndex, bool value) WidgetSetDisabled(*this, widgetIndex, value); } +void Window::SetWidgetDisabledAndInvalidate(WidgetIndex widgetIndex, bool value) +{ + bool oldState = IsWidgetDisabled(widgetIndex); + if (oldState != value) + { + WidgetSetDisabled(*this, widgetIndex, value); + InvalidateWidget(widgetIndex); + } +} + void Window::SetWidgetPressed(WidgetIndex widgetIndex, bool value) { WidgetSetPressed(*this, widgetIndex, value); diff --git a/src/openrct2-ui/interface/Window.h b/src/openrct2-ui/interface/Window.h index 31a3f60ad0..1a672fb3bc 100644 --- a/src/openrct2-ui/interface/Window.h +++ b/src/openrct2-ui/interface/Window.h @@ -24,6 +24,7 @@ struct Window : WindowBase bool IsWidgetPressed(WidgetIndex widgetIndex) const; void SetWidgetEnabled(WidgetIndex widgetIndex, bool value); void SetWidgetDisabled(WidgetIndex widgetIndex, bool value); + void SetWidgetDisabledAndInvalidate(WidgetIndex widgetIndex, bool value); void SetWidgetPressed(WidgetIndex widgetIndex, bool value); void SetCheckboxValue(WidgetIndex widgetIndex, bool value); void DrawWidgets(DrawPixelInfo& dpi); diff --git a/src/openrct2-ui/windows/TileInspector.cpp b/src/openrct2-ui/windows/TileInspector.cpp index f262e925e7..0462e1d73a 100644 --- a/src/openrct2-ui/windows/TileInspector.cpp +++ b/src/openrct2-ui/windows/TileInspector.cpp @@ -506,8 +506,9 @@ public: // Check if the mouse is hovering over the list if (!WidgetIsHighlighted(*this, WIDX_LIST)) { + if (_highlightedIndex != -1) + InvalidateWidget(WIDX_LIST); _highlightedIndex = -1; - InvalidateWidget(WIDX_LIST); } if (gCurrentToolWidget.window_classification != WindowClass::TileInspector) Close(); @@ -2040,32 +2041,30 @@ private: Invalidate(); } // X and Y spinners - SetWidgetDisabled(WIDX_SPINNER_X_INCREASE, !(_tileSelected && ((_toolMap.x / 32) < MAXIMUM_MAP_SIZE_TECHNICAL - 1))); - SetWidgetDisabled(WIDX_SPINNER_X_DECREASE, !(_tileSelected && ((_toolMap.x / 32) > 0))); - SetWidgetDisabled(WIDX_SPINNER_Y_INCREASE, !(_tileSelected && ((_toolMap.y / 32) < MAXIMUM_MAP_SIZE_TECHNICAL - 1))); - SetWidgetDisabled(WIDX_SPINNER_Y_DECREASE, !(_tileSelected && ((_toolMap.y / 32) > 0))); + SetWidgetDisabledAndInvalidate( + WIDX_SPINNER_X_INCREASE, !(_tileSelected && ((_toolMap.x / 32) < MAXIMUM_MAP_SIZE_TECHNICAL - 1))); + SetWidgetDisabledAndInvalidate(WIDX_SPINNER_X_DECREASE, !(_tileSelected && ((_toolMap.x / 32) > 0))); + SetWidgetDisabledAndInvalidate( + WIDX_SPINNER_Y_INCREASE, !(_tileSelected && ((_toolMap.y / 32) < MAXIMUM_MAP_SIZE_TECHNICAL - 1))); + SetWidgetDisabledAndInvalidate(WIDX_SPINNER_Y_DECREASE, !(_tileSelected && ((_toolMap.y / 32) > 0))); // Sort buttons - SetWidgetDisabled(WIDX_BUTTON_SORT, !(_tileSelected && windowTileInspectorElementCount > 1)); + SetWidgetDisabledAndInvalidate(WIDX_BUTTON_SORT, !(_tileSelected && windowTileInspectorElementCount > 1)); // Move Up button - SetWidgetDisabled( + SetWidgetDisabledAndInvalidate( WIDX_BUTTON_MOVE_UP, !(windowTileInspectorSelectedIndex != -1 && windowTileInspectorSelectedIndex < windowTileInspectorElementCount - 1)); - InvalidateWidget(WIDX_BUTTON_MOVE_UP); // Move Down button - SetWidgetDisabled(WIDX_BUTTON_MOVE_DOWN, !(windowTileInspectorSelectedIndex > 0)); - InvalidateWidget(WIDX_BUTTON_MOVE_DOWN); + SetWidgetDisabledAndInvalidate(WIDX_BUTTON_MOVE_DOWN, !(windowTileInspectorSelectedIndex > 0)); // Copy button - SetWidgetDisabled(WIDX_BUTTON_COPY, !(windowTileInspectorSelectedIndex >= 0)); - InvalidateWidget(WIDX_BUTTON_COPY); + SetWidgetDisabledAndInvalidate(WIDX_BUTTON_COPY, !(windowTileInspectorSelectedIndex >= 0)); // Paste button - SetWidgetDisabled(WIDX_BUTTON_PASTE, !(_tileSelected && _elementCopied)); - InvalidateWidget(WIDX_BUTTON_PASTE); + SetWidgetDisabledAndInvalidate(WIDX_BUTTON_PASTE, !(_tileSelected && _elementCopied)); widgets[WIDX_BACKGROUND].bottom = height - 1;