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 = 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}