Viewport

class glumpy.app.Viewport(size=(800, 600), position=(0, 0), anchor=(0, 0), aspect=None)

Bases: glumpy.app.window.event.EventDispatcher

A Viewport represents a rectangular area on a window.

Parameters:
  • size – Requested size as (width, height)
  • position – Requested position as (x,y)
  • anchor – Anchor point as (x,y)
  • aspect (float) – Aspect (= width/height).

The size and the position are always relative to the parent viewport. They may be given in pixels (int) or as a percentage (float) of parent viewport size. Positive or negative values are accepted.

Important

The viewport class works in conjunction with the Viewport transform that ensure actual positioning and sizing within a shader program.

Let’s consider a root viewport of size 400x400 and a child viewport:

Absolute size

viewport = Viewport(400,400)
child = Viewport(100,100)
viewport.add(child)

# Child size is 100x100 (pixels)
viewport = Viewport(400,400)
child = Viewport(-100, -100)
viewport.add(child)

# Child size is (400-100) x (400-100) = 300 x 300 (pixels)

Relative size

viewport = Viewport(400,400)
child = Viewport(0.5, 0.5)
viewport.add(child)

# Child size is 400*0.5 x 400*0.5 = 200 x 200 (pixels)

# Child size is 200x200 pixels.
viewport = Viewport(400,400)
child = Viewport(-0.125, -0.125)
viewport.add(child)

# Child size is (400*(1-0.125)) x (400*(1-0.125)) = 50 x 50 (pixels)

Note

It is also possible to define an aspect (width/height) that will be enforced anytime.

Positioning the viewport inside the parent viewport is also made using absolute or relative coordinates.

Absolute position

viewport = Viewport(size=(400,400), position=(0,0))
child = Viewport(size=(100,100), position=(10,10))
viewport.add(child)

# Child position is +10+10 (pixels)
viewport = Viewport(size=(400,400), position=(0,0))
child = Viewport(size=(100,100), position=(-10,-10))
viewport.add(child)

# Child position is +(400-10)+(400-10) = +390+390 (pixels)

Relative position

viewport = Viewport(size=(400,400), position=(0,0))
child = Viewport(size=(100,100), position=(0.25,0.25))
viewport.add(child)

# Child position is +(400*0.25)+(400*0.25) = +100+100 (pixels)
viewport = Viewport(size=(400,400), position=(0,0))
child = Viewport(size=(100,100), position=(-0.25,-0.25))
viewport.add(child)

# Child position is +(400*(1-0.25))+(400*(1-0.25)) = +300+300 (pixels)

Note

The final position of the viewport relates to the anchor point which can be also set in absolute or relative coordinates.

The order of rendering is done according to the order of the viewport hierarchy, starting from the root viewport.

__getitem__(index)

Get children using index

__replines__()

ASCII display of trees by Andrew Cooke

active

Whether viewport is active

add(child)

Add a new child to the viewport

dispatcher

Event dispatcher

extents

Actual position and size of the viewport

name

Viewport name

on_key_press(key, modifiers)

Default key handler that close window on escape

parent

Parent viewport

position

Actual position of the viewport

root

Root viewport

scissor

Actual position and size of the scissor

size

Actual size of the viewport