Skip to main content

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}