1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//! Viewport for rendering a frame within the RenderContext.

use lambda_platform::gfx;

#[derive(Debug, Clone, PartialEq)]
pub struct Viewport {
  viewport: gfx::viewport::ViewPort,
}

impl Viewport {
  /// Convert the viewport into a gfx platform viewport.
  // TODO(vmarcella): implement this using Into<PlatformViewPort>
  pub(crate) fn clone_gfx_viewport(&self) -> gfx::viewport::ViewPort {
    return self.viewport.clone();
  }
}

/// Builder for viewports that are used to render a frame within the RenderContext.
pub struct ViewportBuilder {
  x: i16,
  y: i16,
}

impl ViewportBuilder {
  /// Creates a new viewport builder.
  pub fn new() -> Self {
    return Self { x: 0, y: 0 };
  }

  /// Builds a viewport that can be used for defining
  pub fn build(self, width: u32, height: u32) -> Viewport {
    let viewport = gfx::viewport::ViewPortBuilder::new()
      .with_coordinates(self.x, self.y)
      .build(width, height);

    return Viewport { viewport };
  }
}