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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
use windows::Graphics::Capture::GraphicsCaptureItem;
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum ColorFormat {
Rgba16F = 10,
Rgba8 = 28,
Bgra8 = 87,
}
impl Default for ColorFormat {
#[must_use]
#[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, Debug)]
/// Represents the settings for screen capturing.
pub struct Settings<Flags, T: TryInto<GraphicsCaptureItem>> {
/// The graphics capture item to capture.
pub(crate) item: T,
/// Specifies whether to capture the cursor.
pub(crate) cursor_capture: CursorCaptureSettings,
/// Specifies whether to draw a border around the captured region.
pub(crate) draw_border: DrawBorderSettings,
/// The color format for the captured graphics.
pub(crate) color_format: ColorFormat,
/// Additional flags for capturing graphics.
pub(crate) flags: Flags,
}
impl<Flags, T: TryInto<GraphicsCaptureItem>> Settings<Flags, T> {
/// Create Capture Settings
///
/// # Arguments
///
/// * `item` - The graphics capture item.
/// * `capture_cursor` - Whether to capture the cursor or not.
/// * `draw_border` - Whether to draw a border around the captured region or not.
/// * `color_format` - The desired color format for the captured frame.
/// * `flags` - Additional flags for the capture settings that will be passed to user defined `new` function.
#[must_use]
#[inline]
pub const fn new(
item: T,
cursor_capture: CursorCaptureSettings,
draw_border: DrawBorderSettings,
color_format: ColorFormat,
flags: Flags,
) -> Self {
Self {
item,
cursor_capture,
draw_border,
color_format,
flags,
}
}
/// Get the item
///
/// # Returns
///
/// The item to be captured
#[must_use]
#[inline]
pub const fn item(&self) -> &T {
&self.item
}
/// Get the cursor capture settings
///
/// # Returns
///
/// The cursor capture settings
#[must_use]
#[inline]
pub const fn cursor_capture(&self) -> CursorCaptureSettings {
self.cursor_capture
}
/// Get the draw border settings
///
/// # Returns
///
/// The draw border settings
#[must_use]
#[inline]
pub const fn draw_border(&self) -> DrawBorderSettings {
self.draw_border
}
/// Get the color format
///
/// # Returns
///
/// The color format
#[must_use]
#[inline]
pub const fn color_format(&self) -> ColorFormat {
self.color_format
}
/// Get the flags
///
/// # Returns
///
/// The flags
#[must_use]
#[inline]
pub const fn flags(&self) -> &Flags {
&self.flags
}
}