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