1#![allow(unused_imports)]
2use crate::RatWidgetColor;
3use crate::palette::{Colors, Palette};
4use crate::theme::SalsaTheme;
5use crate::{StyleName, WidgetStyle};
6#[cfg(feature = "rat-widget")]
7use rat_widget;
8#[cfg(feature = "color-input")]
9use rat_widget_extra::color_input::ColorInputStyle;
10use ratatui::layout::Alignment;
11use ratatui::style::{Color, Style, Stylize};
12use ratatui::symbols;
13use ratatui::symbols::border;
14use ratatui::widgets::{Block, Borders};
15use std::time::Duration;
16
17pub fn create_shell(p: Palette) -> SalsaTheme {
22 let mut th = SalsaTheme::new(p);
23
24 th.define_style(Style::LABEL_FG, th.p.fg_style_alias(Color::LABEL_FG));
25 th.define_style(Style::INPUT, th.p.style_alias(Color::INPUT_BG));
26 th.define_style(Style::FOCUS, th.p.high_style_alias(Color::FOCUS_BG));
27 th.define_style(Style::SELECT, th.p.style_alias(Color::SELECT_BG));
28 th.define_style(Style::DISABLED, th.p.style_alias(Color::DISABLED_BG));
29 th.define_style(Style::INVALID, th.p.style_alias(Color::INVALID_BG));
30 th.define_style(Style::HOVER, th.p.style_alias(Color::HOVER_BG));
31 th.define_style(
32 Style::TITLE,
33 th.p.fg_bg_style_alias(Color::TITLE_FG, Color::TITLE_BG),
34 );
35 th.define_style(
36 Style::HEADER,
37 th.p.fg_bg_style_alias(Color::HEADER_FG, Color::HEADER_BG),
38 );
39 th.define_style(
40 Style::FOOTER,
41 th.p.fg_bg_style_alias(Color::FOOTER_FG, Color::HEADER_BG),
42 );
43 th.define_style(
44 Style::WEEK_HEADER_FG,
45 th.p.fg_style_alias(Color::WEEK_HEADER_FG),
46 );
47 th.define_style(
48 Style::MONTH_HEADER_FG,
49 th.p.fg_style_alias(Color::MONTH_HEADER_FG),
50 );
51 th.define_style(Style::SHADOWS, th.p.style_alias(Color::SHADOW_BG));
52 th.define_style(
53 Style::INPUT_FOCUS,
54 th.p.high_style_alias(Color::INPUT_FOCUS_BG),
55 );
56 th.define_style(Style::INPUT_SELECT, th.p.style_alias(Color::SELECT_BG));
57 th.define_style(Style::KEY_BINDING, th.p.style_alias(Color::KEY_BINDING_BG));
58
59 th.define_style(Style::BUTTON_BASE, th.p.style_alias(Color::BUTTON_BASE_BG));
60 th.define_style(Style::MENU_BASE, th.p.style_alias(Color::MENU_BASE_BG));
61 th.define_style(Style::STATUS_BASE, th.p.style_alias(Color::STATUS_BASE_BG));
62
63 th.define_style(
64 Style::CONTAINER_BASE,
65 th.p.style_alias(Color::CONTAINER_BASE_BG),
66 );
67 th.define_style(
68 Style::CONTAINER_BORDER_FG,
69 th.p.fg_style_alias(Color::CONTAINER_BORDER_FG),
70 );
71 th.define_style(
72 Style::CONTAINER_ARROW_FG,
73 th.p.fg_style_alias(Color::CONTAINER_ARROW_FG),
74 );
75
76 th.define_style(
77 Style::DOCUMENT_BASE,
78 th.p.style_alias(Color::DOCUMENT_BASE_BG),
79 );
80 th.define_style(
81 Style::DOCUMENT_BORDER_FG,
82 th.p.fg_style_alias(Color::DOCUMENT_BORDER_FG),
83 );
84 th.define_style(
85 Style::DOCUMENT_ARROW_FG,
86 th.p.fg_style_alias(Color::DOCUMENT_ARROW_FG),
87 );
88
89 th.define_style(Style::POPUP_BASE, th.p.style_alias(Color::POPUP_BASE_BG));
90 th.define_style(
91 Style::POPUP_BORDER_FG,
92 th.p.fg_style_alias(Color::POPUP_BORDER_FG),
93 );
94 th.define_style(
95 Style::POPUP_ARROW_FG,
96 th.p.fg_style_alias(Color::POPUP_ARROW_FG),
97 );
98
99 th.define_style(Style::DIALOG_BASE, th.p.style_alias(Color::DIALOG_BASE_BG));
100 th.define_style(
101 Style::DIALOG_BORDER_FG,
102 th.p.fg_style_alias(Color::DIALOG_BORDER_FG),
103 );
104 th.define_style(
105 Style::DIALOG_ARROW_FG,
106 th.p.fg_style_alias(Color::DIALOG_ARROW_FG),
107 );
108
109 #[cfg(feature = "rat-widget")]
110 th.define_fn(WidgetStyle::BUTTON, button);
111 #[cfg(feature = "rat-widget")]
112 th.define_fn(WidgetStyle::CALENDAR, month);
113 #[cfg(feature = "rat-widget")]
114 th.define_fn(WidgetStyle::CHECKBOX, checkbox);
115 #[cfg(feature = "rat-widget")]
116 th.define_fn(WidgetStyle::CHOICE, choice);
117 #[cfg(feature = "rat-widget")]
118 th.define_fn(WidgetStyle::CLIPPER, clipper);
119 #[cfg(feature = "rat-widget")]
120 th.define_fn(WidgetStyle::COMBOBOX, combobox);
121 #[cfg(feature = "rat-widget")]
122 #[cfg(feature = "color-input")]
123 th.define_fn(WidgetStyle::COLOR_INPUT, color_input);
124 #[cfg(feature = "rat-widget")]
125 th.define_fn(WidgetStyle::DIALOG_FRAME, dialog_frame);
126 #[cfg(feature = "rat-widget")]
127 th.define_fn(WidgetStyle::FILE_DIALOG, file_dialog);
128 #[cfg(feature = "rat-widget")]
129 th.define_fn(WidgetStyle::FORM, form);
130 #[cfg(feature = "rat-widget")]
131 th.define_fn(WidgetStyle::LINE_NR, line_nr);
132 #[cfg(feature = "rat-widget")]
133 th.define_fn(WidgetStyle::LIST, list);
134 #[cfg(feature = "rat-widget")]
135 th.define_fn(WidgetStyle::MENU, menu);
136 #[cfg(feature = "rat-widget")]
137 th.define_fn(WidgetStyle::MONTH, month);
138 #[cfg(feature = "rat-widget")]
139 th.define_fn(WidgetStyle::MSG_DIALOG, msg_dialog);
140 #[cfg(feature = "rat-widget")]
141 th.define_fn(WidgetStyle::PARAGRAPH, paragraph);
142 #[cfg(feature = "rat-widget")]
143 th.define_fn(WidgetStyle::RADIO, radio);
144 #[cfg(feature = "rat-widget")]
145 th.define_fn(WidgetStyle::SCROLL, scroll);
146 #[cfg(feature = "rat-widget")]
147 th.define_fn(WidgetStyle::SCROLL_DIALOG, dialog_scroll);
148 #[cfg(feature = "rat-widget")]
149 th.define_fn(WidgetStyle::SCROLL_POPUP, popup_scroll);
150 #[cfg(feature = "rat-widget")]
151 th.define_fn(WidgetStyle::SHADOW, shadow);
152 #[cfg(feature = "rat-widget")]
153 th.define_fn(WidgetStyle::SLIDER, slider);
154 #[cfg(feature = "rat-widget")]
155 th.define_fn(WidgetStyle::SPLIT, split);
156 #[cfg(feature = "rat-widget")]
157 th.define_fn(WidgetStyle::STATUSLINE, statusline);
158 #[cfg(feature = "rat-widget")]
159 th.define_fn(WidgetStyle::TABBED, tabbed);
160 #[cfg(feature = "rat-widget")]
161 th.define_fn(WidgetStyle::TABLE, table);
162 #[cfg(feature = "rat-widget")]
163 th.define_fn(WidgetStyle::TEXT, text);
164 #[cfg(feature = "rat-widget")]
165 th.define_fn(WidgetStyle::TEXTAREA, textarea);
166 #[cfg(feature = "rat-widget")]
167 th.define_fn(WidgetStyle::TEXTVIEW, textview);
168 #[cfg(feature = "rat-widget")]
169 th.define_fn(WidgetStyle::TOOLBAR, toolbar);
170 #[cfg(feature = "rat-widget")]
171 th.define_fn(WidgetStyle::VIEW, view);
172
173 th
174}
175
176#[cfg(feature = "rat-widget")]
177fn button(th: &SalsaTheme) -> rat_widget::button::ButtonStyle {
178 rat_widget::button::ButtonStyle {
179 style: th.style(Style::BUTTON_BASE),
180 focus: Some(th.style(Style::FOCUS)),
181 armed: Some(th.style(Style::SELECT)),
182 hover: Some(th.p.style_alias(Color::HOVER_BG)),
183 armed_delay: Some(Duration::from_millis(50)),
184 ..Default::default()
185 }
186}
187
188#[cfg(feature = "rat-widget")]
189fn checkbox(th: &SalsaTheme) -> rat_widget::checkbox::CheckboxStyle {
190 rat_widget::checkbox::CheckboxStyle {
191 style: th.style(Style::INPUT),
192 focus: Some(th.style(Style::INPUT_FOCUS)),
193 ..Default::default()
194 }
195}
196
197#[cfg(feature = "rat-widget")]
198fn combobox(th: &SalsaTheme) -> rat_widget::combobox::ComboboxStyle {
199 rat_widget::combobox::ComboboxStyle {
200 choice: th.style(WidgetStyle::CHOICE),
201 text: th.style(WidgetStyle::TEXT),
202 ..Default::default()
203 }
204}
205
206#[cfg(feature = "rat-widget")]
207fn choice(th: &SalsaTheme) -> rat_widget::choice::ChoiceStyle {
208 rat_widget::choice::ChoiceStyle {
209 style: th.style(Style::INPUT),
210 select: Some(th.style(Style::INPUT_SELECT)),
211 focus: Some(th.style(Style::INPUT_FOCUS)),
212 popup_style: Some(th.style(Style::POPUP_BASE)),
213 popup_border: Some(th.style(Style::POPUP_BORDER_FG)),
214 popup_scroll: Some(th.style(WidgetStyle::SCROLL_POPUP)),
215 popup_block: Some(
216 Block::bordered()
217 .borders(Borders::LEFT | Borders::BOTTOM | Borders::RIGHT)
218 .border_set(border::Set {
219 top_left: "X",
220 top_right: "X",
221 bottom_left: "▀",
222 bottom_right: "▀",
223 vertical_left: "▌",
224 vertical_right: "▐",
225 horizontal_top: "X",
226 horizontal_bottom: "▀",
227 })
228 .border_style(th.style::<Style>(Style::POPUP_BORDER_FG)),
229 ),
230 ..Default::default()
231 }
232}
233
234#[cfg(feature = "rat-widget")]
235fn clipper(th: &SalsaTheme) -> rat_widget::clipper::ClipperStyle {
236 rat_widget::clipper::ClipperStyle {
237 style: th.style(Style::CONTAINER_BASE),
238 label_style: Some(th.style(Style::LABEL_FG)),
239 scroll: Some(th.style(WidgetStyle::SCROLL)),
240 ..Default::default()
241 }
242}
243
244#[cfg(feature = "rat-widget")]
245fn dialog_frame(th: &SalsaTheme) -> rat_widget::dialog_frame::DialogFrameStyle {
246 rat_widget::dialog_frame::DialogFrameStyle {
247 style: th.style(Style::DIALOG_BASE),
248 border_style: Some(th.style::<Style>(Style::DIALOG_BORDER_FG)),
249 button_style: Some(th.style(WidgetStyle::BUTTON)),
250 ..rat_widget::dialog_frame::DialogFrameStyle::default()
251 }
252}
253
254#[cfg(feature = "rat-widget")]
255fn file_dialog(th: &SalsaTheme) -> rat_widget::file_dialog::FileDialogStyle {
256 rat_widget::file_dialog::FileDialogStyle {
257 style: th.style(Style::DIALOG_BASE),
258 list: Some(th.style(WidgetStyle::LIST)),
259 roots: Some(rat_widget::list::ListStyle {
260 style: th.style(Style::DIALOG_BASE),
261 ..th.style(WidgetStyle::LIST)
262 }),
263 text: Some(th.style(WidgetStyle::TEXT)),
264 button: Some(th.style(WidgetStyle::BUTTON)),
265 block: Some(Block::bordered()),
266 ..Default::default()
267 }
268}
269
270#[cfg(feature = "rat-widget")]
271fn form(th: &SalsaTheme) -> rat_widget::form::FormStyle {
272 rat_widget::form::FormStyle {
273 style: th.style(Style::CONTAINER_BASE),
274 label_style: Some(th.style(Style::LABEL_FG)),
275 navigation: Some(th.style(Style::CONTAINER_ARROW_FG)),
276 navigation_hover: Some(th.style(Style::HOVER)),
277 block: Some(
278 Block::bordered()
279 .borders(Borders::TOP | Borders::BOTTOM)
280 .border_set(border::EMPTY)
281 .border_style(th.style::<Style>(Style::CONTAINER_BORDER_FG)),
282 ),
283 border_style: Some(th.style::<Style>(Style::CONTAINER_BORDER_FG)),
284 ..Default::default()
285 }
286}
287
288#[cfg(feature = "rat-widget")]
289fn line_nr(th: &SalsaTheme) -> rat_widget::line_number::LineNumberStyle {
290 rat_widget::line_number::LineNumberStyle {
291 style: th.style(Style::CONTAINER_BASE),
292 cursor: Some(th.style(Style::INPUT_SELECT)),
293 ..rat_widget::line_number::LineNumberStyle::default()
294 }
295}
296
297#[cfg(feature = "rat-widget")]
298fn list(th: &SalsaTheme) -> rat_widget::list::ListStyle {
299 rat_widget::list::ListStyle {
300 style: th.style(Style::CONTAINER_BASE),
301 select: Some(th.style(Style::SELECT)),
302 focus: Some(th.style(Style::FOCUS)),
303 scroll: Some(th.style(WidgetStyle::SCROLL)),
304 ..Default::default()
305 }
306}
307
308#[cfg(feature = "rat-widget")]
309fn menu(th: &SalsaTheme) -> rat_widget::menu::MenuStyle {
310 rat_widget::menu::MenuStyle {
311 style: th.style(Style::MENU_BASE),
312 title: Some(th.style(Style::TITLE)),
313 focus: Some(th.style(Style::FOCUS)),
314 right: Some(th.style(Style::KEY_BINDING)),
315 disabled: Some(th.style(Style::DISABLED)),
316 highlight: Some(Style::default().underlined()),
317 popup_block: Some(Block::bordered()),
318 popup: Default::default(),
319 popup_border: Some(th.style(Style::MENU_BASE)),
320 popup_style: Some(th.style(Style::MENU_BASE)),
321 popup_focus: Some(th.style(Style::FOCUS)),
322 popup_right: Some(th.style(Style::KEY_BINDING)),
323 popup_disabled: Some(th.style(Style::DISABLED)),
324 popup_highlight: Some(Style::default().underlined()),
325 ..Default::default()
326 }
327}
328
329#[cfg(feature = "rat-widget")]
330fn month(th: &SalsaTheme) -> rat_widget::calendar::CalendarStyle {
331 rat_widget::calendar::CalendarStyle {
332 style: th.style(Style::CONTAINER_BASE),
333 title: Some(th.style(Style::MONTH_HEADER_FG)),
334 weeknum: Some(th.style(Style::WEEK_HEADER_FG)),
335 weekday: Some(th.style(Style::WEEK_HEADER_FG)),
336 day: None,
337 select: Some(th.style(Style::SELECT)),
338 focus: Some(th.style(Style::FOCUS)),
339 ..rat_widget::calendar::CalendarStyle::default()
340 }
341}
342
343#[cfg(feature = "rat-widget")]
344fn msg_dialog(th: &SalsaTheme) -> rat_widget::msgdialog::MsgDialogStyle {
345 rat_widget::msgdialog::MsgDialogStyle {
346 style: th.style(Style::DIALOG_BASE),
347 button: Some(th.style(WidgetStyle::BUTTON)),
348 markdown_header_1: Some(th.style_style(Style::TITLE)),
349 markdown_header_n: Some(th.style_style(Style::HEADER)),
350 ..Default::default()
351 }
352}
353
354#[cfg(feature = "rat-widget")]
355fn paragraph(th: &SalsaTheme) -> rat_widget::paragraph::ParagraphStyle {
356 rat_widget::paragraph::ParagraphStyle {
357 style: th.style(Style::CONTAINER_BASE),
358 focus: Some(th.style(Style::FOCUS)),
359 scroll: Some(th.style(WidgetStyle::SCROLL)),
360 ..Default::default()
361 }
362}
363
364#[cfg(feature = "rat-widget")]
365fn radio(th: &SalsaTheme) -> rat_widget::radio::RadioStyle {
366 rat_widget::radio::RadioStyle {
367 layout: Some(rat_widget::radio::RadioLayout::Stacked),
368 style: th.style(Style::INPUT),
369 focus: Some(th.style(Style::INPUT_FOCUS)),
370 ..Default::default()
371 }
372}
373
374#[cfg(feature = "rat-widget")]
375fn scroll(th: &SalsaTheme) -> rat_widget::scrolled::ScrollStyle {
377 rat_widget::scrolled::ScrollStyle {
378 thumb_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
379 track_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
380 min_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
381 begin_style: Some(th.style(Style::CONTAINER_ARROW_FG)),
382 end_style: Some(th.style(Style::CONTAINER_ARROW_FG)),
383 horizontal: Some(rat_widget::scrolled::ScrollSymbols {
384 track: "▒",
385 thumb: symbols::block::FULL,
386 begin: "←",
387 end: "→",
388 min: "░",
389 }),
390 vertical: Some(rat_widget::scrolled::ScrollSymbols {
391 track: "▒",
392 thumb: symbols::block::FULL,
393 begin: "↑",
394 end: "↓",
395 min: "░",
396 }),
397 ..Default::default()
398 }
399}
400
401#[cfg(feature = "rat-widget")]
402fn popup_scroll(th: &SalsaTheme) -> rat_widget::scrolled::ScrollStyle {
403 rat_widget::scrolled::ScrollStyle {
404 thumb_style: Some(th.style(Style::POPUP_BORDER_FG)),
405 track_style: Some(th.style(Style::POPUP_BORDER_FG)),
406 min_style: Some(th.style(Style::POPUP_BORDER_FG)),
407 begin_style: Some(th.style(Style::POPUP_ARROW_FG)),
408 end_style: Some(th.style(Style::POPUP_ARROW_FG)),
409 horizontal: Some(rat_widget::scrolled::ScrollSymbols {
410 track: "▒",
411 thumb: symbols::block::FULL,
412 begin: "←",
413 end: "→",
414 min: "░",
415 }),
416 vertical: Some(rat_widget::scrolled::ScrollSymbols {
417 track: "▒",
418 thumb: symbols::block::FULL,
419 begin: "↑",
420 end: "↓",
421 min: "░",
422 }),
423 ..Default::default()
424 }
425}
426
427#[cfg(feature = "rat-widget")]
428fn dialog_scroll(th: &SalsaTheme) -> rat_widget::scrolled::ScrollStyle {
429 rat_widget::scrolled::ScrollStyle {
430 thumb_style: Some(th.style(Style::DIALOG_BORDER_FG)),
431 track_style: Some(th.style(Style::DIALOG_BORDER_FG)),
432 min_style: Some(th.style(Style::DIALOG_BORDER_FG)),
433 begin_style: Some(th.style(Style::POPUP_ARROW_FG)),
434 end_style: Some(th.style(Style::POPUP_ARROW_FG)),
435 horizontal: Some(rat_widget::scrolled::ScrollSymbols {
436 track: "▒",
437 thumb: symbols::block::FULL,
438 begin: "←",
439 end: "→",
440 min: "░",
441 }),
442 vertical: Some(rat_widget::scrolled::ScrollSymbols {
443 track: "▒",
444 thumb: symbols::block::FULL,
445 begin: "↑",
446 end: "↓",
447 min: "░",
448 }),
449 ..Default::default()
450 }
451}
452
453#[cfg(feature = "rat-widget")]
454fn shadow(th: &SalsaTheme) -> rat_widget::shadow::ShadowStyle {
455 rat_widget::shadow::ShadowStyle {
456 style: th.style(Style::SHADOWS),
457 dir: rat_widget::shadow::ShadowDirection::BottomRight,
458 ..rat_widget::shadow::ShadowStyle::default()
459 }
460}
461
462#[cfg(feature = "rat-widget")]
463fn slider(th: &SalsaTheme) -> rat_widget::slider::SliderStyle {
464 rat_widget::slider::SliderStyle {
465 style: th.style(Style::INPUT),
466 bounds: Some(th.style(Style::INPUT)),
467 knob: Some(th.style(Style::INPUT_SELECT)),
468 focus: Some(th.style(Style::INPUT_FOCUS)),
469 text_align: Some(Alignment::Center),
470 ..Default::default()
471 }
472}
473
474#[cfg(feature = "rat-widget")]
475fn split(th: &SalsaTheme) -> rat_widget::splitter::SplitStyle {
476 rat_widget::splitter::SplitStyle {
477 style: th.style(Style::CONTAINER_BORDER_FG),
478 arrow_style: Some(th.style(Style::CONTAINER_ARROW_FG)),
479 drag_style: Some(th.style(Style::HOVER)),
480 ..Default::default()
481 }
482}
483
484#[cfg(feature = "rat-widget")]
485fn statusline(th: &SalsaTheme) -> rat_widget::statusline::StatusLineStyle {
486 rat_widget::statusline::StatusLineStyle {
487 styles: vec![
488 th.style(Style::STATUS_BASE),
489 th.p.style(Colors::Blue, 3),
490 th.p.style(Colors::Blue, 2),
491 th.p.style(Colors::Blue, 1),
492 ],
493 ..Default::default()
494 }
495}
496
497#[cfg(feature = "rat-widget")]
498fn tabbed(th: &SalsaTheme) -> rat_widget::tabbed::TabbedStyle {
499 rat_widget::tabbed::TabbedStyle {
500 style: th.style(Style::CONTAINER_BASE),
501 border_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
502 tab: Some(th.style(Style::CONTAINER_BASE)),
503 hover: Some(th.style(Style::HOVER)),
504 select: Some(th.style(Style::SELECT)),
505 focus: Some(th.style(Style::FOCUS)),
506 ..Default::default()
507 }
508}
509
510#[cfg(feature = "rat-widget")]
511fn table(th: &SalsaTheme) -> rat_widget::table::TableStyle {
512 rat_widget::table::TableStyle {
513 style: th.style(Style::CONTAINER_BASE),
514 select_row: Some(th.style(Style::SELECT)),
515 show_row_focus: true,
516 focus_style: Some(th.style(Style::FOCUS)),
517 border_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
518 scroll: Some(th.style(WidgetStyle::SCROLL)),
519 header: Some(th.style(Style::HEADER)),
520 footer: Some(th.style(Style::FOOTER)),
521 show_empty: true,
522 ..Default::default()
523 }
524}
525
526#[cfg(feature = "color-input")]
527fn color_input(th: &SalsaTheme) -> ColorInputStyle {
528 ColorInputStyle {
529 text: rat_widget::text::TextStyle {
530 style: th.style(Style::INPUT),
531 focus: Some(th.style(Style::INPUT_FOCUS)),
532 select: Some(th.style(Style::INPUT_SELECT)),
533 invalid: Some(th.style(Style::INVALID)),
534 ..rat_widget::text::TextStyle::default()
535 },
536 ..Default::default()
537 }
538}
539
540#[cfg(feature = "rat-widget")]
541fn text(th: &SalsaTheme) -> rat_widget::text::TextStyle {
542 rat_widget::text::TextStyle {
543 style: th.style(Style::INPUT),
544 focus: Some(th.style(Style::INPUT_FOCUS)),
545 select: Some(th.style(Style::INPUT_SELECT)),
546 invalid: Some(th.style(Style::INVALID)),
547 ..rat_widget::text::TextStyle::default()
548 }
549}
550
551#[cfg(feature = "rat-widget")]
552fn textarea(th: &SalsaTheme) -> rat_widget::text::TextStyle {
553 rat_widget::text::TextStyle {
554 style: th.style(Style::INPUT),
555 focus: Some(th.style(Style::INPUT)),
556 select: Some(th.style(Style::INPUT_SELECT)),
557 scroll: Some(th.style(WidgetStyle::SCROLL)),
558 border_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
559 ..rat_widget::text::TextStyle::default()
560 }
561}
562
563#[cfg(feature = "rat-widget")]
564fn textview(th: &SalsaTheme) -> rat_widget::text::TextStyle {
565 rat_widget::text::TextStyle {
566 style: th.style(Style::CONTAINER_BASE),
567 focus: Some(th.style(Style::CONTAINER_BASE)),
568 select: Some(th.style(Style::INPUT_SELECT)),
569 scroll: Some(th.style(WidgetStyle::SCROLL)),
570 border_style: Some(th.style(Style::CONTAINER_BORDER_FG)),
571 ..rat_widget::text::TextStyle::default()
572 }
573}
574
575#[cfg(feature = "rat-widget")]
576fn toolbar(th: &SalsaTheme) -> rat_widget::toolbar::ToolbarStyle {
577 rat_widget::toolbar::ToolbarStyle {
578 style: th.style_style(Style::MENU_BASE),
579 key_style: Some(th.style_style(Style::KEY_BINDING)),
580 button: Some(rat_widget::button::ButtonStyle {
581 style: th.style_style(Style::BUTTON_BASE),
582 armed: Some(th.style_style(Style::SELECT)),
583 hover: Some(th.style_style(Style::HOVER)),
584 ..Default::default()
585 }),
586 checkbox: Some(rat_widget::checkbox::CheckboxStyle {
587 style: th.style_style(Style::BUTTON_BASE),
588 behave_check: Some(rat_widget::checkbox::CheckboxCheck::SingleClick),
589 ..Default::default()
590 }),
591 choice: Some(rat_widget::choice::ChoiceStyle {
592 style: th.style_style(Style::BUTTON_BASE),
593 button: Some(th.style_style(Style::BUTTON_BASE)),
594 select: Some(th.style_style(Style::SELECT)),
595 focus: Some(th.style_style(Style::BUTTON_BASE)),
596 popup: rat_widget::popup::PopupStyle {
597 placement: Some(rat_widget::popup::Placement::BelowOrAbove),
598 ..Default::default()
599 },
600 popup_style: Some(th.style_style(Style::POPUP_BASE)),
601 popup_border: Some(th.style_style(Style::POPUP_BORDER_FG)),
602 behave_focus: Some(rat_widget::choice::ChoiceFocus::OpenOnFocusGained),
603 behave_select: Some(rat_widget::choice::ChoiceSelect::MouseClick),
604 behave_close: Some(rat_widget::choice::ChoiceClose::SingleClick),
605 ..Default::default()
606 }),
607 collapsed: Some(rat_widget::choice::ChoiceStyle {
608 style: th.style_style(Style::BUTTON_BASE),
609 button: Some(th.style_style(Style::BUTTON_BASE)),
610 select: Some(th.style_style(Style::SELECT)),
611 focus: Some(th.style_style(Style::BUTTON_BASE)),
612 popup: rat_widget::popup::PopupStyle {
613 placement: Some(rat_widget::popup::Placement::BelowOrAbove),
614 ..Default::default()
615 },
616 popup_style: Some(th.style_style(Style::POPUP_BASE)),
617 popup_border: Some(th.style_style(Style::POPUP_BORDER_FG)),
618 behave_focus: Some(rat_widget::choice::ChoiceFocus::OpenOnFocusGained),
619 behave_select: Some(rat_widget::choice::ChoiceSelect::MouseClick),
620 behave_close: Some(rat_widget::choice::ChoiceClose::SingleClick),
621 ..Default::default()
622 }),
623 ..Default::default()
624 }
625}
626
627#[cfg(feature = "rat-widget")]
628fn view(th: &SalsaTheme) -> rat_widget::view::ViewStyle {
629 rat_widget::view::ViewStyle {
630 scroll: Some(th.style(WidgetStyle::SCROLL)),
631 ..Default::default()
632 }
633}