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> {
page_handle: FPDF_PAGE,
tree_handle: FPDF_STRUCTTREE,
is_open: bool,
lifetime: PhantomData<&'a FPDF_STRUCTTREE>,
}
impl<'a> PdfPageStructureTree<'a> {
pub(crate) fn from_pdfium(page_handle: FPDF_PAGE) -> Self {
PdfPageStructureTree {
page_handle,
tree_handle: 0 as FPDF_STRUCTTREE,
is_open: false,
lifetime: PhantomData,
}
}
#[inline]
pub(crate) fn handle(&self) -> FPDF_STRUCTTREE {
self.tree_handle
}
}
impl<'a> Drop for PdfPageStructureTree<'a> {
#[inline]
fn drop(&mut self) {
if self.is_open {
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> {}