summaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-04-18 19:53:27 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-07-08 11:05:15 +0200
commite29feef8ba4f95f286039fcc1ca2e53bfe5019c5 (patch)
treeac3e4e8bce0fcca65cd536f4a821fb5517b84947 /graphics
parentada8d7c77f9e1d4a1de762b514c9610f7e09b17f (diff)
downloadiced-e29feef8ba4f95f286039fcc1ca2e53bfe5019c5.tar.gz
iced-e29feef8ba4f95f286039fcc1ca2e53bfe5019c5.tar.bz2
iced-e29feef8ba4f95f286039fcc1ca2e53bfe5019c5.zip
Render arrow icon in `ComboBox`
Diffstat (limited to 'graphics')
-rw-r--r--graphics/fonts/Icons.ttfbin4912 -> 5032 bytes
-rw-r--r--graphics/src/backend.rs7
-rw-r--r--graphics/src/font.rs6
-rw-r--r--graphics/src/widget/combo_box.rs52
4 files changed, 45 insertions, 20 deletions
diff --git a/graphics/fonts/Icons.ttf b/graphics/fonts/Icons.ttf
index 1c832f86..5e455b69 100644
--- a/graphics/fonts/Icons.ttf
+++ b/graphics/fonts/Icons.ttf
Binary files differ
diff --git a/graphics/src/backend.rs b/graphics/src/backend.rs
index b73c636e..dd7dbbc2 100644
--- a/graphics/src/backend.rs
+++ b/graphics/src/backend.rs
@@ -22,9 +22,14 @@ pub trait Text {
/// The `char` representing a ✔ icon in the [`ICON_FONT`].
///
- /// [`ICON_FONT`]: #associatedconst.ICON_FONt
+ /// [`ICON_FONT`]: #associatedconst.ICON_FONT
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.
fn default_size(&self) -> u16;
diff --git a/graphics/src/font.rs b/graphics/src/font.rs
index bcc28857..5c62681c 100644
--- a/graphics/src/font.rs
+++ b/graphics/src/font.rs
@@ -31,3 +31,9 @@ pub const ICONS: iced_native::Font = iced_native::Font::External {
#[cfg(feature = "font-icons")]
#[cfg_attr(docsrs, doc(cfg(feature = "font-icons")))]
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}';
diff --git a/graphics/src/widget/combo_box.rs b/graphics/src/widget/combo_box.rs
index 27ea762a..92024c6c 100644
--- a/graphics/src/widget/combo_box.rs
+++ b/graphics/src/widget/combo_box.rs
@@ -35,27 +35,41 @@ where
border_radius: 0,
};
+ let arrow_down = Primitive::Text {
+ content: B::ARROW_DOWN_ICON.to_string(),
+ font: B::ICON_FONT,
+ size: bounds.height * 0.7,
+ bounds: Rectangle {
+ x: bounds.x + bounds.width - f32::from(padding) * 2.0,
+ y: bounds.center_y(),
+ ..bounds
+ },
+ color: Color::BLACK,
+ horizontal_alignment: HorizontalAlignment::Right,
+ vertical_alignment: VerticalAlignment::Center,
+ };
+
(
- if let Some(label) = selected {
- let label = Primitive::Text {
- 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,
- };
+ Primitive::Group {
+ primitives: if let Some(label) = selected {
+ let label = Primitive::Text {
+ 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,
+ };
- Primitive::Group {
- primitives: vec![background, label],
- }
- } else {
- background
+ vec![background, label, arrow_down]
+ } else {
+ vec![background, arrow_down]
+ },
},
if is_mouse_over {
mouse::Interaction::Pointer