use crate::bindgen::{FPDF_PAGE, FPDF_STRUCTTREE};
use crate::pdfium::PdfiumLibraryBindingsAccessor;
use std::marker::PhantomData;
#[cfg(doc)]
use crate::pdf::document::page::PdfPage;
pub struct PdfPageStructureTree<'a> {
handle: FPDF_STRUCTTREE,
lifetime: PhantomData<&'a FPDF_STRUCTTREE>,
}
impl<'a> PdfPageStructureTree<'a> {
pub(crate) fn from_pdfium(page_handle: FPDF_PAGE) -> Self {
let handle = unsafe {
PdfPageStructureTree {
handle: 0 as FPDF_STRUCTTREE,
lifetime: PhantomData,
}
.bindings()
.FPDF_StructTree_GetForPage(page_handle)
};
PdfPageStructureTree {
handle,
lifetime: PhantomData,
}
}
#[inline]
pub(crate) fn handle(&self) -> FPDF_STRUCTTREE {
self.handle
}
}
impl<'a> Drop for PdfPageStructureTree<'a> {
#[inline]
fn drop(&mut self) {
unsafe {
self.bindings().FPDF_StructTree_Close(self.handle());
}
}
}
impl<'a> PdfiumLibraryBindingsAccessor<'a> for PdfPageStructureTree<'a> {}
#[cfg(feature = "thread_safe")]
unsafe impl<'a> Send for PdfPageStructureTree<'a> {}
#[cfg(feature = "thread_safe")]
unsafe impl<'a> Sync for PdfPageStructureTree<'a> {}