# Screen Resizer

**URL:** <https://forum.defold.com/t/screen-resizer/82147>\
**Category:** The Defoldmine\
**Created:** [December 25, 2025, 5:00am UTC](https://forum.defold.com/t/screen-resizer/82147 "2025-12-25T05:00:42Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![d954mas](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/d954mas/32/5401_2.png) [@d954mas](https://forum.defold.com/u/d954mas)\
**Post date:** [December 25, 2025, 5:00am UTC](https://forum.defold.com/t/screen-resizer/82147/1 "2025-12-25T05:00:42Z")

</div>

# Screen Resizer

Minimal Defold extension + Lua module to resize the game view and show a menu  
of preset sizes.

> **[GitHub - d954mas/defold-screen-resizer](https://github.com/d954mas/defold-screen-resizer)**
>
> Contribute to d954mas/defold-screen-resizer development by creating an account on GitHub.

 ![screen1](https://forum-defold-uploads.b-cdn.net/original/3X/a/4/a4184e909132af9e8991e16e9d5c8cd02b2ec9ba.png)

## Setup

You can use ScreenResizer in your own project by adding this project as Defold library dependencies.  
Open your `game.project` file and in the dependencies field under project add:

```lua
https://github.com/d954mas/defold-screen-resizer/archive/master.zip

```

The GUI script expects a right mouse button binding:

```lua
mouse_trigger {
  input: MOUSE_BUTTON_RIGHT
  action: "mouse_button_right"
}

```

 ![screen2](https://forum-defold-uploads.b-cdn.net/original/3X/3/7/37dfb8b4cfb50a7a13b54600f8c7de64ae565be9.png)

## Files

- `screen_resizer/screen_resizer/src/screen_resizer.cpp` native extension
- `screen_resizer/screen_resizer.gui_script` sample GUI usage
- `screen_resizer/resizer.lua` Lua helper module

## Usage Simple

add screen\_resizer.go to your main.collection  
by default it will show a menu with 6 preset sizes

## Usage Custom

```lua
local RESIZER = require "screen_resizer.resizer"

RESIZER:add_size(960, 540, "16:9 960x540", 1)
RESIZER:add_size(540, 960, "9:16 540x960", 1)

-- Optional logging
RESIZER.logs = true

-- Show menu and apply selection
local _, _, _, h = screen_resizer.get_view_size()
RESIZER:show_menu(x, h - y)

```

## API: resizer.lua

- `resizer:add_size(w, h, tag, scale)`  
Adds a size preset. `tag` is the menu label. `scale` defaults to `1`.
- `resizer:set_size_by_idx(idx)`  
Applies the size preset by index (from `show_menu`) and respects `scale`.
- `resizer:show_menu(x, y)`  
Builds and shows the menu, returns selected index (0 if none).
- `resizer.logs`  
When `true`, logs size changes. Defaults to `true`.

## API: screen\_resizer (native)

- `screen_resizer.menu_begin()`  
Start building a menu.
- `screen_resizer.menu_label(id, enabled, text)`  
Add a menu item.
- `screen_resizer.menu_finish()`  
Finalize the menu.
- `screen_resizer.menu_show(x, y)`  
Show the menu at screen position, returns selected id (0 if none).
- `screen_resizer.set_view_size(x, y, w, h)`  
Set view size; passing `nil` for `x` or `y` centers the view.
- `screen_resizer.get_view_size()`  
Returns `x, y, w, h` in screen coordinates.
