Skip to main content

pdfium_render/pdf/document/page/object/
shading.rs

1//! Defines the [PdfPageShadingObject] struct, exposing functionality related to a single
2//! page object of type [PdfPageObjectType::Shading].
3
4use std::marker::PhantomData;
5
6use crate::bindgen::FPDF_PAGEOBJECT;
7use crate::error::PdfiumError;
8use crate::pdf::document::page::object::private::internal::PdfPageObjectPrivate;
9use crate::pdf::document::page::object::PdfPageObjectOwnership;
10use crate::pdf::matrix::{PdfMatrix, PdfMatrixValue};
11use crate::pdf::points::PdfPoints;
12use crate::pdfium::PdfiumLibraryBindingsAccessor;
13use crate::{create_transform_getters, create_transform_setters};
14
15#[cfg(doc)]
16use {
17    crate::pdf::document::page::object::PdfPageObject,
18    crate::pdf::document::page::object::PdfPageObjectType, crate::pdf::document::page::PdfPage,
19};
20
21/// A single [PdfPageObject] of type [PdfPageObjectType::Shading].
22pub struct PdfPageShadingObject<'a> {
23    object_handle: FPDF_PAGEOBJECT,
24    ownership: PdfPageObjectOwnership,
25    lifetime: PhantomData<&'a FPDF_PAGEOBJECT>,
26}
27
28impl<'a> PdfPageShadingObject<'a> {
29    pub(crate) fn from_pdfium(
30        object_handle: FPDF_PAGEOBJECT,
31        ownership: PdfPageObjectOwnership,
32    ) -> Self {
33        PdfPageShadingObject {
34            object_handle,
35            ownership,
36            lifetime: PhantomData,
37        }
38    }
39
40    create_transform_setters!(
41        &mut Self,
42        Result<(), PdfiumError>,
43        "this [PdfPageShadingObject]",
44        "this [PdfPageShadingObject].",
45        "this [PdfPageShadingObject],"
46    );
47
48    // The transform_impl() function required by the create_transform_setters!() macro
49    // is provided by the PdfPageObjectPrivate trait.
50
51    create_transform_getters!(
52        "this [PdfPageShadingObject]",
53        "this [PdfPageShadingObject].",
54        "this [PdfPageShadingObject],"
55    );
56
57    // The get_matrix_impl() function required by the create_transform_getters!() macro
58    // is provided by the PdfPageObjectPrivate trait.
59}
60
61impl<'a> PdfPageObjectPrivate<'a> for PdfPageShadingObject<'a> {
62    #[inline]
63    fn object_handle(&self) -> FPDF_PAGEOBJECT {
64        self.object_handle
65    }
66
67    #[inline]
68    fn ownership(&self) -> &PdfPageObjectOwnership {
69        &self.ownership
70    }
71
72    #[inline]
73    fn set_ownership(&mut self, ownership: PdfPageObjectOwnership) {
74        self.ownership = ownership;
75    }
76}
77
78impl<'a> Drop for PdfPageShadingObject<'a> {
79    /// Closes this [PdfPageShadingObject], releasing held memory.
80    fn drop(&mut self) {
81        self.drop_impl();
82    }
83}
84
85impl<'a> PdfiumLibraryBindingsAccessor<'a> for PdfPageShadingObject<'a> {}
86
87#[cfg(feature = "thread_safe")]
88unsafe impl<'a> Send for PdfPageShadingObject<'a> {}
89
90#[cfg(feature = "thread_safe")]
91unsafe impl<'a> Sync for PdfPageShadingObject<'a> {}