pdfkit/
appearance_characteristics.rs1use 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 =
23 unsafe { ffi::pdf_appearance_characteristics_new(&mut out_value, &mut out_error) };
24 crate::util::status_result(status, out_error)?;
25 Ok(Self::from_handle(crate::util::required_handle(
26 out_value,
27 "PDFAppearanceCharacteristics",
28 )?))
29 }
30
31 pub fn info(&self) -> Result<PdfAppearanceCharacteristicsInfo> {
32 parse_json(
33 unsafe { ffi::pdf_appearance_characteristics_info_json(self.handle.as_ptr()) },
34 "PDFAppearanceCharacteristics",
35 )
36 }
37
38 pub fn set_control_type(&self, control_type: PdfWidgetControlType) -> Result<()> {
39 let mut out_error = ptr::null_mut();
40 let status = unsafe {
41 ffi::pdf_appearance_characteristics_set_control_type(
42 self.handle.as_ptr(),
43 control_type as i32,
44 &mut out_error,
45 )
46 };
47 crate::util::status_result(status, out_error)
48 }
49
50 pub fn set_rotation(&self, rotation: i32) {
51 unsafe { ffi::pdf_appearance_characteristics_set_rotation(self.handle.as_ptr(), rotation) };
52 }
53
54 pub fn set_caption(&self, caption: Option<&str>) -> Result<()> {
55 let caption = option_c_string(caption)?;
56 unsafe {
57 ffi::pdf_appearance_characteristics_set_caption(
58 self.handle.as_ptr(),
59 caption.as_ref().map_or(ptr::null(), |value| value.as_ptr()),
60 );
61 };
62 Ok(())
63 }
64
65 pub fn set_rollover_caption(&self, caption: Option<&str>) -> Result<()> {
66 let caption = option_c_string(caption)?;
67 unsafe {
68 ffi::pdf_appearance_characteristics_set_rollover_caption(
69 self.handle.as_ptr(),
70 caption.as_ref().map_or(ptr::null(), |value| value.as_ptr()),
71 );
72 };
73 Ok(())
74 }
75
76 pub fn set_down_caption(&self, caption: Option<&str>) -> Result<()> {
77 let caption = option_c_string(caption)?;
78 unsafe {
79 ffi::pdf_appearance_characteristics_set_down_caption(
80 self.handle.as_ptr(),
81 caption.as_ref().map_or(ptr::null(), |value| value.as_ptr()),
82 );
83 };
84 Ok(())
85 }
86
87 pub fn set_background_color(&self, color: PdfColor) {
88 unsafe {
89 ffi::pdf_appearance_characteristics_set_background_color(
90 self.handle.as_ptr(),
91 color.red,
92 color.green,
93 color.blue,
94 color.alpha,
95 );
96 };
97 }
98
99 pub fn set_border_color(&self, color: PdfColor) {
100 unsafe {
101 ffi::pdf_appearance_characteristics_set_border_color(
102 self.handle.as_ptr(),
103 color.red,
104 color.green,
105 color.blue,
106 color.alpha,
107 );
108 };
109 }
110}