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