///|
/// Shared mutable surface metrics owner.
pub(all) struct SurfaceState {
  mut metrics : @core.SurfaceMetrics
  owns_surface : Bool
  can_reconfigure : Bool
}

///|
pub fn SurfaceState::new(
  metrics~ : @core.SurfaceMetrics,
  owns_surface? : Bool = false,
  can_reconfigure? : Bool = true,
) -> SurfaceState {
  { metrics, owns_surface, can_reconfigure, }
}

///|
pub fn SurfaceState::resize(
  self : SurfaceState,
  metrics : @core.SurfaceMetrics,
) -> @backend_host.Event {
  self.metrics = metrics
  Resized(metrics)
}

///|
pub fn SurfaceState::logical_size(self : SurfaceState) -> @core.Size {
  self.metrics.logical_size
}