egui_charts/tokens/sizing.rs
1//! Sizing tokens for UI components, chart elements, and layout dimensions.
2//!
3//! These structs define dimensions in egui logical points for buttons, icons, toolbars, panels,
4//! dialogs, chart elements, and many specialized components.
5//!
6//! Access via `DESIGN_TOKENS.sizing.*`, e.g.:
7//!
8//! ```rust
9//! use egui_charts::tokens::DESIGN_TOKENS;
10//!
11//! let btn_h = DESIGN_TOKENS.sizing.button_md;
12//! let toolbar_button_h = DESIGN_TOKENS.sizing.toolbar.button_height;
13//! ```
14
15/// Root sizing tokens containing icon sizes, button sizes, and sub-module sizing.
16///
17/// General sizing values (icons, buttons, list items) are at the top level.
18/// Component-specific sizing is nested in sub-structs (toolbar, panel, dialog, etc.).
19#[derive(Clone, Debug)]
20pub struct SizingTokens {
21 /// Target minimum, in egui logical points.
22 pub target_min: f32,
23 /// Icon extra small, in egui logical points.
24 pub icon_xs: f32,
25 /// Icon 14, in egui logical points.
26 pub icon_14: f32,
27 /// Icon small, in egui logical points.
28 pub icon_sm: f32,
29 /// Icon medium, in egui logical points.
30 pub icon_md: f32,
31 /// Icon button, in egui logical points.
32 pub icon_btn: f32,
33 /// Icon large, in egui logical points.
34 pub icon_lg: f32,
35 /// Icon double extra large, in egui logical points.
36 pub icon_xxl: f32,
37 /// Button small, in egui logical points.
38 pub button_sm: f32,
39 /// Button medium, in egui logical points.
40 pub button_md: f32,
41 /// Button dialog, in egui logical points.
42 pub button_dialog: f32,
43 /// Button large, in egui logical points.
44 pub button_lg: f32,
45 /// Button extra large, in egui logical points.
46 pub button_xl: f32,
47 /// Button double extra large, in egui logical points.
48 pub button_xxl: f32,
49 /// List item height, in egui logical points.
50 pub list_item_height: f32,
51 /// Minimum height of egui's built-in controls: buttons, checkboxes, combo boxes and text fields.
52 pub control_height: f32,
53 // Sub-modules
54 /// Toolbar defaults.
55 pub toolbar: ToolbarSizingTokens,
56 /// Panel defaults.
57 pub panel: PanelSizingTokens,
58 /// Dialog defaults.
59 pub dialog: DialogSizingTokens,
60 /// Settings dialog defaults.
61 pub settings_dialog: SettingsDialogSizingTokens,
62 /// Context menu defaults.
63 pub context_menu: ContextMenuSizingTokens,
64 /// Symbol header defaults.
65 pub symbol_header: SymbolHeaderSizingTokens,
66 /// Candle defaults.
67 pub candle: CandleSizingTokens,
68 // New token categories
69 /// Floating toolbar defaults.
70 pub floating_toolbar: FloatingToolbarSizingTokens,
71 /// Command palette defaults.
72 pub command_palette: CommandPaletteSizingTokens,
73 /// Replay defaults.
74 pub replay: ReplaySizingTokens,
75 /// Drawing toolbar additional defaults.
76 pub drawing_toolbar_ext: DrawingToolbarExtSizingTokens,
77 /// Annotation defaults.
78 pub annotation: AnnotationSizingTokens,
79 /// Media defaults.
80 pub media: MediaSizingTokens,
81 /// Crosshair defaults.
82 pub crosshair: CrosshairSizingTokens,
83 /// Position tool defaults.
84 pub position_tool: PositionToolSizingTokens,
85 /// Charts additional defaults.
86 pub charts_ext: ChartsExtSizingTokens,
87 /// Technical labels defaults.
88 pub technical_labels: TechnicalLabelsSizingTokens,
89 /// Tooltip defaults.
90 pub tooltip: TooltipSizingTokens,
91 /// Drawing defaults.
92 pub drawing: DrawingSizingTokens,
93 /// Notification defaults.
94 pub notification: NotificationSizingTokens,
95 /// Menu defaults.
96 pub menu: MenuSizingTokens,
97}
98
99/// Toolbar dimensions (left, bottom and right panels and button sizes).
100#[derive(Clone, Debug)]
101pub struct ToolbarSizingTokens {
102 /// Left width, in egui logical points.
103 pub left_width: f32,
104 /// Bottom height, in egui logical points.
105 pub bottom_height: f32,
106 /// Right icon width, in egui logical points.
107 pub right_icon_width: f32,
108 /// Right panel width, in egui logical points.
109 pub right_panel_width: f32,
110
111 // Exact toolbar dimensions
112 /// Button width, in egui logical points.
113 pub button_width: f32,
114 /// Button height, in egui logical points.
115 pub button_height: f32,
116 /// Horizontal hover margin, in egui logical points.
117 pub hover_margin_h: f32,
118 /// Vertical hover margin, in egui logical points.
119 pub hover_margin_v: f32,
120 /// Inner rounding, in egui logical points.
121 pub inner_rounding: f32,
122 /// Icon size, in egui logical points.
123 pub icon_size: f32,
124 /// Separator margin, in egui logical points.
125 pub separator_margin: f32,
126 /// Separator gap, in egui logical points.
127 pub separator_gap: f32,
128
129 // Right sidebar (widget bar) exact dimensions
130 /// Right sidebar width, in egui logical points.
131 pub right_sidebar_width: f32,
132 /// Right button size, in egui logical points.
133 pub right_btn_size: f32,
134 /// Right icon size, in egui logical points.
135 pub right_icon_size: f32,
136 /// Right button spacing, in egui logical points.
137 pub right_btn_spacing: f32,
138 /// Right hover margin, in egui logical points.
139 pub right_hover_margin: f32,
140 /// Right hover rounding, in egui logical points.
141 pub right_hover_rounding: f32,
142
143 // Top toolbar separator dimensions
144 /// Separator height, in egui logical points.
145 pub separator_height: f32,
146 /// Separator width, in egui logical points.
147 pub separator_width: f32,
148}
149
150/// Panel dimensions (bottom panel heights, widget default sizes).
151#[derive(Clone, Debug)]
152pub struct PanelSizingTokens {
153 /// Bottom default height, in egui logical points.
154 pub bottom_default_height: f32,
155}
156
157/// Dialog sizing defaults in egui logical points.
158#[derive(Clone, Debug)]
159pub struct DialogSizingTokens {
160 /// Submenu width, in egui logical points.
161 pub submenu_width: f32,
162 /// Submenu item height, in egui logical points.
163 pub submenu_item_height: f32,
164 /// Color picker width, in egui logical points.
165 pub color_picker_width: f32,
166 /// Color picker height, in egui logical points.
167 pub color_picker_height: f32,
168 /// Menu settings width, in egui logical points.
169 pub menu_settings_width: f32,
170 /// Menu settings height, in egui logical points.
171 pub menu_settings_height: f32,
172 // Extended dialog sizing tokens
173 /// Default width, in egui logical points.
174 pub default_width: f32,
175 /// Default height, in egui logical points.
176 pub default_height: f32,
177 /// Default minimum height, in egui logical points.
178 pub default_min_height: f32,
179 /// Confirm width, in egui logical points.
180 pub confirm_width: f32,
181 /// Prompt width small, in egui logical points.
182 pub prompt_width_sm: f32,
183 /// Prompt width large, in egui logical points.
184 pub prompt_width_lg: f32,
185 /// Alert width, in egui logical points.
186 pub alert_width: f32,
187 /// Properties height, in egui logical points.
188 pub properties_height: f32,
189 /// Label width, in egui logical points.
190 pub label_width: f32,
191 /// Input width, in egui logical points.
192 pub input_width: f32,
193 /// Series sidebar width, in egui logical points.
194 pub series_sidebar_width: f32,
195 /// Grid dropdown width, in egui logical points.
196 pub grid_dropdown_width: f32,
197 /// Indicator item width, in egui logical points.
198 pub indicator_item_width: f32,
199 /// Button minimum width extra small, in egui logical points.
200 pub button_min_width_xs: f32,
201}
202
203/// Settings dialog sizing defaults in egui logical points.
204#[derive(Clone, Debug)]
205pub struct SettingsDialogSizingTokens {
206 // Dialog frame
207 /// Width, in egui logical points.
208 pub width: f32,
209 /// Height, in egui logical points.
210 pub height: f32,
211 /// Rounding, in egui logical points.
212 pub rounding: f32,
213 // Title bar
214 /// Title height, in egui logical points.
215 pub title_height: f32,
216 /// Title font size, in egui logical points.
217 pub title_font_size: f32,
218 /// Title padding left, in egui logical points.
219 pub title_padding_left: f32,
220 /// Close button size, in egui logical points.
221 pub close_button_size: f32,
222 /// Close button margin, in egui logical points.
223 pub close_button_margin: f32,
224 /// Close icon size, in egui logical points.
225 pub close_icon_size: f32,
226 // Sidebar
227 /// Sidebar width, in egui logical points.
228 pub sidebar_width: f32,
229 /// Tab height, in egui logical points.
230 pub tab_height: f32,
231 /// Horizontal tab padding, in egui logical points.
232 pub tab_padding_h: f32,
233 /// Vertical tab padding, in egui logical points.
234 pub tab_padding_v: f32,
235 /// Tab icon size, in egui logical points.
236 pub tab_icon_size: f32,
237 /// Tab icon text gap, in egui logical points.
238 pub tab_icon_text_gap: f32,
239 /// Tab font size, in egui logical points.
240 pub tab_font_size: f32,
241 // Content area
242 /// Content padding top, in egui logical points.
243 pub content_padding_top: f32,
244 /// Horizontal content padding, in egui logical points.
245 pub content_padding_h: f32,
246 /// Content minimum width, in egui logical points.
247 pub content_min_width: f32,
248 // Row layout
249 /// Row height, in egui logical points.
250 pub row_height: f32,
251 /// Row spacing, in egui logical points.
252 pub row_spacing: f32,
253 /// Label width, in egui logical points.
254 pub label_width: f32,
255 // Controls
256 /// Dropdown width, in egui logical points.
257 pub dropdown_width: f32,
258 /// Checkbox size, in egui logical points.
259 pub checkbox_size: f32,
260 /// Input width margin, in egui logical points.
261 pub input_width_margin: f32,
262 /// Section spacing, in egui logical points.
263 pub section_spacing: f32,
264 // Footer
265 /// Footer height, in egui logical points.
266 pub footer_height: f32,
267 /// Horizontal footer padding, in egui logical points.
268 pub footer_padding_h: f32,
269 /// Vertical footer padding, in egui logical points.
270 pub footer_padding_v: f32,
271 /// Button height, in egui logical points.
272 pub button_height: f32,
273 /// Button minimum width, in egui logical points.
274 pub button_min_width: f32,
275 /// Button gap, in egui logical points.
276 pub button_gap: f32,
277 // Additional controls
278 /// Small dropdown width, in egui logical points.
279 pub small_dropdown_width: f32,
280 /// Template button width, in egui logical points.
281 pub template_button_width: f32,
282 /// Template menu width, in egui logical points.
283 pub template_menu_width: f32,
284 /// Template menu maximum height, in egui logical points.
285 pub template_menu_max_height: f32,
286 // Tab indicator
287 /// Indicator width, in egui logical points.
288 pub indicator_width: f32,
289 /// Indicator offset, in egui logical points.
290 pub indicator_offset: f32,
291}
292
293/// Context menu sizing defaults in egui logical points.
294#[derive(Clone, Debug)]
295pub struct ContextMenuSizingTokens {
296 // Menu frame
297 /// Minimum width, in egui logical points.
298 pub min_width: f32,
299 /// Maximum width, in egui logical points.
300 pub max_width: f32,
301 /// Rounding, in egui logical points.
302 pub rounding: f32,
303 /// Vertical padding, in egui logical points.
304 pub padding_v: f32,
305 // Menu items
306 /// Item height, in egui logical points.
307 pub item_height: f32,
308 /// Horizontal item padding, in egui logical points.
309 pub item_padding_h: f32,
310 /// Icon width, in egui logical points.
311 pub icon_width: f32,
312 /// Icon size, in egui logical points.
313 pub icon_size: f32,
314 /// Font size, in egui logical points.
315 pub font_size: f32,
316 /// Shortcut font size, in egui logical points.
317 pub shortcut_font_size: f32,
318 // Separator
319 /// Separator height, in egui logical points.
320 pub separator_height: f32,
321 /// Separator thickness, in egui logical points.
322 pub separator_thickness: f32,
323 /// Horizontal separator margin, in egui logical points.
324 pub separator_margin_h: f32,
325 // Submenu
326 /// Submenu arrow size, in egui logical points.
327 pub submenu_arrow_size: f32,
328 /// Shortcut width, in egui logical points.
329 pub shortcut_width: f32,
330 /// Screen edge padding, in egui logical points.
331 pub screen_edge_padding: f32,
332}
333
334/// Symbol header sizing defaults in egui logical points.
335#[derive(Clone, Debug)]
336pub struct SymbolHeaderSizingTokens {
337 /// Height, in egui logical points.
338 pub height: f32,
339 /// Quote box height, in egui logical points.
340 pub quote_box_height: f32,
341}
342
343/// Candlestick rendering dimensions (body width ratio, wick width, min body height).
344#[derive(Clone, Debug)]
345pub struct CandleSizingTokens {
346 /// Body width ratio, as a fraction.
347 pub body_width_ratio: f32,
348 /// Wick width, in egui logical points.
349 pub wick_width: f32,
350 /// Wick width on high-density displays, in egui logical points.
351 pub wick_width_hidpi: f32,
352 /// Minimum body height, in egui logical points.
353 pub min_body_height: f32,
354 /// Volume alpha, from transparent (0) to opaque (255).
355 pub volume_alpha: u8,
356}
357
358/// Floating toolbar sizing defaults in egui logical points.
359#[derive(Clone, Debug)]
360pub struct FloatingToolbarSizingTokens {
361 /// Horizontal default, in egui logical points.
362 pub default_x: f32,
363 /// Vertical default, in egui logical points.
364 pub default_y: f32,
365 /// Drag handle width, in egui logical points.
366 pub drag_handle_width: f32,
367 /// Button size, in egui logical points.
368 pub button_size: f32,
369 /// Color swatch size, in egui logical points.
370 pub color_size: f32,
371 /// Separator width, in egui logical points.
372 pub separator_width: f32,
373 /// Drag handle height, in egui logical points.
374 pub drag_handle_height: f32,
375 /// Height, in egui logical points.
376 pub height: f32,
377 /// Dot size, in egui logical points.
378 pub dot_size: f32,
379 /// Dot spacing, in egui logical points.
380 pub dot_spacing: f32,
381 /// Separator height, in egui logical points.
382 pub separator_height: f32,
383}
384
385/// Command palette sizing defaults in egui logical points.
386#[derive(Clone, Debug)]
387pub struct CommandPaletteSizingTokens {
388 /// Width, in egui logical points.
389 pub width: f32,
390 /// Height, in egui logical points.
391 pub height: f32,
392 /// Horizontal margin, in egui logical points.
393 pub margin_x: f32,
394 /// Vertical margin, in egui logical points.
395 pub margin_y: f32,
396 /// Input padding, in egui logical points.
397 pub input_padding: f32,
398 /// Scroll padding, in egui logical points.
399 pub scroll_padding: f32,
400}
401
402/// Replay sizing defaults in egui logical points.
403#[derive(Clone, Debug)]
404pub struct ReplaySizingTokens {
405 /// Control bar height, in egui logical points.
406 pub control_bar_height: f32,
407 /// Button size, in egui logical points.
408 pub button_size: f32,
409 /// Speed dropdown width, in egui logical points.
410 pub speed_dropdown_width: f32,
411 /// Date display width, in egui logical points.
412 pub date_display_width: f32,
413 /// Progress bar width, in egui logical points.
414 pub progress_bar_width: f32,
415}
416
417/// Drawing toolbar additional sizing defaults in egui logical points.
418#[derive(Clone, Debug)]
419pub struct DrawingToolbarExtSizingTokens {
420 /// Large submenu width, in egui logical points.
421 pub submenu_width_lg: f32,
422 /// Extra large submenu width, in egui logical points.
423 pub submenu_width_xl: f32,
424 /// Name offset active, in egui logical points.
425 pub name_offset_active: f32,
426 /// Name offset inactive, in egui logical points.
427 pub name_offset_inactive: f32,
428 /// Vertical submenu offset, in egui logical points.
429 pub submenu_offset_y: f32,
430 /// Submenu margin, in egui logical points.
431 pub submenu_margin: f32,
432}
433
434/// Annotation sizing defaults in egui logical points.
435#[derive(Clone, Debug)]
436pub struct AnnotationSizingTokens {
437 /// Horizontal label padding, in egui logical points.
438 pub label_padding_x: f32,
439 /// Vertical label padding, in egui logical points.
440 pub label_padding_y: f32,
441 /// Horizontal callout padding, in egui logical points.
442 pub callout_padding_x: f32,
443 /// Vertical callout padding, in egui logical points.
444 pub callout_padding_y: f32,
445 /// Pointer size, in egui logical points.
446 pub pointer_size: f32,
447 /// Table cell width, in egui logical points.
448 pub table_cell_width: f32,
449 /// Table cell height, in egui logical points.
450 pub table_cell_height: f32,
451 /// Table header height, in egui logical points.
452 pub table_header_height: f32,
453 /// Horizontal signpost padding, in egui logical points.
454 pub signpost_padding_x: f32,
455 /// Vertical text padding, in egui logical points.
456 pub text_padding_y: f32,
457}
458
459/// Media sizing defaults in egui logical points.
460#[derive(Clone, Debug)]
461pub struct MediaSizingTokens {
462 /// Image minimum width, in egui logical points.
463 pub image_min_width: f32,
464 /// Image minimum height, in egui logical points.
465 pub image_min_height: f32,
466 /// Image default width, in egui logical points.
467 pub image_default_width: f32,
468 /// Image default height, in egui logical points.
469 pub image_default_height: f32,
470 /// Checkerboard size, in egui logical points.
471 pub checkerboard_size: f32,
472 /// Tweet card width, in egui logical points.
473 pub tweet_card_width: f32,
474 /// Tweet card height, in egui logical points.
475 pub tweet_card_height: f32,
476 /// Idea card width, in egui logical points.
477 pub idea_card_width: f32,
478 /// Idea card height, in egui logical points.
479 pub idea_card_height: f32,
480 /// Profile radius, in egui logical points.
481 pub profile_radius: f32,
482}
483
484/// Crosshair sizing defaults in egui logical points.
485#[derive(Clone, Debug)]
486pub struct CrosshairSizingTokens {
487 /// Dot radius, in egui logical points.
488 pub dot_radius: f32,
489 /// Horizontal label offset, in egui logical points.
490 pub label_offset_x: f32,
491 /// Label rounding, in egui logical points.
492 pub label_rounding: f32,
493 /// Plus symbol spacing, in egui logical points.
494 pub plus_symbol_spacing: f32,
495}
496
497/// Position tool sizing defaults in egui logical points.
498#[derive(Clone, Debug)]
499pub struct PositionToolSizingTokens {
500 /// Minimum width, in egui logical points.
501 pub min_width: f32,
502 /// Vertical label offset, in egui logical points.
503 pub label_offset_y: f32,
504}
505
506/// Charts additional sizing defaults in egui logical points.
507#[derive(Clone, Debug)]
508pub struct ChartsExtSizingTokens {
509 /// Volume bubbles maximum diameter, in egui logical points.
510 pub volume_bubbles_max_diameter: f32,
511 /// Heatmap strip height, in egui logical points.
512 pub heatmap_strip_height: f32,
513 /// Realtime button width, in egui logical points.
514 pub realtime_button_width: f32,
515}
516
517/// Technical labels sizing defaults in egui logical points.
518#[derive(Clone, Debug)]
519pub struct TechnicalLabelsSizingTokens {
520 /// Gann label width, in egui logical points.
521 pub gann_label_width: f32,
522 /// Gann label height, in egui logical points.
523 pub gann_label_height: f32,
524 /// Elliott label size, in egui logical points.
525 pub elliott_label_size: f32,
526 /// Horizontal fibonacci label offset, in egui logical points.
527 pub fib_label_offset_x: f32,
528 /// Channel label width, in egui logical points.
529 pub channel_label_width: f32,
530 /// Channel label height, in egui logical points.
531 pub channel_label_height: f32,
532 /// Horizontal channel offset, in egui logical points.
533 pub channel_offset_x: f32,
534 /// Cycle label width, in egui logical points.
535 pub cycle_label_width: f32,
536 /// Pattern label width, in egui logical points.
537 pub pattern_label_width: f32,
538 /// Pattern label height, in egui logical points.
539 pub pattern_label_height: f32,
540 /// Line label width, in egui logical points.
541 pub line_label_width: f32,
542 /// Line label height, in egui logical points.
543 pub line_label_height: f32,
544 /// Line arc radius, in egui logical points.
545 pub line_arc_radius: f32,
546 /// Head and shoulders label width, in egui logical points.
547 pub hs_label_width: f32,
548}
549
550/// Tooltip sizing defaults in egui logical points.
551#[derive(Clone, Debug)]
552pub struct TooltipSizingTokens {
553 /// Horizontal cursor offset, in egui logical points.
554 pub cursor_offset_x: f32,
555}
556
557/// Drawing sizing defaults in egui logical points.
558#[derive(Clone, Debug)]
559pub struct DrawingSizingTokens {
560 /// Magnet distance, in egui logical points.
561 pub magnet_distance: f32,
562}
563
564/// Notification sizing defaults in egui logical points.
565#[derive(Clone, Debug)]
566pub struct NotificationSizingTokens {
567 /// Panel width, in egui logical points.
568 pub panel_width: f32,
569}
570
571/// Menu sizing defaults in egui logical points.
572#[derive(Clone, Debug)]
573pub struct MenuSizingTokens {
574 /// Item height, in egui logical points.
575 pub item_height: f32,
576}
577
578/// Corner rounding tokens for consistent border-radius across components.
579///
580/// Ranges from `none` (0px) through `pill` (fully rounded). Semantic aliases
581/// like `button`, `panel`, `dialog`, `input` map to appropriate scale values.
582#[derive(Clone, Debug)]
583pub struct RoundingTokens {
584 /// None, in egui logical points.
585 pub none: f32,
586 /// Extra small, in egui logical points.
587 pub xs: f32,
588 /// Small, in egui logical points.
589 pub sm: f32,
590 /// Medium, in egui logical points.
591 pub md: f32,
592 /// Large, in egui logical points.
593 pub lg: f32,
594 /// Extra large, in egui logical points.
595 pub xl: f32,
596 /// Pill, in egui logical points.
597 pub pill: f32,
598 /// Button, in egui logical points.
599 pub button: f32,
600 /// Panel, in egui logical points.
601 pub panel: f32,
602 /// Dialog, in egui logical points.
603 pub dialog: f32,
604}
605
606/// Stroke width tokens for lines, borders, and outlines.
607///
608/// Scale: `extra_thin` (finest) through `thick` (boldest).
609#[derive(Clone, Debug)]
610pub struct StrokeTokens {
611 /// Extra thin, in egui logical points.
612 pub extra_thin: f32,
613 /// Light, in egui logical points.
614 pub light: f32,
615 /// Hairline, in egui logical points.
616 pub hairline: f32,
617 /// Medium, in egui logical points.
618 pub medium: f32,
619 /// Thick, in egui logical points.
620 pub thick: f32,
621}
622
623/// Shadow offset tokens for drop shadows on floating panels and menus.
624#[derive(Clone, Debug)]
625pub struct ShadowTokens {
626 /// Offset small, in egui logical points.
627 pub offset_sm: f32,
628}
629
630/// Layout tokens for menu shadows and label offsets.
631#[derive(Clone, Debug)]
632pub struct LayoutTokens {
633 /// Horizontal menu shadow offset, in egui logical points.
634 pub menu_shadow_offset_x: f32,
635 /// Vertical menu shadow offset, in egui logical points.
636 pub menu_shadow_offset_y: f32,
637}