kr580 2.0.0

Desktop KR580VM80 / Intel 8080 emulator.
Documentation
use iced::widget::{button, container};
use iced::{Background, Border, Color};

pub(super) use super::super::styles::{
    inset_style as dropdown_panel_style, modal_backdrop_style,
    modal_dropdown_option_style as dropdown_option_style,
    modal_field_button_style as field_button_style,
    modal_field_button_style as footer_button_style, panel_style as modal_dialog_style,
};
use super::super::theme::{tokyo_blue, tokyo_border, tokyo_surface, tokyo_text};

pub(super) fn field_button_style_focused(status: button::Status, focused: bool) -> button::Style {
    let mut style = field_button_style(status);
    if focused {
        style.border.color = tokyo_text();
    }
    style
}

pub(super) fn drop_zone_style(
    _theme: &iced::Theme,
    hovered: bool,
    focused: bool,
) -> container::Style {
    container::Style {
        background: Some(Background::Color(Color {
            a: if hovered { 0.42 } else { 0.2 },
            ..tokyo_surface()
        })),
        border: Border {
            radius: 8.0.into(),
            width: 1.0,
            color: if hovered {
                tokyo_blue()
            } else if focused {
                tokyo_text()
            } else {
                tokyo_border()
            },
        },
        ..container::Style::default()
    }
}

#[cfg(test)]
mod tests {
    use super::{drop_zone_style, field_button_style_focused};
    use crate::view::theme::{tokyo_blue, tokyo_text};
    use iced::Theme;
    use iced::widget::button;

    #[test]
    fn keyboard_focused_field_uses_text_border() {
        let style = field_button_style_focused(button::Status::Active, true);

        assert_eq!(style.border.color, tokyo_text());
    }

    #[test]
    fn hovered_drop_zone_uses_accent_border() {
        let style = drop_zone_style(&Theme::TokyoNight, true, false);

        assert_eq!(style.border.color, tokyo_blue());
    }
}