Render arrow icon in `ComboBox`
This commit is contained in:
parent
ada8d7c77f
commit
e29feef8ba
|
@ -193,6 +193,7 @@ impl iced_graphics::Backend for Backend {
|
||||||
impl backend::Text for Backend {
|
impl backend::Text for Backend {
|
||||||
const ICON_FONT: Font = font::ICONS;
|
const ICON_FONT: Font = font::ICONS;
|
||||||
const CHECKMARK_ICON: char = font::CHECKMARK_ICON;
|
const CHECKMARK_ICON: char = font::CHECKMARK_ICON;
|
||||||
|
const ARROW_DOWN_ICON: char = font::ARROW_DOWN_ICON;
|
||||||
|
|
||||||
fn default_size(&self) -> u16 {
|
fn default_size(&self) -> u16 {
|
||||||
self.default_text_size
|
self.default_text_size
|
||||||
|
|
Binary file not shown.
|
@ -22,9 +22,14 @@ pub trait Text {
|
||||||
|
|
||||||
/// The `char` representing a ✔ icon in the [`ICON_FONT`].
|
/// The `char` representing a ✔ icon in the [`ICON_FONT`].
|
||||||
///
|
///
|
||||||
/// [`ICON_FONT`]: #associatedconst.ICON_FONt
|
/// [`ICON_FONT`]: #associatedconst.ICON_FONT
|
||||||
const CHECKMARK_ICON: char;
|
const CHECKMARK_ICON: char;
|
||||||
|
|
||||||
|
/// The `char` representing a ▼ icon in the built-in [`ICONS`] font.
|
||||||
|
///
|
||||||
|
/// [`ICON_FONT`]: #associatedconst.ICON_FONT
|
||||||
|
const ARROW_DOWN_ICON: char;
|
||||||
|
|
||||||
/// Returns the default size of text.
|
/// Returns the default size of text.
|
||||||
fn default_size(&self) -> u16;
|
fn default_size(&self) -> u16;
|
||||||
|
|
||||||
|
|
|
@ -31,3 +31,9 @@ pub const ICONS: iced_native::Font = iced_native::Font::External {
|
||||||
#[cfg(feature = "font-icons")]
|
#[cfg(feature = "font-icons")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(feature = "font-icons")))]
|
#[cfg_attr(docsrs, doc(cfg(feature = "font-icons")))]
|
||||||
pub const CHECKMARK_ICON: char = '\u{F00C}';
|
pub const CHECKMARK_ICON: char = '\u{F00C}';
|
||||||
|
|
||||||
|
/// The `char` representing a ▼ icon in the built-in [`ICONS`] font.
|
||||||
|
///
|
||||||
|
/// [`ICONS`]: const.ICONS.html
|
||||||
|
#[cfg(feature = "font-icons")]
|
||||||
|
pub const ARROW_DOWN_ICON: char = '\u{E800}';
|
||||||
|
|
|
@ -35,27 +35,41 @@ where
|
||||||
border_radius: 0,
|
border_radius: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
(
|
let arrow_down = Primitive::Text {
|
||||||
if let Some(label) = selected {
|
content: B::ARROW_DOWN_ICON.to_string(),
|
||||||
let label = Primitive::Text {
|
font: B::ICON_FONT,
|
||||||
content: label,
|
size: bounds.height * 0.7,
|
||||||
size: f32::from(text_size),
|
bounds: Rectangle {
|
||||||
font: Font::Default,
|
x: bounds.x + bounds.width - f32::from(padding) * 2.0,
|
||||||
color: Color::BLACK,
|
y: bounds.center_y(),
|
||||||
bounds: Rectangle {
|
..bounds
|
||||||
x: bounds.x + f32::from(padding),
|
},
|
||||||
y: bounds.center_y(),
|
color: Color::BLACK,
|
||||||
..bounds
|
horizontal_alignment: HorizontalAlignment::Right,
|
||||||
},
|
vertical_alignment: VerticalAlignment::Center,
|
||||||
horizontal_alignment: HorizontalAlignment::Left,
|
};
|
||||||
vertical_alignment: VerticalAlignment::Center,
|
|
||||||
};
|
|
||||||
|
|
||||||
Primitive::Group {
|
(
|
||||||
primitives: vec![background, label],
|
Primitive::Group {
|
||||||
}
|
primitives: if let Some(label) = selected {
|
||||||
} else {
|
let label = Primitive::Text {
|
||||||
background
|
content: label,
|
||||||
|
size: f32::from(text_size),
|
||||||
|
font: Font::Default,
|
||||||
|
color: Color::BLACK,
|
||||||
|
bounds: Rectangle {
|
||||||
|
x: bounds.x + f32::from(padding),
|
||||||
|
y: bounds.center_y(),
|
||||||
|
..bounds
|
||||||
|
},
|
||||||
|
horizontal_alignment: HorizontalAlignment::Left,
|
||||||
|
vertical_alignment: VerticalAlignment::Center,
|
||||||
|
};
|
||||||
|
|
||||||
|
vec![background, label, arrow_down]
|
||||||
|
} else {
|
||||||
|
vec![background, arrow_down]
|
||||||
|
},
|
||||||
},
|
},
|
||||||
if is_mouse_over {
|
if is_mouse_over {
|
||||||
mouse::Interaction::Pointer
|
mouse::Interaction::Pointer
|
||||||
|
|
|
@ -126,7 +126,9 @@ where
|
||||||
|
|
||||||
let size = {
|
let size = {
|
||||||
let intrinsic = Size::new(
|
let intrinsic = Size::new(
|
||||||
max_width as f32 + f32::from(text_size),
|
max_width as f32
|
||||||
|
+ f32::from(text_size)
|
||||||
|
+ f32::from(self.padding),
|
||||||
f32::from(text_size),
|
f32::from(text_size),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -248,6 +248,7 @@ impl iced_graphics::Backend for Backend {
|
||||||
impl backend::Text for Backend {
|
impl backend::Text for Backend {
|
||||||
const ICON_FONT: Font = font::ICONS;
|
const ICON_FONT: Font = font::ICONS;
|
||||||
const CHECKMARK_ICON: char = font::CHECKMARK_ICON;
|
const CHECKMARK_ICON: char = font::CHECKMARK_ICON;
|
||||||
|
const ARROW_DOWN_ICON: char = font::ARROW_DOWN_ICON;
|
||||||
|
|
||||||
fn default_size(&self) -> u16 {
|
fn default_size(&self) -> u16 {
|
||||||
self.default_text_size
|
self.default_text_size
|
||||||
|
|
Loading…
Reference in New Issue