use std::time::Duration;
use windows::Graphics::Capture::GraphicsCaptureItem;
use crate::graphics_capture_picker::HwndGuard;
use crate::monitor::Monitor;
use crate::window::Window;
pub enum GraphicsCaptureItemType {
Monitor((GraphicsCaptureItem, Monitor)),
Window((GraphicsCaptureItem, Window)),
Unknown((GraphicsCaptureItem, HwndGuard)),
}
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum ColorFormat {
Rgba16F = 10,
Rgba8 = 28,
Bgra8 = 87,
}
impl Default for ColorFormat {
#[inline]
fn default() -> Self {
Self::Rgba8
}
}
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum CursorCaptureSettings {
Default,
WithCursor,
WithoutCursor,
}
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum DrawBorderSettings {
Default,
WithBorder,
WithoutBorder,
}
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum SecondaryWindowSettings {
Default,
Include,
Exclude,
}
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum MinimumUpdateIntervalSettings {
Default,
Custom(Duration),
}
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum DirtyRegionSettings {
Default,
ReportOnly,
ReportAndRender,
}
#[derive(Eq, PartialEq, Clone, Debug)]
pub struct Settings<Flags, T: TryInto<GraphicsCaptureItemType>> {
pub(crate) item: T,
pub(crate) cursor_capture_settings: CursorCaptureSettings,
pub(crate) draw_border_settings: DrawBorderSettings,
pub(crate) secondary_window_settings: SecondaryWindowSettings,
pub(crate) minimum_update_interval_settings: MinimumUpdateIntervalSettings,
pub(crate) dirty_region_settings: DirtyRegionSettings,
pub(crate) color_format: ColorFormat,
pub(crate) flags: Flags,
}
impl<Flags, T: TryInto<GraphicsCaptureItemType>> Settings<Flags, T> {
#[inline]
#[must_use]
#[allow(clippy::too_many_arguments)]
pub const fn new(
item: T,
cursor_capture_settings: CursorCaptureSettings,
draw_border_settings: DrawBorderSettings,
secondary_window_settings: SecondaryWindowSettings,
minimum_update_interval_settings: MinimumUpdateIntervalSettings,
dirty_region_settings: DirtyRegionSettings,
color_format: ColorFormat,
flags: Flags,
) -> Self {
Self {
item,
cursor_capture_settings,
draw_border_settings,
secondary_window_settings,
minimum_update_interval_settings,
dirty_region_settings,
color_format,
flags,
}
}
#[inline]
#[must_use]
pub const fn item(&self) -> &T {
&self.item
}
#[inline]
#[must_use]
pub const fn cursor_capture(&self) -> CursorCaptureSettings {
self.cursor_capture_settings
}
#[inline]
#[must_use]
pub const fn draw_border(&self) -> DrawBorderSettings {
self.draw_border_settings
}
#[inline]
#[must_use]
pub const fn color_format(&self) -> ColorFormat {
self.color_format
}
#[inline]
#[must_use]
pub const fn flags(&self) -> &Flags {
&self.flags
}
}