Skip to main content

pdfkit/
appearance_characteristics.rs

1use std::ptr;
2
3use crate::error::Result;
4use crate::ffi;
5use crate::handle::ObjectHandle;
6use crate::types::{PdfAppearanceCharacteristicsInfo, PdfColor, PdfWidgetControlType};
7use crate::util::{option_c_string, parse_json};
8
9#[derive(Debug, Clone)]
10pub struct PdfAppearanceCharacteristics {
11    handle: ObjectHandle,
12}
13
14impl PdfAppearanceCharacteristics {
15    pub(crate) fn from_handle(handle: ObjectHandle) -> Self {
16        Self { handle }
17    }
18
19    pub fn new() -> Result<Self> {
20        let mut out_value = ptr::null_mut();
21        let mut out_error = ptr::null_mut();
22        let status = unsafe {
23            ffi::pdf_appearance_characteristics_new(&mut out_value, &mut out_error)
24        };
25        crate::util::status_result(status, out_error)?;
26        Ok(Self::from_handle(crate::util::required_handle(
27            out_value,
28            "PDFAppearanceCharacteristics",
29        )?))
30    }
31
32    pub fn info(&self) -> Result<PdfAppearanceCharacteristicsInfo> {
33        parse_json(
34            unsafe { ffi::pdf_appearance_characteristics_info_json(self.handle.as_ptr()) },
35            "PDFAppearanceCharacteristics",
36        )
37    }
38
39    pub fn set_control_type(&self, control_type: PdfWidgetControlType) -> Result<()> {
40        let mut out_error = ptr::null_mut();
41        let status = unsafe {
42            ffi::pdf_appearance_characteristics_set_control_type(
43                self.handle.as_ptr(),
44                control_type as i32,
45                &mut out_error,
46            )
47        };
48        crate::util::status_result(status, out_error)
49    }
50
51    pub fn set_rotation(&self, rotation: i32) {
52        unsafe { ffi::pdf_appearance_characteristics_set_rotation(self.handle.as_ptr(), rotation) };
53    }
54
55    pub fn set_caption(&self, caption: Option<&str>) -> Result<()> {
56        let caption = option_c_string(caption)?;
57        unsafe {
58            ffi::pdf_appearance_characteristics_set_caption(
59                self.handle.as_ptr(),
60                caption.as_ref().map_or(ptr::null(), |value| value.as_ptr()),
61            );
62        };
63        Ok(())
64    }
65
66    pub fn set_rollover_caption(&self, caption: Option<&str>) -> Result<()> {
67        let caption = option_c_string(caption)?;
68        unsafe {
69            ffi::pdf_appearance_characteristics_set_rollover_caption(
70                self.handle.as_ptr(),
71                caption.as_ref().map_or(ptr::null(), |value| value.as_ptr()),
72            );
73        };
74        Ok(())
75    }
76
77    pub fn set_down_caption(&self, caption: Option<&str>) -> Result<()> {
78        let caption = option_c_string(caption)?;
79        unsafe {
80            ffi::pdf_appearance_characteristics_set_down_caption(
81                self.handle.as_ptr(),
82                caption.as_ref().map_or(ptr::null(), |value| value.as_ptr()),
83            );
84        };
85        Ok(())
86    }
87
88    pub fn set_background_color(&self, color: PdfColor) {
89        unsafe {
90            ffi::pdf_appearance_characteristics_set_background_color(
91                self.handle.as_ptr(),
92                color.red,
93                color.green,
94                color.blue,
95                color.alpha,
96            );
97        };
98    }
99
100    pub fn set_border_color(&self, color: PdfColor) {
101        unsafe {
102            ffi::pdf_appearance_characteristics_set_border_color(
103                self.handle.as_ptr(),
104                color.red,
105                color.green,
106                color.blue,
107                color.alpha,
108            );
109        };
110    }
111}