> For the complete documentation index, see [llms.txt](https://tanishisherewith.gitbook.io/dynamic-hud/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tanishisherewith.gitbook.io/dynamic-hud/screens/abstractmoveablescreen.md).

# AbstractMoveableScreen

The `AbstractMoveableScreen` class extends `Screen` to provide a framework for creating editor screens with movable widgets. It handles widget rendering, input (dragging, clicking, scrolling), and context menus, enabling users to position and configure widgets interactively.

### Class Variables

* **WidgetRenderer widgetRenderer**: Manages rendering and interaction for widgets on this screen.
* **GlobalConfig.get().getSnapSize()**: Defines grid divisions for widget snapping during dragging (default: 100; higher values create smaller grids).

### Constructor

```java
public AbstractMoveableScreen(Text title, WidgetRenderer renderer)
```

* **Parameters**: `title` sets the screen title; `renderer` provides the widget renderer.

### Key Methods

* **onDisplayed()**: Sets `widgetRenderer.isInEditor` to `true` when the screen opens.
* **render(DrawContext, int, int, float)**: Renders the screen title, background (if no world), widgets via `widgetRenderer.renderWidgets`, and tooltips if enabled in `GlobalConfig`. Also renders context menus via `ContextMenuManager`.
* **close()**: Resets `widgetRenderer.isInEditor` to `false`, calls `widgetRenderer.onCloseScreen`, and closes context menus.
* **mouseDragged(double, double, int, double, double)**: Handles widget dragging with snapping based on `GlobalConfig.get().getSnapSize()`.
* **handleClickOnWidget(Widget, double, double, int)**: Customizable method for handling widget clicks (e.g., toggling visibility).
* **shouldPause()**: Returns `false` by default, preventing game pause.

### Input Handling

Overrides input methods (`mouseClicked`, `mouseReleased`, `keyPressed`, etc.) to delegate to `widgetRenderer` and `ContextMenuManager`, supporting widget dragging, context menu interactions, and keyboard controls (e.g., Delete/Backspace for widget actions).

Ensure `widgetRenderer` is initialized with widgets, or the screen will be empty.
