Skip to content

Window API

Control the game window.

Methods

setSize(width, height)

Set the window size.

javascript
await gemshell.window.setSize(1280, 720);

Parameters:

  • width - Window width in pixels (number)
  • height - Window height in pixels (number)

Returns: Promise<boolean>

getSize()

Get the current window size.

javascript
const { width, height } = await gemshell.window.getSize();
console.log(`Window: ${width}x${height}`);

Returns: Promise<{ width: number, height: number }>

setTitle(title)

Set the window title.

javascript
await gemshell.window.setTitle('My Game - Level 5');

Parameters:

  • title - Window title (string)

Returns: Promise<boolean>

getTitle()

Get the current window title.

javascript
const title = await gemshell.window.getTitle();

Returns: Promise<string>

setFullscreen(enabled)

Enable or disable fullscreen mode.

javascript
await gemshell.window.setFullscreen(true);

Parameters:

  • enabled - true for fullscreen, false for windowed (boolean)

Returns: Promise<boolean>

isFullscreen()

Check if window is in fullscreen mode.

javascript
const fullscreen = await gemshell.window.isFullscreen();

Returns: Promise<boolean>

toggleFullscreen()

Toggle between fullscreen and windowed mode.

javascript
await gemshell.window.toggleFullscreen();

Returns: Promise<boolean>

minimize()

Minimize the window.

javascript
await gemshell.window.minimize();

Returns: Promise<boolean>

maximize()

Maximize the window (or unmaximize if already maximized).

javascript
await gemshell.window.maximize();

Returns: Promise<boolean>

restore()

Restore window from minimized state.

javascript
await gemshell.window.restore();

Returns: Promise<boolean>

focus()

Bring window to front and focus it.

javascript
await gemshell.window.focus();

Returns: Promise<boolean>

center()

Center the window on screen.

javascript
await gemshell.window.center();

Returns: Promise<boolean>

close()

Close the window (and quit the game).

javascript
await gemshell.window.close();

Returns: Promise<boolean>

Examples

Resolution Settings

javascript
const RESOLUTIONS = [
  { name: '720p', width: 1280, height: 720 },
  { name: '1080p', width: 1920, height: 1080 },
  { name: '1440p', width: 2560, height: 1440 },
];

async function setResolution(index) {
  const res = RESOLUTIONS[index];
  await gemshell.window.setSize(res.width, res.height);
}

Fullscreen Toggle

javascript
async function toggleFullscreen() {
  await gemshell.window.toggleFullscreen();
  const isFs = await gemshell.window.isFullscreen();
  updateFullscreenButton(isFs);
}

// Or use the dedicated method
document.addEventListener('keydown', async (e) => {
  if (e.key === 'F11') {
    await gemshell.window.toggleFullscreen();
  }
});

Dynamic Title

javascript
async function updateTitle() {
  const baseTitle = 'My Awesome Game';
  const level = `Level ${currentLevel}`;
  const score = `Score: ${playerScore}`;
  
  await gemshell.window.setTitle(`${baseTitle} - ${level} - ${score}`);
}

Window State Management

javascript
async function saveWindowState() {
  const size = await gemshell.window.getSize();
  const fullscreen = await gemshell.window.isFullscreen();
  
  await gemshell.file.save('windowState', {
    width: size.width,
    height: size.height,
    fullscreen
  });
}

async function restoreWindowState() {
  const state = await gemshell.file.load('windowState');
  if (state) {
    await gemshell.window.setSize(state.width, state.height);
    await gemshell.window.setFullscreen(state.fullscreen);
  }
}

Prevent Too Small Window

javascript
async function initWindow() {
  // Set minimum size to prevent UI breaking
  await gemshell.window.setMinimumSize(800, 600);
}

Quit Confirmation

javascript
async function quitGame() {
  const confirmed = await gemshell.dialog.confirm('Quit Game?', 'Are you sure you want to quit?');
  if (confirmed) {
    await gemshell.window.close();
  }
}