1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
//! Layout constants for PPTX generation
//!
//! All positioning and sizing values are in EMU (English Metric Units).
//! EMU is the standard unit for Office Open XML format.
//!
//! Conversions:
//! - 1 inch = 914400 EMU
//! - 1 point (pt) = 12700 EMU
//! - 1 centimeter = 360000 EMU
//! - 1 millimeter = 36000 EMU
/// Standard slide dimensions in EMU
/// 10 inches × 7.5 inches (standard PowerPoint slide size)
pub const SLIDE_WIDTH: u32 = 9144000; // 10 inches
pub const SLIDE_HEIGHT: u32 = 6858000; // 7.5 inches
// ============================================================================
// Title Shape Positioning
// ============================================================================
/// Title shape X position (left margin)
/// 0.5 inches from left edge
pub const TITLE_X: u32 = 457200; // 0.5 inches
/// Title shape Y position (top margin)
/// ~0.3 inches from top edge
pub const TITLE_Y: u32 = 274638; // ~0.3 inches
/// Title shape width
/// 9 inches (slide width minus 1 inch margins)
pub const TITLE_WIDTH: u32 = 8230200; // 9 inches
/// Title shape height (standard)
/// 1.25 inches
pub const TITLE_HEIGHT: u32 = 1143000; // 1.25 inches
/// Title shape height (big content layout)
/// 1 inch
pub const TITLE_HEIGHT_BIG: u32 = 914400; // 1 inch
/// Title font size in EMU
/// 44pt (4400 EMU)
pub const TITLE_FONT_SIZE: u32 = 4400; // 44pt
/// Centered title Y position
/// ~3 inches from top (centered vertically)
pub const CENTERED_TITLE_Y: u32 = 2743200; // ~3 inches
/// Centered title height
/// 1.5 inches
pub const CENTERED_TITLE_HEIGHT: u32 = 1371600; // 1.5 inches
// ============================================================================
// Content Shape Positioning
// ============================================================================
/// Content shape X position (left margin)
/// 0.5 inches from left edge (same as title)
pub const CONTENT_X: u32 = 457200; // 0.5 inches
/// Content shape Y position (start position)
/// ~1.67 inches from top (below title)
pub const CONTENT_Y_START: u32 = 1600200; // ~1.67 inches
/// Content shape Y position (alternative start)
/// ~1.3 inches from top (for big content layout)
pub const CONTENT_Y_START_BIG: u32 = 1189200; // ~1.3 inches
/// Content shape width
/// 9 inches (same as title)
pub const CONTENT_WIDTH: u32 = 8230200; // 9 inches
/// Content shape height (per item)
/// 1 inch spacing between items
pub const CONTENT_HEIGHT: u32 = 4572000; // 5 inches (for content area)
/// Content shape height (big content layout)
/// ~6.2 inches (fills most of slide)
pub const CONTENT_HEIGHT_BIG: u32 = 5668800; // ~6.2 inches
/// Vertical increment between content items
/// 1 inch spacing
pub const CONTENT_Y_INCREMENT: u32 = 914400; // 1 inch
/// Content font size in EMU
/// 28pt (2800 EMU)
pub const CONTENT_FONT_SIZE: u32 = 2800; // 28pt
// ============================================================================
// Two-Column Layout Positioning
// ============================================================================
/// Two-column layout: Title Y position
/// Same as standard title
pub const TWO_COL_TITLE_Y: u32 = 274638; // ~0.3 inches
/// Two-column layout: Title height
/// 1 inch
pub const TWO_COL_TITLE_HEIGHT: u32 = 914400; // 1 inch
/// Two-column layout: Content Y position
/// ~1.3 inches from top
pub const TWO_COL_CONTENT_Y: u32 = 1189200; // ~1.3 inches
// ============================================================================
// Notes Slide Positioning
// ============================================================================
/// Notes slide content X position
/// 0.75 inches from left
pub const NOTES_X: u32 = 685800; // 0.75 inches
/// Notes slide content Y position
/// 1.25 inches from top
pub const NOTES_Y: u32 = 1143000; // 1.25 inches
// ============================================================================
// Text Properties
// ============================================================================
/// Default language code
pub const DEFAULT_LANG: &str = "en-US";
/// Default major font (for headings)
pub const DEFAULT_FONT_MAJOR: &str = "Calibri";
/// Default minor font (for body text)
pub const DEFAULT_FONT_MINOR: &str = "Calibri";
// ============================================================================
// Relationship IDs
// ============================================================================
/// Slide ID base (must be > 255 to avoid conflicts with reserved IDs)
pub const SLIDE_ID_BASE: u32 = 255;
/// Relationship ID base for slides (rId1 is reserved for slide master)
pub const SLIDE_RID_BASE: u32 = 2;