// Take a look at the license at the top of the repository in the LICENSE file.
use crate::{prelude::*, DrawContext};
use glib::translate::*;
// rustdoc-stripper-ignore-next
/// Trait containing manually implemented methods of [`DrawContext`](crate::DrawContext).
pub trait DrawContextExtManual: 'static {
/// Retrieves the region that is currently being repainted.
///
/// After a call to [`DrawContextExt::begin_frame()`][crate::prelude::DrawContextExt::begin_frame()] this function will
/// return a union of the region passed to that function and the area of the
/// surface that the @self determined needs to be repainted.
///
/// If @self is not in between calls to [`DrawContextExt::begin_frame()`][crate::prelude::DrawContextExt::begin_frame()]
/// and [`DrawContextExt::end_frame()`][crate::prelude::DrawContextExt::end_frame()], [`None`] will be returned.
///
/// # Returns
///
/// a Cairo region
#[doc(alias = "gdk_draw_context_get_frame_region")]
#[doc(alias = "get_frame_region")]
fn frame_region(&self) -> Option<cairo::Region>;
}
impl<O: IsA<DrawContext>> DrawContextExtManual for O {
fn frame_region(&self) -> Option<cairo::Region> {
unsafe {
from_glib_none(
ffi::gdk_draw_context_get_frame_region(self.as_ref().to_glib_none().0)
as *mut cairo::ffi::cairo_region_t,
)
}
}
}